;; Test type definitions

(module
  (type (func))
  (type $t (func))

  (type (func (param i32)))
  (type (func (param $x i32)))
  (type (func (result i32)))
  (type (func (param i32) (result i32)))
  (type (func (param $x i32) (result i32)))

  (type (func (param f32 f64)))
  (type (func (result i64 f32)))
  (type (func (param i32 i64) (result f32 f64)))

  (type (func (param f32) (param f64)))
  (type (func (param $x f32) (param f64)))
  (type (func (param f32) (param $y f64)))
  (type (func (param $x f32) (param $y f64)))
  (type (func (result i64) (result f32)))
  (type (func (param i32) (param i64) (result f32) (result f64)))
  (type (func (param $x i32) (param $y i64) (result f32) (result f64)))

  (type (func (param f32 f64) (param $x i32) (param f64 i32 i32)))
  (type (func (result i64 i64 f32) (result f32 i32)))
  (type
    (func (param i32 i32) (param i64 i32) (result f32 f64) (result f64 i32))
  )

  (type (func (param) (param $x f32) (param) (param) (param f64 i32) (param)))
  (type
    (func (result) (result) (result i64 i64) (result) (result f32) (result))
  )
  (type
    (func
      (param i32 i32) (param i64 i32) (param) (param $x i32) (param)
      (result) (result f32 f64) (result f64 i32) (result)
    )
  )
)

(assert_malformed
  (module quote "(type (func (result i32) (param i32)))")
  "unexpected token"
)
(assert_malformed
  (module quote "(type (func (result $x i32)))")
  "unexpected token"
)
