aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/asm/asm-memory.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/asm/asm-memory.js')
-rw-r--r--deps/v8/test/mjsunit/asm/asm-memory.js55
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());
+})();