summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/cacheir/call-any-native.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/cacheir/call-any-native.js')
-rw-r--r--js/src/jit-test/tests/cacheir/call-any-native.js59
1 files changed, 59 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/cacheir/call-any-native.js b/js/src/jit-test/tests/cacheir/call-any-native.js
new file mode 100644
index 0000000000..7af6d2102c
--- /dev/null
+++ b/js/src/jit-test/tests/cacheir/call-any-native.js
@@ -0,0 +1,59 @@
+// Test non-constructor calls
+
+var funcs = [Math.max, Math.min, Math.floor, Math.ceil, Math.sin,
+ Math.cos, Math.tan, Math.log, Math.acos, Math.asin];
+
+// Calculate expected values
+var expected = [Math.max(0.5, 2), Math.min(0.5, 2),
+ Math.floor(0.5, 2), Math.ceil(0.5, 2),
+ Math.sin(0.5, 2), Math.cos(0.5, 2),
+ Math.tan(0.5, 2), Math.log(0.5, 2),
+ Math.acos(0.5, 2), Math.asin(0.5, 2)];
+
+// Test a polymorphic call site
+for (var n = 0; n < 50; n++) {
+ for (var i = 0; i < funcs.length; i++) {
+ assertEq(funcs[i](0.5, 2), expected[i]);
+ }
+}
+
+// Test a polymorphic spread call site
+var spreadinput = [0.5, 2];
+for (var n = 0; n < 50; n++) {
+ for (var i = 0; i < funcs.length; i++) {
+ assertEq(funcs[i](...spreadinput), expected[i]);
+ }
+}
+
+// Test constructors
+
+function f1(x) {this[0] = x; this.length = 3;}
+function f2(x) {this[0] = x; this.length = 3;}
+function f3(x) {this[0] = x; this.length = 3;}
+function f4(x) {this[0] = x; this.length = 3;}
+function f5(x) {this[0] = x; this.length = 3;}
+function f6(x) {this[0] = x; this.length = 3;}
+function f7(x) {this[0] = x; this.length = 3;}
+function f8(x) {this[0] = x; this.length = 3;}
+function f9(x) {this[0] = x; this.length = 3;}
+
+var constructors = [f1,f2,f3,f4,f5,f6,f7,f8,f9,Array];
+
+// Test a polymorphic constructor site
+for (var n = 0; n < 50; n++) {
+ for (var i = 0; i < constructors.length; i++) {
+ let x = new constructors[i](1,2,3);
+ assertEq(x.length, 3);
+ assertEq(x[0], 1);
+ }
+}
+
+var constructorinput = [1,2,3];
+// Test a polymorphic spread constructor site
+for (var n = 0; n < 50; n++) {
+ for (var i = 0; i < constructors.length; i++) {
+ let x = new constructors[i](...constructorinput);
+ assertEq(x.length, 3);
+ assertEq(x[0], 1);
+ }
+}