Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Changes to Equality classes. #265

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft

Changes to Equality classes. #265

wants to merge 1 commit into from

Conversation

lrhn
Copy link
Member

@lrhn lrhn commented Jan 17, 2023

PROOF-OF-CONCEPT. DO NOT LAND.

MapEquality and SetEquality now expects the provided equalities to be compatible with the inherent equals (and hash) of the map or set.
That allows using Map.operator[] and Set.lookup to match entries/elements from one collection with those of the other, instead of building an extra
hash-map on the side to count occurrences.

This helps DeepCollectionEquality which is likely to traverse a larger collection structure (mainly maps) and do repeated equals/hash code on sup-components.

For unordered DeepCollectionEquality, a cache of computed values is added to avoid repeating the same computation during the traversal of a map-structure.

Smaller changes to other classes: DefaultEquality and IdentityEquality now have only factory constructors, so cannot be extended. There should be no need for that.

Also adds JsonEquality which is tuned to JSON-like map/list/basic-value structures, and which assumes everything uses default == equality.

NOTICE: This is probably a breaking change, so the version number should be major-version-incremented.
I believe this package is pinned by Flutter, so that'll be fun. 馃槈

`MapEquality` and `SetEquality` now expects the provided
equalities to be compatible with the inherent equals
(and hash) of the map or set.
That allows using `Map.operator[]` and `Set.lookup`
to match entries/elements from one collection with
those of the other, instead of building an extra
hash-map on the side to count occurrences.

This helps `DeepCollectionEquality` which is likely
to traverse a larger collection structure (mainly maps)
and do repeated equals/hash code on sup-components.

For unordered `DeepCollectionEquality`, a cache of
computed values is added to avoid repeating the same
computation during the traversal of a map-structure.

Also adds `JsonEquality` which is tuned to JSON-like
map/list/basic-value structures, and which assumes
everything uses default `==` equality.
@lrhn lrhn requested a review from mkustermann January 17, 2023 16:09
@oprypin oprypin marked this pull request as draft June 1, 2023 12:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant