50 lines
1.9 KiB
Racket
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"))
|
|
|