diff options
Diffstat (limited to 'js/src/jit-test/tests/wasm/spec/spec/bulk.wast.js')
-rw-r--r-- | js/src/jit-test/tests/wasm/spec/spec/bulk.wast.js | 499 |
1 files changed, 499 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/wasm/spec/spec/bulk.wast.js b/js/src/jit-test/tests/wasm/spec/spec/bulk.wast.js new file mode 100644 index 0000000000..b0cefa4a73 --- /dev/null +++ b/js/src/jit-test/tests/wasm/spec/spec/bulk.wast.js @@ -0,0 +1,499 @@ +/* Copyright 2021 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// ./test/core/bulk.wast + +// ./test/core/bulk.wast:2 +let $0 = instantiate(`(module + (memory 1) + (data "foo"))`); + +// ./test/core/bulk.wast:6 +let $1 = instantiate(`(module + (table 3 funcref) + (elem funcref (ref.func 0) (ref.null func) (ref.func 1)) + (func) + (func))`); + +// ./test/core/bulk.wast:13 +let $2 = instantiate(`(module + (memory 1) + + (func (export "fill") (param i32 i32 i32) + (memory.fill + (local.get 0) + (local.get 1) + (local.get 2))) + + (func (export "load8_u") (param i32) (result i32) + (i32.load8_u (local.get 0))) +)`); + +// ./test/core/bulk.wast:27 +invoke($2, `fill`, [1, 255, 3]); + +// ./test/core/bulk.wast:28 +assert_return(() => invoke($2, `load8_u`, [0]), [value("i32", 0)]); + +// ./test/core/bulk.wast:29 +assert_return(() => invoke($2, `load8_u`, [1]), [value("i32", 255)]); + +// ./test/core/bulk.wast:30 +assert_return(() => invoke($2, `load8_u`, [2]), [value("i32", 255)]); + +// ./test/core/bulk.wast:31 +assert_return(() => invoke($2, `load8_u`, [3]), [value("i32", 255)]); + +// ./test/core/bulk.wast:32 +assert_return(() => invoke($2, `load8_u`, [4]), [value("i32", 0)]); + +// ./test/core/bulk.wast:35 +invoke($2, `fill`, [0, 48042, 2]); + +// ./test/core/bulk.wast:36 +assert_return(() => invoke($2, `load8_u`, [0]), [value("i32", 170)]); + +// ./test/core/bulk.wast:37 +assert_return(() => invoke($2, `load8_u`, [1]), [value("i32", 170)]); + +// ./test/core/bulk.wast:40 +invoke($2, `fill`, [0, 0, 65536]); + +// ./test/core/bulk.wast:43 +assert_trap(() => invoke($2, `fill`, [65280, 1, 257]), `out of bounds memory access`); + +// ./test/core/bulk.wast:45 +assert_return(() => invoke($2, `load8_u`, [65280]), [value("i32", 0)]); + +// ./test/core/bulk.wast:46 +assert_return(() => invoke($2, `load8_u`, [65535]), [value("i32", 0)]); + +// ./test/core/bulk.wast:49 +invoke($2, `fill`, [65536, 0, 0]); + +// ./test/core/bulk.wast:52 +assert_trap(() => invoke($2, `fill`, [65537, 0, 0]), `out of bounds memory access`); + +// ./test/core/bulk.wast:57 +let $3 = instantiate(`(module + (memory (data "\\aa\\bb\\cc\\dd")) + + (func (export "copy") (param i32 i32 i32) + (memory.copy + (local.get 0) + (local.get 1) + (local.get 2))) + + (func (export "load8_u") (param i32) (result i32) + (i32.load8_u (local.get 0))) +)`); + +// ./test/core/bulk.wast:71 +invoke($3, `copy`, [10, 0, 4]); + +// ./test/core/bulk.wast:73 +assert_return(() => invoke($3, `load8_u`, [9]), [value("i32", 0)]); + +// ./test/core/bulk.wast:74 +assert_return(() => invoke($3, `load8_u`, [10]), [value("i32", 170)]); + +// ./test/core/bulk.wast:75 +assert_return(() => invoke($3, `load8_u`, [11]), [value("i32", 187)]); + +// ./test/core/bulk.wast:76 +assert_return(() => invoke($3, `load8_u`, [12]), [value("i32", 204)]); + +// ./test/core/bulk.wast:77 +assert_return(() => invoke($3, `load8_u`, [13]), [value("i32", 221)]); + +// ./test/core/bulk.wast:78 +assert_return(() => invoke($3, `load8_u`, [14]), [value("i32", 0)]); + +// ./test/core/bulk.wast:81 +invoke($3, `copy`, [8, 10, 4]); + +// ./test/core/bulk.wast:82 +assert_return(() => invoke($3, `load8_u`, [8]), [value("i32", 170)]); + +// ./test/core/bulk.wast:83 +assert_return(() => invoke($3, `load8_u`, [9]), [value("i32", 187)]); + +// ./test/core/bulk.wast:84 +assert_return(() => invoke($3, `load8_u`, [10]), [value("i32", 204)]); + +// ./test/core/bulk.wast:85 +assert_return(() => invoke($3, `load8_u`, [11]), [value("i32", 221)]); + +// ./test/core/bulk.wast:86 +assert_return(() => invoke($3, `load8_u`, [12]), [value("i32", 204)]); + +// ./test/core/bulk.wast:87 +assert_return(() => invoke($3, `load8_u`, [13]), [value("i32", 221)]); + +// ./test/core/bulk.wast:90 +invoke($3, `copy`, [10, 7, 6]); + +// ./test/core/bulk.wast:91 +assert_return(() => invoke($3, `load8_u`, [10]), [value("i32", 0)]); + +// ./test/core/bulk.wast:92 +assert_return(() => invoke($3, `load8_u`, [11]), [value("i32", 170)]); + +// ./test/core/bulk.wast:93 +assert_return(() => invoke($3, `load8_u`, [12]), [value("i32", 187)]); + +// ./test/core/bulk.wast:94 +assert_return(() => invoke($3, `load8_u`, [13]), [value("i32", 204)]); + +// ./test/core/bulk.wast:95 +assert_return(() => invoke($3, `load8_u`, [14]), [value("i32", 221)]); + +// ./test/core/bulk.wast:96 +assert_return(() => invoke($3, `load8_u`, [15]), [value("i32", 204)]); + +// ./test/core/bulk.wast:97 +assert_return(() => invoke($3, `load8_u`, [16]), [value("i32", 0)]); + +// ./test/core/bulk.wast:100 +invoke($3, `copy`, [65280, 0, 256]); + +// ./test/core/bulk.wast:101 +invoke($3, `copy`, [65024, 65280, 256]); + +// ./test/core/bulk.wast:104 +invoke($3, `copy`, [65536, 0, 0]); + +// ./test/core/bulk.wast:105 +invoke($3, `copy`, [0, 65536, 0]); + +// ./test/core/bulk.wast:108 +assert_trap(() => invoke($3, `copy`, [65537, 0, 0]), `out of bounds memory access`); + +// ./test/core/bulk.wast:110 +assert_trap(() => invoke($3, `copy`, [0, 65537, 0]), `out of bounds memory access`); + +// ./test/core/bulk.wast:115 +let $4 = instantiate(`(module + (memory 1) + (data "\\aa\\bb\\cc\\dd") + + (func (export "init") (param i32 i32 i32) + (memory.init 0 + (local.get 0) + (local.get 1) + (local.get 2))) + + (func (export "load8_u") (param i32) (result i32) + (i32.load8_u (local.get 0))) +)`); + +// ./test/core/bulk.wast:129 +invoke($4, `init`, [0, 1, 2]); + +// ./test/core/bulk.wast:130 +assert_return(() => invoke($4, `load8_u`, [0]), [value("i32", 187)]); + +// ./test/core/bulk.wast:131 +assert_return(() => invoke($4, `load8_u`, [1]), [value("i32", 204)]); + +// ./test/core/bulk.wast:132 +assert_return(() => invoke($4, `load8_u`, [2]), [value("i32", 0)]); + +// ./test/core/bulk.wast:135 +invoke($4, `init`, [65532, 0, 4]); + +// ./test/core/bulk.wast:138 +assert_trap(() => invoke($4, `init`, [65534, 0, 3]), `out of bounds memory access`); + +// ./test/core/bulk.wast:140 +assert_return(() => invoke($4, `load8_u`, [65534]), [value("i32", 204)]); + +// ./test/core/bulk.wast:141 +assert_return(() => invoke($4, `load8_u`, [65535]), [value("i32", 221)]); + +// ./test/core/bulk.wast:144 +invoke($4, `init`, [65536, 0, 0]); + +// ./test/core/bulk.wast:145 +invoke($4, `init`, [0, 4, 0]); + +// ./test/core/bulk.wast:148 +assert_trap(() => invoke($4, `init`, [65537, 0, 0]), `out of bounds memory access`); + +// ./test/core/bulk.wast:150 +assert_trap(() => invoke($4, `init`, [0, 5, 0]), `out of bounds memory access`); + +// ./test/core/bulk.wast:154 +let $5 = instantiate(`(module + (memory 1) + (data $$p "x") + (data $$a (memory 0) (i32.const 0) "x") + + (func (export "drop_passive") (data.drop $$p)) + (func (export "init_passive") (param $$len i32) + (memory.init $$p (i32.const 0) (i32.const 0) (local.get $$len))) + + (func (export "drop_active") (data.drop $$a)) + (func (export "init_active") (param $$len i32) + (memory.init $$a (i32.const 0) (i32.const 0) (local.get $$len))) +)`); + +// ./test/core/bulk.wast:168 +invoke($5, `init_passive`, [1]); + +// ./test/core/bulk.wast:169 +invoke($5, `drop_passive`, []); + +// ./test/core/bulk.wast:170 +invoke($5, `drop_passive`, []); + +// ./test/core/bulk.wast:171 +assert_return(() => invoke($5, `init_passive`, [0]), []); + +// ./test/core/bulk.wast:172 +assert_trap(() => invoke($5, `init_passive`, [1]), `out of bounds memory access`); + +// ./test/core/bulk.wast:173 +invoke($5, `init_passive`, [0]); + +// ./test/core/bulk.wast:174 +invoke($5, `drop_active`, []); + +// ./test/core/bulk.wast:175 +assert_return(() => invoke($5, `init_active`, [0]), []); + +// ./test/core/bulk.wast:176 +assert_trap(() => invoke($5, `init_active`, [1]), `out of bounds memory access`); + +// ./test/core/bulk.wast:177 +invoke($5, `init_active`, [0]); + +// ./test/core/bulk.wast:181 +let $6 = instantiate(`(module + ;; 65 data segments. 64 is the smallest positive number that is encoded + ;; differently as a signed LEB. + (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") + (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") + (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") + (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") + (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") + (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") + (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") + (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") + (data "") + (func (data.drop 64)))`); + +// ./test/core/bulk.wast:196 +let $7 = instantiate(`(module (data "goodbye") (func (data.drop 0)))`); + +// ./test/core/bulk.wast:199 +let $8 = instantiate(`(module + (table 3 funcref) + (elem funcref + (ref.func $$zero) (ref.func $$one) (ref.func $$zero) (ref.func $$one)) + + (func $$zero (result i32) (i32.const 0)) + (func $$one (result i32) (i32.const 1)) + + (func (export "init") (param i32 i32 i32) + (table.init 0 + (local.get 0) + (local.get 1) + (local.get 2))) + + (func (export "call") (param i32) (result i32) + (call_indirect (result i32) + (local.get 0))) +)`); + +// ./test/core/bulk.wast:219 +assert_trap(() => invoke($8, `init`, [2, 0, 2]), `out of bounds table access`); + +// ./test/core/bulk.wast:221 +assert_trap(() => invoke($8, `call`, [2]), `uninitialized element 2`); + +// ./test/core/bulk.wast:224 +invoke($8, `init`, [0, 1, 2]); + +// ./test/core/bulk.wast:225 +assert_return(() => invoke($8, `call`, [0]), [value("i32", 1)]); + +// ./test/core/bulk.wast:226 +assert_return(() => invoke($8, `call`, [1]), [value("i32", 0)]); + +// ./test/core/bulk.wast:227 +assert_trap(() => invoke($8, `call`, [2]), `uninitialized element`); + +// ./test/core/bulk.wast:230 +invoke($8, `init`, [1, 2, 2]); + +// ./test/core/bulk.wast:233 +invoke($8, `init`, [3, 0, 0]); + +// ./test/core/bulk.wast:234 +invoke($8, `init`, [0, 4, 0]); + +// ./test/core/bulk.wast:237 +assert_trap(() => invoke($8, `init`, [4, 0, 0]), `out of bounds table access`); + +// ./test/core/bulk.wast:239 +assert_trap(() => invoke($8, `init`, [0, 5, 0]), `out of bounds table access`); + +// ./test/core/bulk.wast:244 +let $9 = instantiate(`(module + (table 1 funcref) + (func $$f) + (elem $$p funcref (ref.func $$f)) + (elem $$a (table 0) (i32.const 0) func $$f) + + (func (export "drop_passive") (elem.drop $$p)) + (func (export "init_passive") (param $$len i32) + (table.init $$p (i32.const 0) (i32.const 0) (local.get $$len)) + ) + + (func (export "drop_active") (elem.drop $$a)) + (func (export "init_active") (param $$len i32) + (table.init $$a (i32.const 0) (i32.const 0) (local.get $$len)) + ) +)`); + +// ./test/core/bulk.wast:261 +invoke($9, `init_passive`, [1]); + +// ./test/core/bulk.wast:262 +invoke($9, `drop_passive`, []); + +// ./test/core/bulk.wast:263 +invoke($9, `drop_passive`, []); + +// ./test/core/bulk.wast:264 +assert_return(() => invoke($9, `init_passive`, [0]), []); + +// ./test/core/bulk.wast:265 +assert_trap(() => invoke($9, `init_passive`, [1]), `out of bounds table access`); + +// ./test/core/bulk.wast:266 +invoke($9, `init_passive`, [0]); + +// ./test/core/bulk.wast:267 +invoke($9, `drop_active`, []); + +// ./test/core/bulk.wast:268 +assert_return(() => invoke($9, `init_active`, [0]), []); + +// ./test/core/bulk.wast:269 +assert_trap(() => invoke($9, `init_active`, [1]), `out of bounds table access`); + +// ./test/core/bulk.wast:270 +invoke($9, `init_active`, [0]); + +// ./test/core/bulk.wast:274 +let $10 = instantiate(`(module + ;; 65 elem segments. 64 is the smallest positive number that is encoded + ;; differently as a signed LEB. + (elem funcref) (elem funcref) (elem funcref) (elem funcref) + (elem funcref) (elem funcref) (elem funcref) (elem funcref) + (elem funcref) (elem funcref) (elem funcref) (elem funcref) + (elem funcref) (elem funcref) (elem funcref) (elem funcref) + (elem funcref) (elem funcref) (elem funcref) (elem funcref) + (elem funcref) (elem funcref) (elem funcref) (elem funcref) + (elem funcref) (elem funcref) (elem funcref) (elem funcref) + (elem funcref) (elem funcref) (elem funcref) (elem funcref) + (elem funcref) (elem funcref) (elem funcref) (elem funcref) + (elem funcref) (elem funcref) (elem funcref) (elem funcref) + (elem funcref) (elem funcref) (elem funcref) (elem funcref) + (elem funcref) (elem funcref) (elem funcref) (elem funcref) + (elem funcref) (elem funcref) (elem funcref) (elem funcref) + (elem funcref) (elem funcref) (elem funcref) (elem funcref) + (elem funcref) (elem funcref) (elem funcref) (elem funcref) + (elem funcref) (elem funcref) (elem funcref) (elem funcref) + (elem funcref) + (func (elem.drop 64)))`); + +// ./test/core/bulk.wast:297 +let $11 = instantiate(`(module (elem funcref (ref.func 0)) (func (elem.drop 0)))`); + +// ./test/core/bulk.wast:300 +let $12 = instantiate(`(module + (table 10 funcref) + (elem (i32.const 0) $$zero $$one $$two) + (func $$zero (result i32) (i32.const 0)) + (func $$one (result i32) (i32.const 1)) + (func $$two (result i32) (i32.const 2)) + + (func (export "copy") (param i32 i32 i32) + (table.copy + (local.get 0) + (local.get 1) + (local.get 2))) + + (func (export "call") (param i32) (result i32) + (call_indirect (result i32) + (local.get 0))) +)`); + +// ./test/core/bulk.wast:319 +invoke($12, `copy`, [3, 0, 3]); + +// ./test/core/bulk.wast:321 +assert_return(() => invoke($12, `call`, [3]), [value("i32", 0)]); + +// ./test/core/bulk.wast:322 +assert_return(() => invoke($12, `call`, [4]), [value("i32", 1)]); + +// ./test/core/bulk.wast:323 +assert_return(() => invoke($12, `call`, [5]), [value("i32", 2)]); + +// ./test/core/bulk.wast:326 +invoke($12, `copy`, [0, 1, 3]); + +// ./test/core/bulk.wast:328 +assert_return(() => invoke($12, `call`, [0]), [value("i32", 1)]); + +// ./test/core/bulk.wast:329 +assert_return(() => invoke($12, `call`, [1]), [value("i32", 2)]); + +// ./test/core/bulk.wast:330 +assert_return(() => invoke($12, `call`, [2]), [value("i32", 0)]); + +// ./test/core/bulk.wast:333 +invoke($12, `copy`, [2, 0, 3]); + +// ./test/core/bulk.wast:335 +assert_return(() => invoke($12, `call`, [2]), [value("i32", 1)]); + +// ./test/core/bulk.wast:336 +assert_return(() => invoke($12, `call`, [3]), [value("i32", 2)]); + +// ./test/core/bulk.wast:337 +assert_return(() => invoke($12, `call`, [4]), [value("i32", 0)]); + +// ./test/core/bulk.wast:340 +invoke($12, `copy`, [6, 8, 2]); + +// ./test/core/bulk.wast:341 +invoke($12, `copy`, [8, 6, 2]); + +// ./test/core/bulk.wast:344 +invoke($12, `copy`, [10, 0, 0]); + +// ./test/core/bulk.wast:345 +invoke($12, `copy`, [0, 10, 0]); + +// ./test/core/bulk.wast:348 +assert_trap(() => invoke($12, `copy`, [11, 0, 0]), `out of bounds table access`); + +// ./test/core/bulk.wast:350 +assert_trap(() => invoke($12, `copy`, [0, 11, 0]), `out of bounds table access`); |