typed-racket/typed-racket-test/succeed/type-printer-single-level.rkt
2014-12-16 10:07:25 -05:00

50 lines
1.9 KiB
Racket

#lang racket
;; Make sure that the type printer expands only a single
;; level for (:type ...)
(require rackunit
racket/sandbox)
(define out (open-output-string))
(define tr-eval
(parameterize ([sandbox-output out])
(call-with-trusted-sandbox-configuration
(thunk (make-evaluator 'typed/racket)))))
(tr-eval '(require typed/racket))
(tr-eval '(define-type Foo (U String Integer)))
(tr-eval '(define-type Bar (Foo -> Foo)))
(tr-eval '(:type Foo))
(tr-eval '(:type Bar))
(tr-eval '(:type (Number -> Integer)))
;; if #:verbose, make sure it's the full type
(tr-eval '(:type #:verbose Bar))
(check-equal? (get-output-string out)
(string-append "(U Integer String)\n[can expand further: Integer]"
"(-> Foo Foo)\n[can expand further: Foo]"
"(-> Number Integer)\n[can expand further: Integer Number]"
"(-> (U String\n"
" 0\n"
" 1\n"
" Byte-Larger-Than-One\n"
" Positive-Index-Not-Byte\n"
" Positive-Fixnum-Not-Index\n"
" Negative-Fixnum\n"
" Positive-Integer-Not-Fixnum\n"
" Negative-Integer-Not-Fixnum)\n"
" (U String\n"
" 0\n"
" 1\n"
" Byte-Larger-Than-One\n"
" Positive-Index-Not-Byte\n"
" Positive-Fixnum-Not-Index\n"
" Negative-Fixnum\n"
" Positive-Integer-Not-Fixnum\n"
" Negative-Integer-Not-Fixnum))\n"))