summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/warp/polymorphic-to-bool.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/warp/polymorphic-to-bool.js')
-rw-r--r--js/src/jit-test/tests/warp/polymorphic-to-bool.js39
1 files changed, 39 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/warp/polymorphic-to-bool.js b/js/src/jit-test/tests/warp/polymorphic-to-bool.js
new file mode 100644
index 0000000000..adbfe2d791
--- /dev/null
+++ b/js/src/jit-test/tests/warp/polymorphic-to-bool.js
@@ -0,0 +1,39 @@
+// |jit-test| --fast-warmup; --no-threads
+
+function runTest(src, seen, last) {
+ with ({}) {}
+
+ // Make a fresh script.
+ var foo = eval(src);
+
+ // Compile it with polymorphic types.
+ for (var j = 0; j < 100; j++) {
+ foo(seen[j % seen.length]);
+ }
+
+ // Now test the type sorted last.
+ assertEq(foo(last), false);
+}
+
+function runTests(src) {
+ // Each of these |seen| sets will cause the |last| type to be
+ // the last type tested in testValueTruthyKernel.
+ runTest(src, [1n, Symbol("a"), 1.5, "", {} ], 1);
+ runTest(src, [1n, Symbol("a"), 1.5, "", true ], {});
+ runTest(src, [1n, Symbol("a"), 1.5, true, {} ], "a");
+ runTest(src, [1n, Symbol("a"), true, "", {} ], 1.5);
+ runTest(src, [1n, true, 1.5, "", {} ], Symbol("a"));
+ runTest(src, [true, Symbol("a"), 1.5, "", {} ], 1n);
+}
+
+// JumpIfFalse
+runTests("(x) => { if (x) { return false; }}");
+
+// And
+runTests("(x) => x && false");
+
+// Or
+runTests("(x) => !(x || true)");
+
+// Not
+runTests("(x) => !x");