|
1 function testInt32() { |
|
2 function f(arr, i) { |
|
3 arr[0] = 1; |
|
4 arr[1] = arr[0] + 1; |
|
5 arr[2] = arr[1] + arr[0]; |
|
6 var x = arr[2]; // 3 |
|
7 arr[x] = arr[x-1] + 1; |
|
8 arr[x+1] = arr[x] + i; |
|
9 return arr[4]; |
|
10 } |
|
11 var a = [1, 2, 3, 4, 5, 6, 7, 8]; |
|
12 for (var i=0; i<70; i++) { |
|
13 assertEq(f(a, i), i + 4); |
|
14 } |
|
15 } |
|
16 testInt32(); |
|
17 |
|
18 function testDouble() { |
|
19 function f(arr, d) { |
|
20 arr[0] = d; |
|
21 for (var i=1; i<8; i++) { |
|
22 arr[i] = arr[i-1] + d; |
|
23 } |
|
24 return arr[7]; |
|
25 } |
|
26 var a = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]; |
|
27 for (var i=0; i<50; i++) { |
|
28 assertEq(f(a, Math.PI + i)|0, ((Math.PI + i) * 8)|0); |
|
29 } |
|
30 } |
|
31 testDouble(); |
|
32 |
|
33 function testOutOfBounds() { |
|
34 function f(arr, i, v) { |
|
35 arr[i] = v; |
|
36 } |
|
37 var a = [1, 2]; |
|
38 for (var i=0; i<90; i++) { |
|
39 f(a, 1, i); |
|
40 } |
|
41 assertEq(a[1], 89); |
|
42 |
|
43 f(a, 2, 40); |
|
44 f(a, 100, 50); |
|
45 f(a, -1, 3); |
|
46 |
|
47 assertEq(a[2], 40); |
|
48 assertEq(a[100], 50); |
|
49 assertEq(a[-1], 3); |
|
50 } |
|
51 testOutOfBounds(); |
|
52 |
|
53 function testClassGuard() { |
|
54 function f(arr, v) { |
|
55 arr[1] = v; |
|
56 } |
|
57 var a = [1, 2, 3, 4]; |
|
58 for (var i=0; i<90; i++) { |
|
59 f(a, i); |
|
60 } |
|
61 assertEq(a[1], 89); |
|
62 |
|
63 var b = {}; |
|
64 f(b, 100); |
|
65 assertEq(b[1], 100); |
|
66 } |
|
67 testClassGuard(); |
|
68 |
|
69 function testMultipleTypes() { |
|
70 function f(arr, v) { |
|
71 arr[1] = v; |
|
72 } |
|
73 var a = [1, 2, 3, 4]; |
|
74 var b = [1.1, -233.2, 3.3]; |
|
75 |
|
76 for (var i=0; i<90; i++) { |
|
77 f(a, i); |
|
78 } |
|
79 assertEq(a[1], 89); |
|
80 f(b, 20); |
|
81 assertEq(b[1], 20); |
|
82 } |
|
83 testMultipleTypes(); |
|
84 |
|
85 function testNull() { |
|
86 function f(arr) { |
|
87 arr[0] = null; |
|
88 } |
|
89 |
|
90 var arr = [undefined]; |
|
91 for (var i=0; i<100; i++) { |
|
92 f(arr); |
|
93 } |
|
94 assertEq(arr[0], null); |
|
95 } |
|
96 testNull(); |
|
97 |
|
98 // Bug 722245. |
|
99 function testConstantGcThing() { |
|
100 function f(arr, x) { |
|
101 arr[x] = "abc"; |
|
102 } |
|
103 var arr = ["", ""]; |
|
104 for (var i=0; i<100; i++) { |
|
105 f(arr, 1); |
|
106 } |
|
107 assertEq(arr[1], "abc"); |
|
108 } |
|
109 testConstantGcThing(); |