]> gitweb.factorcode.org Git - factor.git/commitdiff
Fixing and adding tests for lisp
authorJames Cash <james.nvc@gmail.com>
Wed, 11 Jun 2008 05:25:11 +0000 (01:25 -0400)
committerJames Cash <james.nvc@gmail.com>
Wed, 11 Jun 2008 05:36:35 +0000 (01:36 -0400)
extra/lisp/lisp-tests.factor

index 9d85355f2e93b52fe2d392caac626b12c4f2a902..a492fd9a485d6eb25e9cadc2e602d4504e8d54f1 100644 (file)
@@ -1,6 +1,7 @@
 ! Copyright (C) 2008 James Cash
 ! See http://factorcode.org/license.txt for BSD license.
-USING: lisp lisp.parser tools.test sequences math kernel parser arrays lists ;
+USING: lisp lisp.parser tools.test sequences math kernel parser arrays lists
+quotations ;
 
 IN: lisp.test
 
@@ -13,12 +14,27 @@ IN: lisp.test
     "+" "math" "+" define-primitive
     "-" "math" "-" define-primitive
     
+    "cons" "lists" "cons" define-primitive
+    "car" "lists" "car" define-primitive
+    "cdr" "lists" "cdr" define-primitive
+    "append" "lists" "lappend" define-primitive
+    "nil" "lists" "nil" define-primitive
+    "nil?" "lists" "nil?" define-primitive
+    
+    [ seq>list ] "##list" lisp-define
+    
+    "define" "lisp" "defun" define-primitive
+    
+    "(lambda (&rest xs) xs)" lisp-string>factor "list" lisp-define
+        
     { 5 } [
-      [ 2 3 ] "+" <lisp-symbol> funcall
+      ! [ 2 3 ] "+" <lisp-symbol> funcall
+      "(+ 2 3)" lisp-eval
     ] unit-test
     
     { 8.3 } [
-     [ 10.4 2.1 ] "-" <lisp-symbol> funcall
+     ! [ 10.4 2.1 ] "-" <lisp-symbol> funcall
+     "(- 10.4 2.1)" lisp-eval
     ] unit-test
     
     { 3 } [
@@ -29,32 +45,36 @@ IN: lisp.test
       "((lambda (x y z) (+ x (- y z))) 40 3 1)" lisp-eval
     ] unit-test
     
-    { { 1 2 3 4 } } [
-        "((lambda (x y) (quasiquote (1 (unquote x) 3 (unquote y)))) 2 4)" lisp-eval list>seq
+    { "b" } [
+      "(cond (#f \"a\") (#t \"b\"))" lisp-eval
     ] unit-test
     
-    { T{ lisp-symbol f "if" } } [
-        "(defmacro if (pred tr fl) (quasiquote (cond ((unquote pred) (unquote tr)) (#t (unquote fl)))))" lisp-eval
+    { 5 } [
+      "(begin (+ 1 4))" lisp-eval
     ] unit-test
     
-    { t } [
-        T{ lisp-symbol f "if" } lisp-macro?
+    { { 1 2 3 4 5 } } [
+        "(list 1 2 3 4 5)" lisp-eval list>seq
     ] unit-test
     
-    { 1 } [
-      "(if #t 1 2)" lisp-eval
+    { { 1 2 { 3 { 4 } 5 } } } [
+        "(list 1 2 (list 3 (list 4) 5))" lisp-eval cons>seq
     ] unit-test
     
-    { "b" } [
-      "(cond (#f \"a\") (#t \"b\"))" lisp-eval
+    { T{ lisp-symbol f "if" } } [
+        "(defmacro if (pred tr fl) (list (quote cond) (list (list pred tr) (list t fl))))" lisp-eval
     ] unit-test
     
-    { 5 } [
-      "(begin (+ 1 4))" lisp-eval
+    { t } [
+        T{ lisp-symbol f "if" } lisp-macro?
     ] unit-test
     
-    { 3 } [
-       "((lambda (x) (if x (begin (+ 1 2)) (- 3 5))) #t)" lisp-eval
-    ] unit-test
+!     { 1 } [
+!       "(if #t 1 2)" lisp-eval
+!     ] unit-test
+    
+!     { 3 } [
+!        "((lambda (x) (if x (begin (+ 1 2)) (- 3 5))) #t)" lisp-eval
+!     ] unit-test
     
 ] with-interactive-vocabs