Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/asm/asm-heap.js')
-rw-r--r--deps/v8/test/mjsunit/asm/asm-heap.js99
1 files changed, 99 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/asm/asm-heap.js b/deps/v8/test/mjsunit/asm/asm-heap.js
new file mode 100644
index 00000000000..d0d190a73d2
--- /dev/null
+++ b/deps/v8/test/mjsunit/asm/asm-heap.js
@@ -0,0 +1,99 @@
+// Copyright 2018 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: --validate-asm --allow-natives-syntax --expose-gc --mock-arraybuffer-allocator
+
+let gCounter = 1000;
+let gMinHeap = new ArrayBuffer(1 << 12);
+let gStdlib = {Uint8Array: Uint8Array};
+
+// The template of asm.js modules used in this test.
+function Template(stdlib, ffi, heap) {
+ "use asm";
+ var MEM8 = new stdlib.Uint8Array(heap);
+ function foo() { return VAL; }
+ return { foo: foo };
+}
+
+// Create a fresh module each time.
+function NewModule() {
+ // Use eval() to get a unique module each time.
+ let val = gCounter++;
+ let string = (Template + "; Template").replace("VAL", "" + val);
+// print(string);
+ let module = eval(string);
+// print(module);
+ module(gStdlib, {}, gMinHeap);
+ assertTrue(%IsAsmWasmCode(module));
+ return {module: module, val: val};
+}
+
+(function TestValid_PowerOfTwo() {
+ print("TestValid_PowerOfTwo...");
+ let r = NewModule();
+ for (let i = 12; i <= 24; i++) {
+ gc(); // Likely OOM otherwise.
+ let size = 1 << i;
+ print(" size=" + size);
+ let heap = new ArrayBuffer(size);
+ var instance = r.module(gStdlib, {}, heap);
+ assertTrue(%IsAsmWasmCode(r.module));
+ assertEquals(r.val, instance.foo());
+ }
+})();
+
+(function TestValid_Multiple() {
+ print("TestValid_Multiple...");
+ let r = NewModule();
+ for (let i = 1; i < 47; i += 7) {
+ gc(); // Likely OOM otherwise.
+ let size = i * (1 << 24);
+ print(" size=" + size);
+ let heap = new ArrayBuffer(size);
+ var instance = r.module(gStdlib, {}, heap);
+ assertTrue(%IsAsmWasmCode(r.module));
+ assertEquals(r.val, instance.foo());
+ }
+})();
+
+(function TestInvalid_TooSmall() {
+ print("TestInvalid_TooSmall...");
+ for (let i = 1; i < 12; i++) {
+ let size = 1 << i;
+ print(" size=" + size);
+ let r = NewModule();
+ let heap = new ArrayBuffer(size);
+ var instance = r.module(gStdlib, {}, heap);
+ assertFalse(%IsAsmWasmCode(r.module));
+ assertEquals(r.val, instance.foo());
+ }
+})();
+
+(function TestInValid_NonPowerOfTwo() {
+ print("TestInvalid_NonPowerOfTwo...");
+ for (let i = 12; i <= 24; i++) {
+ gc(); // Likely OOM otherwise.
+ let size = 1 + (1 << i);
+ print(" size=" + size);
+ let r = NewModule();
+ let heap = new ArrayBuffer(size);
+ var instance = r.module(gStdlib, {}, heap);
+ assertFalse(%IsAsmWasmCode(r.module));
+ assertEquals(r.val, instance.foo());
+ }
+})();
+
+(function TestInValid_NonMultiple() {
+ print("TestInvalid_NonMultiple...");
+ for (let i = (1 << 24); i < (1 << 25); i += (1 << 22)) {
+ gc(); // Likely OOM otherwise.
+ let size = i + (1 << 20);
+ print(" size=" + size);
+ let r = NewModule();
+ let heap = new ArrayBuffer(size);
+ var instance = r.module(gStdlib, {}, heap);
+ assertFalse(%IsAsmWasmCode(r.module));
+ assertEquals(r.val, instance.foo());
+ }
+})();