diff --git a/test/vector.l b/test/vector.l index 34eec6c2b..6182516d3 100644 --- a/test/vector.l +++ b/test/vector.l @@ -119,6 +119,139 @@ (assert (not (= (elt v2 2) (elt v2 2)))) ;; check if v2[2] is nan; t)) +(deftest delete-sequence + (assert (equal (vector 1 3 1) + (delete 2 (vector 1 2 3 2 1)))) + (assert (equal (vector 1 2 3 1) + (delete 2 (vector 1 2 3 2 1) :start 3))) + (assert (equal (vector 1 3 2 1) + (delete 2 (vector 1 2 3 2 1) :end 2))) + (assert (equal (vector 2 3 2 1) + (delete 1 (vector 1 2 3 2 1) :count 1))) + (assert (equal (vector 1 3 1) + (delete-if #'evenp (vector 1 2 3 2 1)))) + (assert (equal (vector 1 2 3 1) + (delete-if #'evenp (vector 1 2 3 2 1) :start 3))) + (assert (equal (vector 1 3 2 1) + (delete-if #'evenp (vector 1 2 3 2 1) :end 2))) + (assert (equal (vector 1 3 2 1) + (delete-if #'evenp (vector 1 2 3 2 1) :count 1))) + (assert (equal (vector 2 2) + (delete-if-not #'evenp (vector 1 2 3 2 1)))) + (assert (equal (vector 1 2 3 2) + (delete-if-not #'evenp (vector 1 2 3 2 1) :start 3))) + (assert (equal (vector 2 3 2 1) + (delete-if-not #'evenp (vector 1 2 3 2 1) :end 2))) + (assert (equal (vector 2 3 2 1) + (delete-if-not #'evenp (vector 1 2 3 2 1) :count 1))) + (let (v) + ;; Added test cases for the usage of 'input value reuse'. + ;; though it is not compatible with Common lisp but documented in Euslisp. + ;; See https://github.com/euslisp/EusLisp/issues/295 for detail. + (setq v (vector 1 2 3 2 1)) + (delete 2 v) + (assert (equal (vector 1 3 1) v)) + (setq v (vector 1 2 3 2 1)) + (delete 2 v :start 3) + (assert (equal (vector 1 2 3 1) v)) + (setq v (vector 1 2 3 2 1)) + (delete 2 v :end 2) + (assert (equal (vector 1 3 2 1) v)) + (setq v (vector 1 2 3 2 1))) +) + +(deftest remove-sequence + (assert (equal (vector 1 3 1) + (remove 2 (vector 1 2 3 2 1)))) + (assert (equal (vector 1 2 3 1) + (remove 2 (vector 1 2 3 2 1) :start 3))) + (assert (equal (vector 1 3 2 1) + (remove 2 (vector 1 2 3 2 1) :end 2))) + (assert (equal (vector 2 3 2 1) + (remove 1 (vector 1 2 3 2 1) :count 1))) + (assert (equal (vector 1 3 1) + (remove-if #'evenp (vector 1 2 3 2 1)))) + (assert (equal (vector 1 2 3 1) + (remove-if #'evenp (vector 1 2 3 2 1) :start 3))) + (assert (equal (vector 1 3 2 1) + (remove-if #'evenp (vector 1 2 3 2 1) :end 2))) + (assert (equal (vector 1 3 2 1) + (remove-if #'evenp (vector 1 2 3 2 1) :count 1))) + (assert (equal (vector 2 2) + (remove-if-not #'evenp (vector 1 2 3 2 1)))) + (assert (equal (vector 1 2 3 2) + (remove-if-not #'evenp (vector 1 2 3 2 1) :start 3))) + (assert (equal (vector 2 3 2 1) + (remove-if-not #'evenp (vector 1 2 3 2 1) :end 2))) + (assert (equal (vector 2 3 2 1) + (remove-if-not #'evenp (vector 1 2 3 2 1) :count 1))) +) + +(deftest substitute-sequence + ;; from ansi-test sequence/substitute.lsp substitute-vector.1-27 + (assert (equal (let ((x #())) (list (substitute 'b 'a x) x)) + (list #() #()))) + (assert (equal (let ((x #(a b a c))) (list (substitute 'b 'a x) x)) + (list #(b b b c) #(a b a c)))) + (assert (equal (let ((x #(a b a c))) (list (substitute 'b 'a x :count 2) x)) + (list #(b b b c) #(a b a c)))) + (assert (equal (let ((x #(a b a c))) (list (substitute 'b 'a x :count 1) x)) + (list #(b b a c) #(a b a c)))) + (assert (equal (let ((x #(a b a c))) (list (substitute 'b 'a x :count 0) x)) + (list #(a b a c) #(a b a c)))) + (assert (equal (let ((x #(a b a c))) (list (substitute 'b 'a x :count -1) x)) + (list #(a b a c) #(a b a c)))) + (assert (equal + (let* ((orig #(1 2 3 4 5 6 7 8 9)) + (x (copy-seq orig)) + (result (substitute 'x 5 x :test #'(lambda (a b) (<= (abs (- a b)) 2))))) + (and (equal orig x) + result)) + #(1 2 x x x x x 8 9))) + + (assert (equal + (let* ((orig #(1 2 3 4 5 6 7 8 9)) + (x (copy-seq orig)) + (c -4) + (result (substitute 'x 5 x :test #'(lambda (a b) (incf c 2) (= (+ b c) a))))) + (and (equal orig x) + result)) + #(1 2 x 4 5 6 7 8 9))) + + (assert (equal + (let* ((orig #(1 2 3 4 5 6 7 8 9)) + (x (copy-seq orig)) + (c -4) + (result (substitute 'x 5 x :test-not #'(lambda (a b) (incf c 2) (/= (+ b c) a))))) + (and (equal orig x) + result)) + #(1 2 x 4 5 6 7 8 9))) + + (assert (equal + (let* ((orig #((a 1) (b 2) (a 3) (c 4) (d 5) (a 6) (e 7))) + (x (copy-seq orig)) + (result (substitute '(a 10) 'a x :key #'car))) + (and (equal orig x) + result)) + #((a 10) (b 2) (a 10) (c 4) (d 5) (a 10) (e 7)))) + + (assert (equal + (let* ((orig #((a 1) (b 2) (a 3) (c 4) (d 5) (a 6) (e 7))) + (x (copy-seq orig)) + (result (substitute '(a 10) 'a x :key #'car :start 1 :end 5))) + (and (equal orig x) + result)) + #((a 1) (b 2) (a 10) (c 4) (d 5) (a 6) (e 7)))) + + (assert (equal + (let* ((orig #((a 1) (b 2) (a 3) (c 4) (d 5) (a 6) (e 7))) + (x (copy-seq orig)) + (result (substitute '(a 10) 'a x :key #'car :test-not #'eql))) + (and (equal orig x) + result)) + #((a 1) (a 10) (a 3) (a 10) (a 10) (a 6) (a 10))))) + + (eval-when (load eval) (run-all-tests) (exit))