chibi-scheme/lib/srfi/139/test.sld
2017-08-26 23:29:02 +09:00

48 lines
1.2 KiB
Scheme

(define-library (srfi 139 test)
(export run-tests)
(import (scheme base)
(chibi test)
(srfi 139))
(begin
(define-syntax-parameter abort
(syntax-rules ()
((_ . _)
(syntax-error "abort used outside of a loop"))))
(define-syntax-parameter foo
(syntax-rules ()
((foo) 'old)))
(define-syntax forever
(syntax-rules ()
((forever body1 body2 ...)
(call-with-current-continuation
(lambda (escape)
(syntax-parameterize
((abort
(syntax-rules ()
((abort value (... ...))
(escape value (... ...))))))
(let loop ()
body1 body2 ... (loop))))))))
(define (run-tests)
(test-begin "srfi-139: syntax parameters")
(test (list 'old 'new)
(let ((new
(syntax-parameterize
((foo (syntax-rules ()
((foo) 'new))))
(foo))))
(list (foo) new)))
(test 10
(let ((i 0))
(forever
(set! i (+ 1 i))
(when (= i 10)
(abort)))
i))
(test-end))))