www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

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))))