blob: c52152fbbf1af82441a4369691e456b8be2db514 [file] [log] [blame]
typedArrays = [Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array];
function check(thunk, count) {
let array = new constructor(10);
transferArrayBuffer(array.buffer);
let failed = true;
try {
thunk(array);
} catch(e) {
if (e != "TypeError: Underlying ArrayBuffer has been detached from the view")
throw new Error([thunk, count, e]);
failed = false;
}
if (failed)
throw new Error([thunk, count]);
}
function test(thunk, count) {
for (constructor of typedArrays)
check(thunk, count);
}
for (let i = 0; i < 10000; i++) {
test((array) => array[0], i);
test((array) => delete array[0], i);
test((array) => Object.getOwnPropertyDescriptor(array, 0), i);
test((array) => array[0] = 1, i);
}
function checkNoException(thunk, count) {
let array = new constructor(10);
transferArrayBuffer(array.buffer);
thunk(array);
}
function testNoException(thunk, count) {
for (constructor of typedArrays)
checkNoException(thunk, count);
}
for (let i = 0; i < 10000; i++) {
testNoException((array) => Object.defineProperty(array, 0, { value: 1, writable: true, configurable: false, enumerable: true }), i)
}