;; RUN: wasm-fuzz-types -v --seed=1 | filecheck %s

;; CHECK:      Running with seed 1
;; CHECK-NEXT: Built 20 types:
;; CHECK-NEXT: (rec
;; CHECK-NEXT:  (type $0 (sub (struct (field (mut i16)) (field (mut (ref $2))) (field (mut (ref null $2))))))
;; CHECK-NEXT:  (type $1 (sub (func (param (ref $1)) (result f64 (ref $0) f32 (ref null (shared eq))))))
;; CHECK-NEXT:  (type $2 (sub (shared (struct (field (mut (ref null (shared extern)))) (field (mut (ref null $2)))))))
;; CHECK-NEXT:  (type $3 (sub (shared (struct))))
;; CHECK-NEXT: )
;; CHECK-NEXT: (rec
;; CHECK-NEXT:  (type $4 (sub (array i32)))
;; CHECK-NEXT:  (type $5 (sub $4 (array i32)))
;; CHECK-NEXT:  (type $6 (shared (func (param (ref null $3)) (result i32))))
;; CHECK-NEXT:  (type $7 (sub $2 (shared (struct (field (mut (ref null (shared extern)))) (field (mut (ref null $2))) (field (mut (ref null $3))) (field (mut i16)) (field (mut (ref null $7))) (field (mut (ref null $7)))))))
;; CHECK-NEXT:  (type $8 (sub $0 (struct (field (mut i16)) (field (mut (ref $2))) (field (mut (ref null $2))))))
;; CHECK-NEXT: )
;; CHECK-NEXT: (rec
;; CHECK-NEXT:  (type $9 (shared (array i32)))
;; CHECK-NEXT:  (type $10 (sub $5 (array i32)))
;; CHECK-NEXT:  (type $11 (func (result i32)))
;; CHECK-NEXT:  (type $12 (sub (shared (array (ref $3)))))
;; CHECK-NEXT:  (type $13 (sub (shared (func (param (ref null $19) v128) (result (ref null $12))))))
;; CHECK-NEXT:  (type $14 (sub final $12 (shared (array (ref $3)))))
;; CHECK-NEXT:  (type $15 (sub (shared (func (param (ref null (shared struct)) i31ref) (result nullfuncref)))))
;; CHECK-NEXT:  (type $16 (sub $5 (array i32)))
;; CHECK-NEXT:  (type $17 (sub (func (param v128) (result f64))))
;; CHECK-NEXT:  (type $18 (sub (array (ref $11))))
;; CHECK-NEXT:  (type $19 (shared (array i8)))
;; CHECK-NEXT: )
;; CHECK-NEXT:
;; CHECK-NEXT: Inhabitable types:
;; CHECK-NEXT:
;; CHECK-NEXT: Built 20 types:
;; CHECK-NEXT: (rec
;; CHECK-NEXT:  (type $0 (sub (struct (field (mut i16)) (field (mut (ref $2))) (field (mut (ref null $2))))))
;; CHECK-NEXT:  (type $1 (sub (func (param (ref $1)) (result f64 (ref $0) f32 (ref null (shared eq))))))
;; CHECK-NEXT:  (type $2 (sub (shared (struct (field (mut (ref null (shared extern)))) (field (mut (ref null $2)))))))
;; CHECK-NEXT:  (type $3 (sub (shared (struct)))
;; CHECK-NEXT: )
;; CHECK-NEXT: (rec
;; CHECK-NEXT:  (type $4 (sub (array i32)))
;; CHECK-NEXT:  (type $5 (sub $4 (array i32)))
;; CHECK-NEXT:  (type $6 (shared (func (param (ref null $3)) (result i32))))
;; CHECK-NEXT:  (type $7 (sub $2 (shared (struct (field (mut (ref null (shared extern)))) (field (mut (ref null $2))) (field (mut (ref null $3))) (field (mut i16)) (field (mut (ref null $7))) (field (mut (ref null $7)))))))
;; CHECK-NEXT:  (type $8 (sub $0 (struct (field (mut i16)) (field (mut (ref $2))) (field (mut (ref null $2))))))
;; CHECK-NEXT: )
;; CHECK-NEXT: (rec
;; CHECK-NEXT:  (type $9 (shared (array i32)))
;; CHECK-NEXT:  (type $10 (sub $5 (array i32)))
;; CHECK-NEXT:  (type $11 (func (result i32)))
;; CHECK-NEXT:  (type $12 (sub (shared (array (ref $3)))))
;; CHECK-NEXT:  (type $13 (sub (shared (func (param (ref null $19) v128) (result (ref null $12))))))
;; CHECK-NEXT:  (type $14 (sub final $12 (shared (array (ref $3)))))
;; CHECK-NEXT:  (type $15 (sub (shared (func (param (ref null (shared struct)) i31ref) (result nullfuncref)))))
;; CHECK-NEXT:  (type $16 (sub $5 (array i32)))
;; CHECK-NEXT:  (type $17 (sub (func (param v128) (result f64))))
;; CHECK-NEXT:  (type $18 (sub (array (ref $11))))
;; CHECK-NEXT:  (type $19 (shared (array i8)))
;; CHECK-NEXT: )
