typed-racket/typed-racket-test/succeed/slow-check.rkt
2014-12-22 12:35:30 -05:00

75 lines
3.5 KiB
Racket

#lang racket/base
;; implied-atomic? was improved for disjunctions
;; these tests make sure those improvements
;; are still working (these used to take
;; an astronomical amount of time)
(require racket/sandbox)
(call-with-limits
120
500
(λ () (eval '(begin (module a typed/racket
(provide foo bar)
(: foo : Any -> Number)
(define (foo x)
(match x
[(cons (or 'x 'y) more)
(match x
[(list _ (list (list (? number? x) y (? number? xs) ys))) 1]
[_ 2])]))
(: filters-more (-> Boolean Boolean Boolean Boolean Boolean
Boolean Boolean Boolean Boolean Natural))
(define (filters-more inc1? inc2? inc3? a-min?
a-max? b-min? b-max? c-min? c-max?)
(let-values ([(a-min? a-max?) (if inc1?
(values a-min? a-max?)
(values a-max? a-min?))]
[(b-min? b-max?) (if inc2?
(values b-min? b-max?)
(values b-max? b-min?))]
[(c-min? c-max?) (if inc3?
(values c-min? c-max?)
(values c-max? c-min?))])
(cond [a-min? 0]
[b-min? 1]
[a-max? 2]
[b-max? 3]
[c-min? 4]
[c-max? 5]
[else 6])))
(: bar : Any Any)
(define (bar s)
(match s
[`(and) #f]
[`(and ,s) #f]
[`(and ,s ,sr ...) #f]
[`(or) #f]
[`(or ,s) #f]
[`(or ,s ,sr ...) #f]
[`(let* () ,s) #f]
[`(let* ((,(? symbol? x) ,s) ,b ...) ,t) #f]
[`(begin ,s ... ,t) #f]
[`(λ (,(? symbol? x) ...) ,t) #f]
[`(if ,s ,t1 ,t2) #f]
[`(let ,(list `[,(? symbol? x) ,s] ...) ,t) #f]
[`(recursive-contract ,c) #f]
[`(-> ,c ... ,d) #f]
[`(->i ([,(? symbol? x) ,c] ...) (,(? symbol? y) ,_ ,d)) #f]
[`(struct/c ,(? symbol? t) (,c ...)) #f]
[`(and/c ,c ...) #f]
[`(or/c ,c ...) #f]
[`(not/c ,c) #f]
[(list f xs ...) #f]
[#f #f]
[#t #f]
[(? number? x) #f]
[(? string? x) #f]
[(? symbol? x) 'reached])))
(require 'a)
foo
bar)
(make-base-namespace))))