Index: tests/kernel/unsorted/conditional_test.dart |
diff --git a/tests/kernel/unsorted/conditional_test.dart b/tests/kernel/unsorted/conditional_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c5df2c33e337f27f6d74133305513337cb769739 |
--- /dev/null |
+++ b/tests/kernel/unsorted/conditional_test.dart |
@@ -0,0 +1,142 @@ |
+// Copyright (c) 2016, 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. |
+ |
+// Tests of conditional expressions and statements and negation. |
+ |
+import 'expect.dart'; |
+ |
+mkTrue() => true; |
+mkFalse() => false; |
+ |
+check(b) { |
+ Expect.isTrue(b); |
+ return b; |
+} |
+ |
+main() { |
+ // Check that ?: gets the right answer. |
+ Expect.isTrue((mkTrue() ? 0 : 1) == 0); |
+ Expect.isTrue((mkFalse() ? 0 : 1) == 1); |
+ // Check that it doesn't evaluate all subexpressions. |
+ mkTrue() ? Expect.isTrue(true) : Expect.isTrue(false); |
+ mkFalse() ? Expect.isTrue(false) : Expect.isTrue(true); |
+ |
+ // Check that && and || get the right answers. |
+ Expect.isTrue(mkTrue() && mkTrue()); |
+ Expect.isTrue(!(mkTrue() && mkFalse())); |
+ Expect.isTrue(!(mkFalse() && mkTrue())); |
+ Expect.isTrue(!(mkFalse() && mkFalse())); |
+ Expect.isTrue(mkTrue() || mkTrue()); |
+ Expect.isTrue(mkTrue() || mkFalse()); |
+ Expect.isTrue(mkFalse() || mkTrue()); |
+ Expect.isTrue(!(mkFalse() || mkFalse())); |
+ |
+ // Check that they don't evaluate both subexpressions. |
+ mkTrue() && check(true); |
+ mkFalse() && check(false); |
+ mkTrue() || check(true); |
+ mkFalse() || check(true); |
+ |
+ // Check that if works. |
+ if (mkTrue()) { |
+ Expect.isTrue(true); |
+ } else { |
+ Expect.isTrue(false); |
+ } |
+ if (mkFalse()) { |
+ Expect.isTrue(false); |
+ } else { |
+ Expect.isTrue(true); |
+ } |
+ if (!mkTrue()) { |
+ Expect.isTrue(false); |
+ } else { |
+ Expect.isTrue(true); |
+ } |
+ if (!mkFalse()) { |
+ Expect.isTrue(true); |
+ } else { |
+ Expect.isTrue(false); |
+ } |
+ |
+ // Check that ?:, &&, and || work for control flow. |
+ if (mkTrue() ? mkTrue() : mkFalse()) { |
+ Expect.isTrue(true); |
+ } else { |
+ Expect.isTrue(false); |
+ } |
+ if (mkTrue() ? mkFalse() : mkTrue()) { |
+ Expect.isTrue(false); |
+ } else { |
+ Expect.isTrue(true); |
+ } |
+ if (mkFalse() ? mkTrue() : mkFalse()) { |
+ Expect.isTrue(false); |
+ } else { |
+ Expect.isTrue(true); |
+ } |
+ if (mkFalse() ? mkFalse() : mkTrue()) { |
+ Expect.isTrue(true); |
+ } else { |
+ Expect.isTrue(false); |
+ } |
+ if (mkTrue() && mkTrue()) { |
+ Expect.isTrue(true); |
+ } else { |
+ Expect.isTrue(false); |
+ } |
+ if (mkTrue() && mkFalse()) { |
+ Expect.isTrue(false); |
+ } else { |
+ Expect.isTrue(true); |
+ } |
+ if (mkFalse() && mkTrue()) { |
+ Expect.isTrue(false); |
+ } else { |
+ Expect.isTrue(true); |
+ } |
+ if (mkFalse() && mkFalse()) { |
+ Expect.isTrue(false); |
+ } else { |
+ Expect.isTrue(true); |
+ } |
+ if (mkTrue() || mkTrue()) { |
+ Expect.isTrue(true); |
+ } else { |
+ Expect.isTrue(false); |
+ } |
+ if (mkTrue() || mkFalse()) { |
+ Expect.isTrue(true); |
+ } else { |
+ Expect.isTrue(false); |
+ } |
+ if (mkFalse() || mkTrue()) { |
+ Expect.isTrue(true); |
+ } else { |
+ Expect.isTrue(false); |
+ } |
+ if (mkFalse() || mkFalse()) { |
+ Expect.isTrue(false); |
+ } else { |
+ Expect.isTrue(true); |
+ } |
+ |
+ // Test empty else branches. |
+ if (mkTrue()) { |
+ Expect.isTrue(true); |
+ } |
+ if (mkFalse()) { |
+ Expect.isTrue(false); |
+ } |
+ |
+ var x = 0; |
+ if (mkTrue()) { |
+ x = 1; |
+ } |
+ Expect.isTrue(x == 1); |
+ if (mkFalse()) { |
+ x = 2; |
+ } |
+ Expect.isTrue(x == 1); |
+} |