tor-browser

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

same-value-fold-constant-number.js (1857B)


      1 function SameValue(x, y) {
      2    if (x === y) {
      3        return (x !== 0) || (1 / x === 1 / y);
      4    }
      5    return (x !== x && y !== y);
      6 }
      7 
      8 var xs = [
      9  NaN,
     10  +0,
     11  -0,
     12  1,
     13  1.5,
     14  -1.5,
     15  Infinity,
     16  -Infinity,
     17 ];
     18 
     19 // Object.is(input, NaN) is folded to |input !== input|.
     20 function testNaN() {
     21  for (var i = 0; i < 500; ++i) {
     22    var x = xs[i & 7];
     23    assertEq(typeof x, "number");
     24    assertEq(Object.is(NaN, x), x !== x);
     25    assertEq(Object.is(x, NaN), x !== x);
     26  }
     27 }
     28 for (let i = 0; i < 2; ++i) testNaN();
     29 
     30 // Object.is(input, +0) is folded to a bitwise comparison.
     31 function testPositiveZero() {
     32  for (var i = 0; i < 500; ++i) {
     33    var x = xs[i & 7];
     34    assertEq(typeof x, "number");
     35    assertEq(Object.is(+0, x), SameValue(x, +0));
     36    assertEq(Object.is(x, +0), SameValue(x, +0));
     37  }
     38 }
     39 for (let i = 0; i < 2; ++i) testPositiveZero();
     40 
     41 // Object.is(input, -0) is folded to a bitwise comparison.
     42 function testNegativeZero() {
     43  for (var i = 0; i < 500; ++i) {
     44    var x = xs[i & 7];
     45    assertEq(typeof x, "number");
     46    assertEq(Object.is(-0, x), SameValue(x, -0));
     47    assertEq(Object.is(x, -0), SameValue(x, -0));
     48  }
     49 }
     50 for (let i = 0; i < 2; ++i) testNegativeZero();
     51 
     52 // Object.is(input, int32) is folded to |input === int32|, when int32 isn't 0.
     53 function testInt32() {
     54  for (var i = 0; i < 500; ++i) {
     55    var x = xs[i & 7];
     56    assertEq(typeof x, "number");
     57    assertEq(Object.is(1, x), x === 1);
     58    assertEq(Object.is(x, 1), x === 1);
     59  }
     60 }
     61 for (let i = 0; i < 2; ++i) testInt32();
     62 
     63 // Object.is(input, double) is folded to |input === double|, when double is
     64 // neither NaN, nor +/-0.
     65 function testDouble() {
     66  for (var i = 0; i < 500; ++i) {
     67    var x = xs[i & 7];
     68    assertEq(typeof x, "number");
     69    assertEq(Object.is(1.5, x), x === 1.5);
     70    assertEq(Object.is(x, 1.5), x === 1.5);
     71  }
     72 }
     73 for (let i = 0; i < 2; ++i) testDouble();