core: Bugfix append with one argument.
authorJan Nieuwenhuizen <janneke@gnu.org>
Thu, 22 Dec 2016 13:22:40 +0000 (14:22 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Thu, 22 Dec 2016 13:22:40 +0000 (14:22 +0100)
* mes.c (append): Handle one argument.
* tests/base.test ("append", "append 0" ... "append 5"): New tests.

mes.c
tests/base.test

diff --git a/mes.c b/mes.c
index aaa3a6b73ac0bb37b6c1c2b974e65601a65497c8..d28c883a285d5c4837bbd3f189d6a38716c87e22 100644 (file)
--- a/mes.c
+++ b/mes.c
@@ -665,6 +665,7 @@ SCM
 append (SCM x) ///((arity . n))
  {
   if (x == cell_nil) return cell_nil;
+  if (cdr (x) == cell_nil) return car (x);
   return append2 (car (x), append (cdr (x)));
  }
 
index 5f23e0af3566bb839335d90d26593337b116eb7f..dad6cbd26d6af6f33cd7dd7a4c7aede837445f08 100755 (executable)
@@ -44,6 +44,13 @@ exit $?
 (pass-if "if 3" (seq? (if (seq? 0 '0) 'true 'false) 'true))
 (pass-if "if 4" (seq? (if (= 1 2) 'true 'false) 'false))
 
+(pass-if-equal "append" '(0 1) (append '(0) '(1)))
+(pass-if-equal "append 1" '0 (append '() 0))
+(pass-if-equal "append 2" '(0) (append '(0) '()))
+(pass-if-equal "append 3" 0 (append 0))
+(pass-if-equal "append 4" 'cons (append (cdr '(c)) (car '(cons))))
+(pass-if-equal "append 5" '(0 1 2) (append '(0) '(1) '(2)))
+
 ;;(pass-if ">=" (seq? (>= 3 2 1) #t))
 
 (if (defined? 'cond)