updated tests for letrec

This commit is contained in:
Claire Alvis 2014-04-03 16:21:59 -06:00 committed by Matthew Flatt
parent 72c958df62
commit 16869bb4dd
2 changed files with 92 additions and 0 deletions

View File

@ -0,0 +1,91 @@
(load-relative "loadtest.rktl")
(Section 'letrec)
;; =============================================================================
(define letrec-exn? exn:fail:contract:variable?)
(test 5 'const (letrec ([x 5]) 5))
(test 5 'var-ref (letrec ([x 5]) x))
(test #t 'lambda (procedure? (letrec ([x (lambda () 5)]) x)))
(test #t 'lambda-rest-args (procedure? (letrec ([x (lambda l l)]) x)))
(test 5 'lambda-called (letrec ([x (lambda () 5)]) (x)))
(test (list 5) 'lambda-rest-args-called (letrec ([x (lambda l l)] [y (x 5)]) y))
(err/rt-test (letrec ([x x]) x) letrec-exn?)
(err/rt-test (letrec ([x y] [y 5]) y) letrec-exn?)
(test #t 'begin
(procedure?
(letrec ([x (begin (lambda () y)
(lambda () z))]
[y 5]
[z 6])
x)))
(err/rt-test
(letrec ([x ((lambda l z) 5)] [z 5]) x)
letrec-exn?)
(test 5 'nested (letrec ([x (letrec ([y 6]) 5)]) x))
(test 5 'nested-more (letrec ([x (letrec ([y 5]) y)]) x))
(test 5 'nested-even-more (letrec ([x 5] [y (letrec ([z x]) z)]) y))
(err/rt-test
(letrec ([q (lambda () s)] [r (q)] [s 5]) r)
letrec-exn?)
(test 5 'reordered (letrec ([s 5] [q (lambda () s)] [r (q)]) r))
(test 5 'set! (letrec ([x 0]
[f (lambda (v) (set! x v))])
(begin (f 5) x)))
(err/rt-test
(letrec ([f (lambda () (letrec ([x x]) 5))]
[g (f)])
g)
letrec-exn?)
(test #t 'checked-but-ok
(procedure?
(letrec ([y (lambda () (letrec ([x x]) x))])
y)))
(err/rt-test
(letrec ([a (letrec ([y (lambda () x)]) (lambda () (y)))] [x (a)]) x)
letrec-exn?)
(err/rt-test
(letrec ([a (letrec ([x (lambda () (y))] [y (lambda () a)]) (x))]) a)
letrec-exn?)
(err/rt-test
(letrec ([w (lambda () r)]
[z (lambda () 5)]
[x (set! z w)]
[y (set! x (z))]
[r 5])
x)
letrec-exn?)
(err/rt-test
(letrec-values ([(x y) (values (lambda () z) (lambda () z))] [(z) (y)]) z)
letrec-exn?)
(test #t 'checked-but-ok
(procedure?
(let ([proc (letrec ([x (letrec ([v (lambda () x)]) v)]) x)])
(proc))))
(err/rt-test
(letrec ([x (letrec ([v (lambda () y)]) v)]
[y (x)])
y)
letrec-exn?)
(report-errs)

View File

@ -920,6 +920,7 @@
;; Don't optimize away use before definition:
(test-comp '(letrec ([x (begin x 5)]) x) '5 #f)
(test-comp '(letrec ([x (letrec ([y 5]) x 6)]) x) '6 #f)
(test-comp '(let ([x 5]) (set! x 2)) '(let ([x 5]) (set! x x) (set! x 2)))