summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/warp/min-max-foldsTo-1.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /js/src/jit-test/tests/warp/min-max-foldsTo-1.js
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/jit-test/tests/warp/min-max-foldsTo-1.js')
-rw-r--r--js/src/jit-test/tests/warp/min-max-foldsTo-1.js47
1 files changed, 47 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/warp/min-max-foldsTo-1.js b/js/src/jit-test/tests/warp/min-max-foldsTo-1.js
new file mode 100644
index 0000000000..accc6ea416
--- /dev/null
+++ b/js/src/jit-test/tests/warp/min-max-foldsTo-1.js
@@ -0,0 +1,47 @@
+with ({}); // Don't inline anything into the top-level script.
+
+function args() { return arguments; }
+
+for (let xs of [
+ // Array
+ [[], [1, 2, 3]],
+
+ // String
+ ["", "asdf"],
+
+ // ArrayBufferView
+ [new Int32Array(0), new Int32Array(10)],
+
+ // Arguments
+ [args(), args(1, 2, 3)],
+]) {
+ for (let cst of [0, -1]) {
+ // Fold `Math.min(length ≥ 0, constant ≤ 0)` to `constant`.
+ let min = Function("x", `return Math.min(x.length, ${cst})`);
+ for (let i = 0; i < 100; ++i) {
+ let x = xs[i & 1];
+ assertEq(min(x), cst);
+ }
+
+ // Reverse operands.
+ min = Function("x", `return Math.min(${cst}, x.length)`);
+ for (let i = 0; i < 100; ++i) {
+ let x = xs[i & 1];
+ assertEq(min(x), cst);
+ }
+
+ // Fold `Math.max(length ≥ 0, constant ≤ 0)` to `length`.
+ let max = Function("x", `return Math.max(x.length, ${cst})`);
+ for (let i = 0; i < 100; ++i) {
+ let x = xs[i & 1];
+ assertEq(max(x), x.length);
+ }
+
+ // Reverse operands.
+ max = Function("x", `return Math.max(${cst}, x.length)`);
+ for (let i = 0; i < 100; ++i) {
+ let x = xs[i & 1];
+ assertEq(max(x), x.length);
+ }
+ }
+}