updated tests for letrec
This commit is contained in:
parent
72c958df62
commit
16869bb4dd
91
pkgs/racket-pkgs/racket-test/tests/racket/letrec.rktl
Normal file
91
pkgs/racket-pkgs/racket-test/tests/racket/letrec.rktl
Normal 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)
|
|
@ -920,6 +920,7 @@
|
||||||
|
|
||||||
;; Don't optimize away use before definition:
|
;; Don't optimize away use before definition:
|
||||||
(test-comp '(letrec ([x (begin x 5)]) x) '5 #f)
|
(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)))
|
(test-comp '(let ([x 5]) (set! x 2)) '(let ([x 5]) (set! x x) (set! x 2)))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user