lambda.lisp 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. (test-init "Lambda tests" 19)
  2. ;; These tests were adapted from P. F. Dietz's ANSI compilance test
  3. ;; suite (destructuring-bind.lsp) available from:
  4. ;; http://common-lisp.net/project/ansi-test/
  5. (test 'a 'lambda.1
  6. ((lambda (x) x) 'a))
  7. (test 'a 'lambda.2
  8. ((lambda () 'a)))
  9. (test 'z 'lambda.4
  10. ((lambda (x) (KAWA:declare (KAWA:type KAWA:symbol x)) x) 'z))
  11. ;; BUGS!
  12. ;; (deftest lambda.5
  13. ;; ((lambda (&aux (x 'a)) x))
  14. ;; a)
  15. ;; (deftest lambda.6
  16. ;; ((lambda (&aux (x 'a)) (declare (type symbol x)) x))
  17. ;; a)
  18. (test "foo" 'lambda.7
  19. ((lambda () "foo")))
  20. (test "bar" 'lambda.8
  21. ((lambda () "foo" "bar")))
  22. (test '(1 2 nil) 'lambda.11
  23. ((lambda (x &optional y z) (list x y z)) 1 2))
  24. (test '(1 nil c) 'lambda.12
  25. ((lambda (&optional (x 'a) (y 'b) (z 'c)) (list x y z)) 1 nil))
  26. (test '(1 nil c t t nil) 'lambda.13
  27. ((lambda (&optional (x 'a x-p) (y 'b y-p) (z 'c z-p))
  28. (list x y z x-p y-p z-p))
  29. 1 nil))
  30. (test 2 'lambda.14
  31. (let ((x 1))
  32. ((lambda (&optional (x (+ x 1))) x))))
  33. (test '(10 11) 'lambda.15
  34. ((lambda (y &optional (x (+ y 1))) (list y x)) 10))
  35. (test '(10 14) 'lambda.16
  36. ((lambda (y &optional (x (+ y 1))) (list y x)) 10 14))
  37. (test '(1 2 3) 'lambda.17
  38. ((lambda (&rest x) x) 1 2 3))
  39. ;; BUGS!
  40. ;; (test '(3 7) 'lambda.18
  41. ;; (let ((b 10))
  42. ;; ((lambda (&optional (a b) (b (+ a 1))) (list a b)) 3 7)))
  43. ;; (test '(3 4) 'lambda.19
  44. ;; (let ((b 10))
  45. ;; ((lambda (&optional (a b) (b (1+ a))) (list a b)) 3)))
  46. (test nil 'lambda.23
  47. ((lambda (&key a) a)))
  48. (test '(nil nil nil) 'lambda.24
  49. ((lambda (&key a b c) (list a b c))))
  50. (test '(1 2 3) 'lambda.25
  51. ((lambda (&key (a 1) (b 2) (c 3)) (list a b c))))
  52. ;; BUG! This is technically allowed by ANSI, but due to how CL lambda
  53. ;; expressions are currently expanded into Scheme forms, it violates
  54. ;; the Scheme standard by having no body.
  55. ;; (test nil 'lambda.26
  56. ;; ((lambda (&key))))
  57. (test nil 'lambda.31
  58. ((lambda (&rest x &key) x)))
  59. (test '(0 t 2 nil 5 t) 'lambda.34
  60. ((lambda (&key (a 1 a-p) (b 2 b-p) (c 3 c-p)) (list a a-p b b-p c c-p))
  61. :c 5 :a 0))
  62. ;; BUG!
  63. ;; (test '(nil t 2 nil 5 t) 'lambda.35
  64. ;; ((lambda (&key (a 1 a-p) (b 2 b-p) (c 3 c-p)) (list a a-p b b-p c c-p))
  65. ;; :c 5 :a nil :a 17 :c 100))
  66. (test '(1 x) 'lambda.37
  67. (let ((b 1))
  68. ((lambda (&key (a b) b) (list a b)) :b 'x)))
  69. (test '(nil x) 'lambda.38
  70. (let ((b 1))
  71. ((lambda (&key (a b) b) (list a b)) :b 'x :a nil)))