blob: 8758d05892b3291dd9aea8e9eaaa2c6f65470b2e [file] [log] [blame]
// 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.
// @dart = 2.7
import "package:expect/expect.dart";
break1(int x, int y, int ew, int ez) {
int w = 1;
int z = 0;
bk1:
if (x == 2) {
z = 1;
if (y == 3) {
w = 2;
break bk1;
} else {
w = 3;
}
} else {
z = 2;
if (y == 3) {
w = 4;
} else {
w = 5;
break bk1;
}
break bk1;
}
Expect.equals(ew, w);
Expect.equals(ez, z);
}
break2(int x, int y, int ew, int ez) {
int w = 1;
int z = 0;
bk1:
do {
if (x == 2) {
z = 1;
if (y == 3) {
w = 2;
break bk1;
} else {
w = 3;
}
} else {
z = 2;
if (y == 3) {
w = 4;
} else {
w = 5;
break bk1;
}
break bk1;
}
} while (false);
Expect.equals(ew, w);
Expect.equals(ez, z);
}
break3(int x, int y, int ew, int ez) {
int w = 1;
int z = 0;
do {
if (x == 2) {
z = 1;
if (y == 3) {
w = 2;
break;
} else {
w = 3;
}
} else {
z = 2;
if (y == 3) {
w = 4;
} else {
w = 5;
break;
}
break;
}
} while (false);
Expect.equals(ew, w);
Expect.equals(ez, z);
}
obscureBreaks(x) {
bool result = true;
bar:
do {
if (x == 1) {
foo:
break;
} else if (x == 2) {
foo:
break bar;
} else if (x == 3) {
bar:
break;
} else if (x == 4) {
break bar;
} else {
result = false;
}
} while (false);
return result;
}
ifBreaks(x, y) {
int res = 2;
foo:
if (x == 1)
bar:
{
if (y == 2) {
res = 4;
break foo;
} else if (y == 3) {
res = 5;
break bar;
}
res = 3;
}
else
baz:
{
if (y == 2) {
res = 7;
break foo;
} else if (y == 3) {
res = 8;
break baz;
}
res = 6;
}
return res;
}
main() {
break1(2, 3, 2, 1);
break1(2, 4, 3, 1);
break1(3, 3, 4, 2);
break1(3, 4, 5, 2);
break2(2, 3, 2, 1);
break2(2, 4, 3, 1);
break2(3, 3, 4, 2);
break2(3, 4, 5, 2);
break3(2, 3, 2, 1);
break3(2, 4, 3, 1);
break3(3, 3, 4, 2);
break3(3, 4, 5, 2);
Expect.isTrue(obscureBreaks(1), "1");
Expect.isTrue(obscureBreaks(2), "2");
Expect.isTrue(obscureBreaks(3), "3");
Expect.isTrue(obscureBreaks(4), "4");
Expect.isFalse(obscureBreaks(5), "5");
Expect.equals(3, ifBreaks(1, 4));
Expect.equals(4, ifBreaks(1, 2));
Expect.equals(5, ifBreaks(1, 3));
Expect.equals(6, ifBreaks(2, 4));
Expect.equals(7, ifBreaks(2, 2));
Expect.equals(8, ifBreaks(2, 3));
}