/* 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=82 H=94 G=88
¤ Dauer der Verarbeitung: 0.6 Sekunden
¤
*© Formatika GbR, Deutschland