michael@0: load(libdir + 'andTestHelper.js'); michael@0: load(libdir + 'orTestHelper.js'); michael@0: michael@0: (function () { michael@0: var opsies = ["||", "&&"]; michael@0: var falsies = [null, undefined, false, NaN, 0, ""]; michael@0: var truthies = [{}, true, 1, 42, 1/0, -1/0, "blah"]; michael@0: var boolies = [falsies, truthies]; michael@0: michael@0: // The for each here should abort tracing, so that this test framework michael@0: // relies only on the interpreter while the orTestHelper and andTestHelper michael@0: // functions get trace-JITed. michael@0: for each (var op in opsies) { michael@0: for (var i in boolies) { michael@0: for (var j in boolies[i]) { michael@0: var x = uneval(boolies[i][j]); michael@0: for (var k in boolies) { michael@0: for (var l in boolies[k]) { michael@0: var y = uneval(boolies[k][l]); michael@0: var prefix = (op == "||") ? "or" : "and"; michael@0: var f = new Function("return " + prefix + "TestHelper(" + x + "," + y + ",10)"); michael@0: var expected = eval(x + op + y) ? 45 : 0; michael@0: assertEq(f(), expected); michael@0: } michael@0: } michael@0: } michael@0: } michael@0: } michael@0: })();