/* 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/switch.wast
// ./test/core/switch.wast:1
let $
0 = instantiate(`(module
;; Statement
switch
(func (export
"stmt" ) (param $$i i32) (result i32)
(local $$j i32)
(local.set $$j (i32.
const 100 ))
(block $$
switch
(block $$
7
(block $$
default
(block $$
6
(block $$
5
(block $$
4
(block $$
3
(block $$
2
(block $$
1
(block $$
0
(br_table $$
0 $$
1 $$
2 $$
3 $$
4 $$
5 $$
6 $$
7 $$
default
(local.get $$i)
)
) ;;
0
(
return (local.get $$i))
) ;;
1
(nop)
;; fallthrough
) ;;
2
;; fallthrough
) ;;
3
(local.set $$j (i32.sub (i32.
const 0 ) (local.get $$i)))
(br $$
switch )
) ;;
4
(br $$
switch )
) ;;
5
(local.set $$j (i32.
const 101 ))
(br $$
switch )
) ;;
6
(local.set $$j (i32.
const 101 ))
;; fallthrough
) ;;
default
(local.set $$j (i32.
const 102 ))
) ;;
7
;; fallthrough
)
(
return (local.get $$j))
)
;; Expression
switch
(func (export
"expr" ) (param $$i i64) (result i64)
(local $$j i64)
(local.set $$j (i64.
const 100 ))
(
return
(block $$
switch (result i64)
(block $$
7
(block $$
default
(block $$
4
(block $$
5
(block $$
6
(block $$
3
(block $$
2
(block $$
1
(block $$
0
(br_table $$
0 $$
1 $$
2 $$
3 $$
4 $$
5 $$
6 $$
7 $$
default
(i32.wrap_i64 (local.get $$i))
)
) ;;
0
(
return (local.get $$i))
) ;;
1
(nop)
;; fallthrough
) ;;
2
;; fallthrough
) ;;
3
(br $$
switch (i64.sub (i64.
const 0 ) (local.get $$i)))
) ;;
6
(local.set $$j (i64.
const 101 ))
;; fallthrough
) ;;
4
;; fallthrough
) ;;
5
;; fallthrough
) ;;
default
(br $$
switch (local.get $$j))
) ;;
7
(i64.
const -
5 )
)
)
)
;; Argument
switch
(func (export
"arg" ) (param $$i i32) (result i32)
(
return
(block $$
2 (result i32)
(i32.add (i32.
const 10 )
(block $$
1 (result i32)
(i32.add (i32.
const 100 )
(block $$
0 (result i32)
(i32.add (i32.
const 1000 )
(block $$
default (result i32)
(br_table $$
0 $$
1 $$
2 $$
default
(i32.mul (i32.
const 2 ) (local.get $$i))
(i32.and (i32.
const 3 ) (local.get $$i))
)
)
)
)
)
)
)
)
)
)
;; Corner cases
(func (export
"corner" ) (result i32)
(block
(br_table
0 (i32.
const 0 ))
)
(i32.
const 1 )
)
)`);
// ./test/core/switch.wast:120
assert_return(() => invoke($
0 , `stmt`, [
0 ]), [value(
"i32" ,
0 )]);
// ./test/core/switch.wast:121
assert_return(() => invoke($
0 , `stmt`, [
1 ]), [value(
"i32" , -
1 )]);
// ./test/core/switch.wast:122
assert_return(() => invoke($
0 , `stmt`, [
2 ]), [value(
"i32" , -
2 )]);
// ./test/core/switch.wast:123
assert_return(() => invoke($
0 , `stmt`, [
3 ]), [value(
"i32" , -
3 )]);
// ./test/core/switch.wast:124
assert_return(() => invoke($
0 , `stmt`, [
4 ]), [value(
"i32" ,
100 )]);
// ./test/core/switch.wast:125
assert_return(() => invoke($
0 , `stmt`, [
5 ]), [value(
"i32" ,
101 )]);
// ./test/core/switch.wast:126
assert_return(() => invoke($
0 , `stmt`, [
6 ]), [value(
"i32" ,
102 )]);
// ./test/core/switch.wast:127
assert_return(() => invoke($
0 , `stmt`, [
7 ]), [value(
"i32" ,
100 )]);
// ./test/core/switch.wast:128
assert_return(() => invoke($
0 , `stmt`, [-
10 ]), [value(
"i32" ,
102 )]);
// ./test/core/switch.wast:130
assert_return(() => invoke($
0 , `expr`, [
0 n]), [value(
"i64" ,
0 n)]);
// ./test/core/switch.wast:131
assert_return(() => invoke($
0 , `expr`, [
1 n]), [value(
"i64" , -
1 n)]);
// ./test/core/switch.wast:132
assert_return(() => invoke($
0 , `expr`, [
2 n]), [value(
"i64" , -
2 n)]);
// ./test/core/switch.wast:133
assert_return(() => invoke($
0 , `expr`, [
3 n]), [value(
"i64" , -
3 n)]);
// ./test/core/switch.wast:134
assert_return(() => invoke($
0 , `expr`, [
6 n]), [value(
"i64" ,
101 n)]);
// ./test/core/switch.wast:135
assert_return(() => invoke($
0 , `expr`, [
7 n]), [value(
"i64" , -
5 n)]);
// ./test/core/switch.wast:136
assert_return(() => invoke($
0 , `expr`, [-
10 n]), [value(
"i64" ,
100 n)]);
// ./test/core/switch.wast:138
assert_return(() => invoke($
0 , `arg`, [
0 ]), [value(
"i32" ,
110 )]);
// ./test/core/switch.wast:139
assert_return(() => invoke($
0 , `arg`, [
1 ]), [value(
"i32" ,
12 )]);
// ./test/core/switch.wast:140
assert_return(() => invoke($
0 , `arg`, [
2 ]), [value(
"i32" ,
4 )]);
// ./test/core/switch.wast:141
assert_return(() => invoke($
0 , `arg`, [
3 ]), [value(
"i32" ,
1116 )]);
// ./test/core/switch.wast:142
assert_return(() => invoke($
0 , `arg`, [
4 ]), [value(
"i32" ,
118 )]);
// ./test/core/switch.wast:143
assert_return(() => invoke($
0 , `arg`, [
5 ]), [value(
"i32" ,
20 )]);
// ./test/core/switch.wast:144
assert_return(() => invoke($
0 , `arg`, [
6 ]), [value(
"i32" ,
12 )]);
// ./test/core/switch.wast:145
assert_return(() => invoke($
0 , `arg`, [
7 ]), [value(
"i32" ,
1124 )]);
// ./test/core/switch.wast:146
assert_return(() => invoke($
0 , `arg`, [
8 ]), [value(
"i32" ,
126 )]);
// ./test/core/switch.wast:148
assert_return(() => invoke($
0 , `corner`, []), [value(
"i32" ,
1 )]);
// ./test/core/switch.wast:150
assert_invalid(
() => instantiate(`(module (func (br_table
3 (i32.
const 0 ))))`),
`unknown label`,
);
Messung V0.5 in Prozent C=96 H=100 G=97
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-06-06)
¤
*© Formatika GbR, Deutschland