configure: Use GUILD_OPTIMIZE=-O1 for Guile-3.
[mes.git] / tests / cwv.test
1 #! /bin/sh
2 # -*-scheme-*-
3 exec ${MES-bin/mes} --no-auto-compile -L ${0%/*} -L module -C module -e '(tests cwv)' -s "$0" "$@"
4 !#
5
6 ;;; -*-scheme-*-
7
8 ;;; GNU Mes --- Maxwell Equations of Software
9 ;;; Copyright © 2016 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
10 ;;;
11 ;;; This file is part of GNU Mes.
12 ;;;
13 ;;; GNU Mes is free software; you can redistribute it and/or modify it
14 ;;; under the terms of the GNU General Public License as published by
15 ;;; the Free Software Foundation; either version 3 of the License, or (at
16 ;;; your option) any later version.
17 ;;;
18 ;;; GNU Mes is distributed in the hope that it will be useful, but
19 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
20 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 ;;; GNU General Public License for more details.
22 ;;;
23 ;;; You should have received a copy of the GNU General Public License
24 ;;; along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
25
26 (define-module (tests cwv)
27   #:use-module (mes mes-0)
28   #:use-module (mes test))
29
30 (mes-use-module (mes scm))
31 (mes-use-module (mes test))
32
33 (if (not guile-1.8?)
34     (pass-if "values" (seq? (values 0 1) 0)))
35 (if (not guile-1.8?)
36     (pass-if "values 2" (seq? ((lambda (x) x) (values 1 2 3)) 1)))
37 (if (not guile-1.8?)
38     (pass-if "values 3" (seq? 1 ((lambda (x) x) (values 1 2 3)))))
39 (pass-if "call-with-values" (seq? (call-with-values (lambda () (values 1 2 3))
40                                     (lambda (a b c) (+ a b c)))
41                                   6))
42
43 (pass-if-equal "lambda"
44                '(1 2 3 4 5)
45                ((lambda (x)
46                   (x 1 2 3 4 5))
47                 (lambda (one two three four five)
48                   (list one two three four five))))
49
50 (pass-if-equal "values 5"
51     '(1 2 3 4 5)
52     (call-with-values
53      (lambda ()
54        (values 1 2 3 4 5))
55    (lambda (one two three four five)
56      (list one two three four five))))
57
58 (pass-if-equal "values rests"
59     1
60     (call-with-values
61      (lambda ()
62        (values 1 2 3 4 5))
63      (lambda (one . rest)
64        one)))
65
66 (pass-if-equal "values 4a 4b"
67     '(1 2 3 four-a 5)
68  ((lambda (one two three four five)
69     (append
70      (list one two three)
71      (call-with-values
72          (lambda () four)
73        (lambda (4a . 4b)
74          ;;(cons 4a 4b) FIXME: non-compliancy?
75          (list 4a)
76 ))
77      (list five)))
78   1 2 3 (values 'four-a 'four-b) 5))
79
80 (result 'report)