Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

// META: global=window,dedicatedworker,jsshell
// META: script=/wasm/jsapi/wasm-module-builder.js
test(() => {
const thisValues = [
undefined,
null,
true,
"",
Symbol(),
1,
{},
WebAssembly.Memory,
WebAssembly.Memory.prototype,
];
const desc = Object.getOwnPropertyDescriptor(WebAssembly.Memory.prototype, "toResizableBuffer");
assert_equals(typeof desc, "object");
const fun = desc.value;
assert_equals(typeof desc.value, "function");
for (const thisValue of thisValues) {
assert_throws_js(TypeError, () => fun.call(thisValue), `this=${format_value(thisValue)}`);
}
}, "API surface");
test(() => {
const memory = new WebAssembly.Memory({ initial: 0 });
const buffer1 = memory.buffer;
assert_false(buffer1.resizable, "By default the AB is initially not resizable");
const buffer2 = memory.toResizableBuffer();
assert_true(buffer2.resizable);
assert_not_equals(buffer1, buffer2, "Changing resizability makes a new object");
assert_true(buffer1.detached);
assert_equals(memory.buffer, buffer2, "The buffer created by the most recent toFooBuffer call is cached");
const buffer3 = memory.toResizableBuffer();
assert_equals(buffer2, buffer3, "toResizableBuffer does nothing if buffer is already resizable")
assert_equals(memory.buffer, buffer3);
}, "toResizableBuffer caching behavior");
test(() => {
{
const maxNumPages = 4;
const memory = new WebAssembly.Memory({ initial: 0, maximum: maxNumPages });
const buffer = memory.toResizableBuffer();
assert_equals(buffer.maxByteLength, kPageSize * maxNumPages, "Memory maximum is same as maxByteLength");
}
{
const memory = new WebAssembly.Memory({ initial: 0 });
const buffer = memory.toResizableBuffer();
assert_equals(buffer.maxByteLength, kPageSize * kSpecMaxPages, "Default max size is 65536 * 65536");
}
}, "toResizableBuffer max size");
test(() => {
const maxNumPages = 4;
const memory = new WebAssembly.Memory({ initial: 0, maximum: maxNumPages });
const buffer = memory.toResizableBuffer();
assert_equals(buffer.byteLength, 0);
buffer.resize(2 * kPageSize);
assert_equals(buffer.byteLength, 2 * kPageSize);
assert_throws_js(RangeError, () => buffer.resize(3 * kPageSize - 1), "Can only grow by page multiples");
assert_throws_js(RangeError, () => buffer.resize(1 * kPageSize), "Cannot shrink");
}, "Resizing a Memory's resizable buffer");
test(() => {
const memory = new WebAssembly.Memory({ initial: 0 });
const buffer = memory.toResizableBuffer();
assert_throws_js(TypeError, () => buffer.transfer(), "Cannot be detached by JS");
}, "Resizable buffers from Memory cannot be detached by JS");