bigint-compare-string.js (3435B)
1 // Test various combinations of (BigInt R String) and ensures the result is consistent with 2 // (String R⁻¹ BigInt). This test doesn't aim to cover the overall correctness of (BigInt R String), 3 // but merely ensures the possible combinations are properly handled in CacheIR. 4 5 var xs = [ 6 // One before the minimum 7 -(2n ** 2000n) - 1n, 8 9 // Definitely heap digits. 10 -(2n ** 2000n), 11 -(2n ** 1000n), 12 13 // -(2n**64n) 14 -18446744073709551617n, 15 -18446744073709551616n, 16 -18446744073709551615n, 17 18 // -(2n**63n) 19 -9223372036854775809n, 20 -9223372036854775808n, 21 -9223372036854775807n, 22 23 // -(2**32) 24 -4294967297n, 25 -4294967296n, 26 -4294967295n, 27 28 // -(2**31) 29 -2147483649n, 30 -2147483648n, 31 -2147483647n, 32 33 -1n, 34 0n, 35 1n, 36 37 // 2**31 38 2147483647n, 39 2147483648n, 40 2147483649n, 41 42 // 2**32 43 4294967295n, 44 4294967296n, 45 4294967297n, 46 47 // 2n**63n 48 9223372036854775807n, 49 9223372036854775808n, 50 9223372036854775809n, 51 52 // 2n**64n 53 18446744073709551615n, 54 18446744073709551616n, 55 18446744073709551617n, 56 57 // Definitely heap digits. 58 2n ** 1000n, 59 2n ** 2000n, 60 61 // One past the maximum 62 (2n ** 2000n) + 1n, 63 ]; 64 65 function idx(i) { 66 return (i % (xs.length - 2)) + 1; 67 } 68 69 var ys = xs.map(x => String(x)); 70 71 function testLooseEqual() { 72 for (var i = 0; i < 100; ++i) { 73 var j = idx(i); 74 var x = xs[j]; 75 var y = ys[j]; 76 var u = ys[j - 1]; 77 var v = ys[j + 1]; 78 79 assertEq(x == y, true); 80 assertEq(y == x, true); 81 82 assertEq(x == u, false); 83 assertEq(u == x, false); 84 85 assertEq(x == v, false); 86 assertEq(v == x, false); 87 } 88 } 89 testLooseEqual(); 90 91 function testLooseNotEqual() { 92 for (var i = 0; i < 100; ++i) { 93 var j = idx(i); 94 var x = xs[j]; 95 var y = ys[j]; 96 var u = ys[j - 1]; 97 var v = ys[j + 1]; 98 99 assertEq(x != y, false); 100 assertEq(y != x, false); 101 102 assertEq(x != u, true); 103 assertEq(u != x, true); 104 105 assertEq(x != v, true); 106 assertEq(v != x, true); 107 } 108 } 109 testLooseNotEqual(); 110 111 function testLessThan() { 112 for (var i = 0; i < 100; ++i) { 113 var j = idx(i); 114 var x = xs[j]; 115 var y = ys[j]; 116 var u = ys[j - 1]; 117 var v = ys[j + 1]; 118 119 assertEq(x < y, false); 120 assertEq(y < x, false); 121 122 assertEq(x < u, false); 123 assertEq(u < x, true); 124 125 assertEq(x < v, true); 126 assertEq(v < x, false); 127 } 128 } 129 testLessThan(); 130 131 function testLessThanEquals() { 132 for (var i = 0; i < 100; ++i) { 133 var j = idx(i); 134 var x = xs[j]; 135 var y = ys[j]; 136 var u = ys[j - 1]; 137 var v = ys[j + 1]; 138 139 assertEq(x <= y, true); 140 assertEq(y <= x, true); 141 142 assertEq(x <= u, false); 143 assertEq(u <= x, true); 144 145 assertEq(x <= v, true); 146 assertEq(v <= x, false); 147 } 148 } 149 testLessThanEquals(); 150 151 function testGreaterThan() { 152 for (var i = 0; i < 100; ++i) { 153 var j = idx(i); 154 var x = xs[j]; 155 var y = ys[j]; 156 var u = ys[j - 1]; 157 var v = ys[j + 1]; 158 159 assertEq(x > y, false); 160 assertEq(y > x, false); 161 162 assertEq(x > u, true); 163 assertEq(u > x, false); 164 165 assertEq(x > v, false); 166 assertEq(v > x, true); 167 } 168 } 169 testGreaterThan(); 170 171 function testGreaterThanEquals() { 172 for (var i = 0; i < 100; ++i) { 173 var j = idx(i); 174 var x = xs[j]; 175 var y = ys[j]; 176 var u = ys[j - 1]; 177 var v = ys[j + 1]; 178 179 assertEq(x >= y, true); 180 assertEq(y >= x, true); 181 182 assertEq(x >= u, true); 183 assertEq(u >= x, false); 184 185 assertEq(x >= v, false); 186 assertEq(v >= x, true); 187 } 188 } 189 testGreaterThanEquals();