blob: 642e2eff85b49a0d1968383830b679fe7bc47a63 [file] [log] [blame]
// 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();
}