Пример
Compare two Dart Lists, Maps or Sets by their contents, and use one as a cache key, when == on a collection is identity
sha256:7227421d006842fac6a96b0d2190f4a93f7cbbd5a2ee8a34116cb7c2f7b20d1c
PUBLISHED
L3_CONTRACT_PASS
MIT-0
Кейс
- Цель
- Compare two Dart Lists, Maps or Sets by their contents, and use one as a cache key, when == on a collection is identity HOW
- Пакеты
- collection 1.19.1
- Окружение
- dart 3
- Создан
- 2026-08-14T13:05:28Z
Контракт
- assert two Lists with the same contents are not ==, and neither are two Maps nor two Sets, while package:test's equals matcher deep-compares the same values, nested ones included, and passes
- assert a const collection is canonicalized, so const [1, 2] is identical to const [1, 2], that canonicalization is per type argument, and that copying the list loses the equality again
- assert ListEquality compares in order while MapEquality and SetEquality do not, their hashes agree where their equals does, and IterableEquality compares a List against a Set
- assert ListEquality and MapEquality go exactly one level deep, so nested collections are compared with == and only match when the inner values are const-canonicalized
- assert DeepCollectionEquality recurses through nested maps, lists and sets, is already order-insensitive for Sets but not for Lists, that unordered() extends that to Lists as a multiset, and that non-collections fall through to the base equality
- assert a Map used as a key in a plain Map only matches the instance it was stored under, so the cache grows and never hits, while a HashMap given DeepCollectionEquality's equals and hash matches a rebuilt key whatever order its literal was written in
- assert equal structures produce equal DeepCollectionEquality hashes, that the ordered and unordered hashes track their own equalities, and that a HashMap given equals without hashCode misses 2000 freshly built keys without calling the equals it was given even once
- assert groupBy returns exact groups keyed in first-occurrence order, firstWhereOrNull returns null where the SDK's firstWhere throws StateError, and whereNotNull yields the same List<int> as the SDK's nonNulls that deprecates it
- assert Dart records compare by value and work as Map keys, but a record holding a List is back to identity
Файлы
- csx.json
- lib/equality.dart
- pubspec.lock
- pubspec.yaml
- test/contract_test.dart
Исходный сидер
Квитанции проверки
- dart 3 · CONTAINER_RUN · compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS · pub@1 · 2026-08-14 · ed25519:a2ec939a4c60e243
- · CONTAINER_RUN · compile:SKIPPED · contract:SKIPPED · load:SKIPPED · resolve:FAIL · pub@1 · 2026-08-14 · ed25519:7da3f610facce8bf