blob: 98ad657f522c1653c71b8ed0425e92626d6deea7 [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");
8
9var module = (function () {
10 var kBodySize = 5;
11 var kNameOffset = 21 + kBodySize + 1;
12
13 return _WASMEXP_.instantiateModule(bytes(
14 // -- memory
15 kDeclMemory,
16 12, 12, 1,
17 // -- signatures
18 kDeclSignatures, 1,
19 2, kAstI32, kAstI32, kAstI32, // int, int -> int
20 // -- functions
21 kDeclFunctions, 1,
22 kDeclFunctionName | kDeclFunctionExport,
23 0, 0,
24 kNameOffset, 0, 0, 0, // name offset
25 kBodySize, 0,
26 // -- body
27 kExprI32Sub, // --
28 kExprGetLocal, 0, // --
29 kExprGetLocal, 1, // --
30 kDeclEnd,
31 's', 'u', 'b', 0 // name
32 ));
33})();
34
35// Check the module exists.
36assertFalse(module === undefined);
37assertFalse(module === null);
38assertFalse(module === 0);
39assertEquals("object", typeof module);
40
41// Check the memory is an ArrayBuffer.
42var mem = module.memory;
43assertFalse(mem === undefined);
44assertFalse(mem === null);
45assertFalse(mem === 0);
46assertEquals("object", typeof mem);
47assertTrue(mem instanceof ArrayBuffer);
48for (var i = 0; i < 4; i++) {
49 module.memory = 0; // should be ignored
50 assertEquals(mem, module.memory);
51}
52
53assertEquals(4096, module.memory.byteLength);
54
55// Check the properties of the sub function.
56assertEquals("function", typeof module.sub);
57
58assertEquals(-55, module.sub(33, 88));
59assertEquals(-55555, module.sub(33333, 88888));
60assertEquals(-5555555, module.sub(3333333, 8888888));
61
62
63var module = (function() {
64 var kBodySize = 1;
65 var kNameOffset2 = 19 + kBodySize + 1;
66
67 return _WASMEXP_.instantiateModule(bytes(
68 // -- memory
69 kDeclMemory,
70 12, 12, 1,
71 // -- signatures
72 kDeclSignatures, 1,
73 0, kAstStmt, // signature: void -> void
74 // -- functions
75 kDeclFunctions, 1,
76 kDeclFunctionName | kDeclFunctionExport,
77 0, 0, // signature index
78 kNameOffset2, 0, 0, 0, // name offset
79 kBodySize, 0,
80 kExprNop, // body
81 kDeclEnd,
82 'n', 'o', 'p', 0 // name
83 ));
84})();
85
86// Check the module exists.
87assertFalse(module === undefined);
88assertFalse(module === null);
89assertFalse(module === 0);
90assertEquals("object", typeof module);
91
92// Check the memory is an ArrayBuffer.
93var mem = module.memory;
94assertFalse(mem === undefined);
95assertFalse(mem === null);
96assertFalse(mem === 0);
97assertEquals("object", typeof mem);
98assertTrue(mem instanceof ArrayBuffer);
99for (var i = 0; i < 4; i++) {
100 module.memory = 0; // should be ignored
101 assertEquals(mem, module.memory);
102}
103
104assertEquals(4096, module.memory.byteLength);
105
106// Check the properties of the sub function.
107assertFalse(module.nop === undefined);
108assertFalse(module.nop === null);
109assertFalse(module.nop === 0);
110assertEquals("function", typeof module.nop);
111
112assertEquals(undefined, module.nop());
113
114(function testLt() {
115 var kBodySize = 5;
116 var kNameOffset = 21 + kBodySize + 1;
117
118 var data = bytes(
119 // -- memory
120 kDeclMemory,
121 12, 12, 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})();