Source code

Revision control

Copy as Markdown

Other Tools

function checkResult(actual, expected)
{
assertEq(actual.value, expected.value);
assertEq(actual.done, expected.done);
}
if (typeof detachArrayBuffer === "function" && typeof newGlobal === "function")
{
var iteratorFunction = Uint8Array.prototype[Symbol.iterator];
var thisGlobal = this;
var otherGlobal = newGlobal();
var thisNext = new Uint8Array()[Symbol.iterator]().next
for (const constructor of typedArrayConstructors)
{
assertEq(new constructor()[Symbol.iterator]().next, thisNext);
var globals =
[
[thisGlobal, thisGlobal],
[thisGlobal, otherGlobal],
[otherGlobal, otherGlobal],
[otherGlobal, thisGlobal],
];
for (const [arrayGlobal, bufferGlobal] of globals)
{
var arr, buffer, iterator;
function arrayBufferIterator()
{
var byteLength = 2 * constructor.BYTES_PER_ELEMENT;
var buf = new bufferGlobal.ArrayBuffer(byteLength);
var tarray = new arrayGlobal[constructor.name](buf);
tarray[0] = 1;
tarray[1] = 2;
return [tarray, buf, Reflect.apply(iteratorFunction, tarray, [])];
}
[arr, buffer, iterator] = arrayBufferIterator();
checkResult(thisNext.call(iterator), {value: 1, done: false});
checkResult(thisNext.call(iterator), {value: 2, done: false});
checkResult(thisNext.call(iterator), {value: undefined, done: true});
// Test an exhausted iterator.
bufferGlobal.detachArrayBuffer(buffer);
checkResult(thisNext.call(iterator), {value: undefined, done: true});
// Test an all-but-exhausted iterator.
[arr, buffer, iterator] = arrayBufferIterator();
checkResult(thisNext.call(iterator), {value: 1, done: false});
checkResult(thisNext.call(iterator), {value: 2, done: false});
bufferGlobal.detachArrayBuffer(buffer);
assertThrowsInstanceOf(() => thisNext.call(iterator), TypeError);
// Test an unexhausted iterator.
[arr, buffer, iterator] = arrayBufferIterator();
checkResult(thisNext.call(iterator), {value: 1, done: false});
bufferGlobal.detachArrayBuffer(buffer);
assertThrowsInstanceOf(() => thisNext.call(iterator), TypeError);
}
}
}
if (typeof reportCompare === "function")
reportCompare(true, true);