Changes to Equality classes.

`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.
4 files changed
tree: 0bd3d43187d3b0e502d58996b0ab56337a02d08a
  1. .github/
  2. lib/
  3. test/
  4. .gitignore
  5. analysis_options.yaml
  6. AUTHORS
  7. CHANGELOG.md
  8. CONTRIBUTING.md
  9. LICENSE
  10. pubspec.yaml
  11. README.md
README.md

Dart CI pub package package publisher

Contains utility functions and classes in the style of dart:collection to make working with collections easier.

Algorithms

The package contains functions that operate on lists.

It contains ways to shuffle a List, do binary search on a sorted List, and various sorting algorithms.

Equality

The package provides a way to specify the equality of elements and collections.

Collections in Dart have no inherent equality. Two sets are not equal, even if they contain exactly the same objects as elements.

The Equality interface provides a way to define such an equality. In this case, for example, const SetEquality(IdentityEquality()) is an equality that considers two sets equal exactly if they contain identical elements.

Equalities are provided for Iterables, Lists, Sets, and Maps, as well as combinations of these, such as:

const MapEquality(IdentityEquality(), ListEquality());

This equality considers maps equal if they have identical keys, and the corresponding values are lists with equal (operator==) values.

Iterable Zip

Utilities for “zipping” a list of iterables into an iterable of lists.

Priority Queue

An interface and implementation of a priority queue.

Wrappers

The package contains classes that “wrap” a collection.

A wrapper class contains an object of the same type, and it forwards all methods to the wrapped object.

Wrapper classes can be used in various ways, for example to restrict the type of an object to that of a supertype, or to change the behavior of selected functions on an existing object.

Features and bugs

Please file feature requests and bugs at the issue tracker.