summaryrefslogtreecommitdiffstats
path: root/tests/012/lambda.tl
diff options
context:
space:
mode:
Diffstat (limited to 'tests/012/lambda.tl')
-rw-r--r--tests/012/lambda.tl27
1 files changed, 25 insertions, 2 deletions
diff --git a/tests/012/lambda.tl b/tests/012/lambda.tl
index ec3b2cae..811dbcfc 100644
--- a/tests/012/lambda.tl
+++ b/tests/012/lambda.tl
@@ -3,12 +3,28 @@
(defun call-lambda (fn . args)
[fn . args])
+(defun call-lambda-fixed (fn . args)
+ (tree-case args
+ (() [fn])
+ ((a1) [fn a1])
+ ((a1 a2) [fn a1 a2])
+ ((a1 a2 a3) [fn a1 a2 a3])
+ ((a1 a2 a3 a4) [fn a1 a2 a3 a4])
+ ((a1 a2 a3 a4 a5) [fn a1 a2 a3 a4 a5])
+ ((a1 . r) [fn a1 . r])
+ ((a1 a2 . r) [fn a1 a2 . r])
+ ((a1 a2 a3 . r) [fn a1 a2 a3 . r])
+ ((a1 a2 a3 a4 . r) [fn a1 a2 a3 a4 . r])
+ ((a1 a2 a3 a4 a5 . r) [fn a1 a2 a3 a4 a5 . r])
+ (r [fn . r])))
+
(defmacro ltest (:match :form f)
(([(lambda . @rest) . @args] @expected)
(if *compile-test*
^(progn
(test [(lambda ,*rest) ,*args] ,expected)
- (test (call-lambda (lambda ,*rest) ,*args) ,expected))
+ (test (call-lambda (lambda ,*rest) ,*args) ,expected)
+ (test (call-lambda-fixed (lambda ,*rest) ,*args) ,expected))
^(test [(lambda ,*rest) ,*args] ,expected)))
((@else . rest) (compile-error f "bad syntax")))
@@ -17,17 +33,22 @@
(mltest
[(lambda ())] nil
+ [(lambda ()) 1] :error
[(lambda (a) a)] :error
[(lambda (a) a) 1] 1
+ [(lambda (a) a) 1 2] :error
[(lambda (a b) (list a b)) 1] :error
[(lambda (a b) (list a b)) 1 2] (1 2)
+ [(lambda (a b) (list a b)) 1 2 3] :error
[(lambda (a b c) (list a b c)) 1 2] :error
- [(lambda (a b c) (list a b c)) 1 2 3] (1 2 3))
+ [(lambda (a b c) (list a b c)) 1 2 3] (1 2 3)
+ [(lambda (a b c) (list a b c)) 1 2 3 4] :error)
(mltest
[(lambda (: a) a)] nil
[(lambda (: (a 1)) a)] 1
[(lambda (: (a 1)) a) 2] 2
+ [(lambda (: (a 1)) a) 2 3] :error
[(lambda (: (a 1 a-p)) (list a a-p))] (1 nil)
[(lambda (: (a 1 a-p)) (list a a-p)) 2] (2 t))
@@ -35,6 +56,8 @@
[(lambda (x : a) (list x a))] :error
[(lambda (x : (a 1)) (list x a))] :error
[(lambda (x : (a 1)) (list x a)) 2] (2 1)
+ [(lambda (x : (a 1)) (list x a)) 2 3] (2 3)
+ [(lambda (x : (a 1)) (list x a)) 2 3 4] :error
[(lambda (x : (a 1 a-p)) (list x a a-p))] :error
[(lambda (x : (a 1 a-p)) (list x a a-p)) 2] (2 1 nil))