[ARM,MIPS] Skip slow tests
[WebKit-https.git] / JSTests / stress / for-in-invalidation-for-any-write.js
1 function assert(b) {
2     if (!b)
3         throw new Error("Bad assertion");
4 }
5 noInline(assert);
6
7 function test(f) {
8     noInline(f);
9     for (let i = 0; i < 1000; ++i)
10         f();
11 }
12
13 test(function() {
14     let o = {xx: 42};
15     for (let i in o) {
16         for (let j = 0; j < 2; j++) {
17             let r = o[i];
18             if (i === "xx")
19                 assert(r === 42);
20             i = function() { }
21         }
22     }
23 });
24
25 test(function() {
26     let o = {xx: 42};
27     for (let i in {xx: 0}) {
28         for (let j = 0; j < 2; j++) {
29             let r = o[i];
30             if (i === "xx")
31                 assert(r === 42);
32             i = new Uint32Array([0, 1, 0x777777, 0, 0]);
33         }
34     }
35 });
36
37 test(function() {
38     let o = {xx: 42};
39     for (let i in {xx: 0}) {
40         for (let j = 0; j < 2; j++) {
41             let r = o[i];
42             if (i === "xx")
43                 assert(r === 42);
44             ([i] = [new Uint32Array([0, 1, 0x777777, 0, 0])]);
45         }
46     }
47 });
48
49 test(function() {
50     let o = {xx: 42};
51     for (let i in {xx: 0}) {
52         for (let j = 0; j < 2; j++) {
53             let r = o[i];
54             if (i === "xx")
55                 assert(r === 42);
56             ({xyz: i} = {xyz: new Uint32Array([0, 1, 0x777777, 0, 0])});
57         }
58     }
59 });
60
61 test(function() {
62     let o = [1,2,3];
63     let toStringCalls = 0;
64     let first;
65     let num = 0;
66     let total = 0;
67     for (let i in o) {
68         first = true;
69         for (let j = 0; j < 3; j++) {
70             let r = o[i];
71             if (first)
72                 assert(r === o[num]);
73             else
74                 assert(r === undefined);
75             first = false;
76             i = {
77                 toString() {
78                     ++toStringCalls;
79                     return "hello!";
80                 }
81             }
82         }
83         ++num;
84     }
85
86     // Should be called twice per outer for-in loop.
87     assert(toStringCalls === o.length * 2);
88 });
89
90 test(function() {
91     let o = [1,2,3];
92     let toStringCalls = 0;
93     let first;
94     let num = 0;
95     let total = 0;
96     for (let i in o) {
97         first = true;
98         for (let j = 0; j < 3; j++) {
99             let r = o[i];
100             if (first)
101                 assert(r === o[num]);
102             else
103                 assert(r === undefined);
104             first = false;
105             ([i] = [{
106                 toString() {
107                     ++toStringCalls;
108                     return "hello!";
109                 }
110             }]);
111         }
112         ++num;
113     }
114
115     // Should be called twice per outer for-in loop.
116     assert(toStringCalls === o.length * 2);
117 });
118
119 test(function() {
120     let o = [1,2,3];
121     let toStringCalls = 0;
122     let first;
123     let num = 0;
124     let total = 0;
125     for (let i in o) {
126         first = true;
127         for (let j = 0; j < 3; j++) {
128             let r = o[i];
129             if (first)
130                 assert(r === o[num]);
131             else
132                 assert(r === undefined);
133             first = false;
134             ({xyz: i} = {xyz: {
135                 toString() {
136                     ++toStringCalls;
137                     return "hello!";
138                 }
139             }});
140         }
141         ++num;
142     }
143
144     // Should be called twice per outer for-in loop.
145     assert(toStringCalls === o.length * 2);
146 });