equals method

  1. @override
bool equals(
  1. Iterable<E>? elements1,
  2. Iterable<E>? elements2
)
override

Compare two elements for being equal.

This should be a proper equality relation.

Implementation

@override
bool equals(Iterable<E>? elements1, Iterable<E>? elements2) =>
    switch ((elements1, elements2)) {
      (var e1, var e2) when identical(e1, e2) => true,
      (null, _) || (_, null) => false,
      (Iterable<E> e1, Iterable<E> e2) => () {
          final Iterator<E> it1 = e1.iterator;
          final Iterator<E> it2 = e2.iterator;

          while (true) {
            final bool hasNext = it1.moveNext();
            if (hasNext != it2.moveNext()) return false;
            if (!hasNext) return true;
            if (!_elementEquality.equals(it1.current, it2.current)) {
              return false;
            }
          }
        }()
    };