tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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());