add whole test files from Core Test Suit

This commit is contained in:
Ilya Rezvov
2018-03-20 21:01:25 -07:00
parent d9849f77bf
commit 4ed8752744
72 changed files with 36481 additions and 59 deletions
+327
View File
@@ -207,3 +207,330 @@
(func $mutual-runaway1 (export "mutual-runaway") (call_indirect (type $proc) (i32.const 18)))
(func $mutual-runaway2 (call_indirect (type $proc) (i32.const 17)))
)
(assert_return (invoke "type-i32") (i32.const 0x132))
(assert_return (invoke "type-i64") (i64.const 0x164))
(assert_return (invoke "type-f32") (f32.const 0xf32))
(assert_return (invoke "type-f64") (f64.const 0xf64))
(assert_return (invoke "type-index") (i64.const 100))
(assert_return (invoke "type-first-i32") (i32.const 32))
(assert_return (invoke "type-first-i64") (i64.const 64))
(assert_return (invoke "type-first-f32") (f32.const 1.32))
(assert_return (invoke "type-first-f64") (f64.const 1.64))
(assert_return (invoke "type-second-i32") (i32.const 32))
(assert_return (invoke "type-second-i64") (i64.const 64))
(assert_return (invoke "type-second-f32") (f32.const 32))
(assert_return (invoke "type-second-f64") (f64.const 64.1))
(assert_return (invoke "dispatch" (i32.const 5) (i64.const 2)) (i64.const 2))
(assert_return (invoke "dispatch" (i32.const 5) (i64.const 5)) (i64.const 5))
(assert_return (invoke "dispatch" (i32.const 12) (i64.const 5)) (i64.const 120))
(assert_return (invoke "dispatch" (i32.const 13) (i64.const 5)) (i64.const 8))
(assert_return (invoke "dispatch" (i32.const 20) (i64.const 2)) (i64.const 2))
(assert_trap (invoke "dispatch" (i32.const 0) (i64.const 2)) "indirect call type mismatch")
(assert_trap (invoke "dispatch" (i32.const 15) (i64.const 2)) "indirect call type mismatch")
(assert_trap (invoke "dispatch" (i32.const 23) (i64.const 2)) "undefined element")
(assert_trap (invoke "dispatch" (i32.const -1) (i64.const 2)) "undefined element")
(assert_trap (invoke "dispatch" (i32.const 1213432423) (i64.const 2)) "undefined element")
(assert_return (invoke "dispatch-structural" (i32.const 5)) (i64.const 9))
(assert_return (invoke "dispatch-structural" (i32.const 5)) (i64.const 9))
(assert_return (invoke "dispatch-structural" (i32.const 12)) (i64.const 362880))
(assert_return (invoke "dispatch-structural" (i32.const 20)) (i64.const 9))
(assert_trap (invoke "dispatch-structural" (i32.const 11)) "indirect call type mismatch")
(assert_trap (invoke "dispatch-structural" (i32.const 22)) "indirect call type mismatch")
(assert_return (invoke "fac" (i64.const 0)) (i64.const 1))
(assert_return (invoke "fac" (i64.const 1)) (i64.const 1))
(assert_return (invoke "fac" (i64.const 5)) (i64.const 120))
(assert_return (invoke "fac" (i64.const 25)) (i64.const 7034535277573963776))
(assert_return (invoke "fib" (i64.const 0)) (i64.const 1))
(assert_return (invoke "fib" (i64.const 1)) (i64.const 1))
(assert_return (invoke "fib" (i64.const 2)) (i64.const 2))
(assert_return (invoke "fib" (i64.const 5)) (i64.const 8))
(assert_return (invoke "fib" (i64.const 20)) (i64.const 10946))
(assert_return (invoke "even" (i32.const 0)) (i32.const 44))
(assert_return (invoke "even" (i32.const 1)) (i32.const 99))
(assert_return (invoke "even" (i32.const 100)) (i32.const 44))
(assert_return (invoke "even" (i32.const 77)) (i32.const 99))
(assert_return (invoke "odd" (i32.const 0)) (i32.const 99))
(assert_return (invoke "odd" (i32.const 1)) (i32.const 44))
(assert_return (invoke "odd" (i32.const 200)) (i32.const 99))
(assert_return (invoke "odd" (i32.const 77)) (i32.const 44))
(assert_exhaustion (invoke "runaway") "call stack exhausted")
(assert_exhaustion (invoke "mutual-runaway") "call stack exhausted")
;; Invalid syntax
(assert_malformed
(module quote
"(type $sig (func (param i32) (result i32)))"
"(table 0 anyfunc)"
"(func (result i32)"
" (call_indirect (type $sig) (result i32) (param i32)"
" (i32.const 0) (i32.const 0)"
" )"
")"
)
"unexpected token"
)
(assert_malformed
(module quote
"(type $sig (func (param i32) (result i32)))"
"(table 0 anyfunc)"
"(func (result i32)"
" (call_indirect (param i32) (type $sig) (result i32)"
" (i32.const 0) (i32.const 0)"
" )"
")"
)
"unexpected token"
)
(assert_malformed
(module quote
"(type $sig (func (param i32) (result i32)))"
"(table 0 anyfunc)"
"(func (result i32)"
" (call_indirect (param i32) (result i32) (type $sig)"
" (i32.const 0) (i32.const 0)"
" )"
")"
)
"unexpected token"
)
(assert_malformed
(module quote
"(type $sig (func (param i32) (result i32)))"
"(table 0 anyfunc)"
"(func (result i32)"
" (call_indirect (result i32) (type $sig) (param i32)"
" (i32.const 0) (i32.const 0)"
" )"
")"
)
"unexpected token"
)
(assert_malformed
(module quote
"(type $sig (func (param i32) (result i32)))"
"(table 0 anyfunc)"
"(func (result i32)"
" (call_indirect (result i32) (param i32) (type $sig)"
" (i32.const 0) (i32.const 0)"
" )"
")"
)
"unexpected token"
)
(assert_malformed
(module quote
"(table 0 anyfunc)"
"(func (result i32)"
" (call_indirect (result i32) (param i32) (i32.const 0) (i32.const 0))"
")"
)
"unexpected token"
)
(assert_malformed
(module quote
"(table 0 anyfunc)"
"(func (call_indirect (param $x i32) (i32.const 0) (i32.const 0)))"
)
"unexpected token"
)
(assert_malformed
(module quote
"(type $sig (func))"
"(table 0 anyfunc)"
"(func (result i32)"
" (call_indirect (type $sig) (result i32) (i32.const 0))"
")"
)
"inline function type"
)
(assert_malformed
(module quote
"(type $sig (func (param i32) (result i32)))"
"(table 0 anyfunc)"
"(func (result i32)"
" (call_indirect (type $sig) (result i32) (i32.const 0))"
")"
)
"inline function type"
)
(assert_malformed
(module quote
"(type $sig (func (param i32) (result i32)))"
"(table 0 anyfunc)"
"(func"
" (call_indirect (type $sig) (param i32) (i32.const 0) (i32.const 0))"
")"
)
"inline function type"
)
(assert_malformed
(module quote
"(type $sig (func (param i32 i32) (result i32)))"
"(table 0 anyfunc)"
"(func (result i32)"
" (call_indirect (type $sig) (param i32) (result i32)"
" (i32.const 0) (i32.const 0)"
" )"
")"
)
"inline function type"
)
;; Invalid typing
(assert_invalid
(module
(type (func))
(func $no-table (call_indirect (type 0) (i32.const 0)))
)
"unknown table"
)
(assert_invalid
(module
(type (func))
(table 0 anyfunc)
(func $type-void-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0))))
)
"type mismatch"
)
(assert_invalid
(module
(type (func (result i64)))
(table 0 anyfunc)
(func $type-num-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0))))
)
"type mismatch"
)
(assert_invalid
(module
(type (func (param i32)))
(table 0 anyfunc)
(func $arity-0-vs-1 (call_indirect (type 0) (i32.const 0)))
)
"type mismatch"
)
(assert_invalid
(module
(type (func (param f64 i32)))
(table 0 anyfunc)
(func $arity-0-vs-2 (call_indirect (type 0) (i32.const 0)))
)
"type mismatch"
)
(assert_invalid
(module
(type (func))
(table 0 anyfunc)
(func $arity-1-vs-0 (call_indirect (type 0) (i32.const 1) (i32.const 0)))
)
"type mismatch"
)
(assert_invalid
(module
(type (func))
(table 0 anyfunc)
(func $arity-2-vs-0
(call_indirect (type 0) (f64.const 2) (i32.const 1) (i32.const 0))
)
)
"type mismatch"
)
(assert_invalid
(module
(type (func (param i32)))
(table 0 anyfunc)
(func $type-func-void-vs-i32 (call_indirect (type 0) (i32.const 1) (nop)))
)
"type mismatch"
)
(assert_invalid
(module
(type (func (param i32)))
(table 0 anyfunc)
(func $type-func-num-vs-i32 (call_indirect (type 0) (i32.const 0) (i64.const 1)))
)
"type mismatch"
)
(assert_invalid
(module
(type (func (param i32 i32)))
(table 0 anyfunc)
(func $type-first-void-vs-num
(call_indirect (type 0) (nop) (i32.const 1) (i32.const 0))
)
)
"type mismatch"
)
(assert_invalid
(module
(type (func (param i32 i32)))
(table 0 anyfunc)
(func $type-second-void-vs-num
(call_indirect (type 0) (i32.const 1) (nop) (i32.const 0))
)
)
"type mismatch"
)
(assert_invalid
(module
(type (func (param i32 f64)))
(table 0 anyfunc)
(func $type-first-num-vs-num
(call_indirect (type 0) (f64.const 1) (i32.const 1) (i32.const 0))
)
)
"type mismatch"
)
(assert_invalid
(module
(type (func (param f64 i32)))
(table 0 anyfunc)
(func $type-second-num-vs-num
(call_indirect (type 0) (i32.const 1) (f64.const 1) (i32.const 0))
)
)
"type mismatch"
)
;; Unbound type
(assert_invalid
(module
(table 0 anyfunc)
(func $unbound-type (call_indirect (type 1) (i32.const 0)))
)
"unknown type"
)
(assert_invalid
(module
(table 0 anyfunc)
(func $large-type (call_indirect (type 1012321300) (i32.const 0)))
)
"unknown type"
)
;; Unbound function in table
(assert_invalid
(module (table anyfunc (elem 0 0)))
"unknown function 0"
)