]> git.donarmstrong.com Git - lilypond.git/blob - guile18/test-suite/tests/srfi-11.test
Import guile-1.8 as multiple upstream tarball component
[lilypond.git] / guile18 / test-suite / tests / srfi-11.test
1 ;;;; srfi-11.test --- exercise SRFI-11 let-values
2 ;;;;
3 ;;;; Copyright 2004, 2006 Free Software Foundation, Inc.
4 ;;;;
5 ;;;; This program is free software; you can redistribute it and/or modify
6 ;;;; it under the terms of the GNU General Public License as published by
7 ;;;; the Free Software Foundation; either version 2, or (at your option)
8 ;;;; any later version.
9 ;;;;
10 ;;;; This program is distributed in the hope that it will be useful,
11 ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 ;;;; GNU General Public License for more details.
14 ;;;;
15 ;;;; You should have received a copy of the GNU General Public License
16 ;;;; along with this software; see the file COPYING.  If not, write to
17 ;;;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 ;;;; Boston, MA 02110-1301 USA
19
20 (define-module (test-suite test-srfi-11)
21   #:use-module (test-suite lib)
22   #:use-module (srfi srfi-11))
23
24
25 ;;
26 ;; let-values
27 ;;
28
29 (with-test-prefix "let-values"
30
31   (with-test-prefix "no exprs"
32
33     (pass-if "no values"
34       (let-values ()
35         #t)))
36
37   (with-test-prefix "one expr"
38
39     (pass-if "no values"
40       (let-values ((() (values)))
41         #t))
42
43     (pass-if "one value"
44       (let-values (((x) (values 1)))
45         (equal? x 1)))
46
47     (pass-if "one value as rest"
48       (let-values ((x (values 1)))
49         (equal? x '(1))))
50
51     (pass-if "two values"
52       (let-values (((x y) (values 1 2)))
53         (and (equal? x 1)
54              (equal? y 2)))))
55
56   (with-test-prefix "two exprs"
57
58     (pass-if "no values each"
59       (let-values ((() (values))
60                    (() (values)))
61         #t))
62
63     (pass-if "one value / no values"
64       (let-values (((x) (values 1))
65                    (() (values)))
66         (equal? x 1)))
67
68     (pass-if "one value each"
69       (let-values (((x) (values 1))
70                    ((y) (values 2)))
71         (and (equal? x 1)
72              (equal? y 2))))
73
74     (pass-if-exception "first binding invisible to second expr"
75         '(unbound-variable . ".*")
76       (let-values (((x) (values 1))
77                    ((y) (values (1+ x))))
78         #f))))
79
80 ;;
81 ;; let*-values
82 ;;
83
84 (with-test-prefix "let*-values"
85
86   (with-test-prefix "no exprs"
87
88     (pass-if "no values"
89       (let*-values ()
90         #t)))
91
92   (with-test-prefix "one expr"
93
94     (pass-if "no values"
95       (let*-values ((() (values)))
96         #t))
97
98     (pass-if "one value"
99       (let*-values (((x) (values 1)))
100         (equal? x 1)))
101
102     (pass-if "one value as rest"
103       (let-values ((x (values 1)))
104         (equal? x '(1))))
105
106     (pass-if "two values"
107       (let*-values (((x y) (values 1 2)))
108         (and (equal? x 1)
109              (equal? y 2)))))
110
111   (with-test-prefix "two exprs"
112
113     (pass-if "no values each"
114       (let*-values ((() (values))
115                     (() (values)))
116         #t))
117
118     (pass-if "one value / no values"
119       (let*-values (((x) (values 1))
120                     (() (values)))
121         (equal? x 1)))
122
123     (pass-if "one value each"
124       (let*-values (((x) (values 1))
125                     ((y) (values 2)))
126         (and (equal? x 1)
127              (equal? y 2))))
128
129     (pass-if "first binding visible to second expr"
130       (let*-values (((x) (values 1))
131                     ((y) (values (1+ x))))
132         (and (equal? x 1)
133              (equal? y 2))))))