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