From e71b21149d1066506de451b62cef2a1f5cb79c34 Mon Sep 17 00:00:00 2001
From: pfdietz <pfdietz@localhost>
Date: Sat, 19 Oct 2002 04:45:13 +0000
Subject: [PATCH] Added tests for MULTIPLE-VALUE-BIND/CALL/LIST.

---
 ansi-tests/gclload2.lsp            |  2 ++
 ansi-tests/multiple-value-bind.lsp | 53 ++++++++++++++++++++++++++++++
 ansi-tests/multiple-value-call.lsp | 42 +++++++++++++++++++++++
 3 files changed, 97 insertions(+)
 create mode 100644 ansi-tests/multiple-value-bind.lsp
 create mode 100644 ansi-tests/multiple-value-call.lsp

diff --git a/ansi-tests/gclload2.lsp b/ansi-tests/gclload2.lsp
index 0ef05333..c257addf 100644
--- a/ansi-tests/gclload2.lsp
+++ b/ansi-tests/gclload2.lsp
@@ -44,6 +44,8 @@
 (load "lambda-parameters-limit.lsp")
 (load "let.lsp")
 (load "macrolet.lsp")
+(load "multiple-value-bind.lsp")
+(load "multiple-value-call.lsp") ;; include multiple-value-list
 (load "nil.lsp")
 (load "not-and-null.lsp")
 (load "notany.lsp")
diff --git a/ansi-tests/multiple-value-bind.lsp b/ansi-tests/multiple-value-bind.lsp
new file mode 100644
index 00000000..7943908c
--- /dev/null
+++ b/ansi-tests/multiple-value-bind.lsp
@@ -0,0 +1,53 @@
+;-*- Mode:     Lisp -*-
+;;;; Author:   Paul Dietz
+;;;; Created:  Fri Oct 18 23:16:23 2002
+;;;; Contains: Tests for MULTIPLE-VALUE-BIND
+
+(in-package :cl-test)
+
+(deftest multiple-value-bind.1
+  (multiple-value-bind (x y z) (values 1 2 3)
+    (declare (type integer x))
+    (declare (type integer y))
+    (declare (type integer z))
+    (list z y x))
+  (3 2 1))
+
+(deftest multiple-value-bind.2
+  (multiple-value-bind (x y z) (values 1 2 3)
+    (let ((x 4))
+      (list x y z)))
+  (4 2 3))
+
+(deftest multiple-value-bind.3
+  (multiple-value-bind (x y z) (values 1 2 3 4 5 6)
+    (list x y z))
+  (1 2 3))
+
+(deftest multiple-value-bind.4
+  (multiple-value-bind (x y z) (values 1 2)
+    (list x y z))
+  (1 2 nil))
+
+(deftest multiple-value-bind.5
+  (multiple-value-bind () (values 1 2) (values 'a 'b 'c))
+  a b c)
+
+(deftest multiple-value-bind.6
+  (multiple-value-bind (x y z) (values)
+    (list x y z))
+  (nil nil nil))
+
+(deftest multiple-value-bind.7
+  (let ((z 0) x y)
+    (declare (special z))
+    (values
+     (flet ((%x () (symbol-value 'x))
+	    (%y () (symbol-value 'y))
+	    (%z () (symbol-value 'z)))
+       (multiple-value-bind (x y z) (values 1 2 3)
+	 (declare (special x y))
+	 (list (%x) (%y) (%z))))
+     x y z))
+  (1 2 0) nil nil 0)
+
diff --git a/ansi-tests/multiple-value-call.lsp b/ansi-tests/multiple-value-call.lsp
new file mode 100644
index 00000000..012d942f
--- /dev/null
+++ b/ansi-tests/multiple-value-call.lsp
@@ -0,0 +1,42 @@
+;-*- Mode:     Lisp -*-
+;;;; Author:   Paul Dietz
+;;;; Created:  Fri Oct 18 23:35:07 2002
+;;;; Contains: Tests of MULTIPLE-VALUE-CALL, MULTIPLE-VALUE-LIST
+
+(in-package :cl-test)
+
+(deftest multiple-value-call.1
+  (multiple-value-call #'+ (values 1 2) (values) 3 (values 4 5 6))
+  21)
+
+(deftest multiple-value-call.2
+  (multiple-value-call 'list)
+  nil)
+
+(deftest multiple-value-call.3
+  (multiple-value-call 'list (floor 13 4))
+  (3 1))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(deftest multiple-value-list.1
+  (multiple-value-list (values))
+  nil)
+
+(deftest multiple-value-list.2
+  (multiple-value-list (values 'a))
+  (a))
+
+(deftest multiple-value-list.3
+  (multiple-value-list (values 'a 'b))
+  (a b))
+
+(deftest multiple-value-list.4
+  (not
+   (loop
+    for i from 0 below (min multiple-values-limit 100)
+    for x = (make-list i :initial-element 'a)
+    always (equal x (multiple-value-list (values-list x)))))
+  nil)
+
+
-- 
GitLab