| // 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'; |
| } |