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