test-contracts-to-types.rkt (3299B)
1 #lang type-expander 2 (require racket/contract/base 3 type-expander/contracts-to-types 4 typed/rackunit 5 version-case) 6 (define-syntax (if-version≥6.5 stx) 7 (syntax-case stx () 8 [(_ . rest) 9 (if (version>= (version) "6.5") 10 #'(begin . rest) 11 #'(begin))])) 12 13 (if-version≥6.5 14 (define-syntax-rule (check-written=? a b) 15 (check-equal? (with-output-to-string (λ () a)) (format "~s\n" b))) 16 (check-written=? (:contract→type (list/c 1 2 "str" (or/c integer? string?))) 17 '(List 1 2 "str" (U Integer String))) 18 (check-written=? (:contract→type 19 (list/c integer? string? boolean? char? bytes?)) 20 '(List Integer String Boolean Char Bytes)) 21 (check-written=? (:contract→type (*list/c integer? string? boolean?)) 22 '(Rec R (U (Pairof Integer R) (List String Boolean)))) 23 (check-written=? (:contract→type (-> integer? boolean? string? symbol?)) 24 '(-> Integer Boolean String Symbol)) 25 (check-written=? (:contract→type (-> integer? boolean? string? ... symbol?)) 26 '(->* (Integer Boolean) #:rest String Symbol)) 27 (check-written=? (:contract→type (->* (integer? boolean?) 28 (char?) 29 #:rest (listof string?) 30 symbol?)) 31 '(->* (Integer Boolean) (Char) #:rest String Symbol)) 32 (check-written=? (:contract→type (->* (integer? boolean?) 33 () 34 #:rest (listof string?) 35 symbol?)) 36 '(->* (Integer Boolean) () #:rest String Symbol)) 37 (check-written=? (:contract→type (->* (integer? boolean?) 38 #:rest (listof string?) 39 symbol?)) 40 '(->* (Integer Boolean) #:rest String Symbol)) 41 (check-written=? (:contract→type (->* (integer? boolean?) 42 symbol?)) 43 '(->* (Integer Boolean) Symbol)) 44 (check-written=? (:contract→type (->* (integer? boolean?) 45 (char?) 46 symbol?)) 47 '(->* (Integer Boolean) (Char) Symbol)) 48 (check-written=? (:contract→type (->* (integer? boolean?) 49 () 50 symbol?)) 51 '(->* (Integer Boolean) () Symbol)) 52 (check-written=? (:contract→type 53 (flat-rec-contract W (cons/c W W) number? string?)) 54 '(Rec W (U (Pairof W W) Number String))) 55 (check-written=? (:contract→type 56 (flat-rec-contract W 57 (cons/c (flat-rec-contract R 58 (cons/c W R) 59 null?) 60 W) 61 number? 62 string?)) 63 '(Rec W (U (Pairof (Rec R (U (Pairof W R) Null)) W) 64 Number 65 String))))