blob: 7c86536c0e1630eb65d76b8f34afe6bbed37a183 [file] [log] [blame]
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
test(o, [expectedRest]) {
switch (o) {
case [0, 1, ...]:
return 0;
case [0, ..., 1]:
return 1;
case [0, 2, ... var rest]:
expect(expectedRest, rest);
return 2;
case [0, ... var rest, 2]:
expect(expectedRest, rest);
return 3;
case [0, 4, ... var rest, 2, 3]:
expect(expectedRest, rest);
return 4;
case [0, 5, ... [1, ... var rest, 2], 2, 3]:
expect(expectedRest, rest);
return 5;
}
}
main() {
expect(0, test([0, 1]));
expect(0, test([0, 1, 2]));
expect(1, test([0, 2, 1]));
expect(1, test([0, 2, 3, 1]));
expect(2, test([0, 2], []));
expect(2, test([0, 2, 2], [2]));
expect(2, test([0, 2, 3], [3]));
expect(2, test([0, 2, 3, 4], [3, 4]));
expect(3, test([0, 3, 4, 2], [3, 4]));
expect(3, test([0, 3, 4, 5, 2], [3, 4, 5]));
expect(4, test([0, 4, 2, 3], []));
expect(4, test([0, 4, 2, 2, 3], [2]));
expect(4, test([0, 4, 2, 3, 2, 3], [2, 3]));
expect(null, test([0, 5, 3, 2, 3]));
expect(null, test([0, 5, [], 2, 3]));
expect(null, test([0, 5, [0, 1], 2, 3]));
expect(5, test([0, 5, 1, 2, 2, 3], []));
expect(5, test([0, 5, 1, 3, 2, 2, 3], [3]));
}
expect(expected, actual) {
if (expected is List && actual is List) {
if (expected.length == actual.length) {
for (int i = 0; i < expected.length; i++) {
if (expected[i] != actual[i]) {
throw 'Expected ${expected[i]}, actual ${actual[i]} @ index $i';
}
}
return;
}
}
if (expected != actual) throw 'Expected $expected, actual $actual';
}