Source code

Revision control

Copy as Markdown

Other Tools

// |reftest| skip-if(!this.hasOwnProperty('Iterator'))
const methods = [
[iter => iter.map, x => x],
[iter => iter.filter, x => true],
[iter => iter.flatMap, x => [x]],
];
for (const method of methods) {
const iter = [1, 2, 3].values();
const iterMethod = method[0](iter);
let iterHelper;
let reentered = false;
iterHelper = iterMethod.call(iter, x => {
if (x == 2) {
// Reenter the currently running generator.
reentered = true;
assertThrowsInstanceOf(() => iterHelper.next(), TypeError);
}
return method[1](x);
});
let result = iterHelper.next();
assertEq(result.value, 1);
assertEq(result.done, false);
assertEq(reentered, false);
result = iterHelper.next();
assertEq(reentered, true);
assertEq(result.value, 2);
assertEq(result.done, false);
result = iterHelper.next();
assertEq(result.value, 3);
assertEq(result.done, false);
result = iterHelper.next();
assertEq(result.value, undefined);
assertEq(result.done, true);
}
if (typeof reportCompare == 'function')
reportCompare(0, 0);