boolean-call.js (1792B)
1 function wrapper(values) { 2 function test(values) { 3 var expected = values.map(v => !!v); 4 5 for (var i = 0; i < 100; ++i) { 6 var ix = i % values.length; 7 var val = values[ix]; 8 var actual = Boolean(val); 9 assertEq(actual, expected[ix]); 10 } 11 } 12 13 for (var i = 0; i < 2; ++i) { 14 test(values); 15 } 16 } 17 18 function makeTest() { 19 // Create a copy to avoid type pollution. 20 return Function(`return ${wrapper}`)(); 21 } 22 23 // Use a new compartment to create a wrapper. 24 var g = newGlobal({newCompartment: true}); 25 26 var testValues = { 27 boolean: [true, false], 28 int32: [-2147483648, -1, 0, 1, 2147483647], 29 double: [-Infinity, -1.5, -1, -0.5, -0, +0, +0.5, +1, +1.5, Infinity, NaN], 30 string: ["", "true", "false", "0", "1", "hello"], 31 symbol: [Symbol(), Symbol("desc"), Symbol.iterator], 32 bigint: [ 33 -(2n ** 1000n), 34 -18446744073709551616n, // -(2n**64n) 35 -9223372036854775808n, // -(2n**63n) 36 -4294967296n, // -(2**32) 37 -2147483648n, // -(2**31) 38 -1n, 0n, 1n, 39 2147483648n, // 2**31 40 4294967296n, // 2**32 41 9223372036854775808n, // 2n**63n 42 18446744073709551616n, // 2n**64n 43 2n ** 1000n, 44 ], 45 object: [{}, [], function(){}, new Proxy({}, {}), createIsHTMLDDA(), g.eval("createIsHTMLDDA()")], 46 null: [null], 47 undefined: [undefined], 48 }; 49 50 for (var values of Object.values(testValues)) { 51 makeTest()(values); 52 } 53 54 // boolean and int32 55 makeTest()([].concat(testValues.boolean, testValues.int32)); 56 57 // int32 and double 58 makeTest()([].concat(testValues.int32, testValues.double)); 59 60 // null and undefined 61 makeTest()([].concat(testValues.null, testValues.undefined)); 62 63 // null, undefined, and object 64 makeTest()([].concat(testValues.null, testValues.undefined, testValues.object)); 65 66 // all values 67 makeTest()(Object.values(testValues).flat());