blob: ccc32c64839fedf89996a4a4229d115dbab7b70d [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.
class A<T> {
final T foo;
A(this.foo);
}
class B {
final num foo;
B(this.foo);
}
class C implements A<int>, B {
final int foo;
C(this.foo);
}
test(o) {
switch (o) {
case [0, 1, ...]:
return 0;
case [1, 2, ...]:
return 1;
case <int>[2, 3, ...]:
return 2;
case {'foo': 5}:
return 3;
case {'foo': 6}:
return 4;
case <String, int>{'foo': 7}:
return 5;
case A<dynamic>(foo: 5):
return 6;
case A<int>(foo: 6):
return 7;
case B(foo: 7):
return 8;
case (foo: 8):
return 9;
}
return -1;
}
main() {
expect(0, test([0, 1]));
expect(0, test([0, 1, 2]));
expect(1, test([1, 2]));
expect(1, test([1, 2, 3]));
expect(2, test([2, 3]));
expect(2, test([2, 3, 4]));
expect(-1, test(<num>[2, 3]));
expect(3, test({'foo': 5}));
expect(3, test({'foo': 5, 'bar': 6}));
expect(4, test({'foo': 6}));
expect(4, test({'foo': 6, 'bar': 7}));
expect(5, test({'foo': 7}));
expect(5, test({'foo': 7, 'bar': 8}));
expect(-1, test(<String, num>{'foo': 7}));
expect(6, test(A<num>(5)));
expect(6, test(A<int>(5)));
expect(-1, test(A<num>(6)));
expect(7, test(A<int>(6)));
expect(-1, test(A<int>(7)));
expect(-1, test(B(5)));
expect(-1, test(B(6)));
expect(8, test(B(7)));
expect(6, test(C(5)));
expect(7, test(C(6)));
expect(8, test(C(7)));
expect(-1, test(C(8)));
expect(9, test((foo: 8)));
expect(-1, test((foo: 9)));
}
expect(expected, actual) {
if (expected != actual) {
throw 'Expected $expected, actual $actual';
}
}