tor-browser

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

boolean-compare-string-or-double.js (3005B)


      1 // Test comparison between Boolean x {String, Double}.
      2 
      3 // Boolean R String <=> ToNumber(Boolean) R ToNumber(String)
      4 // Boolean R Number <=> ToNumber(Boolean) R Number
      5 
      6 // The entries in the first halves of xs, ys, and zs should be loose-equal to each other.
      7 
      8 var xs = [
      9  // ToNumber(bool) == 0
     10  false, false, false, false,
     11 
     12  // ToNumber(bool) == 1
     13  true, true, true, true,
     14 
     15  // Filler
     16  false, false, false, false,
     17  true, true, true, true,
     18 ];
     19 
     20 var ys = [
     21  // ToNumber(str) == 0
     22  "", "0", "0.0", ".0",
     23 
     24  // ToNumber(str) == 1
     25  "1", "1.0", "0x1", "  1\t\r\n",
     26 
     27  // ToNumber(str) != {0, 1}
     28  // (Duplicate entries to ensure they're neither equal to |true| nor to |false|.)
     29  "not-a-number", "NaN", "Infinity", "2",
     30  "not-a-number", "NaN", "Infinity", "2",
     31 ];
     32 
     33 function Double(x) {
     34  // numberToDouble always returns a Double valued number.
     35  return numberToDouble(x);
     36 }
     37 
     38 var zs = [
     39  // = 0
     40  Double(0), Double(0), -0, -0,
     41 
     42  // = 1
     43  Double(1), Double(1), Double(1), Double(1),
     44 
     45  // != {0, 1}
     46  // (Duplicate entries to ensure they're neither equal to |true| nor to |false|.)
     47  NaN, Infinity, Double(2), Double(-1.5),
     48  NaN, Infinity, Double(2), Double(-1.5),
     49 ];
     50 
     51 function testLooseEqual() {
     52  for (var i = 0; i < 100; ++i) {
     53    var j = i % xs.length;
     54    var x = xs[j];
     55    var y = ys[j];
     56    var z = zs[j];
     57 
     58    var r = j < (xs.length >> 1);
     59 
     60    assertEq(x == y, r);
     61    assertEq(y == x, r);
     62 
     63    assertEq(x == z, r);
     64    assertEq(z == x, r);
     65  }
     66 }
     67 testLooseEqual();
     68 
     69 function testLooseNotEqual() {
     70  for (var i = 0; i < 100; ++i) {
     71    var j = i % xs.length;
     72    var x = xs[j];
     73    var y = ys[j];
     74    var z = zs[j];
     75 
     76    var r = j < (xs.length >> 1);
     77 
     78    assertEq(x != y, !r);
     79    assertEq(y != x, !r);
     80 
     81    assertEq(x != z, !r);
     82    assertEq(z != x, !r);
     83  }
     84 }
     85 testLooseNotEqual();
     86 
     87 function testLessThan() {
     88  for (var i = 0; i < 100; ++i) {
     89    var j = i % xs.length;
     90    var x = xs[j];
     91    var y = ys[j];
     92    var z = zs[j];
     93 
     94    assertEq(x < y, +x < +y);
     95    assertEq(y < x, +y < +x);
     96 
     97    assertEq(x < z, +x < +z);
     98    assertEq(z < x, +z < +x);
     99  }
    100 }
    101 testLessThan();
    102 
    103 function testLessThanEqual() {
    104  for (var i = 0; i < 100; ++i) {
    105    var j = i % xs.length;
    106    var x = xs[j];
    107    var y = ys[j];
    108    var z = zs[j];
    109 
    110    assertEq(x <= y, +x <= +y);
    111    assertEq(y <= x, +y <= +x);
    112 
    113    assertEq(x <= z, +x <= +z);
    114    assertEq(z <= x, +z <= +x);
    115  }
    116 }
    117 testLessThanEqual();
    118 
    119 function testGreaterThan() {
    120  for (var i = 0; i < 100; ++i) {
    121    var j = i % xs.length;
    122    var x = xs[j];
    123    var y = ys[j];
    124    var z = zs[j];
    125 
    126    assertEq(x > y, +x > +y);
    127    assertEq(y > x, +y > +x);
    128 
    129    assertEq(x > z, +x > +z);
    130    assertEq(z > x, +z > +x);
    131  }
    132 }
    133 testGreaterThan();
    134 
    135 function testGreaterThanEqual() {
    136  for (var i = 0; i < 100; ++i) {
    137    var j = i % xs.length;
    138    var x = xs[j];
    139    var y = ys[j];
    140    var z = zs[j];
    141 
    142    assertEq(x >= y, +x >= +y);
    143    assertEq(y >= x, +y >= +x);
    144 
    145    assertEq(x >= z, +x >= +z);
    146    assertEq(z >= x, +z >= +x);
    147  }
    148 }
    149 testGreaterThanEqual();