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;
    }
  }()
};