[ARM,MIPS] Skip slow tests
[WebKit-https.git] / JSTests / stress / arith-sub-on-double-array-with-holes.js
1 let testCases = [
2     // Numbers
3     ['1', 0, 0],
4     ['1.5', 1 - 1.5, 1.5 - 1],
5     [NaN, NaN, NaN],
6
7     // Strings.
8     ['""', 1, -1],
9     ['new String()', 1, -1],
10     ['"WebKit!"', NaN, NaN],
11
12     // Objects.
13     ['{ }', NaN, NaN],
14     ['{ foo: 1 }', NaN, NaN],
15     ['{ toString: function() { return ""; } }', 1, -1],
16     ['{ toString: function() { return "WebKit"; } }', NaN, NaN],
17
18     // Others.
19     ['null', 1, -1],
20     ['undefined', NaN, NaN]
21 ];
22
23 for (let testCase of testCases) {
24     let otherOperand = testCase[0];
25     let expectedLeftValue = testCase[1];
26     let expectedRightValue = testCase[2];
27     eval(
28         `// Those holes are not observable by arithmetic operation.
29         // The return value is always going to be NaN.
30         function nonObservableHoleOnLhs(array, otherValue) {
31             return array[0] - otherValue;
32         }
33         noInline(nonObservableHoleOnLhs);
34
35         function observableHoleOnLhs(array, otherValue) {
36             let value = array[0];
37             return [value - otherValue, value];
38         }
39         noInline(observableHoleOnLhs);
40
41         function nonObservableHoleOnRhs(array, otherValue) {
42             return otherValue - array[0];
43         }
44         noInline(nonObservableHoleOnRhs);
45
46         function observableHoleOnRhs(array, otherValue) {
47             let value = array[0];
48             return [otherValue - value, value];
49         }
50         noInline(observableHoleOnRhs);
51
52         let testArray = new Array;
53         for (let i = 1; i < 3; ++i) {
54             testArray[i] = i + 0.5
55         }
56
57         for (let i = 0; i < 1e4; ++i) {
58             let lhsResult1 = nonObservableHoleOnLhs(testArray, ${otherOperand});
59             if (lhsResult1 == lhsResult1)
60                 throw "Error on nonObservableHoleOnLhs at i = " + i;
61             let lhsResult2 = observableHoleOnLhs(testArray, ${otherOperand});
62             if (lhsResult2[0] == lhsResult2[0] || lhsResult2[1] !== undefined)
63                 throw "Error on observableHoleOnLhs at i = " + i;
64
65             let rhsResult1 = nonObservableHoleOnRhs(testArray, ${otherOperand});
66             if (rhsResult1 == rhsResult1)
67                 throw "Error on nonObservableHoleOnRhs at i = " + i;
68             let rhsResult2 = observableHoleOnRhs(testArray, ${otherOperand});
69             if (rhsResult2[0] == rhsResult2[0] || rhsResult2[1] !== undefined)
70                 throw "Error on observableHoleOnRhs at i = " + i;
71         }
72
73         let isEqual = function(a, b) {
74             if (a === a) {
75                 return a === b;
76             }
77             return b !== b;
78         }
79
80         // Fill the hole, make sure everything still work correctly.
81         testArray[0] = 1.;
82         for (let i = 0; i < 1e4; ++i) {
83             let lhsResult1 = nonObservableHoleOnLhs(testArray, ${otherOperand});
84             if (!isEqual(lhsResult1, ${expectedLeftValue}))
85                 throw "Error on non hole nonObservableHoleOnLhs at i = " + i + " expected " + ${expectedLeftValue} + " got " + lhsResult1;
86             let lhsResult2 = observableHoleOnLhs(testArray, ${otherOperand});
87             if (!isEqual(lhsResult2[0], ${expectedLeftValue}) || lhsResult2[1] !== 1)
88                 throw "Error on non hole observableHoleOnLhs at i = " + i + " expected " + ${expectedLeftValue} + " got " + lhsResult2[0];
89
90             let rhsResult1 = nonObservableHoleOnRhs(testArray, ${otherOperand});
91             if (!isEqual(rhsResult1, ${expectedRightValue}))
92                 throw "Error on non hole nonObservableHoleOnRhs at i = " + i + " expected " + ${expectedRightValue} + " got " + rhsResult1;
93             let rhsResult2 = observableHoleOnRhs(testArray, ${otherOperand});
94             if (!isEqual(rhsResult2[0], ${expectedRightValue}) || rhsResult2[1] !== 1)
95                 throw "Error on non hole observableHoleOnRhs at i = " + i;
96         }`
97     );
98 }