Files
sdk/tests/language/patterns/primitive_switch_test.dart
T
Sergey G. Grekhov 82b78916fd [tests] Remove obsolete Dart 3.0 experiments from language tests
Change-Id: If31c487e3ebe2c1ae847aff7c8994580b8b6f2f6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/309660
Reviewed-by: Alexander Thomas <athom@google.com>
Commit-Queue: Alexander Thomas <athom@google.com>
2023-06-15 08:26:27 +00:00

119 lines
2.4 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.
// Verify that switches using only values with primitive equality (excluding
// the exceptions Symbol and Type) are lowered correctly. These are special
// cased by the CFE.
import 'package:expect/expect.dart';
abstract class I {}
enum A implements I {
a,
b,
c,
}
enum B implements I {
a,
b,
c,
}
int switchExpressionA(A a) => switch (a) {
A.a => 0,
A.b => 1,
A.c => 2,
};
int switchStatementA(A a) {
switch (a) {
case A.a:
return 0;
case A.b:
return 1;
case A.c:
return 2;
}
}
int switchExpressionB(B b) => switch (b) {
B.a => 3,
B.b => 4,
B.c => 5,
};
int switchStatementB(B b) {
switch (b) {
case B.a:
return 3;
case B.b:
return 4;
case B.c:
return 5;
}
}
int switchExpressionI(I i) => switch (i) {
A.a => 0,
A.b => 1,
A.c => 2,
B.a => 3,
B.b => 4,
B.c => 5,
_ => -1,
};
int switchStatementI(I i) {
switch (i) {
case A.a:
return 0;
case A.b:
return 1;
case A.c:
return 2;
case B.a:
return 3;
case B.b:
return 4;
case B.c:
return 5;
default:
return -1;
}
}
main() {
Expect.equals(0, switchExpressionA(A.a));
Expect.equals(1, switchExpressionA(A.b));
Expect.equals(2, switchExpressionA(A.c));
Expect.equals(0, switchStatementA(A.a));
Expect.equals(1, switchStatementA(A.b));
Expect.equals(2, switchStatementA(A.c));
Expect.equals(3, switchExpressionB(B.a));
Expect.equals(4, switchExpressionB(B.b));
Expect.equals(5, switchExpressionB(B.c));
Expect.equals(3, switchStatementB(B.a));
Expect.equals(4, switchStatementB(B.b));
Expect.equals(5, switchStatementB(B.c));
Expect.equals(0, switchExpressionI(A.a));
Expect.equals(1, switchExpressionI(A.b));
Expect.equals(2, switchExpressionI(A.c));
Expect.equals(3, switchExpressionI(B.a));
Expect.equals(4, switchExpressionI(B.b));
Expect.equals(5, switchExpressionI(B.c));
Expect.equals(0, switchStatementI(A.a));
Expect.equals(1, switchStatementI(A.b));
Expect.equals(2, switchStatementI(A.c));
Expect.equals(3, switchStatementI(B.a));
Expect.equals(4, switchStatementI(B.b));
Expect.equals(5, switchStatementI(B.c));
}