summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/cacheir/bigint-compare-string.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/cacheir/bigint-compare-string.js')
-rw-r--r--js/src/jit-test/tests/cacheir/bigint-compare-string.js189
1 files changed, 189 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/cacheir/bigint-compare-string.js b/js/src/jit-test/tests/cacheir/bigint-compare-string.js
new file mode 100644
index 0000000000..c5937af6aa
--- /dev/null
+++ b/js/src/jit-test/tests/cacheir/bigint-compare-string.js
@@ -0,0 +1,189 @@
+// Test various combinations of (BigInt R String) and ensures the result is consistent with
+// (String R⁻¹ BigInt). This test doesn't aim to cover the overall correctness of (BigInt R String),
+// but merely ensures the possible combinations are properly handled in CacheIR.
+
+var xs = [
+ // One before the minimum
+ -(2n ** 2000n) - 1n,
+
+ // Definitely heap digits.
+ -(2n ** 2000n),
+ -(2n ** 1000n),
+
+ // -(2n**64n)
+ -18446744073709551617n,
+ -18446744073709551616n,
+ -18446744073709551615n,
+
+ // -(2n**63n)
+ -9223372036854775809n,
+ -9223372036854775808n,
+ -9223372036854775807n,
+
+ // -(2**32)
+ -4294967297n,
+ -4294967296n,
+ -4294967295n,
+
+ // -(2**31)
+ -2147483649n,
+ -2147483648n,
+ -2147483647n,
+
+ -1n,
+ 0n,
+ 1n,
+
+ // 2**31
+ 2147483647n,
+ 2147483648n,
+ 2147483649n,
+
+ // 2**32
+ 4294967295n,
+ 4294967296n,
+ 4294967297n,
+
+ // 2n**63n
+ 9223372036854775807n,
+ 9223372036854775808n,
+ 9223372036854775809n,
+
+ // 2n**64n
+ 18446744073709551615n,
+ 18446744073709551616n,
+ 18446744073709551617n,
+
+ // Definitely heap digits.
+ 2n ** 1000n,
+ 2n ** 2000n,
+
+ // One past the maximum
+ (2n ** 2000n) + 1n,
+];
+
+function idx(i) {
+ return (i % (xs.length - 2)) + 1;
+}
+
+var ys = xs.map(x => String(x));
+
+function testLooseEqual() {
+ for (var i = 0; i < 100; ++i) {
+ var j = idx(i);
+ var x = xs[j];
+ var y = ys[j];
+ var u = ys[j - 1];
+ var v = ys[j + 1];
+
+ assertEq(x == y, true);
+ assertEq(y == x, true);
+
+ assertEq(x == u, false);
+ assertEq(u == x, false);
+
+ assertEq(x == v, false);
+ assertEq(v == x, false);
+ }
+}
+testLooseEqual();
+
+function testLooseNotEqual() {
+ for (var i = 0; i < 100; ++i) {
+ var j = idx(i);
+ var x = xs[j];
+ var y = ys[j];
+ var u = ys[j - 1];
+ var v = ys[j + 1];
+
+ assertEq(x != y, false);
+ assertEq(y != x, false);
+
+ assertEq(x != u, true);
+ assertEq(u != x, true);
+
+ assertEq(x != v, true);
+ assertEq(v != x, true);
+ }
+}
+testLooseNotEqual();
+
+function testLessThan() {
+ for (var i = 0; i < 100; ++i) {
+ var j = idx(i);
+ var x = xs[j];
+ var y = ys[j];
+ var u = ys[j - 1];
+ var v = ys[j + 1];
+
+ assertEq(x < y, false);
+ assertEq(y < x, false);
+
+ assertEq(x < u, false);
+ assertEq(u < x, true);
+
+ assertEq(x < v, true);
+ assertEq(v < x, false);
+ }
+}
+testLessThan();
+
+function testLessThanEquals() {
+ for (var i = 0; i < 100; ++i) {
+ var j = idx(i);
+ var x = xs[j];
+ var y = ys[j];
+ var u = ys[j - 1];
+ var v = ys[j + 1];
+
+ assertEq(x <= y, true);
+ assertEq(y <= x, true);
+
+ assertEq(x <= u, false);
+ assertEq(u <= x, true);
+
+ assertEq(x <= v, true);
+ assertEq(v <= x, false);
+ }
+}
+testLessThanEquals();
+
+function testGreaterThan() {
+ for (var i = 0; i < 100; ++i) {
+ var j = idx(i);
+ var x = xs[j];
+ var y = ys[j];
+ var u = ys[j - 1];
+ var v = ys[j + 1];
+
+ assertEq(x > y, false);
+ assertEq(y > x, false);
+
+ assertEq(x > u, true);
+ assertEq(u > x, false);
+
+ assertEq(x > v, false);
+ assertEq(v > x, true);
+ }
+}
+testGreaterThan();
+
+function testGreaterThanEquals() {
+ for (var i = 0; i < 100; ++i) {
+ var j = idx(i);
+ var x = xs[j];
+ var y = ys[j];
+ var u = ys[j - 1];
+ var v = ys[j + 1];
+
+ assertEq(x >= y, true);
+ assertEq(y >= x, true);
+
+ assertEq(x >= u, true);
+ assertEq(u >= x, false);
+
+ assertEq(x >= v, false);
+ assertEq(v >= x, true);
+ }
+}
+testGreaterThanEquals();