Imported Upstream version 1.0.0
[platform/upstream/js.git] / js / src / jit-test / tests / basic / testDenseToSlowArray.js
1 // test dense -> slow array transitions during the recording and on trace
2 // for various array functions and property accessors
3
4 function test_set_elem() {
5
6     function f() {
7         var bag = [];
8         for (var i = 0; i != 100; ++i) {
9             var a = [0];
10             a[100*100] = i;
11             bag.push(a);
12         }
13         
14         for (var i = 0; i != 100; ++i) {
15             var a = [0];
16             a[200 + i] = i;
17             bag.push(a);
18         }
19         return bag;
20     }
21     
22     var bag = f();
23     
24     for (var i = 0; i != 100; ++i) {
25         var a = bag[i];
26         assertEq(a.length, 100 * 100 + 1);
27         assertEq(a[100*100], i);
28         assertEq(a[0], 0);
29         assertEq(1 + i in a, false);
30     }
31     
32     for (var i = 0; i != 100; ++i) {
33         var a = bag[100 + i];
34         assertEq(a.length, 200 + i + 1);
35         assertEq(a[200 + i], i);
36         assertEq(a[0], 0);
37         assertEq(1 + i in a, false);
38     }
39 }
40
41 function test_reverse() {
42
43     function prepare_arays() {
44         var bag = [];
45         var base_index = 245;
46         for (var i = 0; i != 50; ++i) {
47             var a = [1, 2, 3, 4, 5];
48             a.length = i + base_index;
49             bag.push(a);
50         }
51         return bag;
52     }
53
54     function test(bag) {
55         for (var i = 0; i != bag.length; ++i) {
56             var a = bag[i];
57             a.reverse();
58             a[0] = 1;
59         }
60     }
61
62     var bag = prepare_arays();
63     test(bag);
64     for (var i = 0; i != bag.length; ++i) {
65         var a = bag[i];
66         assertEq(a[0], 1);
67         for (var j = 1; j <= 5; ++j) {
68             assertEq(a[a.length - j], j);
69         }
70         for (var j = 1; j < a.length - 5; ++j) {
71             assertEq(j in a, false);
72         }
73     }
74     
75 }
76
77 function test_push() {
78
79     function prepare_arays() {
80         var bag = [];
81         var base_index = 245;
82         for (var i = 0; i != 50; ++i) {
83             var a = [0];
84             a.length = i + base_index;
85             bag.push(a);
86         }
87         return bag;
88     }
89
90     function test(bag) {
91         for (var i = 0; i != bag.length; ++i) {
92             var a = bag[i];
93             a.push(2);
94             a[0] = 1;
95         }
96     }
97
98     var bag = prepare_arays();
99     test(bag);
100     for (var i = 0; i != bag.length; ++i) {
101         var a = bag[i];
102         assertEq(a[0], 1); 
103         assertEq(a[a.length - 1], 2);
104         for (var j = 1; j < a.length - 1; ++j) {
105             assertEq(j in a, false);
106         }
107     }
108 }
109
110 function test_unshift() {
111
112     function prepare_arays() {
113         var bag = [];
114         var base_index = 245;
115         for (var i = 0; i != 50; ++i) {
116             var a = [0];
117             a.length = i + base_index;
118             bag.push(a);
119         }
120         return bag;
121     }
122
123     function test(bag) {
124         for (var i = 0; i != bag.length; ++i) {
125             var a = bag[i];
126             a.unshift(1);
127             a[2] = 2;
128         }
129     }
130
131     var bag = prepare_arays();
132     test(bag);
133     for (var i = 0; i != bag.length; ++i) {
134         var a = bag[i];
135         assertEq(a[0], 1); 
136         assertEq(a[1], 0); 
137         assertEq(a[2], 2); 
138         for (var j = 3; j < a.length; ++j) {
139             assertEq(j in a, false);
140         }
141     }
142 }
143
144 function test_splice() {
145
146     function prepare_arays() {
147         var bag = [];
148         var base_index = 245;
149         for (var i = 0; i != 50; ++i) {
150             var a = [1, 2];
151             a.length = i + base_index;
152             bag.push(a);
153         }
154         return bag;
155     }
156
157     function test(bag) {
158         for (var i = 0; i != bag.length; ++i) {
159             var a = bag[i];
160             a.splice(1, 0, "a", "b", "c");
161             a[2] = 100;
162         }
163     }
164
165     var bag = prepare_arays();
166     test(bag);
167     for (var i = 0; i != bag.length; ++i) {
168         var a = bag[i];
169         assertEq(a[0], 1); 
170         assertEq(a[1], "a"); 
171         assertEq(a[2], 100); 
172         assertEq(a[3], "c"); 
173         assertEq(a[4], 2); 
174         for (var j = 5; j < a.length; ++j) {
175             assertEq(j in a, false);
176         }
177     }
178 }
179
180 test_set_elem();
181 test_reverse();
182 test_push();
183 test_unshift();
184 test_splice();
185