;;; TOOL: run-spec-wasm2c
;; Test table section structure

(module (table 0 funcref))
(module (table 1 funcref))
(module (table 0 0 funcref))
(module (table 0 1 funcref))
(module (table 1 256 funcref))
(module (table 0 65536 funcref))
(module (table 0 0xffff_ffff funcref))

(assert_invalid (module (table 0 funcref) (table 0 funcref)) "multiple tables")
(assert_invalid (module (table (import "spectest" "table") 0 funcref) (table 0 funcref)) "multiple tables")

(assert_invalid (module (elem (i32.const 0))) "unknown table")
(assert_invalid (module (elem (i32.const 0) $f) (func $f)) "unknown table")


(assert_invalid
  (module (table 1 0 funcref))
  "size minimum must not be greater than maximum"
)
(assert_invalid
  (module (table 0xffff_ffff 0 funcref))
  "size minimum must not be greater than maximum"
)

(assert_malformed
  (module quote "(table 0x1_0000_0000 funcref)")
  "i32 constant out of range"
)
(assert_malformed
  (module quote "(table 0x1_0000_0000 0x1_0000_0000 funcref)")
  "i32 constant out of range"
)
(assert_malformed
  (module quote "(table 0 0x1_0000_0000 funcref)")
  "i32 constant out of range"
)


;; Duplicate table identifiers

(assert_malformed (module quote
  "(table $foo 1 funcref)"
  "(table $foo 1 funcref)")
  "duplicate table")
(assert_malformed (module quote
  "(import \"\" \"\" (table $foo 1 funcref))"
  "(table $foo 1 funcref)")
  "duplicate table")
(assert_malformed (module quote
  "(import \"\" \"\" (table $foo 1 funcref))"
  "(import \"\" \"\" (table $foo 1 funcref))")
  "duplicate table")
(;; STDOUT ;;;
0/0 tests passed.
;;; STDOUT ;;)
