unorderedEquals method
Expects that the iterable contains elements which equal those of
expected in any order.
Should not be used for very large collections, runtime is O(n^2.5) in the worst case where the iterables contain many equal elements, and O(n^2) in more typical cases.
Implementation
void unorderedEquals(Iterable<T> expected) {
context.expect(() => prefixFirst('unordered equals ', literal(expected)), (
actual,
) {
final which = unorderedCompare(
actual,
expected,
(actual, expected) => expected == actual,
(expected, index, count) => [
...prefixFirst(
'has no element equal to the expected element at index '
'$index: ',
literal(expected),
),
if (count > 1) 'or ${count - 1} other elements',
],
(actual, index, count) => [
...prefixFirst(
'has an unexpected element at index $index: ',
literal(actual),
),
if (count > 1) 'and ${count - 1} other unexpected elements',
],
);
if (which == null) return null;
return Rejection(which: which);
});
}