blob: 94e97e6995b203c8fe2e91d9feaba595f1b1feba [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// Copyright 2015 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Flags: --expose-wasm
6
7load("test/mjsunit/wasm/wasm-constants.js");
Ben Murdochda12d292016-06-02 14:46:10 +01008load("test/mjsunit/wasm/wasm-module-builder.js");
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00009
Ben Murdochda12d292016-06-02 14:46:10 +010010function assertModule(module, memsize) {
11 // Check the module exists.
12 assertFalse(module === undefined);
13 assertFalse(module === null);
14 assertFalse(module === 0);
15 assertEquals("object", typeof module);
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000016
Ben Murdochda12d292016-06-02 14:46:10 +010017 // Check the memory is an ArrayBuffer.
18 var mem = module.exports.memory;
19 assertFalse(mem === undefined);
20 assertFalse(mem === null);
21 assertFalse(mem === 0);
22 assertEquals("object", typeof mem);
23 assertTrue(mem instanceof ArrayBuffer);
24 for (var i = 0; i < 4; i++) {
25 module.exports.memory = 0; // should be ignored
26 assertEquals(mem, module.exports.memory);
27 }
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000028
Ben Murdochda12d292016-06-02 14:46:10 +010029 assertEquals(memsize, module.exports.memory.byteLength);
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000030}
31
Ben Murdochda12d292016-06-02 14:46:10 +010032function assertFunction(module, func) {
33 assertEquals("object", typeof module.exports);
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000034
Ben Murdochda12d292016-06-02 14:46:10 +010035 var exp = module.exports[func];
36 assertFalse(exp === undefined);
37 assertFalse(exp === null);
38 assertFalse(exp === 0);
39 assertEquals("function", typeof exp);
Ben Murdochda12d292016-06-02 14:46:10 +010040 return exp;
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000041}
42
Ben Murdochc5610432016-08-08 18:44:38 +010043(function I64SubTest() {
44
45 var builder = new WasmModuleBuilder();
46
47 builder.addMemory(1, 1, true);
48 builder.addFunction("sub", kSig_l_ll)
49 .addBody([ // --
50 kExprGetLocal, 0, // --
51 kExprGetLocal, 1, // --
52 kExprI64Sub]) // --
53 .exportFunc()
54
55 var module = builder.instantiate();
56 assertModule(module, kPageSize);
57
58 // Check the properties of the sub function.
59 var sub = assertFunction(module, "sub");
60 assertEquals(-55, sub(33, 88));
61 assertEquals(-55555, sub(33333, 88888));
62 assertEquals(-5555555, sub(3333333, 8888888));
63})();
64
Ben Murdochda12d292016-06-02 14:46:10 +010065(function SubTest() {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000066
Ben Murdochda12d292016-06-02 14:46:10 +010067 var builder = new WasmModuleBuilder();
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000068
Ben Murdochda12d292016-06-02 14:46:10 +010069 builder.addMemory(1, 1, true);
Ben Murdochc5610432016-08-08 18:44:38 +010070 builder.addFunction("sub", kSig_i_ii)
Ben Murdochda12d292016-06-02 14:46:10 +010071 .addBody([
Ben Murdochda12d292016-06-02 14:46:10 +010072 kExprGetLocal, 0, // --
Ben Murdochc5610432016-08-08 18:44:38 +010073 kExprGetLocal, 1, // --
74 kExprI32Sub, // --
75 ])
Ben Murdochda12d292016-06-02 14:46:10 +010076 .exportFunc()
77
78 var module = builder.instantiate();
79 assertModule(module, kPageSize);
80
81 // Check the properties of the sub function.
82 var sub = assertFunction(module, "sub");
83 assertEquals(-55, sub(33, 88));
84 assertEquals(-55555, sub(33333, 88888));
85 assertEquals(-5555555, sub(3333333, 8888888));
86})();
87
88
89(function NopTest() {
90
91 var builder = new WasmModuleBuilder();
92
93 var kPages = 2;
94 builder.addMemory(kPages, kPages, true);
Ben Murdochc5610432016-08-08 18:44:38 +010095 builder.addFunction("nop", kSig_v_v)
Ben Murdochda12d292016-06-02 14:46:10 +010096 .addBody([kExprNop])
97 .exportFunc();
98
99 var module = builder.instantiate();
100 assertModule(module, kPageSize * kPages);
101
102 var nop = assertFunction(module, "nop");
103 assertEquals(undefined, nop());
104})();
105
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000106
107(function testLt() {
Ben Murdochda12d292016-06-02 14:46:10 +0100108 var builder = new WasmModuleBuilder();
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000109
Ben Murdochda12d292016-06-02 14:46:10 +0100110 var kPages = 3;
111 builder.addMemory(kPages, kPages, true);
Ben Murdochc5610432016-08-08 18:44:38 +0100112 builder.addFunction("flt", kSig_i_dd)
Ben Murdochda12d292016-06-02 14:46:10 +0100113 .addBody([
Ben Murdochda12d292016-06-02 14:46:10 +0100114 kExprGetLocal, 0, // --
Ben Murdochc5610432016-08-08 18:44:38 +0100115 kExprGetLocal, 1, // --
116 kExprF64Lt // --
117 ]) // --
Ben Murdochda12d292016-06-02 14:46:10 +0100118 .exportFunc();
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000119
Ben Murdochda12d292016-06-02 14:46:10 +0100120 var module = builder.instantiate();
121 assertModule(module, kPageSize * kPages);
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000122
Ben Murdochda12d292016-06-02 14:46:10 +0100123 var flt = assertFunction(module, "flt");
124 assertEquals(1, flt(-2, -1));
125 assertEquals(0, flt(7.3, 7.1));
126 assertEquals(1, flt(7.1, 7.3));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000127})();