/* 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/gc/ref_test.wast
// ./test/core/gc/ref_test.wast:3
let $0 = instantiate(`(module
(type \$ft (func))
(type \$st (struct))
(type \$at (array i8))
(table \$ta 10 anyref)
(table \$tf 10 funcref)
(table \$te 10 externref)
(elem declare func \$f)
(func \$f)
(func (export "init" ) (param \$x externref)
(table.set \$ta (i32.const 0 ) (ref.null any))
(table.set \$ta (i32.const 1 ) (ref.null struct))
(table.set \$ta (i32.const 2 ) (ref.null none))
(table.set \$ta (i32.const 3 ) (ref.i31 (i32.const 7 )))
(table.set \$ta (i32.const 4 ) (struct.new_default \$st))
(table.set \$ta (i32.const 5 ) (array.new_default \$at (i32.const 0 )))
(table.set \$ta (i32.const 6 ) (any.convert_extern (local.get \$x)))
(table.set \$ta (i32.const 7 ) (any.convert_extern (ref.null extern)))
(table.set \$tf (i32.const 0 ) (ref.null nofunc))
(table.set \$tf (i32.const 1 ) (ref.null func))
(table.set \$tf (i32.const 2 ) (ref.func \$f))
(table.set \$te (i32.const 0 ) (ref.null noextern))
(table.set \$te (i32.const 1 ) (ref.null extern))
(table.set \$te (i32.const 2 ) (local.get \$x))
(table.set \$te (i32.const 3 ) (extern.convert_any (ref.i31 (i32.const 8 ))))
(table.set \$te (i32.const 4 ) (extern.convert_any (struct.new_default \$st)))
(table.set \$te (i32.const 5 ) (extern.convert_any (ref.null any)))
)
(func (export "ref_test_null_data" ) (param \$i i32) (result i32)
(i32.add
(ref.is_null (table.get \$ta (local.get \$i)))
(ref.test nullref (table.get \$ta (local.get \$i)))
)
)
(func (export "ref_test_any" ) (param \$i i32) (result i32)
(i32.add
(ref.test (ref any) (table.get \$ta (local.get \$i)))
(ref.test anyref (table.get \$ta (local.get \$i)))
)
)
(func (export "ref_test_eq" ) (param \$i i32) (result i32)
(i32.add
(ref.test (ref eq) (table.get \$ta (local.get \$i)))
(ref.test eqref (table.get \$ta (local.get \$i)))
)
)
(func (export "ref_test_i31" ) (param \$i i32) (result i32)
(i32.add
(ref.test (ref i31) (table.get \$ta (local.get \$i)))
(ref.test i31ref (table.get \$ta (local.get \$i)))
)
)
(func (export "ref_test_struct" ) (param \$i i32) (result i32)
(i32.add
(ref.test (ref struct) (table.get \$ta (local.get \$i)))
(ref.test structref (table.get \$ta (local.get \$i)))
)
)
(func (export "ref_test_array" ) (param \$i i32) (result i32)
(i32.add
(ref.test (ref array) (table.get \$ta (local.get \$i)))
(ref.test arrayref (table.get \$ta (local.get \$i)))
)
)
(func (export "ref_test_null_func" ) (param \$i i32) (result i32)
(i32.add
(ref.is_null (table.get \$tf (local.get \$i)))
(ref.test (ref null nofunc) (table.get \$tf (local.get \$i)))
)
)
(func (export "ref_test_func" ) (param \$i i32) (result i32)
(i32.add
(ref.test (ref func) (table.get \$tf (local.get \$i)))
(ref.test funcref (table.get \$tf (local.get \$i)))
)
)
(func (export "ref_test_null_extern" ) (param \$i i32) (result i32)
(i32.add
(ref.is_null (table.get \$te (local.get \$i)))
(ref.test (ref null noextern) (table.get \$te (local.get \$i)))
)
)
(func (export "ref_test_extern" ) (param \$i i32) (result i32)
(i32.add
(ref.test (ref extern) (table.get \$te (local.get \$i)))
(ref.test externref (table.get \$te (local.get \$i)))
)
)
)`);
// ./test/core/gc/ref_test.wast:101
invoke($0 , `init`, [externref(0 )]);
// ./test/core/gc/ref_test.wast:103
assert_return(() => invoke($0 , `ref_test_null_data`, [0 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:104
assert_return(() => invoke($0 , `ref_test_null_data`, [1 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:105
assert_return(() => invoke($0 , `ref_test_null_data`, [2 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:106
assert_return(() => invoke($0 , `ref_test_null_data`, [3 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:107
assert_return(() => invoke($0 , `ref_test_null_data`, [4 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:108
assert_return(() => invoke($0 , `ref_test_null_data`, [5 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:109
assert_return(() => invoke($0 , `ref_test_null_data`, [6 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:110
assert_return(() => invoke($0 , `ref_test_null_data`, [7 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:112
assert_return(() => invoke($0 , `ref_test_any`, [0 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:113
assert_return(() => invoke($0 , `ref_test_any`, [1 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:114
assert_return(() => invoke($0 , `ref_test_any`, [2 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:115
assert_return(() => invoke($0 , `ref_test_any`, [3 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:116
assert_return(() => invoke($0 , `ref_test_any`, [4 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:117
assert_return(() => invoke($0 , `ref_test_any`, [5 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:118
assert_return(() => invoke($0 , `ref_test_any`, [6 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:119
assert_return(() => invoke($0 , `ref_test_any`, [7 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:121
assert_return(() => invoke($0 , `ref_test_eq`, [0 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:122
assert_return(() => invoke($0 , `ref_test_eq`, [1 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:123
assert_return(() => invoke($0 , `ref_test_eq`, [2 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:124
assert_return(() => invoke($0 , `ref_test_eq`, [3 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:125
assert_return(() => invoke($0 , `ref_test_eq`, [4 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:126
assert_return(() => invoke($0 , `ref_test_eq`, [5 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:127
assert_return(() => invoke($0 , `ref_test_eq`, [6 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:128
assert_return(() => invoke($0 , `ref_test_eq`, [7 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:130
assert_return(() => invoke($0 , `ref_test_i31`, [0 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:131
assert_return(() => invoke($0 , `ref_test_i31`, [1 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:132
assert_return(() => invoke($0 , `ref_test_i31`, [2 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:133
assert_return(() => invoke($0 , `ref_test_i31`, [3 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:134
assert_return(() => invoke($0 , `ref_test_i31`, [4 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:135
assert_return(() => invoke($0 , `ref_test_i31`, [5 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:136
assert_return(() => invoke($0 , `ref_test_i31`, [6 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:137
assert_return(() => invoke($0 , `ref_test_i31`, [7 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:139
assert_return(() => invoke($0 , `ref_test_struct`, [0 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:140
assert_return(() => invoke($0 , `ref_test_struct`, [1 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:141
assert_return(() => invoke($0 , `ref_test_struct`, [2 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:142
assert_return(() => invoke($0 , `ref_test_struct`, [3 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:143
assert_return(() => invoke($0 , `ref_test_struct`, [4 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:144
assert_return(() => invoke($0 , `ref_test_struct`, [5 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:145
assert_return(() => invoke($0 , `ref_test_struct`, [6 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:146
assert_return(() => invoke($0 , `ref_test_struct`, [7 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:148
assert_return(() => invoke($0 , `ref_test_array`, [0 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:149
assert_return(() => invoke($0 , `ref_test_array`, [1 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:150
assert_return(() => invoke($0 , `ref_test_array`, [2 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:151
assert_return(() => invoke($0 , `ref_test_array`, [3 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:152
assert_return(() => invoke($0 , `ref_test_array`, [4 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:153
assert_return(() => invoke($0 , `ref_test_array`, [5 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:154
assert_return(() => invoke($0 , `ref_test_array`, [6 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:155
assert_return(() => invoke($0 , `ref_test_array`, [7 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:157
assert_return(() => invoke($0 , `ref_test_null_func`, [0 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:158
assert_return(() => invoke($0 , `ref_test_null_func`, [1 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:159
assert_return(() => invoke($0 , `ref_test_null_func`, [2 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:161
assert_return(() => invoke($0 , `ref_test_func`, [0 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:162
assert_return(() => invoke($0 , `ref_test_func`, [1 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:163
assert_return(() => invoke($0 , `ref_test_func`, [2 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:165
assert_return(() => invoke($0 , `ref_test_null_extern`, [0 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:166
assert_return(() => invoke($0 , `ref_test_null_extern`, [1 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:167
assert_return(() => invoke($0 , `ref_test_null_extern`, [2 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:168
assert_return(() => invoke($0 , `ref_test_null_extern`, [3 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:169
assert_return(() => invoke($0 , `ref_test_null_extern`, [4 ]), [value("i32" , 0 )]);
// ./test/core/gc/ref_test.wast:170
assert_return(() => invoke($0 , `ref_test_null_extern`, [5 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:172
assert_return(() => invoke($0 , `ref_test_extern`, [0 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:173
assert_return(() => invoke($0 , `ref_test_extern`, [1 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:174
assert_return(() => invoke($0 , `ref_test_extern`, [2 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:175
assert_return(() => invoke($0 , `ref_test_extern`, [3 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:176
assert_return(() => invoke($0 , `ref_test_extern`, [4 ]), [value("i32" , 2 )]);
// ./test/core/gc/ref_test.wast:177
assert_return(() => invoke($0 , `ref_test_extern`, [5 ]), [value("i32" , 1 )]);
// ./test/core/gc/ref_test.wast:182
let $1 = instantiate(`(module
(type \$t0 (sub (struct)))
(type \$t1 (sub \$t0 (struct (field i32))))
(type \$t1' (sub \$t0 (struct (field i32))))
(type \$t2 (sub \$t1 (struct (field i32 i32))))
(type \$t2' (sub \$t1' (struct (field i32 i32))))
(type \$t3 (sub \$t0 (struct (field i32 i32))))
(type \$t0' (sub \$t0 (struct)))
(type \$t4 (sub \$t0' (struct (field i32 i32))))
(table 20 (ref null struct))
(func \$init
(table.set (i32.const 0 ) (struct.new_default \$t0))
(table.set (i32.const 10 ) (struct.new_default \$t0))
(table.set (i32.const 1 ) (struct.new_default \$t1))
(table.set (i32.const 11 ) (struct.new_default \$t1'))
(table.set (i32.const 2 ) (struct.new_default \$t2))
(table.set (i32.const 12 ) (struct.new_default \$t2'))
(table.set (i32.const 3 ) (struct.new_default \$t3))
(table.set (i32.const 4 ) (struct.new_default \$t4))
)
(func (export "test-sub" )
(call \$init)
(block \$l
;; must hold
(br_if \$l (i32.eqz (ref.test (ref null \$t0) (ref.null struct))))
(br_if \$l (i32.eqz (ref.test (ref null \$t0) (ref.null \$t0))))
(br_if \$l (i32.eqz (ref.test (ref null \$t0) (ref.null \$t1))))
(br_if \$l (i32.eqz (ref.test (ref null \$t0) (ref.null \$t2))))
(br_if \$l (i32.eqz (ref.test (ref null \$t0) (ref.null \$t3))))
(br_if \$l (i32.eqz (ref.test (ref null \$t0) (ref.null \$t4))))
(br_if \$l (i32.eqz (ref.test (ref null \$t0) (table.get (i32.const 0 )))))
(br_if \$l (i32.eqz (ref.test (ref null \$t0) (table.get (i32.const 1 )))))
(br_if \$l (i32.eqz (ref.test (ref null \$t0) (table.get (i32.const 2 )))))
(br_if \$l (i32.eqz (ref.test (ref null \$t0) (table.get (i32.const 3 )))))
(br_if \$l (i32.eqz (ref.test (ref null \$t0) (table.get (i32.const 4 )))))
(br_if \$l (i32.eqz (ref.test (ref null \$t1) (ref.null struct))))
(br_if \$l (i32.eqz (ref.test (ref null \$t1) (ref.null \$t0))))
(br_if \$l (i32.eqz (ref.test (ref null \$t1) (ref.null \$t1))))
(br_if \$l (i32.eqz (ref.test (ref null \$t1) (ref.null \$t2))))
(br_if \$l (i32.eqz (ref.test (ref null \$t1) (ref.null \$t3))))
(br_if \$l (i32.eqz (ref.test (ref null \$t1) (ref.null \$t4))))
(br_if \$l (i32.eqz (ref.test (ref null \$t1) (table.get (i32.const 1 )))))
(br_if \$l (i32.eqz (ref.test (ref null \$t1) (table.get (i32.const 2 )))))
(br_if \$l (i32.eqz (ref.test (ref null \$t2) (ref.null struct))))
(br_if \$l (i32.eqz (ref.test (ref null \$t2) (ref.null \$t0))))
(br_if \$l (i32.eqz (ref.test (ref null \$t2) (ref.null \$t1))))
(br_if \$l (i32.eqz (ref.test (ref null \$t2) (ref.null \$t2))))
(br_if \$l (i32.eqz (ref.test (ref null \$t2) (ref.null \$t3))))
(br_if \$l (i32.eqz (ref.test (ref null \$t2) (ref.null \$t4))))
(br_if \$l (i32.eqz (ref.test (ref null \$t2) (table.get (i32.const 2 )))))
(br_if \$l (i32.eqz (ref.test (ref null \$t3) (ref.null struct))))
(br_if \$l (i32.eqz (ref.test (ref null \$t3) (ref.null \$t0))))
(br_if \$l (i32.eqz (ref.test (ref null \$t3) (ref.null \$t1))))
(br_if \$l (i32.eqz (ref.test (ref null \$t3) (ref.null \$t2))))
(br_if \$l (i32.eqz (ref.test (ref null \$t3) (ref.null \$t3))))
(br_if \$l (i32.eqz (ref.test (ref null \$t3) (ref.null \$t4))))
(br_if \$l (i32.eqz (ref.test (ref null \$t3) (table.get (i32.const 3 )))))
(br_if \$l (i32.eqz (ref.test (ref null \$t4) (ref.null struct))))
(br_if \$l (i32.eqz (ref.test (ref null \$t4) (ref.null \$t0))))
(br_if \$l (i32.eqz (ref.test (ref null \$t4) (ref.null \$t1))))
(br_if \$l (i32.eqz (ref.test (ref null \$t4) (ref.null \$t2))))
(br_if \$l (i32.eqz (ref.test (ref null \$t4) (ref.null \$t3))))
(br_if \$l (i32.eqz (ref.test (ref null \$t4) (ref.null \$t4))))
(br_if \$l (i32.eqz (ref.test (ref null \$t4) (table.get (i32.const 4 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t0) (table.get (i32.const 0 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t0) (table.get (i32.const 1 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t0) (table.get (i32.const 2 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t0) (table.get (i32.const 3 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t0) (table.get (i32.const 4 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t1) (table.get (i32.const 1 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t1) (table.get (i32.const 2 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t2) (table.get (i32.const 2 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t3) (table.get (i32.const 3 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t4) (table.get (i32.const 4 )))))
;; must not hold
(br_if \$l (ref.test (ref \$t0) (ref.null struct)))
(br_if \$l (ref.test (ref \$t1) (ref.null struct)))
(br_if \$l (ref.test (ref \$t2) (ref.null struct)))
(br_if \$l (ref.test (ref \$t3) (ref.null struct)))
(br_if \$l (ref.test (ref \$t4) (ref.null struct)))
(br_if \$l (ref.test (ref \$t1) (table.get (i32.const 0 ))))
(br_if \$l (ref.test (ref \$t1) (table.get (i32.const 3 ))))
(br_if \$l (ref.test (ref \$t1) (table.get (i32.const 4 ))))
(br_if \$l (ref.test (ref \$t2) (table.get (i32.const 0 ))))
(br_if \$l (ref.test (ref \$t2) (table.get (i32.const 1 ))))
(br_if \$l (ref.test (ref \$t2) (table.get (i32.const 3 ))))
(br_if \$l (ref.test (ref \$t2) (table.get (i32.const 4 ))))
(br_if \$l (ref.test (ref \$t3) (table.get (i32.const 0 ))))
(br_if \$l (ref.test (ref \$t3) (table.get (i32.const 1 ))))
(br_if \$l (ref.test (ref \$t3) (table.get (i32.const 2 ))))
(br_if \$l (ref.test (ref \$t3) (table.get (i32.const 4 ))))
(br_if \$l (ref.test (ref \$t4) (table.get (i32.const 0 ))))
(br_if \$l (ref.test (ref \$t4) (table.get (i32.const 1 ))))
(br_if \$l (ref.test (ref \$t4) (table.get (i32.const 2 ))))
(br_if \$l (ref.test (ref \$t4) (table.get (i32.const 3 ))))
(return )
)
(unreachable)
)
(func (export "test-canon" )
(call \$init)
(block \$l
(br_if \$l (i32.eqz (ref.test (ref \$t0) (table.get (i32.const 0 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t0) (table.get (i32.const 1 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t0) (table.get (i32.const 2 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t0) (table.get (i32.const 3 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t0) (table.get (i32.const 4 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t0) (table.get (i32.const 10 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t0) (table.get (i32.const 11 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t0) (table.get (i32.const 12 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t1') (table.get (i32.const 1)))))
(br_if \$l (i32.eqz (ref.test (ref \$t1') (table.get (i32.const 2)))))
(br_if \$l (i32.eqz (ref.test (ref \$t1) (table.get (i32.const 11 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t1) (table.get (i32.const 12 )))))
(br_if \$l (i32.eqz (ref.test (ref \$t2') (table.get (i32.const 2)))))
(br_if \$l (i32.eqz (ref.test (ref \$t2) (table.get (i32.const 12 )))))
(return )
)
(unreachable)
)
)`);
// ./test/core/gc/ref_test.wast:329
assert_return(() => invoke($1 , `test-sub`, []), []);
// ./test/core/gc/ref_test.wast:330
assert_return(() => invoke($1 , `test-canon`, []), []);
Messung V0.5 in Prozent C=85 H=100 G=92
¤ Dauer der Verarbeitung: 0.18 Sekunden
(vorverarbeitet am 2026-08-26)
¤
*© Formatika GbR, Deutschland