| // 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 'package:expect/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); |
| } |