mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-18 21:29:19 +02:00
43 lines
1,004 B
Scheme
43 lines
1,004 B
Scheme
(define-library (srfi 229 test)
|
|
(export run-tests)
|
|
(import (scheme base)
|
|
(chibi test)
|
|
(srfi 229))
|
|
(begin
|
|
(define (run-tests)
|
|
(test-group
|
|
"srfi-229: tagged procedures"
|
|
|
|
(define f
|
|
(lambda/tag 42
|
|
(x)
|
|
(* x x)))
|
|
|
|
(define f*
|
|
(lambda/tag 43
|
|
(x)
|
|
(* x x)))
|
|
|
|
(define g
|
|
(let ((y 10))
|
|
(lambda/tag y ()
|
|
(set! y (+ y 1))
|
|
y)))
|
|
|
|
(define h
|
|
(let ((box (vector #f)))
|
|
(case-lambda/tag box
|
|
(() (vector-ref box 0))
|
|
((val) (vector-set! box 0 val)))))
|
|
|
|
(test #t (procedure/tag? f))
|
|
(test 9 (f 3))
|
|
(test 42 (procedure-tag f))
|
|
(test #f (eqv? f f*))
|
|
(test 10 (procedure-tag g))
|
|
(test 10 (let ((y 9)) (procedure-tag g)))
|
|
(test 11 (g))
|
|
(test 10 (procedure-tag g))
|
|
(h 1)
|
|
(test 1 (vector-ref (procedure-tag h) 0))
|
|
(test 1 (h))))))
|