to-resizable-buffer.any.js (2497B)
1 // META: global=window,dedicatedworker,jsshell 2 // META: script=/wasm/jsapi/wasm-module-builder.js 3 4 test(() => { 5 const thisValues = [ 6 undefined, 7 null, 8 true, 9 "", 10 Symbol(), 11 1, 12 {}, 13 WebAssembly.Memory, 14 WebAssembly.Memory.prototype, 15 ]; 16 17 const desc = Object.getOwnPropertyDescriptor(WebAssembly.Memory.prototype, "toResizableBuffer"); 18 assert_equals(typeof desc, "object"); 19 20 const fun = desc.value; 21 assert_equals(typeof desc.value, "function"); 22 23 for (const thisValue of thisValues) { 24 assert_throws_js(TypeError, () => fun.call(thisValue), `this=${format_value(thisValue)}`); 25 } 26 }, "API surface"); 27 28 test(() => { 29 const memory = new WebAssembly.Memory({ initial: 0, maximum: 1 }); 30 const buffer1 = memory.buffer; 31 32 assert_false(buffer1.resizable, "By default the AB is initially not resizable"); 33 34 const buffer2 = memory.toResizableBuffer(); 35 assert_true(buffer2.resizable); 36 assert_not_equals(buffer1, buffer2, "Changing resizability makes a new object"); 37 assert_true(buffer1.detached); 38 assert_equals(memory.buffer, buffer2, "The buffer created by the most recent toFooBuffer call is cached"); 39 40 const buffer3 = memory.toResizableBuffer(); 41 assert_equals(buffer2, buffer3, "toResizableBuffer does nothing if buffer is already resizable") 42 assert_equals(memory.buffer, buffer3); 43 44 }, "toResizableBuffer caching behavior"); 45 46 test(() => { 47 { 48 const maxNumPages = 4; 49 const memory = new WebAssembly.Memory({ initial: 0, maximum: maxNumPages }); 50 const buffer = memory.toResizableBuffer(); 51 assert_equals(buffer.maxByteLength, kPageSize * maxNumPages, "Memory maximum is same as maxByteLength"); 52 } 53 }, "toResizableBuffer max size"); 54 55 test(() => { 56 const maxNumPages = 4; 57 const memory = new WebAssembly.Memory({ initial: 0, maximum: maxNumPages }); 58 const buffer = memory.toResizableBuffer(); 59 60 assert_equals(buffer.byteLength, 0); 61 buffer.resize(2 * kPageSize); 62 assert_equals(buffer.byteLength, 2 * kPageSize); 63 64 assert_throws_js(RangeError, () => buffer.resize(3 * kPageSize - 1), "Can only grow by page multiples"); 65 assert_throws_js(RangeError, () => buffer.resize(1 * kPageSize), "Cannot shrink"); 66 }, "Resizing a Memory's resizable buffer"); 67 68 test(() => { 69 const memory = new WebAssembly.Memory({ initial: 0, maximum: 1 }); 70 const buffer = memory.toResizableBuffer(); 71 assert_throws_js(TypeError, () => buffer.transfer(), "Cannot be detached by JS"); 72 }, "Resizable buffers from Memory cannot be detached by JS");