diff options
Diffstat (limited to 'deps/v8/test/mjsunit/asm/asm-memory.js')
-rw-r--r-- | deps/v8/test/mjsunit/asm/asm-memory.js | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/asm/asm-memory.js b/deps/v8/test/mjsunit/asm/asm-memory.js new file mode 100644 index 0000000000..6f9b2fe639 --- /dev/null +++ b/deps/v8/test/mjsunit/asm/asm-memory.js @@ -0,0 +1,55 @@ +// Copyright 2017 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax + +(function TestUnalignedMemory() { + // Test that a buffer whose length is not a multiple of the element size of a + // heap view throws the proper {RangeError} during instantiation. + function Module(stdlib, foreign, heap) { + "use asm"; + var a = new stdlib.Int32Array(heap); + function f() {} + return { f:f }; + } + assertThrows(() => Module(this, {}, new ArrayBuffer(2)), RangeError); + assertThrows(() => Module(this, {}, new ArrayBuffer(10)), RangeError); + assertDoesNotThrow(() => Module(this, {}, new ArrayBuffer(4))); + assertDoesNotThrow(() => Module(this, {}, new ArrayBuffer(16))); + assertFalse(%IsAsmWasmCode(Module)); +})(); + +(function TestMissingMemory() { + // Test that a buffer is required for instantiation of modules containing any + // heap views. JavaScript needs to create individual buffers for each view. + function Module(stdlib, foreign, heap) { + "use asm"; + var a = new stdlib.Int16Array(heap); + var b = new stdlib.Int32Array(heap); + function f() { + a[0] = 0x1234; + return b[0] | 0; + } + return { f:f }; + } + var m = Module(this, {}, undefined); + assertFalse(%IsAsmWasmCode(Module)); + assertEquals(0, m.f()); +})(); + +(function TestNonBufferMemory() { + // Test that a buffer has to be an instance of {ArrayBuffer} in order to be + // valid. JavaScript will also accept any other array-like object. + function Module(stdlib, foreign, heap) { + "use asm"; + var a = new stdlib.Int32Array(heap); + function f() { + return a[0] | 0; + } + return { f:f }; + } + var m = Module(this, {}, [ 23, 42 ]); + assertFalse(%IsAsmWasmCode(Module)); + assertEquals(23, m.f()); +})(); |