tor-browser

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

binaryarith-null-undef-bool.js (2351B)


      1 // Pass |null| as argument to be more robust against code folding.
      2 function testNullWithInt32OrBool(nullVal) {
      3    var vals = [0, 1, true, false, null];
      4    for (var v of vals) {
      5        assertEq(v + nullVal, Number(v));
      6        assertEq(v - nullVal, Number(v));
      7        assertEq(v * nullVal, 0);
      8        var res = v / nullVal;
      9        assertEq(isNaN(res) || res === Infinity, true);
     10        assertEq(v % nullVal, NaN);
     11        assertEq(v ** nullVal, 1);
     12 
     13        assertEq(nullVal + v, Number(v));
     14        assertEq(nullVal - v, 0 - Number(v));
     15        assertEq(nullVal * v, 0);
     16        res = nullVal / v;
     17        assertEq(isNaN(res) || res === 0, true);
     18        res = nullVal % v;
     19        assertEq(isNaN(res) || res === 0, true);
     20        res = nullVal ** v;
     21        assertEq(res === 0 || res === 1, true);
     22    }
     23 }
     24 for (var i = 0; i < 15; i++) {
     25    testNullWithInt32OrBool(null);
     26 }
     27 
     28 function testUndefinedWithOther(undefinedVal) {
     29    var vals = [1.1, NaN, true, false, null, undefined];
     30    for (var v of vals) {
     31        assertEq(v + undefinedVal, NaN);
     32        assertEq(v - undefinedVal, NaN);
     33        assertEq(v * undefinedVal, NaN);
     34        assertEq(v / undefinedVal, NaN);
     35        assertEq(v % undefinedVal, NaN);
     36        assertEq(v ** undefinedVal, NaN);
     37 
     38        assertEq(undefinedVal + v, NaN);
     39        assertEq(undefinedVal - v, NaN);
     40        assertEq(undefinedVal * v, NaN);
     41        assertEq(undefinedVal / v, NaN);
     42        assertEq(undefinedVal % v, NaN);
     43        var res = undefinedVal ** v;
     44        if (v === false || v === null) {
     45            assertEq(res, 1);
     46        } else {
     47            assertEq(res, NaN);
     48        }
     49    }
     50 }
     51 for (var i = 0; i < 15; i++) {
     52    testUndefinedWithOther(undefined);
     53 }
     54 
     55 function testBooleanWithDouble(trueVal, falseVal) {
     56    var vals = [1.1, 2.2, 5, 6, 3.14];
     57    for (var v of vals) {
     58        assertEq(v + falseVal, v);
     59        assertEq(v - falseVal, v);
     60        assertEq(v * falseVal, 0);
     61        assertEq(v / falseVal, Infinity);
     62        assertEq(v % falseVal, NaN);
     63        assertEq(v ** falseVal, 1);
     64 
     65        assertEq(trueVal + v, v + 1);
     66        assertEq(trueVal - v, 1 - v);
     67        assertEq(trueVal * v, v);
     68        assertEq(trueVal / v, 1 / v);
     69        assertEq(trueVal % v, 1);
     70        assertEq(trueVal ** v, 1);
     71    }
     72 }
     73 for (var i = 0; i < 15; i++) {
     74    testBooleanWithDouble(true, false);
     75 }