in lib/src/equals_matcher.dart [105:135]
_Mismatch? _compareIterables(Iterable expected, Object? actual,
_RecursiveMatcher matcher, int depth, String location) {
if (actual is Iterable) {
var expectedIterator = expected.iterator;
var actualIterator = actual.iterator;
for (var index = 0;; index++) {
// Advance in lockstep.
var expectedNext = expectedIterator.moveNext();
var actualNext = actualIterator.moveNext();
// If we reached the end of both, we succeeded.
if (!expectedNext && !actualNext) return null;
// Fail if their lengths are different.
var newLocation = '$location[$index]';
if (!expectedNext) {
return _Mismatch.simple(newLocation, actual, 'longer than expected');
}
if (!actualNext) {
return _Mismatch.simple(newLocation, actual, 'shorter than expected');
}
// Match the elements.
var rp = matcher(expectedIterator.current, actualIterator.current,
newLocation, depth);
if (rp != null) return rp;
}
} else {
return _Mismatch.simple(location, actual, 'is not Iterable');
}
}