1function assert_ArrayBuffer(actual, { size=0, shared=false, detached=false }, message) { 2 // https://github.com/WebAssembly/spec/issues/840 3 // See https://github.com/whatwg/html/issues/5380 for why not `self.SharedArrayBuffer` 4 const isShared = !("isView" in actual.constructor); 5 assert_equals(isShared, shared, `${message}: constructor`); 6 const sharedString = shared ? "Shared" : ""; 7 assert_equals(actual.toString(), `[object ${sharedString}ArrayBuffer]`, `${message}: toString()`); 8 assert_equals(Object.getPrototypeOf(actual).toString(), `[object ${sharedString}ArrayBuffer]`, `${message}: prototype toString()`); 9 if (detached) { 10 // https://github.com/tc39/ecma262/issues/678 11 let byteLength; 12 try { 13 byteLength = actual.byteLength; 14 } catch (e) { 15 byteLength = 0; 16 } 17 assert_equals(byteLength, 0, `${message}: detached size`); 18 } else { 19 assert_equals(actual.byteLength, 0x10000 * size, `${message}: size`); 20 if (size > 0) { 21 const array = new Uint8Array(actual); 22 assert_equals(array[0], 0, `${message}: first element`); 23 assert_equals(array[array.byteLength - 1], 0, `${message}: last element`); 24 } 25 } 26 assert_equals(Object.isFrozen(actual), shared, "buffer frozen"); 27 assert_equals(Object.isExtensible(actual), !shared, "buffer extensibility"); 28} 29 30function assert_Memory(memory, { size=0, shared=false }) { 31 assert_equals(Object.getPrototypeOf(memory), WebAssembly.Memory.prototype, 32 "prototype"); 33 assert_true(Object.isExtensible(memory), "extensible"); 34 35 // https://github.com/WebAssembly/spec/issues/840 36 assert_equals(memory.buffer, memory.buffer, "buffer should be idempotent"); 37 assert_ArrayBuffer(memory.buffer, { size, shared }); 38} 39