]>
git.saurik.com Git - apple/javascriptcore.git/blob - tests/stress/modify-map-during-iteration.js
2 function testValue(value
, expected
) {
3 if (value
!== expected
)
4 throw new Error("bad value: expected:(" + expected
+ "),actual:(" + value
+").");
7 function identityPairs(array
) {
8 return array
.map(function (i
) { return [i
, i
]; });
11 var map
= new Map(identityPairs([0]));
13 for (var [elm
, _
] of map
) {
14 testValue(elm
, counter
);
15 map
.set(elm
+ 1, elm
+ 1);
21 testValue(counter
, 10002);
23 var map
= new Map(identityPairs([0, 1, 2, 3]));
25 for (var [elm
, _
] of map
) {
26 testValue(elm
, counter
);
30 testValue(counter
, 1);
32 var map
= new Map(identityPairs([0, 1, 2, 3]));
35 for (var [elm
, _
] of map
) {
36 testValue(elm
, exp
[counter
]);
37 map
.delete(counter
+ 1);
40 testValue(counter
, 3);
42 var map
= new Map(identityPairs([0, 1, 2, 3]));
43 var iter
= map
.keys();
44 var iter2
= map
.keys();
45 testValue(iter2
.next().value
, 0);
47 // Consume all output of iter.
48 for (var elm
of iter
);
50 testValue(iter
.next().done
, true);
51 testValue(iter
.next().value
, undefined);
54 map
.set(1, 1).set(2, 2).set(3, 3);
56 testValue(iter
.next().done
, true);
57 testValue(iter
.next().value
, undefined);
58 testValue(iter2
.next().value
, 1);
59 testValue(iter2
.next().value
, 2);
60 testValue(iter2
.next().value
, 3);
65 map
.forEach(function (i
) {
66 throw new Error("unreeachable.");
70 var iter
= map
[Symbol
.iterator
]();
73 for (var [elm
, _
] of map
) {
74 throw new Error("unreeachable.");
78 for (var i
= 0; i
< 5; ++i
)
80 testValue(map
.size
, 5);
81 var iter
= map
.keys();
82 testValue(iter
.next().value
, 0);
83 testValue(iter
.next().value
, 1);
84 testValue(iter
.next().value
, 2);
85 testValue(iter
.next().value
, 3);
90 // It will cause MapData packing.
91 for (var i
= 5; i
< 1000; ++i
)
94 for (var i
= 4; i
< 1000; ++i
)
95 testValue(iter
.next().value
, i
);
96 testValue(iter
.next().value
, undefined);