[JSC] Do not use asArrayModes() with Structures because it discards TypedArray inform...
[WebKit-https.git] / JSTests / stress / any-int-as-double-add.js
1 function shouldBe(actual, expected)
2 {
3     if (actual !== expected)
4         throw new Error('bad value: ' + actual);
5 }
6
7 var array = [];
8
9 for (var i = 0; i < 100; ++i)
10     array.push(1024 * 1024 * 1024 * 1024 + i);
11 for (var i = 0; i < 100; ++i)
12     array.push(-(1024 * 1024 * 1024 * 1024 + i));
13
14 array.push(2251799813685248);
15 array.push(0.5);
16
17 function test(array, index, value)
18 {
19     return array[index] + fiatInt52(value);
20 }
21 noInline(test);
22
23 for (var i = 0; i < 1e4; ++i) {
24     for (var index = 0; index < 100; ++index)
25         shouldBe(test(array, index, 20), 1024 * 1024 * 1024 * 1024 + index + 20);
26     for (var index = 0; index < 100; ++index)
27         shouldBe(test(array, index + 100, 20), -(1024 * 1024 * 1024 * 1024 + index) + 20);
28 }
29
30 // Int52Overflow.
31 shouldBe(test(array, 200, 200), 2251799813685448);
32
33 // Not AnyIntAsDouble, Int52Overflow.
34 shouldBe(test(array, 201, 200), 200.5);
35
36 // Recompile the code as ArithAdd(Double, Double).
37 for (var i = 0; i < 1e4; ++i)
38     shouldBe(test(array, 201, 200), 200.5);
39
40 shouldBe(test(array, 200, 200), 2251799813685448);
41 shouldBe(test(array, 201, 200), 200.5);
42
43