1536bbab40
Change-Id: I6dceb6d9490c3b42941874499e815638216b0d17 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/292302 Commit-Queue: Johnni Winther <johnniwinther@google.com> Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
87 lines
1.8 KiB
Dart
87 lines
1.8 KiB
Dart
// 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';
|
|
}
|
|
} |