X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Flist.lisp;h=4e6fb0ce970f472845df3154a12d61e4426e026b;hb=064ea3b5dfb0d44a71025990d91d54726cb42415;hp=2f1b57cc93167022ada2712f2239d5154fd32548;hpb=a14d0ed62b18400b33805670b900db6a63899796;p=jscl.git diff --git a/tests/list.lisp b/tests/list.lisp index 2f1b57c..4e6fb0c 100644 --- a/tests/list.lisp +++ b/tests/list.lisp @@ -1,7 +1,38 @@ ;; Tests for list functions -;; TODO: EQUAL doesn't compare lists correctly at the moment. -;; Once it does the lists can be compared directly in many of these tests +;; CONS +(test (equal (cons 1 2) '(1 . 2))) +(test (equal (cons 1 nil) '(1))) +(test (equal (cons nil 2) '(NIL . 2))) +(test (equal (cons nil nil) '(NIL))) +(test (equal (cons 1 (cons 2 (cons 3 (cons 4 nil)))) '(1 2 3 4))) +(test (equal (cons 'a 'b) '(A . B))) +(test (equal (cons 'a (cons 'b (cons 'c '()))) '(A B C))) +(test (equal (cons 'a '(b c d)) '(A B C D))) + +;; CONSP +(test (not (consp 'nil))) +(test (not (consp nil))) +(test (not (consp ()))) +(test (not (consp '()))) +(test (consp (cons 1 2))) + +;; ATOM +(test (atom 'sss)) +(test (not (atom (cons 1 2)))) +(test (atom nil)) +(test (atom '())) +(test (atom 3)) + +;; RPLACA +(let ((some-list (list* 'one 'two 'three 'four))) + (test (equal (rplaca some-list 'uno) '(UNO TWO THREE . FOUR))) + (test (equal some-list '(UNO TWO THREE . FOUR)))) + +;; RPLACD +(let ((some-list (list* 'one 'two 'three 'four))) + (test (equal (rplacd (last some-list) (list 'IV)) '(THREE IV))) + (test (equal some-list '(ONE TWO THREE IV)))) ; COPY-TREE (test (let* ((foo (list '(1 2) '(3 4))) @@ -80,10 +111,18 @@ (test (equal (intersection '((1) (2)) '((2) (3)) :test #'equal) '((2)))) ; SUBST -; Can't really test this until EQUAL works properly on lists ; POP (test (let* ((foo '(1 2 3)) (bar (pop foo))) (and (= bar 1) (= (car foo) 2)))) + +;; MAPCAR +(test (equal (mapcar #'+ '(1 2) '(3) '(4 5 6)) '(8))) + +;; MAPC +(test (equal (mapc #'+ '(1 2) '(3) '(4 5 6)) '(1 2))) +(test (let (foo) + (mapc (lambda (x y z) (push (+ x y z) foo)) '(1 2) '(3) '(4 5 6)) + (equal foo '(8))))