OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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 'use strict'; | 7 'use strict'; |
8 | 8 |
9 load("test/mjsunit/wasm/wasm-constants.js"); | 9 load("test/mjsunit/wasm/wasm-constants.js"); |
10 load("test/mjsunit/wasm/wasm-module-builder.js"); | 10 load("test/mjsunit/wasm/wasm-module-builder.js"); |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 } | 145 } |
146 for (let key of [-1, table.length, table.length * 10]) { | 146 for (let key of [-1, table.length, table.length * 10]) { |
147 assertThrows(() => table.get(key), RangeError); | 147 assertThrows(() => table.get(key), RangeError); |
148 } | 148 } |
149 assertThrows(() => table.get(Symbol()), TypeError); | 149 assertThrows(() => table.get(Symbol()), TypeError); |
150 assertThrows(() => WebAssembly.Table.prototype.get.call([], 0), TypeError); | 150 assertThrows(() => WebAssembly.Table.prototype.get.call([], 0), TypeError); |
151 })(); | 151 })(); |
152 | 152 |
153 (function TestSet() { | 153 (function TestSet() { |
154 let builder = new WasmModuleBuilder; | 154 let builder = new WasmModuleBuilder; |
155 builder.addExport("wasm", builder.addFunction("", kSig_v_v)); | 155 builder.addExport("wasm", builder.addFunction("", kSig_v_v).addBody([])); |
156 builder.addExport("host", builder.addImport("test", "f", kSig_v_v)); | 156 builder.addExport("host", builder.addImport("test", "f", kSig_v_v)); |
157 let {wasm, host} = builder.instantiate({test: {f() {}}}).exports; | 157 let {wasm, host} = builder.instantiate({test: {f() {}}}).exports; |
158 | 158 |
159 let table = new WebAssembly.Table({element: "anyfunc", initial: 10}); | 159 let table = new WebAssembly.Table({element: "anyfunc", initial: 10}); |
160 | 160 |
161 for (let f of [wasm, host]) { | 161 for (let f of [wasm, host]) { |
162 for (let i = 0; i < table.length; ++i) table.set(i, null); | 162 for (let i = 0; i < table.length; ++i) table.set(i, null); |
163 for (let i = 0; i < table.length; ++i) { | 163 for (let i = 0; i < table.length; ++i) { |
164 assertSame(null, table.get(i)); | 164 assertSame(null, table.get(i)); |
165 assertSame(undefined, table.set(i, f)); | 165 assertSame(undefined, table.set(i, f)); |
(...skipping 27 matching lines...) Expand all Loading... |
193 | 193 |
194 assertThrows(() => table.set(Symbol(), f), TypeError); | 194 assertThrows(() => table.set(Symbol(), f), TypeError); |
195 assertThrows(() => WebAssembly.Table.prototype.set.call([], 0, f), | 195 assertThrows(() => WebAssembly.Table.prototype.set.call([], 0, f), |
196 TypeError); | 196 TypeError); |
197 } | 197 } |
198 })(); | 198 })(); |
199 | 199 |
200 | 200 |
201 (function TestIndexing() { | 201 (function TestIndexing() { |
202 let builder = new WasmModuleBuilder; | 202 let builder = new WasmModuleBuilder; |
203 builder.addExport("wasm", builder.addFunction("", kSig_v_v)); | 203 builder.addExport("wasm", builder.addFunction("", kSig_v_v).addBody([])); |
204 builder.addExport("host", builder.addImport("test", "f", kSig_v_v)); | 204 builder.addExport("host", builder.addImport("test", "f", kSig_v_v)); |
205 let {wasm, host} = builder.instantiate({test: {f() {}}}).exports; | 205 let {wasm, host} = builder.instantiate({test: {f() {}}}).exports; |
206 | 206 |
207 let table = new WebAssembly.Table({element: "anyfunc", initial: 10}); | 207 let table = new WebAssembly.Table({element: "anyfunc", initial: 10}); |
208 | 208 |
209 for (let f of [wasm, host, () => {}, 5, {}, ""]) { | 209 for (let f of [wasm, host, () => {}, 5, {}, ""]) { |
210 for (let i = 0; i < table.length; ++i) table[i] = f; | 210 for (let i = 0; i < table.length; ++i) table[i] = f; |
211 for (let i = 0; i < table.length; ++i) { | 211 for (let i = 0; i < table.length; ++i) { |
212 assertSame(null, table.get(i)); | 212 assertSame(null, table.get(i)); |
213 assertSame(f, table[i]); | 213 assertSame(f, table[i]); |
214 } | 214 } |
215 | 215 |
216 for (let key of [0.4, "", NaN, {}, [], () => {}]) { | 216 for (let key of [0.4, "", NaN, {}, [], () => {}]) { |
217 assertSame(f, table[key] = f); | 217 assertSame(f, table[key] = f); |
218 assertSame(f, table[key]); | 218 assertSame(f, table[key]); |
219 assertSame(null, table.get(key)); | 219 assertSame(null, table.get(key)); |
220 } | 220 } |
221 } | 221 } |
222 })(); | 222 })(); |
223 | 223 |
224 (function TestGrow() { | 224 (function TestGrow() { |
225 let builder = new WasmModuleBuilder; | 225 let builder = new WasmModuleBuilder; |
226 builder.addExport("wasm", builder.addFunction("", kSig_v_v)); | 226 builder.addExport("wasm", builder.addFunction("", kSig_v_v).addBody([])); |
227 builder.addExport("host", builder.addImport("test", "f", kSig_v_v)); | 227 builder.addExport("host", builder.addImport("test", "f", kSig_v_v)); |
228 let {wasm, host} = builder.instantiate({test: {f() {}}}).exports; | 228 let {wasm, host} = builder.instantiate({test: {f() {}}}).exports; |
229 | 229 |
230 function init(table) { | 230 function init(table) { |
231 for (let i = 0; i < 5; ++i) table.set(i, wasm); | 231 for (let i = 0; i < 5; ++i) table.set(i, wasm); |
232 for (let i = 15; i < 20; ++i) table.set(i, host); | 232 for (let i = 15; i < 20; ++i) table.set(i, host); |
233 } | 233 } |
234 function check(table) { | 234 function check(table) { |
235 for (let i = 0; i < 5; ++i) assertSame(wasm, table.get(i)); | 235 for (let i = 0; i < 5; ++i) assertSame(wasm, table.get(i)); |
236 for (let i = 6; i < 15; ++i) assertSame(null, table.get(i)); | 236 for (let i = 6; i < 15; ++i) assertSame(null, table.get(i)); |
(...skipping 17 matching lines...) Expand all Loading... |
254 check(table); | 254 check(table); |
255 table.grow(5); | 255 table.grow(5); |
256 check(table); | 256 check(table); |
257 table.grow(0); | 257 table.grow(0); |
258 check(table); | 258 check(table); |
259 assertThrows(() => table.grow(1), RangeError); | 259 assertThrows(() => table.grow(1), RangeError); |
260 assertThrows(() => table.grow(-10), RangeError); | 260 assertThrows(() => table.grow(-10), RangeError); |
261 | 261 |
262 assertThrows(() => WebAssembly.Table.prototype.grow.call([], 0), TypeError); | 262 assertThrows(() => WebAssembly.Table.prototype.grow.call([], 0), TypeError); |
263 })(); | 263 })(); |
OLD | NEW |