summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/cacheir/compare-null-or-undef.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/cacheir/compare-null-or-undef.js')
-rw-r--r--js/src/jit-test/tests/cacheir/compare-null-or-undef.js93
1 files changed, 93 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/cacheir/compare-null-or-undef.js b/js/src/jit-test/tests/cacheir/compare-null-or-undef.js
new file mode 100644
index 0000000000..b39eefd957
--- /dev/null
+++ b/js/src/jit-test/tests/cacheir/compare-null-or-undef.js
@@ -0,0 +1,93 @@
+// Test relational comparison when one operand is null or undefined.
+
+function test(xs) {
+ for (let i = 0; i < 200; ++i) {
+ let x = xs[i % xs.length];
+
+ // The result is equal when compared to the result with explicit ToNumber conversions.
+
+ // Test when null-or-undefined is on the right-hand side.
+ assertEq(x < nullOrUndef, (+x) < (+nullOrUndef));
+ assertEq(x <= nullOrUndef, (+x) <= (+nullOrUndef));
+ assertEq(x >= nullOrUndef, (+x) >= (+nullOrUndef));
+ assertEq(x > nullOrUndef, (+x) > (+nullOrUndef));
+
+ // Test when null-or-undefined is on the left-hand side.
+ assertEq(nullOrUndef < x, (+nullOrUndef) < (+x));
+ assertEq(nullOrUndef <= x, (+nullOrUndef) <= (+x));
+ assertEq(nullOrUndef >= x, (+nullOrUndef) >= (+x));
+ assertEq(nullOrUndef > x, (+nullOrUndef) > (+x));
+ }
+}
+
+function runTest(inputs) {
+ let fNull = Function(`return ${test}`.replaceAll("nullOrUndef", "null"))();
+ fNull(inputs);
+
+ let fUndefined = Function(`return ${test}`.replaceAll("nullOrUndef", "undefined"))();
+ fUndefined(inputs);
+}
+
+// Null inputs.
+runTest([
+ null,
+]);
+
+// Undefined inputs.
+runTest([
+ undefined,
+]);
+
+// Null or undefined inputs.
+runTest([
+ null,
+ undefined,
+]);
+
+// Int32 inputs
+runTest([
+ -0x8000_0000,
+ -0x7fff_ffff,
+ -0x7fff_fffe,
+ -2,
+ -1,
+ 0,
+ 1,
+ 2,
+ 0x7fff_fffe,
+ 0x7fff_ffff,
+]);
+
+// Number inputs
+runTest([
+ Number.NEGATIVE_INFINITY,
+ -Number.MAX_VALUE,
+ Number.MIN_SAFE_INTEGER,
+ -1.5,
+ -0.5,
+ -Number.EPSILON,
+ -Number.MIN_VALUE,
+ -0,
+ 0,
+ Number.MIN_VALUE,
+ Number.EPSILON,
+ 0.5,
+ 1.5,
+ Number.MAX_SAFE_INTEGER,
+ Number.MAX_VALUE,
+ Number.POSITIVE_INFINITY,
+ NaN,
+]);
+
+// Boolean inputs.
+runTest([
+ true, false,
+]);
+
+// String inputs
+runTest([
+ "",
+ "0", "-0", "0.0", "0e100",
+ "1", "1.5", "-1234", "-1e0",
+ "Infinity", "NaN", "not-a-number",
+]);