~ chicken-core (master) /tests/multiple-values.scm


 1(import (only (scheme base) call/cc))
 2
 3(define-syntax assert-fail
 4  (syntax-rules ()
 5    ((_ exp)
 6     (assert (handle-exceptions ex #t exp #f)))))
 7
 8(define (f x) #t)
 9
10;; Relaxed cases
11(assert (f (values 1 2 3)))
12(assert-fail (call/cc (lambda (k) (k 1 2 3)))) ; For now it should fail, see #1601
13
14;; Strict cases
15(assert-fail (call-with-values (lambda () (values 1 2 3)) f))
16(assert-fail
17  (call-with-values
18    (lambda () (call/cc (lambda (k) (k 1 2 3))))
19    f))
20
21;; Sanity check for strict cases with correct argument count
22(assert (call-with-values (lambda () (values 1)) f))
23(assert (call-with-values (lambda () 1) f))
24(assert (call-with-values (lambda () (call/cc (lambda (k) (k 1)))) f))
Trap