test262/implementation-contributed/javascriptcore/stress/modify-set-during-iteration.js
test262-automation e9a5a7f918 [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time) (#1620)
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
2018-07-03 15:59:58 -04:00

92 lines
1.9 KiB
JavaScript

function testValue(value, expected) {
if (value !== expected)
throw new Error("bad value: expected:(" + expected + "),actual:(" + value +").");
}
var set = new Set([0]);
var counter = 0;
for (var elm of set) {
testValue(elm, counter);
set.add(elm + 1);
if (elm > 10000) {
set.clear();
}
++counter;
}
testValue(counter, 10002);
var set = new Set([0, 1, 2, 3]);
var counter = 0;
for (var elm of set) {
testValue(elm, counter);
set.clear();
++counter;
}
testValue(counter, 1);
var set = new Set([0, 1, 2, 3]);
var exp = [0, 2, 3];
var counter = 0;
for (var elm of set) {
testValue(elm, exp[counter]);
set.delete(counter + 1);
++counter;
}
testValue(counter, 3);
var set = new Set([0, 1, 2, 3]);
var iter = set[Symbol.iterator]();
var iter2 = set[Symbol.iterator]();
testValue(iter2.next().value, 0);
// Consume all output of iter.
for (var elm of iter);
testValue(iter.next().done, true);
testValue(iter.next().value, undefined);
set.clear();
set.add(1).add(2).add(3);
testValue(iter.next().done, true);
testValue(iter.next().value, undefined);
testValue(iter2.next().value, 1);
testValue(iter2.next().value, 2);
testValue(iter2.next().value, 3);
var set = new Set();
set.add(1);
set.delete(1);
set.forEach(function (i) {
throw new Error("unreeachable.");
});
var set = new Set();
var iter = set[Symbol.iterator]();
set.add(1);
set.delete(1);
for (var elm of iter) {
throw new Error("unreeachable.");
}
var set = new Set([0, 1, 2, 3, 4]);
var iter = set[Symbol.iterator]();
testValue(set.size, 5);
testValue(iter.next().value, 0);
testValue(iter.next().value, 1);
testValue(iter.next().value, 2);
testValue(iter.next().value, 3);
set.delete(0);
set.delete(1);
set.delete(2);
set.delete(3);
// It will cause MapData packing.
for (var i = 5; i < 1000; ++i)
set.add(i);
gc();
for (var i = 4; i < 1000; ++i)
testValue(iter.next().value, i);
testValue(iter.next().value, undefined);