From 47ae37f3baa5e709fac0c1c2a7dd93fe9b493360 Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Mon, 11 Nov 2013 17:14:21 +0900 Subject: [PATCH] add dynamic-wind test cases --- t/dynamic-wind.scm | 61 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 t/dynamic-wind.scm diff --git a/t/dynamic-wind.scm b/t/dynamic-wind.scm new file mode 100644 index 00000000..7e8edaa6 --- /dev/null +++ b/t/dynamic-wind.scm @@ -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)