| function testBooleans(a, b) { |
| var res = 0; |
| if (a && b) res += 2; |
| if (b || a) res += 1; |
| return res; |
| } |
| assertEq(testBooleans(false, false), 0); |
| assertEq(testBooleans(false, true), 1); |
| assertEq(testBooleans(true, false), 1); |
| assertEq(testBooleans(true, true), 3); |
| |
| function testShortCircuit(a) { |
| var b = 0; |
| ++a && a++; |
| a || (b = 100); |
| return a + b; |
| } |
| assertEq(testShortCircuit(0), 2); |
| assertEq(testShortCircuit(-2), 100); |
| assertEq(testShortCircuit(-1), 100); |
| |
| function testValues(a, b) { |
| if (a && b) return 2; |
| if (b || a) return 1; |
| return 0; |
| } |
| assertEq(testValues(false, true), 1); |
| assertEq(testValues("foo", 22), 2); |
| assertEq(testValues(null, ""), 0); |
| assertEq(testValues(Math.PI, undefined), 1); |
| assertEq(testValues(Math.abs, 2.2), 2); |