| // Copyright (c) 2011, 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.9 |
| |
| import "package:expect/expect.dart"; |
| |
| class BoolTest { |
| static void testEquality() { |
| Expect.equals(true, true); |
| Expect.equals(false, false); |
| Expect.isTrue(identical(true, true)); |
| Expect.isFalse(identical(true, false)); |
| Expect.isTrue(identical(false, false)); |
| Expect.isFalse(identical(false, true)); |
| Expect.isFalse(!identical(true, true)); |
| Expect.isTrue(!identical(true, false)); |
| Expect.isFalse(!identical(false, false)); |
| Expect.isTrue(!identical(false, true)); |
| Expect.isTrue(true == true); |
| Expect.isFalse(true == false); |
| Expect.isTrue(false == false); |
| Expect.isFalse(false == true); |
| Expect.isFalse(true != true); |
| Expect.isTrue(true != false); |
| Expect.isFalse(false != false); |
| Expect.isTrue(false != true); |
| Expect.isTrue(identical(true, (true == true))); |
| Expect.isTrue(identical(false, (true == false))); |
| Expect.isTrue(identical(true, (false == false))); |
| Expect.isTrue(identical(false, (false == true))); |
| Expect.isFalse(!identical(true, (true == true))); |
| Expect.isFalse(!identical(false, (true == false))); |
| Expect.isFalse(!identical(true, (false == false))); |
| Expect.isFalse(!identical(false, (false == true))); |
| Expect.isFalse(identical(false, (true == true))); |
| Expect.isFalse(identical(true, (true == false))); |
| Expect.isFalse(identical(false, (false == false))); |
| Expect.isFalse(identical(true, (false == true))); |
| Expect.isTrue(!identical(false, (true == true))); |
| Expect.isTrue(!identical(true, (true == false))); |
| Expect.isTrue(!identical(false, (false == false))); |
| Expect.isTrue(!identical(true, (false == true))); |
| // Expect.equals could rely on a broken boolean equality. |
| if (true == false) { |
| throw "Expect.equals broken"; |
| } |
| if (false == true) { |
| throw "Expect.equals broken"; |
| } |
| if (identical(true, false)) { |
| throw "Expect.equals broken"; |
| } |
| if (identical(false, true)) { |
| throw "Expect.equals broken"; |
| } |
| if (true == true) {} else { |
| throw "Expect.equals broken"; |
| } |
| if (false == false) {} else { |
| throw "Expect.equals broken"; |
| } |
| if (identical(true, true)) {} else { |
| throw "Expect.equals broken"; |
| } |
| if (identical(false, false)) {} else { |
| throw "Expect.equals broken"; |
| } |
| if (true != false) {} else { |
| throw "Expect.equals broken"; |
| } |
| if (false != true) {} else { |
| throw "Expect.equals broken"; |
| } |
| if (!identical(true, false)) {} else { |
| throw "Expect.equals broken"; |
| } |
| if (!identical(false, true)) {} else { |
| throw "Expect.equals broken"; |
| } |
| if (true != true) { |
| throw "Expect.equals broken"; |
| } |
| if (false != false) { |
| throw "Expect.equals broken"; |
| } |
| if (!identical(true, true)) { |
| throw "Expect.equals broken"; |
| } |
| if (!identical(false, false)) { |
| throw "Expect.equals broken"; |
| } |
| } |
| |
| static void testToString() { |
| Expect.equals("true", true.toString()); |
| Expect.equals("false", false.toString()); |
| } |
| |
| static void testNegate(isTrue, isFalse) { |
| Expect.equals(true, !false); |
| Expect.equals(false, !true); |
| Expect.equals(true, !isFalse); |
| Expect.equals(false, !isTrue); |
| } |
| |
| static void testLogicalOp() { |
| testOr(a, b, onTypeError) { |
| try { |
| return a || b; |
| } on TypeError catch (t) { |
| return onTypeError; |
| } |
| } |
| |
| testAnd(a, b, onTypeError) { |
| try { |
| return a && b; |
| } on TypeError catch (t) { |
| return onTypeError; |
| } |
| } |
| |
| var isTrue = true; |
| var isFalse = false; |
| Expect.equals(true, testAnd(isTrue, isTrue, false)); |
| Expect.equals(false, testAnd(isTrue, 0, false)); |
| Expect.equals(false, testAnd(isTrue, 1, false)); |
| Expect.equals(false, testAnd(isTrue, "true", false)); |
| Expect.equals(false, testAnd(0, isTrue, false)); |
| Expect.equals(false, testAnd(1, isTrue, false)); |
| |
| Expect.equals(true, testOr(isTrue, isTrue, false)); |
| Expect.equals(true, testOr(isFalse, isTrue, false)); |
| Expect.equals(true, testOr(isTrue, isFalse, false)); |
| Expect.equals(true, testOr(isTrue, 0, true)); |
| Expect.equals(true, testOr(isTrue, 1, true)); |
| Expect.equals(false, testOr(isFalse, 0, false)); |
| Expect.equals(false, testOr(isFalse, 1, false)); |
| Expect.equals(true, testOr(0, isTrue, true)); |
| Expect.equals(true, testOr(1, isTrue, true)); |
| Expect.equals(false, testOr(0, isFalse, false)); |
| Expect.equals(false, testOr(1, isFalse, false)); |
| |
| // Test side effects. |
| int trueCount = 0, falseCount = 0; |
| |
| trueFunc() { |
| trueCount++; |
| return true; |
| } |
| |
| falseFunc() { |
| falseCount++; |
| return false; |
| } |
| |
| Expect.equals(0, trueCount); |
| Expect.equals(0, falseCount); |
| |
| trueFunc() && trueFunc(); |
| Expect.equals(2, trueCount); |
| Expect.equals(0, falseCount); |
| |
| trueCount = falseCount = 0; |
| falseFunc() && trueFunc(); |
| Expect.equals(0, trueCount); |
| Expect.equals(1, falseCount); |
| |
| trueCount = falseCount = 0; |
| trueFunc() && falseFunc(); |
| Expect.equals(1, trueCount); |
| Expect.equals(1, falseCount); |
| |
| trueCount = falseCount = 0; |
| falseFunc() && falseFunc(); |
| Expect.equals(0, trueCount); |
| Expect.equals(1, falseCount); |
| |
| trueCount = falseCount = 0; |
| trueFunc() || trueFunc(); |
| Expect.equals(1, trueCount); |
| Expect.equals(0, falseCount); |
| |
| trueCount = falseCount = 0; |
| falseFunc() || trueFunc(); |
| Expect.equals(1, trueCount); |
| Expect.equals(1, falseCount); |
| |
| trueCount = falseCount = 0; |
| trueFunc() || falseFunc(); |
| Expect.equals(1, trueCount); |
| Expect.equals(0, falseCount); |
| |
| trueCount = falseCount = 0; |
| falseFunc() || falseFunc(); |
| Expect.equals(0, trueCount); |
| Expect.equals(2, falseCount); |
| } |
| |
| static void testMain() { |
| testEquality(); |
| testNegate(true, false); |
| testToString(); |
| testLogicalOp(); |
| } |
| } |
| |
| main() { |
| BoolTest.testMain(); |
| } |