diff options
Diffstat (limited to 'js/src/jit-test/tests/wasm/spec/spec/loop.wast.js')
-rw-r--r-- | js/src/jit-test/tests/wasm/spec/spec/loop.wast.js | 986 |
1 files changed, 986 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/wasm/spec/spec/loop.wast.js b/js/src/jit-test/tests/wasm/spec/spec/loop.wast.js new file mode 100644 index 0000000000..d00d9d4a6e --- /dev/null +++ b/js/src/jit-test/tests/wasm/spec/spec/loop.wast.js @@ -0,0 +1,986 @@ +/* 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/loop.wast + +// ./test/core/loop.wast:3 +let $0 = instantiate(`(module + (memory 1) + + (func $$dummy) + + (func (export "empty") + (loop) + (loop $$l) + ) + + (func (export "singular") (result i32) + (loop (nop)) + (loop (result i32) (i32.const 7)) + ) + + (func (export "multi") (result i32) + (loop (call $$dummy) (call $$dummy) (call $$dummy) (call $$dummy)) + (loop (result i32) (call $$dummy) (call $$dummy) (i32.const 8) (call $$dummy)) + (drop) + (loop (result i32 i64 i32) + (call $$dummy) (call $$dummy) (call $$dummy) (i32.const 8) (call $$dummy) + (call $$dummy) (call $$dummy) (call $$dummy) (i64.const 7) (call $$dummy) + (call $$dummy) (call $$dummy) (call $$dummy) (i32.const 9) (call $$dummy) + ) + (drop) (drop) + ) + + (func (export "nested") (result i32) + (loop (result i32) + (loop (call $$dummy) (block) (nop)) + (loop (result i32) (call $$dummy) (i32.const 9)) + ) + ) + + (func (export "deep") (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (loop (result i32) (block (result i32) + (call $$dummy) (i32.const 150) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + ) + + (func (export "as-select-first") (result i32) + (select (loop (result i32) (i32.const 1)) (i32.const 2) (i32.const 3)) + ) + (func (export "as-select-mid") (result i32) + (select (i32.const 2) (loop (result i32) (i32.const 1)) (i32.const 3)) + ) + (func (export "as-select-last") (result i32) + (select (i32.const 2) (i32.const 3) (loop (result i32) (i32.const 1))) + ) + + (func (export "as-if-condition") + (loop (result i32) (i32.const 1)) (if (then (call $$dummy))) + ) + (func (export "as-if-then") (result i32) + (if (result i32) (i32.const 1) (then (loop (result i32) (i32.const 1))) (else (i32.const 2))) + ) + (func (export "as-if-else") (result i32) + (if (result i32) (i32.const 1) (then (i32.const 2)) (else (loop (result i32) (i32.const 1)))) + ) + + (func (export "as-br_if-first") (result i32) + (block (result i32) (br_if 0 (loop (result i32) (i32.const 1)) (i32.const 2))) + ) + (func (export "as-br_if-last") (result i32) + (block (result i32) (br_if 0 (i32.const 2) (loop (result i32) (i32.const 1)))) + ) + + (func (export "as-br_table-first") (result i32) + (block (result i32) (loop (result i32) (i32.const 1)) (i32.const 2) (br_table 0 0)) + ) + (func (export "as-br_table-last") (result i32) + (block (result i32) (i32.const 2) (loop (result i32) (i32.const 1)) (br_table 0 0)) + ) + + (func $$func (param i32 i32) (result i32) (local.get 0)) + (type $$check (func (param i32 i32) (result i32))) + (table funcref (elem $$func)) + (func (export "as-call_indirect-first") (result i32) + (block (result i32) + (call_indirect (type $$check) + (loop (result i32) (i32.const 1)) (i32.const 2) (i32.const 0) + ) + ) + ) + (func (export "as-call_indirect-mid") (result i32) + (block (result i32) + (call_indirect (type $$check) + (i32.const 2) (loop (result i32) (i32.const 1)) (i32.const 0) + ) + ) + ) + (func (export "as-call_indirect-last") (result i32) + (block (result i32) + (call_indirect (type $$check) + (i32.const 1) (i32.const 2) (loop (result i32) (i32.const 0)) + ) + ) + ) + + (func (export "as-store-first") + (loop (result i32) (i32.const 1)) (i32.const 1) (i32.store) + ) + (func (export "as-store-last") + (i32.const 10) (loop (result i32) (i32.const 1)) (i32.store) + ) + + (func (export "as-memory.grow-value") (result i32) + (memory.grow (loop (result i32) (i32.const 1))) + ) + + (func $$f (param i32) (result i32) (local.get 0)) + + (func (export "as-call-value") (result i32) + (call $$f (loop (result i32) (i32.const 1))) + ) + (func (export "as-return-value") (result i32) + (loop (result i32) (i32.const 1)) (return) + ) + (func (export "as-drop-operand") + (drop (loop (result i32) (i32.const 1))) + ) + (func (export "as-br-value") (result i32) + (block (result i32) (br 0 (loop (result i32) (i32.const 1)))) + ) + (func (export "as-local.set-value") (result i32) + (local i32) (local.set 0 (loop (result i32) (i32.const 1))) (local.get 0) + ) + (func (export "as-local.tee-value") (result i32) + (local i32) (local.tee 0 (loop (result i32) (i32.const 1))) + ) + (global $$a (mut i32) (i32.const 0)) + (func (export "as-global.set-value") (result i32) + (global.set $$a (loop (result i32) (i32.const 1))) + (global.get $$a) + ) + (func (export "as-load-operand") (result i32) + (i32.load (loop (result i32) (i32.const 1))) + ) + + (func (export "as-unary-operand") (result i32) + (i32.ctz (loop (result i32) (call $$dummy) (i32.const 13))) + ) + (func (export "as-binary-operand") (result i32) + (i32.mul + (loop (result i32) (call $$dummy) (i32.const 3)) + (loop (result i32) (call $$dummy) (i32.const 4)) + ) + ) + (func (export "as-test-operand") (result i32) + (i32.eqz (loop (result i32) (call $$dummy) (i32.const 13))) + ) + (func (export "as-compare-operand") (result i32) + (f32.gt + (loop (result f32) (call $$dummy) (f32.const 3)) + (loop (result f32) (call $$dummy) (f32.const 3)) + ) + ) + (func (export "as-binary-operands") (result i32) + (i32.mul + (loop (result i32 i32) + (call $$dummy) (i32.const 3) (call $$dummy) (i32.const 4) + ) + ) + ) + (func (export "as-compare-operands") (result i32) + (f32.gt + (loop (result f32 f32) + (call $$dummy) (f32.const 3) (call $$dummy) (f32.const 3) + ) + ) + ) + (func (export "as-mixed-operands") (result i32) + (loop (result i32 i32) + (call $$dummy) (i32.const 3) (call $$dummy) (i32.const 4) + ) + (i32.const 5) + (i32.add) + (i32.mul) + ) + + (func (export "break-bare") (result i32) + (block (loop (br 1) (br 0) (unreachable))) + (block (loop (br_if 1 (i32.const 1)) (unreachable))) + (block (loop (br_table 1 (i32.const 0)) (unreachable))) + (block (loop (br_table 1 1 1 (i32.const 1)) (unreachable))) + (i32.const 19) + ) + (func (export "break-value") (result i32) + (block (result i32) + (i32.const 0) + (loop (param i32) + (block (br 2 (i32.const 18))) + (br 0 (i32.const 20)) + ) + (i32.const 19) + ) + ) + (func (export "break-multi-value") (result i32 i32 i64) + (block (result i32 i32 i64) + (i32.const 0) (i32.const 0) (i64.const 0) + (loop (param i32 i32 i64) + (block (br 2 (i32.const 18) (i32.const -18) (i64.const 18))) + (br 0 (i32.const 20) (i32.const -20) (i64.const 20)) + ) + (i32.const 19) (i32.const -19) (i64.const 19) + ) + ) + (func (export "break-repeated") (result i32) + (block (result i32) + (loop (result i32) + (br 1 (i32.const 18)) + (br 1 (i32.const 19)) + (drop (br_if 1 (i32.const 20) (i32.const 0))) + (drop (br_if 1 (i32.const 20) (i32.const 1))) + (br 1 (i32.const 21)) + (br_table 1 (i32.const 22) (i32.const 0)) + (br_table 1 1 1 (i32.const 23) (i32.const 1)) + (i32.const 21) + ) + ) + ) + (func (export "break-inner") (result i32) + (local i32) + (local.set 0 (i32.const 0)) + (local.set 0 (i32.add (local.get 0) (block (result i32) (loop (result i32) (block (result i32) (br 2 (i32.const 0x1))))))) + (local.set 0 (i32.add (local.get 0) (block (result i32) (loop (result i32) (loop (result i32) (br 2 (i32.const 0x2))))))) + (local.set 0 (i32.add (local.get 0) (block (result i32) (loop (result i32) (block (result i32) (loop (result i32) (br 1 (i32.const 0x4)))))))) + (local.set 0 (i32.add (local.get 0) (block (result i32) (loop (result i32) (i32.ctz (br 1 (i32.const 0x8))))))) + (local.set 0 (i32.add (local.get 0) (block (result i32) (loop (result i32) (i32.ctz (loop (result i32) (br 2 (i32.const 0x10)))))))) + (local.get 0) + ) + (func (export "cont-inner") (result i32) + (local i32) + (local.set 0 (i32.const 0)) + (local.set 0 (i32.add (local.get 0) (loop (result i32) (loop (result i32) (br 1))))) + (local.set 0 (i32.add (local.get 0) (loop (result i32) (i32.ctz (br 0))))) + (local.set 0 (i32.add (local.get 0) (loop (result i32) (i32.ctz (loop (result i32) (br 1)))))) + (local.get 0) + ) + + (func (export "param") (result i32) + (i32.const 1) + (loop (param i32) (result i32) + (i32.const 2) + (i32.add) + ) + ) + (func (export "params") (result i32) + (i32.const 1) + (i32.const 2) + (loop (param i32 i32) (result i32) + (i32.add) + ) + ) + (func (export "params-id") (result i32) + (i32.const 1) + (i32.const 2) + (loop (param i32 i32) (result i32 i32)) + (i32.add) + ) + (func (export "param-break") (result i32) + (local $$x i32) + (i32.const 1) + (loop (param i32) (result i32) + (i32.const 4) + (i32.add) + (local.tee $$x) + (local.get $$x) + (i32.const 10) + (i32.lt_u) + (br_if 0) + ) + ) + (func (export "params-break") (result i32) + (local $$x i32) + (i32.const 1) + (i32.const 2) + (loop (param i32 i32) (result i32) + (i32.add) + (local.tee $$x) + (i32.const 3) + (local.get $$x) + (i32.const 10) + (i32.lt_u) + (br_if 0) + (drop) + ) + ) + (func (export "params-id-break") (result i32) + (local $$x i32) + (local.set $$x (i32.const 0)) + (i32.const 1) + (i32.const 2) + (loop (param i32 i32) (result i32 i32) + (local.set $$x (i32.add (local.get $$x) (i32.const 1))) + (br_if 0 (i32.lt_u (local.get $$x) (i32.const 10))) + ) + (i32.add) + ) + + (func $$fx (export "effects") (result i32) + (local i32) + (block + (loop + (local.set 0 (i32.const 1)) + (local.set 0 (i32.mul (local.get 0) (i32.const 3))) + (local.set 0 (i32.sub (local.get 0) (i32.const 5))) + (local.set 0 (i32.mul (local.get 0) (i32.const 7))) + (br 1) + (local.set 0 (i32.mul (local.get 0) (i32.const 100))) + ) + ) + (i32.eq (local.get 0) (i32.const -14)) + ) + + (func (export "while") (param i64) (result i64) + (local i64) + (local.set 1 (i64.const 1)) + (block + (loop + (br_if 1 (i64.eqz (local.get 0))) + (local.set 1 (i64.mul (local.get 0) (local.get 1))) + (local.set 0 (i64.sub (local.get 0) (i64.const 1))) + (br 0) + ) + ) + (local.get 1) + ) + + (func (export "for") (param i64) (result i64) + (local i64 i64) + (local.set 1 (i64.const 1)) + (local.set 2 (i64.const 2)) + (block + (loop + (br_if 1 (i64.gt_u (local.get 2) (local.get 0))) + (local.set 1 (i64.mul (local.get 1) (local.get 2))) + (local.set 2 (i64.add (local.get 2) (i64.const 1))) + (br 0) + ) + ) + (local.get 1) + ) + + (func (export "nesting") (param f32 f32) (result f32) + (local f32 f32) + (block + (loop + (br_if 1 (f32.eq (local.get 0) (f32.const 0))) + (local.set 2 (local.get 1)) + (block + (loop + (br_if 1 (f32.eq (local.get 2) (f32.const 0))) + (br_if 3 (f32.lt (local.get 2) (f32.const 0))) + (local.set 3 (f32.add (local.get 3) (local.get 2))) + (local.set 2 (f32.sub (local.get 2) (f32.const 2))) + (br 0) + ) + ) + (local.set 3 (f32.div (local.get 3) (local.get 0))) + (local.set 0 (f32.sub (local.get 0) (f32.const 1))) + (br 0) + ) + ) + (local.get 3) + ) + + (type $$block-sig-1 (func)) + (type $$block-sig-2 (func (result i32))) + (type $$block-sig-3 (func (param $$x i32))) + (type $$block-sig-4 (func (param i32 f64 i32) (result i32 f64 i32))) + + (func (export "type-use") + (loop (type $$block-sig-1)) + (loop (type $$block-sig-2) (i32.const 0)) + (loop (type $$block-sig-3) (drop)) + (i32.const 0) (f64.const 0) (i32.const 0) + (loop (type $$block-sig-4)) + (drop) (drop) (drop) + (loop (type $$block-sig-2) (result i32) (i32.const 0)) + (loop (type $$block-sig-3) (param i32) (drop)) + (i32.const 0) (f64.const 0) (i32.const 0) + (loop (type $$block-sig-4) + (param i32) (param f64 i32) (result i32 f64) (result i32) + ) + (drop) (drop) (drop) + ) +)`); + +// ./test/core/loop.wast:430 +assert_return(() => invoke($0, `empty`, []), []); + +// ./test/core/loop.wast:431 +assert_return(() => invoke($0, `singular`, []), [value("i32", 7)]); + +// ./test/core/loop.wast:432 +assert_return(() => invoke($0, `multi`, []), [value("i32", 8)]); + +// ./test/core/loop.wast:433 +assert_return(() => invoke($0, `nested`, []), [value("i32", 9)]); + +// ./test/core/loop.wast:434 +assert_return(() => invoke($0, `deep`, []), [value("i32", 150)]); + +// ./test/core/loop.wast:436 +assert_return(() => invoke($0, `as-select-first`, []), [value("i32", 1)]); + +// ./test/core/loop.wast:437 +assert_return(() => invoke($0, `as-select-mid`, []), [value("i32", 2)]); + +// ./test/core/loop.wast:438 +assert_return(() => invoke($0, `as-select-last`, []), [value("i32", 2)]); + +// ./test/core/loop.wast:440 +assert_return(() => invoke($0, `as-if-condition`, []), []); + +// ./test/core/loop.wast:441 +assert_return(() => invoke($0, `as-if-then`, []), [value("i32", 1)]); + +// ./test/core/loop.wast:442 +assert_return(() => invoke($0, `as-if-else`, []), [value("i32", 2)]); + +// ./test/core/loop.wast:444 +assert_return(() => invoke($0, `as-br_if-first`, []), [value("i32", 1)]); + +// ./test/core/loop.wast:445 +assert_return(() => invoke($0, `as-br_if-last`, []), [value("i32", 2)]); + +// ./test/core/loop.wast:447 +assert_return(() => invoke($0, `as-br_table-first`, []), [value("i32", 1)]); + +// ./test/core/loop.wast:448 +assert_return(() => invoke($0, `as-br_table-last`, []), [value("i32", 2)]); + +// ./test/core/loop.wast:450 +assert_return(() => invoke($0, `as-call_indirect-first`, []), [value("i32", 1)]); + +// ./test/core/loop.wast:451 +assert_return(() => invoke($0, `as-call_indirect-mid`, []), [value("i32", 2)]); + +// ./test/core/loop.wast:452 +assert_return(() => invoke($0, `as-call_indirect-last`, []), [value("i32", 1)]); + +// ./test/core/loop.wast:454 +assert_return(() => invoke($0, `as-store-first`, []), []); + +// ./test/core/loop.wast:455 +assert_return(() => invoke($0, `as-store-last`, []), []); + +// ./test/core/loop.wast:457 +assert_return(() => invoke($0, `as-memory.grow-value`, []), [value("i32", 1)]); + +// ./test/core/loop.wast:458 +assert_return(() => invoke($0, `as-call-value`, []), [value("i32", 1)]); + +// ./test/core/loop.wast:459 +assert_return(() => invoke($0, `as-return-value`, []), [value("i32", 1)]); + +// ./test/core/loop.wast:460 +assert_return(() => invoke($0, `as-drop-operand`, []), []); + +// ./test/core/loop.wast:461 +assert_return(() => invoke($0, `as-br-value`, []), [value("i32", 1)]); + +// ./test/core/loop.wast:462 +assert_return(() => invoke($0, `as-local.set-value`, []), [value("i32", 1)]); + +// ./test/core/loop.wast:463 +assert_return(() => invoke($0, `as-local.tee-value`, []), [value("i32", 1)]); + +// ./test/core/loop.wast:464 +assert_return(() => invoke($0, `as-global.set-value`, []), [value("i32", 1)]); + +// ./test/core/loop.wast:465 +assert_return(() => invoke($0, `as-load-operand`, []), [value("i32", 1)]); + +// ./test/core/loop.wast:467 +assert_return(() => invoke($0, `as-unary-operand`, []), [value("i32", 0)]); + +// ./test/core/loop.wast:468 +assert_return(() => invoke($0, `as-binary-operand`, []), [value("i32", 12)]); + +// ./test/core/loop.wast:469 +assert_return(() => invoke($0, `as-test-operand`, []), [value("i32", 0)]); + +// ./test/core/loop.wast:470 +assert_return(() => invoke($0, `as-compare-operand`, []), [value("i32", 0)]); + +// ./test/core/loop.wast:471 +assert_return(() => invoke($0, `as-binary-operands`, []), [value("i32", 12)]); + +// ./test/core/loop.wast:472 +assert_return(() => invoke($0, `as-compare-operands`, []), [value("i32", 0)]); + +// ./test/core/loop.wast:473 +assert_return(() => invoke($0, `as-mixed-operands`, []), [value("i32", 27)]); + +// ./test/core/loop.wast:475 +assert_return(() => invoke($0, `break-bare`, []), [value("i32", 19)]); + +// ./test/core/loop.wast:476 +assert_return(() => invoke($0, `break-value`, []), [value("i32", 18)]); + +// ./test/core/loop.wast:477 +assert_return( + () => invoke($0, `break-multi-value`, []), + [value("i32", 18), value("i32", -18), value("i64", 18n)], +); + +// ./test/core/loop.wast:480 +assert_return(() => invoke($0, `break-repeated`, []), [value("i32", 18)]); + +// ./test/core/loop.wast:481 +assert_return(() => invoke($0, `break-inner`, []), [value("i32", 31)]); + +// ./test/core/loop.wast:483 +assert_return(() => invoke($0, `param`, []), [value("i32", 3)]); + +// ./test/core/loop.wast:484 +assert_return(() => invoke($0, `params`, []), [value("i32", 3)]); + +// ./test/core/loop.wast:485 +assert_return(() => invoke($0, `params-id`, []), [value("i32", 3)]); + +// ./test/core/loop.wast:486 +assert_return(() => invoke($0, `param-break`, []), [value("i32", 13)]); + +// ./test/core/loop.wast:487 +assert_return(() => invoke($0, `params-break`, []), [value("i32", 12)]); + +// ./test/core/loop.wast:488 +assert_return(() => invoke($0, `params-id-break`, []), [value("i32", 3)]); + +// ./test/core/loop.wast:490 +assert_return(() => invoke($0, `effects`, []), [value("i32", 1)]); + +// ./test/core/loop.wast:492 +assert_return(() => invoke($0, `while`, [0n]), [value("i64", 1n)]); + +// ./test/core/loop.wast:493 +assert_return(() => invoke($0, `while`, [1n]), [value("i64", 1n)]); + +// ./test/core/loop.wast:494 +assert_return(() => invoke($0, `while`, [2n]), [value("i64", 2n)]); + +// ./test/core/loop.wast:495 +assert_return(() => invoke($0, `while`, [3n]), [value("i64", 6n)]); + +// ./test/core/loop.wast:496 +assert_return(() => invoke($0, `while`, [5n]), [value("i64", 120n)]); + +// ./test/core/loop.wast:497 +assert_return(() => invoke($0, `while`, [20n]), [value("i64", 2432902008176640000n)]); + +// ./test/core/loop.wast:499 +assert_return(() => invoke($0, `for`, [0n]), [value("i64", 1n)]); + +// ./test/core/loop.wast:500 +assert_return(() => invoke($0, `for`, [1n]), [value("i64", 1n)]); + +// ./test/core/loop.wast:501 +assert_return(() => invoke($0, `for`, [2n]), [value("i64", 2n)]); + +// ./test/core/loop.wast:502 +assert_return(() => invoke($0, `for`, [3n]), [value("i64", 6n)]); + +// ./test/core/loop.wast:503 +assert_return(() => invoke($0, `for`, [5n]), [value("i64", 120n)]); + +// ./test/core/loop.wast:504 +assert_return(() => invoke($0, `for`, [20n]), [value("i64", 2432902008176640000n)]); + +// ./test/core/loop.wast:506 +assert_return(() => invoke($0, `nesting`, [value("f32", 0), value("f32", 7)]), [value("f32", 0)]); + +// ./test/core/loop.wast:507 +assert_return(() => invoke($0, `nesting`, [value("f32", 7), value("f32", 0)]), [value("f32", 0)]); + +// ./test/core/loop.wast:508 +assert_return(() => invoke($0, `nesting`, [value("f32", 1), value("f32", 1)]), [value("f32", 1)]); + +// ./test/core/loop.wast:509 +assert_return(() => invoke($0, `nesting`, [value("f32", 1), value("f32", 2)]), [value("f32", 2)]); + +// ./test/core/loop.wast:510 +assert_return(() => invoke($0, `nesting`, [value("f32", 1), value("f32", 3)]), [value("f32", 4)]); + +// ./test/core/loop.wast:511 +assert_return(() => invoke($0, `nesting`, [value("f32", 1), value("f32", 4)]), [value("f32", 6)]); + +// ./test/core/loop.wast:512 +assert_return(() => invoke($0, `nesting`, [value("f32", 1), value("f32", 100)]), [value("f32", 2550)]); + +// ./test/core/loop.wast:513 +assert_return(() => invoke($0, `nesting`, [value("f32", 1), value("f32", 101)]), [value("f32", 2601)]); + +// ./test/core/loop.wast:514 +assert_return(() => invoke($0, `nesting`, [value("f32", 2), value("f32", 1)]), [value("f32", 1)]); + +// ./test/core/loop.wast:515 +assert_return(() => invoke($0, `nesting`, [value("f32", 3), value("f32", 1)]), [value("f32", 1)]); + +// ./test/core/loop.wast:516 +assert_return(() => invoke($0, `nesting`, [value("f32", 10), value("f32", 1)]), [value("f32", 1)]); + +// ./test/core/loop.wast:517 +assert_return(() => invoke($0, `nesting`, [value("f32", 2), value("f32", 2)]), [value("f32", 3)]); + +// ./test/core/loop.wast:518 +assert_return(() => invoke($0, `nesting`, [value("f32", 2), value("f32", 3)]), [value("f32", 4)]); + +// ./test/core/loop.wast:519 +assert_return( + () => invoke($0, `nesting`, [value("f32", 7), value("f32", 4)]), + [value("f32", 10.309524)], +); + +// ./test/core/loop.wast:520 +assert_return( + () => invoke($0, `nesting`, [value("f32", 7), value("f32", 100)]), + [value("f32", 4381.548)], +); + +// ./test/core/loop.wast:521 +assert_return(() => invoke($0, `nesting`, [value("f32", 7), value("f32", 101)]), [value("f32", 2601)]); + +// ./test/core/loop.wast:523 +assert_return(() => invoke($0, `type-use`, []), []); + +// ./test/core/loop.wast:525 +assert_malformed( + () => instantiate(`(type $$sig (func (param i32) (result i32))) (func (i32.const 0) (loop (type $$sig) (result i32) (param i32))) `), + `unexpected token`, +); + +// ./test/core/loop.wast:532 +assert_malformed( + () => instantiate(`(type $$sig (func (param i32) (result i32))) (func (i32.const 0) (loop (param i32) (type $$sig) (result i32))) `), + `unexpected token`, +); + +// ./test/core/loop.wast:539 +assert_malformed( + () => instantiate(`(type $$sig (func (param i32) (result i32))) (func (i32.const 0) (loop (param i32) (result i32) (type $$sig))) `), + `unexpected token`, +); + +// ./test/core/loop.wast:546 +assert_malformed( + () => instantiate(`(type $$sig (func (param i32) (result i32))) (func (i32.const 0) (loop (result i32) (type $$sig) (param i32))) `), + `unexpected token`, +); + +// ./test/core/loop.wast:553 +assert_malformed( + () => instantiate(`(type $$sig (func (param i32) (result i32))) (func (i32.const 0) (loop (result i32) (param i32) (type $$sig))) `), + `unexpected token`, +); + +// ./test/core/loop.wast:560 +assert_malformed( + () => instantiate(`(func (i32.const 0) (loop (result i32) (param i32))) `), + `unexpected token`, +); + +// ./test/core/loop.wast:567 +assert_malformed( + () => instantiate(`(func (i32.const 0) (loop (param $$x i32) (drop))) `), + `unexpected token`, +); + +// ./test/core/loop.wast:571 +assert_malformed( + () => instantiate(`(type $$sig (func)) (func (loop (type $$sig) (result i32) (i32.const 0)) (unreachable)) `), + `inline function type`, +); + +// ./test/core/loop.wast:578 +assert_malformed( + () => instantiate(`(type $$sig (func (param i32) (result i32))) (func (loop (type $$sig) (result i32) (i32.const 0)) (unreachable)) `), + `inline function type`, +); + +// ./test/core/loop.wast:585 +assert_malformed( + () => instantiate(`(type $$sig (func (param i32) (result i32))) (func (i32.const 0) (loop (type $$sig) (param i32) (drop)) (unreachable)) `), + `inline function type`, +); + +// ./test/core/loop.wast:592 +assert_malformed( + () => instantiate(`(type $$sig (func (param i32 i32) (result i32))) (func (i32.const 0) (loop (type $$sig) (param i32) (result i32)) (unreachable)) `), + `inline function type`, +); + +// ./test/core/loop.wast:600 +assert_invalid( + () => instantiate(`(module + (type $$sig (func)) + (func (loop (type $$sig) (i32.const 0))) + )`), + `type mismatch`, +); + +// ./test/core/loop.wast:608 +assert_invalid( + () => instantiate(`(module (func $$type-empty-i32 (result i32) (loop)))`), + `type mismatch`, +); + +// ./test/core/loop.wast:612 +assert_invalid( + () => instantiate(`(module (func $$type-empty-i64 (result i64) (loop)))`), + `type mismatch`, +); + +// ./test/core/loop.wast:616 +assert_invalid( + () => instantiate(`(module (func $$type-empty-f32 (result f32) (loop)))`), + `type mismatch`, +); + +// ./test/core/loop.wast:620 +assert_invalid( + () => instantiate(`(module (func $$type-empty-f64 (result f64) (loop)))`), + `type mismatch`, +); + +// ./test/core/loop.wast:625 +assert_invalid( + () => instantiate(`(module (func $$type-value-num-vs-void + (loop (i32.const 1)) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:631 +assert_invalid( + () => instantiate(`(module (func $$type-value-nums-vs-void + (loop (i32.const 1) (i32.const 2)) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:637 +assert_invalid( + () => instantiate(`(module (func $$type-value-empty-vs-num (result i32) + (loop (result i32)) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:643 +assert_invalid( + () => instantiate(`(module (func $$type-value-empty-vs-nums (result i32 i32) + (loop (result i32 i32)) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:649 +assert_invalid( + () => instantiate(`(module (func $$type-value-void-vs-num (result i32) + (loop (result i32) (nop)) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:655 +assert_invalid( + () => instantiate(`(module (func $$type-value-void-vs-nums (result i32 i32) + (loop (result i32 i32) (nop)) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:661 +assert_invalid( + () => instantiate(`(module (func $$type-value-num-vs-num (result i32) + (loop (result i32) (f32.const 0)) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:667 +assert_invalid( + () => instantiate(`(module (func $$type-value-num-vs-nums (result i32 i32) + (loop (result i32 i32) (i32.const 0)) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:673 +assert_invalid( + () => instantiate(`(module (func $$type-value-partial-vs-nums (result i32 i32) + (i32.const 1) (loop (result i32 i32) (i32.const 2)) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:679 +assert_invalid( + () => instantiate(`(module (func $$type-value-nums-vs-num (result i32) + (loop (result i32) (i32.const 1) (i32.const 2)) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:685 +assert_invalid( + () => instantiate(`(module (func $$type-value-unreached-select (result i32) + (loop (result i64) (select (unreachable) (unreachable) (unreachable))) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:692 +assert_invalid( + () => instantiate(`(module + (func $$type-value-empty-in-block + (i32.const 0) + (block (loop (result i32)) (drop)) + ) + )`), + `type mismatch`, +); + +// ./test/core/loop.wast:701 +assert_invalid( + () => instantiate(`(module + (func $$type-value-empty-in-loop + (i32.const 0) + (loop (loop (result i32)) (drop)) + ) + )`), + `type mismatch`, +); + +// ./test/core/loop.wast:710 +assert_invalid( + () => instantiate(`(module + (func $$type-value-empty-in-then + (i32.const 0) (i32.const 0) + (if (then (loop (result i32)) (drop))) + ) + )`), + `type mismatch`, +); + +// ./test/core/loop.wast:720 +assert_invalid( + () => instantiate(`(module (func $$type-param-void-vs-num + (loop (param i32) (drop)) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:726 +assert_invalid( + () => instantiate(`(module (func $$type-param-void-vs-nums + (loop (param i32 f64) (drop) (drop)) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:732 +assert_invalid( + () => instantiate(`(module (func $$type-param-num-vs-num + (f32.const 0) (loop (param i32) (drop)) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:738 +assert_invalid( + () => instantiate(`(module (func $$type-param-num-vs-nums + (f32.const 0) (loop (param f32 i32) (drop) (drop)) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:744 +assert_invalid( + () => instantiate(`(module (func $$type-param-nested-void-vs-num + (block (loop (param i32) (drop))) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:750 +assert_invalid( + () => instantiate(`(module (func $$type-param-void-vs-nums + (block (loop (param i32 f64) (drop) (drop))) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:756 +assert_invalid( + () => instantiate(`(module (func $$type-param-num-vs-num + (block (f32.const 0) (loop (param i32) (drop))) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:762 +assert_invalid( + () => instantiate(`(module (func $$type-param-num-vs-nums + (block (f32.const 0) (loop (param f32 i32) (drop) (drop))) + ))`), + `type mismatch`, +); + +// ./test/core/loop.wast:769 +assert_malformed( + () => instantiate(`(func (param i32) (result i32) loop (param $$x i32) end) `), + `unexpected token`, +); + +// ./test/core/loop.wast:773 +assert_malformed( + () => instantiate(`(func (param i32) (result i32) (loop (param $$x i32))) `), + `unexpected token`, +); + +// ./test/core/loop.wast:778 +assert_malformed(() => instantiate(`(func loop end $$l) `), `mismatching label`); + +// ./test/core/loop.wast:782 +assert_malformed(() => instantiate(`(func loop $$a end $$l) `), `mismatching label`); |