/* 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/labels.wast
// ./test/core/labels.wast:1
let $0 = instantiate(`(module
(func (export "block" ) (result i32)
(block \$exit (result i32)
(br \$exit (i32.const 1 ))
(i32.const 0 )
)
)
(func (export "loop1" ) (result i32)
(local \$i i32)
(local.set \$i (i32.const 0 ))
(block \$exit (result i32)
(loop \$cont (result i32)
(local.set \$i (i32.add (local.get \$i) (i32.const 1 )))
(if (i32.eq (local.get \$i) (i32.const 5 ))
(then (br \$exit (local.get \$i)))
)
(br \$cont)
)
)
)
(func (export "loop2" ) (result i32)
(local \$i i32)
(local.set \$i (i32.const 0 ))
(block \$exit (result i32)
(loop \$cont (result i32)
(local.set \$i (i32.add (local.get \$i) (i32.const 1 )))
(if (i32.eq (local.get \$i) (i32.const 5 ))
(then (br \$cont))
)
(if (i32.eq (local.get \$i) (i32.const 8 ))
(then (br \$exit (local.get \$i)))
)
(local.set \$i (i32.add (local.get \$i) (i32.const 1 )))
(br \$cont)
)
)
)
(func (export "loop3" ) (result i32)
(local \$i i32)
(local.set \$i (i32.const 0 ))
(block \$exit (result i32)
(loop \$cont (result i32)
(local.set \$i (i32.add (local.get \$i) (i32.const 1 )))
(if (i32.eq (local.get \$i) (i32.const 5 ))
(then (br \$exit (local.get \$i)))
)
(local.get \$i)
)
)
)
(func (export "loop4" ) (param \$max i32) (result i32)
(local \$i i32)
(local.set \$i (i32.const 1 ))
(block \$exit (result i32)
(loop \$cont (result i32)
(local.set \$i (i32.add (local.get \$i) (local.get \$i)))
(if (i32.gt_u (local.get \$i) (local.get \$max))
(then (br \$exit (local.get \$i)))
)
(br \$cont)
)
)
)
(func (export "loop5" ) (result i32)
(i32.add
(loop \$l (result i32) (i32.const 1 ))
(i32.const 1 )
)
)
(func (export "loop6" ) (result i32)
(loop (result i32)
(br_if 0 (i32.const 0 ))
(i32.const 3 )
)
)
(func (export "if" ) (result i32)
(local \$i i32)
(local.set \$i (i32.const 0 ))
(block
(if \$l
(i32.const 1 )
(then (br \$l) (local.set \$i (i32.const 666 )))
)
(local.set \$i (i32.add (local.get \$i) (i32.const 1 )))
(if \$l
(i32.const 1 )
(then (br \$l) (local.set \$i (i32.const 666 )))
(else (local.set \$i (i32.const 888 )))
)
(local.set \$i (i32.add (local.get \$i) (i32.const 1 )))
(if \$l
(i32.const 1 )
(then (br \$l) (local.set \$i (i32.const 666 )))
(else (local.set \$i (i32.const 888 )))
)
(local.set \$i (i32.add (local.get \$i) (i32.const 1 )))
(if \$l
(i32.const 0 )
(then (local.set \$i (i32.const 888 )))
(else (br \$l) (local.set \$i (i32.const 666 )))
)
(local.set \$i (i32.add (local.get \$i) (i32.const 1 )))
(if \$l
(i32.const 0 )
(then (local.set \$i (i32.const 888 )))
(else (br \$l) (local.set \$i (i32.const 666 )))
)
(local.set \$i (i32.add (local.get \$i) (i32.const 1 )))
)
(local.get \$i)
)
(func (export "if2" ) (result i32)
(local \$i i32)
(local.set \$i (i32.const 0 ))
(block
(if
(i32.const 1 )
(then (br 0 ) (local.set \$i (i32.const 666 )))
)
(local.set \$i (i32.add (local.get \$i) (i32.const 1 )))
(if
(i32.const 1 )
(then (br 0 ) (local.set \$i (i32.const 666 )))
(else (local.set \$i (i32.const 888 )))
)
(local.set \$i (i32.add (local.get \$i) (i32.const 1 )))
(if
(i32.const 1 )
(then (br 0 ) (local.set \$i (i32.const 666 )))
(else (local.set \$i (i32.const 888 )))
)
(local.set \$i (i32.add (local.get \$i) (i32.const 1 )))
(if
(i32.const 0 )
(then (local.set \$i (i32.const 888 )))
(else (br 0 ) (local.set \$i (i32.const 666 )))
)
(local.set \$i (i32.add (local.get \$i) (i32.const 1 )))
(if
(i32.const 0 )
(then (local.set \$i (i32.const 888 )))
(else (br 0 ) (local.set \$i (i32.const 666 )))
)
(local.set \$i (i32.add (local.get \$i) (i32.const 1 )))
)
(local.get \$i)
)
(func (export "switch" ) (param i32) (result i32)
(block \$ret (result i32)
(i32.mul (i32.const 10 )
(block \$exit (result i32)
(block \$0
(block \$default
(block \$3
(block \$2
(block \$1
(br_table \$0 \$1 \$2 \$3 \$default (local.get 0 ))
) ;; 1
) ;; 2
(br \$exit (i32.const 2 ))
) ;; 3
(br \$ret (i32.const 3 ))
) ;; default
) ;; 0
(i32.const 5 )
)
)
)
)
(func (export "return" ) (param i32) (result i32)
(block \$default
(block \$1
(block \$0
(br_table \$0 \$1 (local.get 0 ))
(br \$default )
) ;; 0
(return (i32.const 0 ))
) ;; 1
) ;; default
(i32.const 2 )
)
(func (export "br_if0" ) (result i32)
(local \$i i32)
(local.set \$i (i32.const 0 ))
(block \$outer (result i32)
(block \$inner
(br_if \$inner (i32.const 0 ))
(local.set \$i (i32.or (local.get \$i) (i32.const 0 x1)))
(br_if \$inner (i32.const 1 ))
(local.set \$i (i32.or (local.get \$i) (i32.const 0 x2)))
)
(drop (br_if \$outer
(block (result i32)
(local.set \$i (i32.or (local.get \$i) (i32.const 0 x4)))
(local.get \$i)
)
(i32.const 0 )
))
(local.set \$i (i32.or (local.get \$i) (i32.const 0 x8)))
(drop (br_if \$outer
(block (result i32)
(local.set \$i (i32.or (local.get \$i) (i32.const 0 x10)))
(local.get \$i)
)
(i32.const 1 )
))
(local.set \$i (i32.or (local.get \$i) (i32.const 0 x20))) (local.get \$i)
)
)
(func (export "br_if1" ) (result i32)
(block \$l0 (result i32)
(drop
(br_if \$l0
(block \$l1 (result i32) (br \$l1 (i32.const 1 )))
(i32.const 1 )
)
)
(i32.const 0 )
)
)
(func (export "br_if2" ) (result i32)
(block \$l0 (result i32)
(if (i32.const 1 )
(then
(drop
(br_if \$l0
(block \$l1 (result i32) (br \$l1 (i32.const 1 )))
(i32.const 1 )
)
)
)
)
(i32.const 0 )
)
)
(func (export "br_if3" ) (result i32)
(local \$i1 i32)
(drop
(i32.add
(block \$l0 (result i32)
(drop (br_if \$l0
(block (result i32) (local.set \$i1 (i32.const 1 )) (local.get \$i1))
(block (result i32) (local.set \$i1 (i32.const 2 )) (local.get \$i1))
))
(i32.const 0 )
)
(i32.const 0 )
)
)
(local.get \$i1)
)
(func (export "br" ) (result i32)
(block \$l0 (result i32)
(if (i32.const 1 )
(then (br \$l0 (block \$l1 (result i32) (br \$l1 (i32.const 1 )))))
(else (block (drop (block \$l1 (result i32) (br \$l1 (i32.const 1 ))))))
)
(i32.const 1 )
)
)
(func (export "shadowing" ) (result i32)
(block \$l1 (result i32) (i32.xor (br \$l1 (i32.const 1 )) (i32.const 2 )))
)
(func (export "redefinition" ) (result i32)
(block \$l1 (result i32)
(i32.add
(block \$l1 (result i32) (i32.const 2 ))
(block \$l1 (result i32) (br \$l1 (i32.const 3 )))
)
)
)
)`);
// ./test/core/labels.wast:291
assert_return(() => invoke($0 , `block`, []), [value("i32" , 1 )]);
// ./test/core/labels.wast:292
assert_return(() => invoke($0 , `loop1`, []), [value("i32" , 5 )]);
// ./test/core/labels.wast:293
assert_return(() => invoke($0 , `loop2`, []), [value("i32" , 8 )]);
// ./test/core/labels.wast:294
assert_return(() => invoke($0 , `loop3`, []), [value("i32" , 1 )]);
// ./test/core/labels.wast:295
assert_return(() => invoke($0 , `loop4`, [8 ]), [value("i32" , 16 )]);
// ./test/core/labels.wast:296
assert_return(() => invoke($0 , `loop5`, []), [value("i32" , 2 )]);
// ./test/core/labels.wast:297
assert_return(() => invoke($0 , `loop6`, []), [value("i32" , 3 )]);
// ./test/core/labels.wast:298
assert_return(() => invoke($0 , `if `, []), [value("i32" , 5 )]);
// ./test/core/labels.wast:299
assert_return(() => invoke($0 , `if2`, []), [value("i32" , 5 )]);
// ./test/core/labels.wast:300
assert_return(() => invoke($0 , `switch `, [0 ]), [value("i32" , 50 )]);
// ./test/core/labels.wast:301
assert_return(() => invoke($0 , `switch `, [1 ]), [value("i32" , 20 )]);
// ./test/core/labels.wast:302
assert_return(() => invoke($0 , `switch `, [2 ]), [value("i32" , 20 )]);
// ./test/core/labels.wast:303
assert_return(() => invoke($0 , `switch `, [3 ]), [value("i32" , 3 )]);
// ./test/core/labels.wast:304
assert_return(() => invoke($0 , `switch `, [4 ]), [value("i32" , 50 )]);
// ./test/core/labels.wast:305
assert_return(() => invoke($0 , `switch `, [5 ]), [value("i32" , 50 )]);
// ./test/core/labels.wast:306
assert_return(() => invoke($0 , `return `, [0 ]), [value("i32" , 0 )]);
// ./test/core/labels.wast:307
assert_return(() => invoke($0 , `return `, [1 ]), [value("i32" , 2 )]);
// ./test/core/labels.wast:308
assert_return(() => invoke($0 , `return `, [2 ]), [value("i32" , 2 )]);
// ./test/core/labels.wast:309
assert_return(() => invoke($0 , `br_if0`, []), [value("i32" , 29 )]);
// ./test/core/labels.wast:310
assert_return(() => invoke($0 , `br_if1`, []), [value("i32" , 1 )]);
// ./test/core/labels.wast:311
assert_return(() => invoke($0 , `br_if2`, []), [value("i32" , 1 )]);
// ./test/core/labels.wast:312
assert_return(() => invoke($0 , `br_if3`, []), [value("i32" , 2 )]);
// ./test/core/labels.wast:313
assert_return(() => invoke($0 , `br`, []), [value("i32" , 1 )]);
// ./test/core/labels.wast:314
assert_return(() => invoke($0 , `shadowing`, []), [value("i32" , 1 )]);
// ./test/core/labels.wast:315
assert_return(() => invoke($0 , `redefinition`, []), [value("i32" , 5 )]);
// ./test/core/labels.wast:317
assert_invalid(
() => instantiate(`(module (func (block \$l (f32.neg (br_if \$l (i32.const 1 ))) (nop))))`),
`type mismatch`,
);
// ./test/core/labels.wast:321
assert_invalid(
() => instantiate(`(module (func (block \$l (br_if \$l (f32.const 0 ) (i32.const 1 )))))`),
`type mismatch`,
);
// ./test/core/labels.wast:325
assert_invalid(
() => instantiate(`(module (func (block \$l (br_if \$l (f32.const 0 ) (i32.const 1 )))))`),
`type mismatch`,
);
Messung V0.5 in Prozent C=93 H=100 G=96
¤ Dauer der Verarbeitung: 0.6 Sekunden
¤
*© Formatika GbR, Deutschland