| // 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. |
| |
| // Derived from co19/src/LanguageFeatures/Patterns/invocation_keys_A04_t03.dart |
| |
| import 'dart:collection'; |
| |
| class MyList<E> with ListMixin<E> { |
| final List<E> list; |
| StringBuffer sb = new StringBuffer(); |
| |
| MyList(this.list); |
| |
| E operator [](int index) { |
| sb.write('[$index];'); |
| return list[index]; |
| } |
| |
| void operator []=(int index, E value) { |
| list[index] = value; |
| } |
| |
| int get length => list.length; |
| |
| void set length(int value) { |
| list.length = value; |
| } |
| |
| String get log => sb.toString(); |
| |
| void clearLog() { |
| sb.clear(); |
| } |
| } |
| |
| String test1(Object o) => |
| switch (o) { [var x, 2, var y] => "match-1", _ => "no match" }; |
| |
| String test2(Object o) => |
| switch (o) { [1, var x, var y] => "match-1", _ => "no match" }; |
| |
| String test3(Object o) => switch (o) { |
| [var x!, 1] => "match-1", |
| [1, var x!] => "match-2", |
| _ => "no match" |
| }; |
| |
| main() { |
| final ml1 = MyList<int>([1, 2, 3]); |
| expect("match-1", test1(ml1)); |
| expect("[0];[1];[2];", ml1.log); |
| |
| final ml2 = MyList<int>([1, 2, 3]); |
| expect("match-1", test2(ml2)); |
| expect("[0];[1];[2];", ml2.log); |
| |
| final ml3 = MyList<int>([1, 2]); |
| expect("match-2", test3(ml3)); |
| expect("[0];[1];", ml3.log); |
| } |
| |
| expect(expected, actual) { |
| if (expected != actual) throw 'Expected $expected, actual $actual'; |
| } |