blob: 3bf30a340bed8bdc4e9d87a6ed1c2f113719e304 [file] [log] [blame]
// 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);
}