aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/functions.lisp6
-rw-r--r--tests/functions.lisp15
2 files changed, 18 insertions, 3 deletions
diff --git a/lib/functions.lisp b/lib/functions.lisp
index dd9976d..073e34a 100644
--- a/lib/functions.lisp
+++ b/lib/functions.lisp
@@ -31,10 +31,10 @@ each member is STEP distance apart."
"Return the first N elements of LST."
(subseq lst 0 n))
-(fn split (n lst) (-> (fixnum list) list)
+(fn split (n lst) (-> (fixnum sequence) (values sequence sequence))
"Return CONS where CAR is the first N elements of LST and CDR is the rest."
- (cons (take n lst)
- (subseq lst n)))
+ (values (take n lst)
+ (subseq lst n)))
(fn rev-map (indicator lst &key (key-eq #'eq))
(-> (function list &key (:key-eq function)) list)
diff --git a/tests/functions.lisp b/tests/functions.lisp
index 8582213..bfb7277 100644
--- a/tests/functions.lisp
+++ b/tests/functions.lisp
@@ -48,3 +48,18 @@
(true (->> (list 1 2 3 4) (take 0) null))
(is equal "H" (take 1 "Hello"))
(is equal '(1 2) (take 2 '(1 2 3 4 5))))
+
+(define-test (function-test split)
+ :compile-at :execute
+ (fail (split nil nil))
+ (fail (split 100 nil))
+ (fail (split nil 100))
+ (is-values (split 0 '(1 2 3 4))
+ (eq nil)
+ (equal '(1 2 3 4)))
+ (is-values (split 1 '(1 2 3 4))
+ (equal '(1))
+ (equal '(2 3 4)))
+ (is-values (split 5 "Hello World")
+ (string= "Hello")
+ (string= " World")))