Source code

Revision control

Copy as Markdown

Other Tools

// |jit-test| --enable-arraybuffer-resizable
load(libdir + "asserts.js");
var ab_inline = new ArrayBuffer(4);
assertEq(pinArrayBufferOrViewLength(ab_inline), true);
assertEq(pinArrayBufferOrViewLength(ab_inline), false);
assertErrorMessage(() => detachArrayBuffer(ab_inline), RangeError, /change pinned length/);
assertEq(pinArrayBufferOrViewLength(ab_inline, false), true);
detachArrayBuffer(ab_inline);
var ab_big = new ArrayBuffer(1000);
assertEq(pinArrayBufferOrViewLength(ab_big), true);
assertEq(pinArrayBufferOrViewLength(ab_big), false);
assertErrorMessage(() => detachArrayBuffer(ab_big), RangeError, /change pinned length/);
assertEq(pinArrayBufferOrViewLength(ab_big, false), true);
detachArrayBuffer(ab_big);
if (ArrayBuffer.prototype.resize) {
var rab_small = new ArrayBuffer(4, { maxByteLength: 20 });
assertEq(pinArrayBufferOrViewLength(rab_small), true);
assertEq(pinArrayBufferOrViewLength(rab_small), false);
assertErrorMessage(() => detachArrayBuffer(rab_small), RangeError, /change pinned length/);
assertErrorMessage(() => rab_small.resize(18), RangeError, /change pinned length/);
assertEq(pinArrayBufferOrViewLength(rab_small, false), true);
assertEq(rab_small.byteLength, 4);
rab_small.resize(18);
assertEq(rab_small.byteLength, 18);
detachArrayBuffer(rab_small);
} else {
print("Skipped test: resizable ArrayBuffers unavailable");
}
if (ArrayBuffer.prototype.resize) {
var rab_big = new ArrayBuffer(200, { maxByteLength: 1000 });
assertEq(pinArrayBufferOrViewLength(rab_big), true);
assertEq(pinArrayBufferOrViewLength(rab_big), false);
assertErrorMessage(() => detachArrayBuffer(rab_big), RangeError, /change pinned length/);
assertErrorMessage(() => rab_big.resize(400), RangeError, /change pinned length/);
assertEq(pinArrayBufferOrViewLength(rab_big, false), true);
assertEq(rab_big.byteLength, 200);
rab_big.resize(400);
assertEq(rab_big.byteLength, 400);
detachArrayBuffer(rab_big);
} else {
print("Skipped test: resizable ArrayBuffers unavailable");
}
var sab = new SharedArrayBuffer(4);
assertEq(pinArrayBufferOrViewLength(sab), false);
assertEq(pinArrayBufferOrViewLength(sab), false);
assertErrorMessage(() => serialize([sab], [sab]), TypeError, /Shared memory objects.*transfer/);
assertEq(pinArrayBufferOrViewLength(sab, false), false);
assertErrorMessage(() => detachArrayBuffer(sab), TypeError, /ArrayBuffer.*required/);
if (SharedArrayBuffer.prototype.grow) {
var gab = new SharedArrayBuffer(4, { maxByteLength: 1000 });
assertEq(pinArrayBufferOrViewLength(gab), false);
assertEq(pinArrayBufferOrViewLength(gab), false);
assertErrorMessage(() => detachArrayBuffer(gab), TypeError, /ArrayBuffer.*required/);
// assertErrorMessage(() => gab.grow(400), RangeError, /change pinned length/);
assertEq(pinArrayBufferOrViewLength(gab, false), false);
assertEq(gab.byteLength, 4);
gab.grow(400);
assertEq(gab.byteLength, 400);
assertErrorMessage(() => detachArrayBuffer(gab), TypeError, /ArrayBuffer.*required/);
} else {
print("Skipped test: growable SharedArrayBuffers unavailable");
}