| import { eq as assertEq, throws as assertThrows } from "../assert.js"; |
| const pageSize = 64*1024; |
| |
| let buffers = []; |
| for (let i = 0; i < 100; i++) { |
| const max = 5; |
| let pageCount = 1; |
| let x = new WebAssembly.Memory({initial: 1, maximum: max}); |
| for (let i = 0; i < (max - 1); i++) { |
| let int8Array = new Uint8Array(x.buffer); |
| |
| for (let i = 0; i < pageSize; i++) { |
| assertEq(int8Array[pageSize*(pageCount - 1) + i], 0); |
| int8Array[pageSize*(pageCount - 1) + i] = pageCount; |
| } |
| |
| for (let i = 0; i < pageCount; i++) { |
| for (let j = 0; j < pageSize; j++) { |
| assertEq(int8Array[i * pageSize + j], i + 1); |
| } |
| } |
| |
| let buffer = x.buffer; |
| assertEq(buffer.byteLength, pageCount * pageSize); |
| buffers.push(buffer); |
| let previousPageSize = x.grow(1); |
| assertEq(buffer.byteLength, 0); |
| assertEq(previousPageSize, pageCount); |
| ++pageCount; |
| } |
| } |
| |
| for (let buffer of buffers) { |
| assertEq(buffer.byteLength, 0); |
| } |
| |
| { |
| const memory = new WebAssembly.Memory({initial: 1, maximum: 5}); |
| let buffer = memory.buffer; |
| assertEq(buffer.byteLength, 1*64*1024); |
| memory.grow(1); |
| assertEq(buffer.byteLength, 0); |
| |
| buffer = memory.buffer; |
| assertEq(buffer.byteLength, 2*64*1024); |
| |
| // This shouldn't neuter the buffer since it fails. |
| assertThrows(() => memory.grow(1000), RangeError, "WebAssembly.Memory.grow would exceed the memory's declared maximum size"); |
| assertEq(buffer.byteLength, 2*64*1024); |
| assertEq(memory.buffer, buffer); |
| } |