add dynamic-wind test cases
This commit is contained in:
parent
8c40fc8d9e
commit
47ae37f3ba
|
@ -0,0 +1,61 @@
|
|||
(define (print obj)
|
||||
(write obj)
|
||||
(newline)
|
||||
obj)
|
||||
|
||||
(print
|
||||
(dynamic-wind
|
||||
(lambda () (print 'before1))
|
||||
(lambda ()
|
||||
(define cont #f)
|
||||
(print 1)
|
||||
(dynamic-wind
|
||||
(lambda () (print 'before2))
|
||||
(lambda ()
|
||||
(print 2)
|
||||
(set! cont (call/cc values)))
|
||||
(lambda () (print 'after2)))
|
||||
(dynamic-wind
|
||||
(lambda () (print 'before3))
|
||||
(lambda ()
|
||||
(print 3)
|
||||
(if (procedure? cont)
|
||||
(cont 42)
|
||||
cont))
|
||||
(lambda () (print 'after3))))
|
||||
(lambda () (print 'after1))))
|
||||
|
||||
; before1
|
||||
; 1
|
||||
; before2
|
||||
; 2
|
||||
; after2
|
||||
; before3
|
||||
; 3
|
||||
; after3
|
||||
; before2
|
||||
; after2
|
||||
; before3
|
||||
; 3
|
||||
; after3
|
||||
; after1
|
||||
; => 42
|
||||
|
||||
(print
|
||||
(let ((path '())
|
||||
(c #f))
|
||||
(let ((add (lambda (s)
|
||||
(set! path (cons s path)))))
|
||||
(dynamic-wind
|
||||
(lambda () (add 'connect))
|
||||
(lambda ()
|
||||
(add (call-with-current-continuation
|
||||
(lambda (c0)
|
||||
(set! c c0)
|
||||
'talk1))))
|
||||
(lambda () (add 'disconnect)))
|
||||
(if (< (length path) 4)
|
||||
(c 'talk2)
|
||||
(reverse path)))))
|
||||
|
||||
; (connect talk1 disconnect connect talk2 disconnect)
|
Loading…
Reference in New Issue