aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2022-06-27 12:50:36 -0700
committerSean Whitton <spwhitton@spwhitton.name>2022-06-27 13:26:21 -0700
commit668a1678682851a5a7aaa72cd4e0198f5e1e7058 (patch)
tree182744ff5e7fb31769b943d81f38cab213105297
parentd1d85342c3da2d8fed3f0efd07b170fc6495a163 (diff)
downloadconsfigurator-668a1678682851a5a7aaa72cd4e0198f5e1e7058.tar.gz
MULTIPLE-VALUE-MAPCAN: don't return spurious 2nd value & some tests
Signed-off-by: Sean Whitton <spwhitton@spwhitton.name>
-rw-r--r--src/util.lisp2
-rw-r--r--tests/util.lisp21
2 files changed, 22 insertions, 1 deletions
diff --git a/src/util.lisp b/src/util.lisp
index cd986d9..3bec7ba 100644
--- a/src/util.lisp
+++ b/src/util.lisp
@@ -21,7 +21,7 @@
(defun multiple-value-mapcan (function &rest lists)
"Variant of MAPCAN which preserves multiple return values."
(loop with lists = (copy-list lists)
- with results = (make-array '(2) :initial-element nil :adjustable t)
+ with results = (make-array '(1) :initial-element nil :adjustable t)
for new = (multiple-value-list
(apply function
(maplist (lambda (lists)
diff --git a/tests/util.lisp b/tests/util.lisp
index 1390e7c..f0c88ad 100644
--- a/tests/util.lisp
+++ b/tests/util.lisp
@@ -2,6 +2,27 @@
(named-readtables:in-readtable :consfigurator)
(in-consfig "consfigurator/tests")
+(deftest multiple-value-mapcan.1
+ (multiple-value-mapcan
+ (lambda (car1 car2 car3)
+ (values (list car1 car2 car3) (list car3 car2 car1)))
+ '(1 2 3 4) '(1 2 3) '(5 4 3 2 1))
+ (1 1 5 2 2 4 3 3 3) (5 1 1 4 2 2 3 3 3))
+
+(deftest multiple-value-mapcan.2
+ (multiple-value-mapcan #'list '(1 2 3 4 5))
+ (1 2 3 4 5))
+
+(deftest multiple-value-mapcan.3
+ (let ((n 0))
+ (multiple-value-mapcan
+ (lambda (car1 car2 car3)
+ (if (> (incf n) 2)
+ (list car2)
+ (values (list car1 car2 car3) (list car3))))
+ '(1 2 3 4) '(1 2 3) '(5 4 3 2 1)))
+ (1 1 5 2 2 4 3) (5 4))
+
(deftest version<.1 (version< "1.0.1" "1.0.2") t)
(deftest version<=.1 (version<= "1.0.1" "1.0.2") t)