75 lines
3.5 KiB
Racket
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)))) |