unorderedEquals method

void unorderedEquals(
  1. Iterable<T> expected
)

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