// 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. 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(); }