load("./driver/driver.js"); function foo(){ } function bar(){ } function baz(){ } function testConditionalBasic(x) { return x ? 10 : 20; } testConditionalBasic(false); checkBasicBlock(testConditionalBasic, "x", ShouldHaveExecuted); checkBasicBlock(testConditionalBasic, "20", ShouldHaveExecuted); checkBasicBlock(testConditionalBasic, "10", ShouldNotHaveExecuted); testConditionalBasic(true); checkBasicBlock(testConditionalBasic, "10", ShouldHaveExecuted); function testConditionalFunctionCall(x, y) { x ? y ? foo() : baz() : bar() } testConditionalFunctionCall(false, false); checkBasicBlock(testConditionalFunctionCall, "x", ShouldHaveExecuted); checkBasicBlock(testConditionalFunctionCall, "? y", ShouldHaveExecuted); checkBasicBlock(testConditionalFunctionCall, "bar", ShouldHaveExecuted); checkBasicBlock(testConditionalFunctionCall, ": bar", ShouldHaveExecuted); checkBasicBlock(testConditionalFunctionCall, "y", ShouldNotHaveExecuted); checkBasicBlock(testConditionalFunctionCall, "? foo", ShouldNotHaveExecuted); checkBasicBlock(testConditionalFunctionCall, "foo", ShouldNotHaveExecuted); checkBasicBlock(testConditionalFunctionCall, "baz", ShouldNotHaveExecuted); testConditionalFunctionCall(true, false); checkBasicBlock(testConditionalFunctionCall, "y", ShouldHaveExecuted); checkBasicBlock(testConditionalFunctionCall, "? foo", ShouldHaveExecuted); checkBasicBlock(testConditionalFunctionCall, ": baz", ShouldHaveExecuted); checkBasicBlock(testConditionalFunctionCall, "baz", ShouldHaveExecuted); checkBasicBlock(testConditionalFunctionCall, "foo", ShouldNotHaveExecuted); testConditionalFunctionCall(true, true); checkBasicBlock(testConditionalFunctionCall, "foo", ShouldHaveExecuted);