mirror of
https://github.com/dart-lang/sdk
synced 2024-11-05 18:22:09 +00:00
32603d5626
Rationale: Static calls were formerly unexplored in our constant folding. This is a first step towards making the constant folder aware of semantics of recognized methods. https://github.com/dart-lang/sdk/issues/35882 Change-Id: Id6e366f4d25f08a618931fc3c8a8c065f6358feb Reviewed-on: https://dart-review.googlesource.com/c/92410 Reviewed-by: Alexander Markov <alexmarkov@google.com> Commit-Queue: Aart Bik <ajcbik@google.com>
168 lines
3.1 KiB
Dart
168 lines
3.1 KiB
Dart
// Copyright (c) 2012, 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.
|
|
// Test switch statement.
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
class Switcher {
|
|
Switcher() {}
|
|
|
|
test1(val) {
|
|
var x = 0;
|
|
switch (val) {
|
|
case 1:
|
|
x = 100;
|
|
break;
|
|
case 2:
|
|
case 3:
|
|
x = 200;
|
|
break;
|
|
case 4:
|
|
default:
|
|
{
|
|
x = 400;
|
|
break;
|
|
}
|
|
}
|
|
return x;
|
|
}
|
|
|
|
test2(val) {
|
|
switch (val) {
|
|
case 1:
|
|
return 200;
|
|
default:
|
|
return 400;
|
|
}
|
|
}
|
|
}
|
|
|
|
class SwitchTest {
|
|
static testMain() {
|
|
Switcher s = new Switcher();
|
|
Expect.equals(100, s.test1(1));
|
|
Expect.equals(200, s.test1(2));
|
|
Expect.equals(200, s.test1(3));
|
|
Expect.equals(400, s.test1(4));
|
|
Expect.equals(400, s.test1(5));
|
|
|
|
Expect.equals(200, s.test2(1));
|
|
Expect.equals(400, s.test2(2));
|
|
}
|
|
}
|
|
|
|
class Enum {
|
|
static const Enum e1 = const Enum(1);
|
|
static const Enum e2 = const Enum(2);
|
|
static const Enum e3 = const Enum(3);
|
|
final int id;
|
|
const Enum(this.id);
|
|
}
|
|
|
|
void testSwitchEnum(Enum input, int expect) {
|
|
int result = null;
|
|
switch (input) {
|
|
case Enum.e1:
|
|
result = 10;
|
|
break;
|
|
case Enum.e2:
|
|
result = 20;
|
|
break;
|
|
case Enum.e3:
|
|
result = 30;
|
|
break;
|
|
default:
|
|
result = 40;
|
|
}
|
|
Expect.equals(expect, result);
|
|
}
|
|
|
|
const int ic1 = 1;
|
|
const int ic2 = 2;
|
|
void testSwitchIntExpression(int input, int expect) {
|
|
int result = null;
|
|
switch (input) {
|
|
case 1 + 1: // 2
|
|
case ic1 + 2: // 3
|
|
result = 11;
|
|
break;
|
|
case ic2 * 2: // 4
|
|
case 1 * 5: // 5
|
|
result = 21;
|
|
break;
|
|
case ic1 % ic2 + 5: // 6
|
|
result = 31;
|
|
break;
|
|
}
|
|
Expect.equals(expect, result);
|
|
}
|
|
|
|
void testSwitchBool(bool input, int expect) {
|
|
int result = null;
|
|
switch (input) {
|
|
case true:
|
|
result = 12;
|
|
break;
|
|
case false:
|
|
result = 22;
|
|
}
|
|
Expect.equals(expect, result);
|
|
}
|
|
|
|
void testSwitchString(String input, int expect) {
|
|
int result = null;
|
|
switch (input) {
|
|
case 'one':
|
|
result = 1;
|
|
break;
|
|
case 'two':
|
|
result = 2;
|
|
break;
|
|
}
|
|
Expect.equals(expect, result);
|
|
}
|
|
|
|
switchConstString() {
|
|
const c = 'a';
|
|
switch (c) {
|
|
case 'a':
|
|
return 'aa';
|
|
case 'b':
|
|
return 'bb';
|
|
case 'c':
|
|
return 'cc';
|
|
case 'd':
|
|
return 'dd';
|
|
case 'e':
|
|
return 'ee';
|
|
case 'f':
|
|
return 'ff';
|
|
}
|
|
}
|
|
|
|
main() {
|
|
SwitchTest.testMain();
|
|
|
|
testSwitchEnum(Enum.e1, 10);
|
|
testSwitchEnum(Enum.e2, 20);
|
|
testSwitchEnum(Enum.e3, 30);
|
|
testSwitchEnum(null, 40);
|
|
|
|
testSwitchIntExpression(2, 11);
|
|
testSwitchIntExpression(3, 11);
|
|
testSwitchIntExpression(4, 21);
|
|
testSwitchIntExpression(5, 21);
|
|
testSwitchIntExpression(6, 31);
|
|
testSwitchIntExpression(7, null);
|
|
|
|
testSwitchBool(true, 12);
|
|
testSwitchBool(false, 22);
|
|
|
|
testSwitchString(null, null);
|
|
testSwitchString('one', 1);
|
|
testSwitchString('two', 2);
|
|
testSwitchString('three', null);
|
|
|
|
Expect.equals('aa', switchConstString());
|
|
}
|