blob: de041016fbb8b2195d5a4df87c64df0196426759 [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.
// 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';
}