summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/cacheir/compare.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/cacheir/compare.js')
-rw-r--r--js/src/jit-test/tests/cacheir/compare.js292
1 files changed, 292 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/cacheir/compare.js b/js/src/jit-test/tests/cacheir/compare.js
new file mode 100644
index 0000000000..3656a7d0ee
--- /dev/null
+++ b/js/src/jit-test/tests/cacheir/compare.js
@@ -0,0 +1,292 @@
+setJitCompilerOption('ion.forceinlineCaches', 1);
+
+function warmup(fun, input_array) {
+ for (var index = 0; index < input_array.length; index++) {
+ input = input_array[index];
+ input_lhs = input[0];
+ input_rhs = input[1];
+ output = input[2];
+ for (var i = 0; i < 30; i++) {
+ var str = "";
+ var y = fun(input_lhs, input_rhs);
+ if (y != output) {
+ str = "Computed: "+y+ ", expected: "+ output + " ( " + fun + " lhs: "+ input_lhs + " rhs: " + input_rhs +")";
+ }
+ assertEq(str, "");
+ }
+ }
+}
+
+
+// Int32 + Int32
+var Int32Int32Fun_GT1 = (a, b) => { return a > b; }
+warmup(Int32Int32Fun_GT1, [[1,2, false], [1,1, false], [3,4, false], [4294967295, 2, true],
+ [NaN, 2, false], [-1000, NaN, false], [NaN, NaN, false], [10, undefined, false]]);
+
+var Int32Int32Fun_GTE1 = (a, b) => { return a >= b; }
+warmup(Int32Int32Fun_GTE1, [[1,2, false], [1,1, true], [3,4, false], [4294967295, 2, true],
+ [NaN, 2, false], [-1000, NaN, false], [NaN, NaN, false], [10, undefined, false]]);
+
+var Int32Int32Fun_LT1 = (a, b) => { return a < b; }
+warmup(Int32Int32Fun_LT1, [[1,2, true], [1,1, false], [3,4, true], [4294967295, 2, false],
+ [NaN, 2, false],[-1000, NaN, false], [NaN, NaN, false], [10, undefined, false]]);
+
+var Int32Int32Fun_LTE1 = (a, b) => { return a <= b; }
+warmup(Int32Int32Fun_LTE1, [[1,2, true], [1,1, true], [3,4, true], [4294967295, 2, false],
+ [NaN, 2, false], [-1000, NaN, false], [NaN, NaN, false], [10, undefined, false]]);
+
+var Int32Int32Fun_EQ1 = (a, b) => { return a == b; }
+warmup(Int32Int32Fun_EQ1, [[1,2, false], [1,1, true], [3,4, false], [4294967295, 2, false],
+ [NaN, 2, false], [-1000, NaN, false], [undefined, null, true],
+ ['0', 0, true], [new String('0'), 0, true], [10, undefined, false]]);
+
+var Int32Int32Fun_EQ2 = (a, b) => { return a == b; }
+warmup(Int32Int32Fun_EQ2, [[1, NaN, false], [1, undefined, false], [1, null, false]]);
+
+var Int32Int32Fun_EQ3 = (a, b) => { return a == b; }
+warmup(Int32Int32Fun_EQ3, [[{a: 1}, NaN, false], [{a: 1}, undefined, false], [{a: 1}, null, false]]);
+
+var Int32Int32Fun_EQ4 = (a, b) => { return a == b; }
+warmup(Int32Int32Fun_EQ4, [[undefined, undefined, true], [null, null, true], [null, undefined, true], [undefined, null, true]]);
+
+
+var Int32Int32Fun_NEQ1 = (a, b) => { return a != b; }
+warmup(Int32Int32Fun_NEQ1, [[1,2, true], [1,1, false], [3,4, true], [4294967295, 2, true],
+ [NaN, 2, true], [-1000, NaN, true], [undefined, null, false],
+ ['0', 0, false], [new String('0'), 0, false], [10, undefined, true]]);
+
+var Int32Int32Fun_NEQ2 = (a, b) => { return a != b; }
+warmup(Int32Int32Fun_NEQ2, [[1, NaN, true], [1, undefined, true], [1, null, true]]);
+
+var Int32Int32Fun_NEQ3 = (a, b) => { return a != b; }
+warmup(Int32Int32Fun_NEQ3, [[{a: 1}, NaN, true], [{a: 1}, undefined, true], [{a: 1}, null, true]]);
+
+var Int32Int32Fun_NEQ4 = (a, b) => { return a != b; }
+warmup(Int32Int32Fun_NEQ4, [[undefined, undefined, false], [null, null, false], [null, undefined, false], [undefined, null, false]]);
+
+var Int32Int32Fun_SEQ1 = (a, b) => { return a === b; }
+warmup(Int32Int32Fun_SEQ1, [[1,2, false], [1,1, true], [3,4, false], [4294967295, 2, false],
+ [NaN, 2, false], [-1000, NaN, false], [undefined, null, false],
+ ['0', 0, false], [new String('0'), 0, false], [10, undefined, false]]);
+
+var Int32Int32Fun_SEQ2 = (a, b) => { return a === b; }
+warmup(Int32Int32Fun_SEQ2, [[1, NaN, false], [1, undefined, false], [1, null, false]]);
+
+var Int32Int32Fun_SEQ3 = (a, b) => { return a === b; }
+warmup(Int32Int32Fun_SEQ3, [[{a: 1}, NaN, false], [{a: 1}, undefined, false], [{a: 1}, null, false]]);
+
+var Int32Int32Fun_SEQ4 = (a, b) => { return a === b; }
+warmup(Int32Int32Fun_SEQ4, [[undefined, undefined, true], [null, null, true], [null, undefined, false], [undefined, null, false] ]);
+
+var Int32Int32Fun_SEQ5 = (a, b) => { return a === b; }
+warmup(Int32Int32Fun_SEQ5, [[1, true, false], [1, false, false], [false, 1, false], [true, 0, false], [true, true, true]]);
+
+var Int32Int32Fun_SNEQ1 = (a, b) => { return a !== b; }
+warmup(Int32Int32Fun_SNEQ1, [[1,2, true], [1,1, false], [3,4, true], [4294967295, 2, true],
+ [NaN, 2, true], [-1000, NaN, true], [undefined, null, true],
+ ['0', 0, true], [new String('0'), 0, true], [10, undefined, true]]);
+
+var Int32Int32Fun_SNEQ2 = (a, b) => { return a !== b; }
+warmup(Int32Int32Fun_SNEQ2, [[1, NaN, true], [1, undefined, true], [1, null, true]]);
+
+var Int32Int32Fun_SNEQ3 = (a, b) => { return a !== b; }
+warmup(Int32Int32Fun_SNEQ3, [[{a: 1}, NaN, true], [{a: 1}, undefined, true], [{a: 1}, null, true]]);
+
+var Int32Int32Fun_SNEQ4 = (a, b) => { return a !== b; }
+warmup(Int32Int32Fun_SNEQ4, [[undefined, undefined, false], [null, null, false], [null, undefined, true], [undefined, null, true] ]);
+
+var Int32Int32Fun_SNEQ5 = (a, b) => { return a !== b; }
+warmup(Int32Int32Fun_SNEQ5, [[1, true, true], [1, false, true], [false, 1, true], [true, 0, true]]);
+
+
+// Number Number
+var NumberNumberFun_GT1 = (a, b) => { return a > b; }
+warmup(NumberNumberFun_GT1, [[1,2, false], [1.3, 2, false], [1, 2.6, false], [1.2,2.2, false],
+ [1,1, false], [3,4, false], [4294967295, 2, true],
+ [NaN, 2, false], [-1000, NaN, false], [NaN, NaN, false], [10.2, undefined, false]]);
+
+var NumberNumberFun_GTE1 = (a, b) => { return a >= b; }
+warmup(NumberNumberFun_GTE1, [[1,2, false], [1.3, 2, false], [1, 2.6, false], [1.2,2.2, false],
+ [1,1, true], [3,4, false], [4294967295, 2, true],
+ [NaN, 2, false], [-1000, NaN, false], [NaN, NaN, false], [10.2, undefined, false]]);
+
+var NumberNumberFun_LT1 = (a, b) => { return a < b; }
+warmup(NumberNumberFun_LT1, [[1,2, true], [1.3, 2, true], [1, 2.6, true], [1.2,2.2, true],
+ [1,1, false], [3,4, true], [4294967295, 2, false],
+ [NaN, 2, false],[-1000, NaN, false], [NaN, NaN, false, [10.2, undefined, false]]]);
+
+var NumberNumberFun_LTE1 = (a, b) => { return a <= b; }
+warmup(NumberNumberFun_LTE1, [[1,2, true], [1.3, 2, true], [1, 2.6, true], [1.2,2.2, true],
+ [1,1, true], [3,4, true], [4294967295, 2, false],
+ [NaN, 2, false], [-1000, NaN, false], [NaN, NaN, false], [10.2, undefined, false]]);
+
+var NumberNumberFun_EQ1 = (a, b) => { return a == b; }
+warmup(NumberNumberFun_EQ1, [[1,2, false], [1.3, 2, false], [1, 2.6, false], [1.2,2.2, false],
+ [1,1, true], [3,4, false], [4294967295, 2, false],
+ [NaN, 2, false], [-1000, NaN, false], [undefined, null, true],
+ ['0', 0, true], [new String('0'), 0, true], [10.2, undefined, false]]);
+
+var NumberNumberFun_NEQ1 = (a, b) => { return a != b; }
+warmup(NumberNumberFun_NEQ1, [[1,2, true], [1.3, 2, true], [1, 2.6, true], [1.2,2.2, true],
+ [1,1, false], [3,4, true], [4294967295, 2, true],
+ [NaN, 2, true], [-1000, NaN, true], [undefined, null, false],
+ ['0', 0, false], [new String('0'), 0, false], [10.2, undefined, true]]);
+
+var NumberNumberFun_SEQ1 = (a, b) => { return a === b; }
+warmup(NumberNumberFun_SEQ1, [[1,2, false], [1.3, 2, false], [1, 2.6, false], [1.2,2.2, false],
+ [1,1, true], [3,4, false], [4294967295, 2, false],
+ [NaN, 2, false], [-1000, NaN, false], [undefined, null, false],
+ ['0', 0, false], [new String('0'), 0, false], [10.2, undefined, false]]);
+
+var NumberNumberFun_SNEQ1 = (a, b) => { return a !== b; }
+warmup(NumberNumberFun_SNEQ1, [[1,2, true], [1.3, 2, true], [1, 2.6, true], [1.2,2.2, true],
+ [1,1, false], [3,4, true], [4294967295, 2, true],
+ [NaN, 2, true], [-1000, NaN, true], [undefined, null, true],
+ ['0', 0, true], [new String('0'), 0, true], [10.2, undefined, true]]);
+
+// Boolean + Int32
+var BooleanFun_GT1 = (a, b) => { return a > b; }
+warmup(BooleanFun_GT1, [[1,2, false], [true, 2, false], [1,1, false], [true,true, false], [3,4, false], ]);
+
+var BooleanFun_GTE1 = (a, b) => { return a >= b; }
+warmup(BooleanFun_GTE1, [[1,2, false], [true, 2, false], [1,1, true], [true,true, true], [3,4, false]]);
+
+var BooleanFun_LT1 = (a, b) => { return a < b; }
+warmup(BooleanFun_LT1, [[1,2, true], [true, 2, true], [1,1, false], [true,true, false], [3,4, true]]);
+
+var BooleanFun_LTE1 = (a, b) => { return a <= b; }
+warmup(BooleanFun_LTE1, [[1,2, true], [true, 2, true], [1,1, true], [true,true, true], [3,4, true]]);
+
+var BooleanFun_EQ1 = (a, b) => { return a == b; }
+warmup(BooleanFun_EQ1, [[1,2, false], [true, 2, false], [1,1, true], [true,true, true], [3,4, false],
+ ['0', 0, true], [new String('0'), 0, true], [10, undefined, false]]);
+
+var BooleanFun_NEQ1 = (a, b) => { return a != b; }
+warmup(BooleanFun_NEQ1, [[1,2, true], [true, 2, true], [1,1, false], [true,true, false], [3,4, true],
+ ['0', 0, false], [new String('0'), 0, false], [10, undefined, true]]);
+
+var BooleanFun_SEQ1 = (a, b) => { return a === b; }
+warmup(BooleanFun_SEQ1, [[1,2, false], [true, 2, false], [1,1, true], [true,true, true], [3,4, false]]);
+
+var BooleanFun_SNEQ1 = (a, b) => { return a !== b; }
+warmup(BooleanFun_SNEQ1, [[1,2, true], [true, 2, true], [1,1, false], [true,true, false], [3,4, true]]);
+
+// Undefined / Null equality.
+var UndefNull_EQ1 = (a, b) => { return a == b; }
+warmup(UndefNull_EQ1, [[undefined, null, true], [undefined, undefined, true], [null, undefined, true],
+ [null, null, true], [{a: 10}, undefined, false], [{a: 10}, null, false]]);
+
+var UndefNull_NEQ1 = (a, b) => { return a != b; }
+warmup(UndefNull_NEQ1, [[undefined, null, false], [undefined, undefined, false], [null, undefined, false],
+ [null, null, false], [{a: 10}, undefined, true], [{a: 10}, null, true]]);
+
+var UndefNull_SEQ1 = (a, b) => { return a === b; }
+warmup(UndefNull_SEQ1, [[undefined, null, false], [undefined, undefined, true], [null, undefined, false],
+ [null, null, true], [{a: 10}, undefined, false], [{a: 10}, null, false]]);
+
+var UndefNull_SNEQ1 = (a, b) => { return a !== b; }
+warmup(UndefNull_SNEQ1, [[undefined, null, true], [undefined, undefined, false], [null, undefined, true],
+ [null, null, false], [{a: 10}, undefined, true], [{a: 10}, null, true]]);
+
+var typeDifference = function(a,b) { return a === b; }
+warmup(typeDifference, [[1,1, true], [3,3, true], [3, typeDifference, false],[typeDifference, {}, false],
+ [3.2, 1, false], [0, -0, true]]);
+
+// String + Number
+var String_Number_GT1 = (a, b) => { return a > b; }
+warmup(String_Number_GT1, [["1.4",2, false], [1,"1", false], ["3",4, false],
+ [-1024, "-1023", false], [1.3, "1.2", true]]);
+
+var String_Number_GTE1 = (a, b) => { return a >= b; }
+warmup(String_Number_GTE1, [["1.4",2, false], [1,"1", true], [3,"4", false],
+ [-1024, "-1023", false], [1.2, "1.2", true]]);
+
+var String_Number_LT1 = (a, b) => { return a < b; }
+warmup(String_Number_LT1, [["1.4",2, true], ["1",1, false], [3,"4", true],
+ [-1024, "-1023", true], [1.2, "1.2", false]]);
+
+var String_Number_LTE1 = (a, b) => { return a <= b; }
+warmup(String_Number_LTE1, [["1.4",2, true], ["1",1, true], [3,"4", true],
+ [-1024, "-1023", true], [1.2, "1.2", true]]);
+
+var String_Number_EQ1 = (a, b) => { return a == b; }
+warmup(String_Number_EQ1, [["1.4",2, false], ["1",1, true], [3,"4", false],
+ [-1024, "-1023", false], [1.2, "1.2", true]]);
+
+var String_Number_NEQ1 = (a, b) => { return a != b; }
+warmup(String_Number_NEQ1, [["1.4",2, true], ["1",1, false], [3,"4", true],
+ [-1024, "-1023", true], [1.2, "1.2", false]]);
+
+var String_Number_SEQ1 = (a, b) => { return a === b; }
+warmup(String_Number_SEQ1, [["1.4",2, false], ["1",1, false], [3,"4", false],
+ [-1024, "-1023", false], [1.2, "1.2", false]]);
+
+var String_Number_SNEQ1 = (a, b) => { return a !== b; }
+warmup(String_Number_SNEQ1, [["1.4",2, true], ["1",1, true], [3,"4", true],
+ [-1024, "-1023", true], [1.2, "1.2", true]]);
+
+// String + String
+var String_String_GT1 = (a, b) => a > b;
+warmup(String_String_GT1, [["", "", false], ["a", "a", false], ["aa", "aa", false],
+ ["a", "", true], ["", "a", false],
+ ["a", "b", false], ["b", "a", true],
+ ["a", "ab", false], ["ab", "a", true],
+ ]);
+
+var String_String_GE1 = (a, b) => a >= b;
+warmup(String_String_GE1, [["", "", true], ["a", "a", true], ["aa", "aa", true],
+ ["a", "", true], ["", "a", false],
+ ["a", "b", false], ["b", "a", true],
+ ["a", "ab", false], ["ab", "a", true],
+ ]);
+
+var String_String_LT1 = (a, b) => a < b;
+warmup(String_String_LT1, [["", "", false], ["a", "a", false], ["aa", "aa", false],
+ ["a", "", false], ["", "a", true],
+ ["a", "b", true], ["b", "a", false],
+ ["a", "ab", true], ["ab", "a", false],
+ ]);
+
+var String_String_LE1 = (a, b) => a <= b;
+warmup(String_String_LE1, [["", "", true], ["a", "a", true], ["aa", "aa", true],
+ ["a", "", false], ["", "a", true],
+ ["a", "b", true], ["b", "a", false],
+ ["a", "ab", true], ["ab", "a", false],
+ ]);
+
+var String_String_EQ1 = (a, b) => a == b;
+warmup(String_String_EQ1, [["", "", true], ["a", "a", true], ["aa", "aa", true],
+ ["a", "", false], ["", "a", false],
+ ["a", "b", false], ["b", "a", false],
+ ["a", "ab", false], ["ab", "a", false],
+ ]);
+
+var String_String_SEQ1 = (a, b) => a === b;
+warmup(String_String_SEQ1, [["", "", true], ["a", "a", true], ["aa", "aa", true],
+ ["a", "", false], ["", "a", false],
+ ["a", "b", false], ["b", "a", false],
+ ["a", "ab", false], ["ab", "a", false],
+ ]);
+
+var String_String_NE1 = (a, b) => a != b;
+warmup(String_String_NE1, [["", "", false], ["a", "a", false], ["aa", "aa", false],
+ ["a", "", true], ["", "a", true],
+ ["a", "b", true], ["b", "a", true],
+ ["a", "ab", true], ["ab", "a", true],
+ ]);
+
+var String_String_SNE1 = (a, b) => a !== b;
+warmup(String_String_SNE1, [["", "", false], ["a", "a", false], ["aa", "aa", false],
+ ["a", "", true], ["", "a", true],
+ ["a", "b", true], ["b", "a", true],
+ ["a", "ab", true], ["ab", "a", true],
+ ]);
+
+// IsHTMLDDA internal slot
+// https://tc39.github.io/ecma262/#sec-IsHTMLDDA-internal-slot
+var IsHTMLDDA_EQ1 = (a, b) => a == b;
+warmup(IsHTMLDDA_EQ1, [[createIsHTMLDDA(), null, true],
+ [createIsHTMLDDA(), undefined, true],
+ [null, createIsHTMLDDA(), true],
+ [undefined, createIsHTMLDDA(), true],
+ ]);