diff options
author | Alon Zakai <azakai@google.com> | 2021-09-30 17:54:05 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-30 17:54:05 -0700 |
commit | 65bcde2c30e82047a892332b95b114bc86f89614 (patch) | |
tree | fad936a8ed9b3275da50917bcebcbc235ab82600 /test/spec | |
parent | ce8cdac461db4e0a3e178a59f8eb1447bfee51e1 (diff) | |
download | binaryen-65bcde2c30e82047a892332b95b114bc86f89614.tar.gz binaryen-65bcde2c30e82047a892332b95b114bc86f89614.tar.bz2 binaryen-65bcde2c30e82047a892332b95b114bc86f89614.zip |
Implement table.get (#4195)
Adds the part of the spec test suite that this passes (without table.set we
can't do it all).
Diffstat (limited to 'test/spec')
-rw-r--r-- | test/spec/table_get.wast | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/test/spec/table_get.wast b/test/spec/table_get.wast new file mode 100644 index 000000000..de5f6622a --- /dev/null +++ b/test/spec/table_get.wast @@ -0,0 +1,79 @@ +(module + (table $t2 2 externref) + (table $t3 3 funcref) + (elem (table $t3) (i32.const 1) func $dummy) + (func $dummy) + + (func (export "get-externref") (param $i i32) (result externref) + (table.get $t2 (local.get $i)) + ) + (func $f3 (export "get-funcref") (param $i i32) (result funcref) + (table.get $t3 (local.get $i)) + ) + + (func (export "is_null-funcref") (param $i i32) (result i32) + (ref.is_null (call $f3 (local.get $i))) + ) +) + +(assert_return (invoke "get-externref" (i32.const 0)) (ref.null extern)) + +(assert_return (invoke "get-funcref" (i32.const 0)) (ref.null func)) +(assert_return (invoke "is_null-funcref" (i32.const 1)) (i32.const 0)) + +(assert_trap (invoke "get-externref" (i32.const 2)) "out of bounds") +(assert_trap (invoke "get-funcref" (i32.const 3)) "out of bounds") +(assert_trap (invoke "get-externref" (i32.const -1)) "out of bounds") +(assert_trap (invoke "get-funcref" (i32.const -1)) "out of bounds") + + +;; Type errors + +(assert_invalid + (module + (table $t 10 externref) + (func $type-index-empty-vs-i32 (result externref) + (table.get $t) + ) + ) + "type mismatch" +) +(assert_invalid + (module + (table $t 10 externref) + (func $type-index-f32-vs-i32 (result externref) + (table.get $t (f32.const 1)) + ) + ) + "type mismatch" +) + +(assert_invalid + (module + (table $t 10 externref) + (func $type-result-externref-vs-empty + (table.get $t (i32.const 0)) + ) + ) + "type mismatch" +) +(assert_invalid + (module + (table $t 10 externref) + (func $type-result-externref-vs-funcref (result funcref) + (table.get $t (i32.const 1)) + ) + ) + "type mismatch" +) + +(assert_invalid + (module + (table $t1 1 funcref) + (table $t2 1 externref) + (func $type-result-externref-vs-funcref-multi (result funcref) + (table.get $t2 (i32.const 0)) + ) + ) + "type mismatch" +) |