OLD | NEW |
---|---|
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Flags: --expose-wasm | 5 // Flags: --expose-wasm |
6 | 6 |
7 load("test/mjsunit/wasm/wasm-constants.js"); | 7 load("test/mjsunit/wasm/wasm-constants.js"); |
8 load("test/mjsunit/wasm/wasm-module-builder.js"); | |
8 | 9 |
9 var module = (function () { | 10 function assertModule(module, memsize) { |
10 var kBodySize = 5; | 11 // Check the module exists. |
11 var kNameOffset = kHeaderSize + 21 + kBodySize + 1; | 12 assertFalse(module === undefined); |
13 assertFalse(module === null); | |
14 assertFalse(module === 0); | |
15 assertEquals("object", typeof module); | |
12 | 16 |
13 return _WASMEXP_.instantiateModule(bytesWithHeader( | 17 // Check the memory is an ArrayBuffer. |
14 // -- memory | 18 var mem = module.memory; |
15 kDeclMemory, | 19 assertFalse(mem === undefined); |
16 1, 1, 1, | 20 assertFalse(mem === null); |
17 // -- signatures | 21 assertFalse(mem === 0); |
18 kDeclSignatures, 1, | 22 assertEquals("object", typeof mem); |
19 2, kAstI32, kAstI32, kAstI32, // int, int -> int | 23 assertTrue(mem instanceof ArrayBuffer); |
20 // -- functions | 24 for (var i = 0; i < 4; i++) { |
21 kDeclFunctions, 1, | 25 module.memory = 0; // should be ignored |
22 kDeclFunctionName | kDeclFunctionExport, | 26 assertEquals(mem, module.memory); |
23 0, 0, | 27 } |
24 kNameOffset, 0, 0, 0, // name offset | 28 |
25 kBodySize, 0, | 29 assertEquals(memsize, module.memory.byteLength); |
26 // -- body | 30 } |
27 kExprI32Sub, // -- | 31 |
28 kExprGetLocal, 0, // -- | 32 function assertFunction(module, func) { |
29 kExprGetLocal, 1, // -- | 33 assertEquals("object", typeof module.exports); |
30 kDeclEnd, | 34 |
31 's', 'u', 'b', 0 // name | 35 var exp = module.exports[func]; |
32 )); | 36 assertFalse(exp === undefined); |
37 assertFalse(exp === null); | |
38 assertFalse(exp === 0); | |
39 assertEquals("function", typeof exp); | |
40 | |
41 return exp; | |
42 } | |
43 | |
44 (function SubTest() { | |
45 | |
46 var builder = new WasmModuleBuilder(); | |
47 | |
48 builder.addMemory(1, 1, true); | |
49 builder.addFunction("sub", [kAstI32, kAstI32, kAstI32]) | |
50 .addBody([ | |
51 kExprI32Sub, // -- | |
52 kExprGetLocal, 0, // -- | |
53 kExprGetLocal, 1]) // -- | |
54 .exportFunc() | |
55 | |
56 var module = builder.instantiate(); | |
57 assertModule(module, 65536); | |
ahaas
2016/03/07 18:36:37
use kMemSize here (or introduce it if it does not
titzer
2016/03/07 19:11:05
Done.
| |
58 | |
59 // Check the properties of the sub function. | |
60 var sub = assertFunction(module, "sub"); | |
61 assertEquals(-55, sub(33, 88)); | |
62 assertEquals(-55555, sub(33333, 88888)); | |
63 assertEquals(-5555555, sub(3333333, 8888888)); | |
33 })(); | 64 })(); |
34 | 65 |
35 // Check the module exists. | |
36 assertFalse(module === undefined); | |
37 assertFalse(module === null); | |
38 assertFalse(module === 0); | |
39 assertEquals("object", typeof module); | |
40 | 66 |
41 // Check the memory is an ArrayBuffer. | 67 (function NopTest() { |
42 var mem = module.memory; | |
43 assertFalse(mem === undefined); | |
44 assertFalse(mem === null); | |
45 assertFalse(mem === 0); | |
46 assertEquals("object", typeof mem); | |
47 assertTrue(mem instanceof ArrayBuffer); | |
48 for (var i = 0; i < 4; i++) { | |
49 module.memory = 0; // should be ignored | |
50 assertEquals(mem, module.memory); | |
51 } | |
52 | 68 |
53 assertEquals(65536, module.memory.byteLength); | 69 var builder = new WasmModuleBuilder(); |
54 | 70 |
55 // Check the properties of the sub function. | 71 builder.addMemory(2, 2, true); |
ahaas
2016/03/07 18:36:38
Are these "2"s here related to the "2" below in as
titzer
2016/03/07 19:11:05
Done.
| |
56 assertEquals("function", typeof module.sub); | 72 builder.addFunction("nop", [kAstStmt]) |
73 .addBody([kExprNop]) | |
74 .exportFunc(); | |
57 | 75 |
58 assertEquals(-55, module.sub(33, 88)); | 76 var module = builder.instantiate(); |
59 assertEquals(-55555, module.sub(33333, 88888)); | 77 assertModule(module, 65536 * 2); |
60 assertEquals(-5555555, module.sub(3333333, 8888888)); | 78 |
79 var nop = assertFunction(module, "nop"); | |
80 assertEquals(undefined, nop()); | |
81 })(); | |
61 | 82 |
62 | 83 |
63 var module = (function() { | 84 (function testLt() { |
64 var kBodySize = 1; | 85 var builder = new WasmModuleBuilder(); |
65 var kNameOffset2 = kHeaderSize + 19 + kBodySize + 1; | |
66 | 86 |
67 return _WASMEXP_.instantiateModule(bytesWithHeader( | 87 builder.addMemory(3, 3, true); |
ahaas
2016/03/07 18:36:37
Same as above.
titzer
2016/03/07 19:11:05
Done.
| |
68 // -- memory | 88 builder.addFunction("flt", [kAstI32, kAstF64, kAstF64]) |
69 kDeclMemory, | 89 .addBody([ |
70 1, 1, 1, | 90 kExprF64Lt, // -- |
71 // -- signatures | 91 kExprGetLocal, 0, // -- |
72 kDeclSignatures, 1, | 92 kExprGetLocal, 1]) // -- |
73 0, kAstStmt, // signature: void -> void | 93 .exportFunc(); |
74 // -- functions | 94 |
75 kDeclFunctions, 1, | 95 var module = builder.instantiate(); |
76 kDeclFunctionName | kDeclFunctionExport, | 96 assertModule(module, 3 * 65536); |
77 0, 0, // signature index | 97 |
78 kNameOffset2, 0, 0, 0, // name offset | 98 var flt = assertFunction(module, "flt"); |
79 kBodySize, 0, | 99 assertEquals(1, flt(-2, -1)); |
80 kExprNop, // body | 100 assertEquals(0, flt(7.3, 7.1)); |
81 kDeclEnd, | 101 assertEquals(1, flt(7.1, 7.3)); |
82 'n', 'o', 'p', 0 // name | |
83 )); | |
84 })(); | 102 })(); |
85 | |
86 // Check the module exists. | |
87 assertFalse(module === undefined); | |
88 assertFalse(module === null); | |
89 assertFalse(module === 0); | |
90 assertEquals("object", typeof module); | |
91 | |
92 // Check the memory is an ArrayBuffer. | |
93 var mem = module.memory; | |
94 assertFalse(mem === undefined); | |
95 assertFalse(mem === null); | |
96 assertFalse(mem === 0); | |
97 assertEquals("object", typeof mem); | |
98 assertTrue(mem instanceof ArrayBuffer); | |
99 for (var i = 0; i < 4; i++) { | |
100 module.memory = 0; // should be ignored | |
101 assertEquals(mem, module.memory); | |
102 } | |
103 | |
104 assertEquals(65536, module.memory.byteLength); | |
105 | |
106 // Check the properties of the sub function. | |
107 assertFalse(module.nop === undefined); | |
108 assertFalse(module.nop === null); | |
109 assertFalse(module.nop === 0); | |
110 assertEquals("function", typeof module.nop); | |
111 | |
112 assertEquals(undefined, module.nop()); | |
113 | |
114 (function testLt() { | |
115 var kBodySize = 5; | |
116 var kNameOffset = kHeaderSize + 21 + kBodySize + 1; | |
117 | |
118 var data = bytesWithHeader( | |
119 // -- memory | |
120 kDeclMemory, | |
121 1, 1, 1, | |
122 // -- signatures | |
123 kDeclSignatures, 1, | |
124 2, kAstI32, kAstF64, kAstF64, // (f64,f64)->int | |
125 // -- functions | |
126 kDeclFunctions, 1, | |
127 kDeclFunctionName | kDeclFunctionExport, | |
128 0, 0, // signature index | |
129 kNameOffset, 0, 0, 0, // name offset | |
130 kBodySize, 0, | |
131 // -- body | |
132 kExprF64Lt, // -- | |
133 kExprGetLocal, 0, // -- | |
134 kExprGetLocal, 1, // -- | |
135 kDeclEnd, | |
136 'f', 'l', 't', 0 // name | |
137 ); | |
138 | |
139 var module = _WASMEXP_.instantiateModule(data); | |
140 | |
141 assertEquals("function", typeof module.flt); | |
142 assertEquals(1, module.flt(-2, -1)); | |
143 assertEquals(0, module.flt(7.3, 7.1)); | |
144 assertEquals(1, module.flt(7.1, 7.3)); | |
145 })(); | |
OLD | NEW |