truthies.js (1135B)
1 load(libdir + 'andTestHelper.js'); 2 load(libdir + 'orTestHelper.js'); 3 4 function source(x) { 5 switch (typeof x) { 6 case "number": 7 case "boolean": 8 return String(x); 9 case "undefined": 10 return "(void 0)"; 11 case "string": 12 return JSON.stringify(x); 13 case "object": 14 if (x === null) { 15 return "null"; 16 } 17 return `(${JSON.stringify(x)})`; 18 default: 19 throw new Error("not implemented: " + typeof x); 20 } 21 } 22 23 (function () { 24 var opsies = ["||", "&&"]; 25 var falsies = [null, undefined, false, NaN, 0, ""]; 26 var truthies = [{}, true, 1, 42, 1/0, -1/0, "blah"]; 27 var boolies = [falsies, truthies]; 28 29 for (var op of opsies) { 30 for (var i in boolies) { 31 for (var j in boolies[i]) { 32 var x = source(boolies[i][j]); 33 for (var k in boolies) { 34 for (var l in boolies[k]) { 35 var y = source(boolies[k][l]); 36 var prefix = (op == "||") ? "or" : "and"; 37 var f = new Function("return " + prefix + "TestHelper(" + x + "," + y + ",10)"); 38 var expected = eval(x + op + y) ? 45 : 0; 39 assertEq(f(), expected); 40 } 41 } 42 } 43 } 44 } 45 })();