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