aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorAhmed Khanzada2025-01-17 09:48:57 -0500
committerEli Zaretskii2025-01-18 13:03:19 +0200
commit103ae72ee9f197943265b76590cbad1d6e08a9b5 (patch)
tree56a977bac6b0f8c62fadda264fb95c8b219b4003 /test
parent43c2e49d19f2e7a840507ae9e728b623fcb7c341 (diff)
downloademacs-103ae72ee9f197943265b76590cbad1d6e08a9b5.tar.gz
emacs-103ae72ee9f197943265b76590cbad1d6e08a9b5.zip
New unit-tests for cl-lib (bug#75633).
Diffstat (limited to 'test')
-rw-r--r--test/lisp/emacs-lisp/cl-extra-tests.el177
-rw-r--r--test/lisp/emacs-lisp/cl-lib-tests.el112
-rw-r--r--test/lisp/emacs-lisp/cl-seq-tests.el708
3 files changed, 996 insertions, 1 deletions
diff --git a/test/lisp/emacs-lisp/cl-extra-tests.el b/test/lisp/emacs-lisp/cl-extra-tests.el
index b74e79aa9e0..dc1a52c9716 100644
--- a/test/lisp/emacs-lisp/cl-extra-tests.el
+++ b/test/lisp/emacs-lisp/cl-extra-tests.el
@@ -29,6 +29,33 @@
29 (should (eq (cl-get 'cl-get-test 'y :none) nil)) 29 (should (eq (cl-get 'cl-get-test 'y :none) nil))
30 (should (eq (cl-get 'cl-get-test 'z :none) :none))) 30 (should (eq (cl-get 'cl-get-test 'z :none) :none)))
31 31
32(ert-deftest cl-extra-test-coerce ()
33 (should (equal (cl-coerce "abc" 'list) '(?a ?b ?c)))
34 (should (equal (cl-coerce ["a" "b" "c"] 'list) '("a" "b" "c")))
35 (should (equal (cl-coerce "abc" 'vector) [97 98 99]))
36 (should (equal (cl-coerce '("a" "b" "c") 'vector) ["a" "b" "c"]))
37 (should (equal (cl-coerce '(3 4) 'bool-vector) #&2""))
38 (should (equal (cl-coerce "abc" 'bool-vector) #&3""))
39 (should (equal (cl-coerce [1] 'string) (char-to-string 1)))
40 (should (equal (cl-coerce '(1) 'string) (char-to-string 1)))
41 (should (equal (cl-coerce '(1 2 3) 'array) [1 2 3]))
42 (should (equal (cl-coerce "abc" 'array) "abc"))
43 (should-error (cl-coerce (list 1 2 3) 'character))
44 (should-error (cl-coerce [1 2 3] 'character))
45 (should-error (cl-coerce "abc" 'character))
46 (should (equal (cl-coerce "a" 'character) 97))
47 (should (equal (cl-coerce 'a 'character) 97)))
48
49(ert-deftest cl-extra-test-equalp ()
50 (should (cl-equalp "Test" "test"))
51 (should (cl-equalp 1 1.0))
52 (should (cl-equalp '(1 2 3) '(1 2 3)))
53 (should (cl-equalp [1 2 3] [1 2 3]))
54 (should-not (cl-equalp "Test1" "Test2"))
55 (should-not (cl-equalp 1 2))
56 (should-not (cl-equalp '(1 2 3) '(4 5 6)))
57 (should-not (cl-equalp [1 2 3] [4 5 6])))
58
32(ert-deftest cl-getf () 59(ert-deftest cl-getf ()
33 (let ((plist '(x 1 y nil))) 60 (let ((plist '(x 1 y nil)))
34 (should (eq (cl-getf plist 'x) 1)) 61 (should (eq (cl-getf plist 'x) 1))
@@ -127,4 +154,154 @@
127 (should (equal (cl-concatenate 'string "123" "456") 154 (should (equal (cl-concatenate 'string "123" "456")
128 "123456"))) 155 "123456")))
129 156
157(ert-deftest cl-extra-test-mapcan ()
158 (should (equal (cl-mapcan #'list '(1 2 3)) '(1 2 3)))
159 (should (equal (cl-mapcan #'list '(1 2 3) '(4 5 6)) '(1 4 2 5 3 6)))
160 (should (equal (cl-mapcan #'list '(1 2) '(3 4 5)) '(1 3 2 4)))
161 (should (equal (cl-mapcan #'list '(1 2 3) "#$%") '(1 ?# 2 ?$ 3 ?%)))
162 (should (equal (cl-mapcan #'list '()) '()))
163 (should (equal (cl-mapcan #'list '() '()) '())))
164
165(ert-deftest cl-extra-test-mapcon ()
166 (should (equal (cl-mapcon #'list '(1 2 3)) '((1 2 3) (2 3) (3))))
167 (should (equal (cl-mapcon #'list '()) nil))
168 (should (equal (cl-mapcon #'list '() '()) nil)))
169
170(ert-deftest cl-extra-test-some ()
171 (should (equal (cl-some #'identity (list nil nil "foo")) "foo"))
172 (should (equal (cl-some #'identity [nil nil nil]) nil))
173 (should (equal (cl-some (lambda (a b) (> (+ a b) 198)) (list ?a ?b ?c) "abcz") nil))
174 (should (equal (cl-some (lambda (a b) (> (+ a b) 198)) (list ?a ?b ?c) "abz") t)))
175
176(ert-deftest cl-extra-test-every ()
177 (should (equal (cl-every #'identity (list t 42 "foo")) t))
178 (should (equal (cl-every #'identity [t nil "foo"]) nil))
179 (should (equal (cl-every (lambda (a b) (<= (+ a b) 198))
180 (list ?a ?b ?c) "abcz")
181 t))
182 (should (equal (cl-every (lambda (a b) (<= (+ a b) 198))
183 (list ?a ?b ?c) "abz")
184 nil)))
185
186(ert-deftest cl-extra-test-notany ()
187 (should (equal (cl-notany #'oddp '(1 3 5)) nil))
188 (should (equal (cl-notany #'oddp '(2 4 6)) t))
189 (should (equal (cl-notany #'oddp '(1 2 3 4 5)) nil)))
190
191(ert-deftest cl-extra-test-notevery ()
192 (should (equal (cl-notevery #'oddp '(1 3 5)) nil))
193 (should (equal (cl-notevery #'oddp '(2 4 6)) t))
194 (should (equal (cl-notevery #'oddp '(1 2 3 4 5)) t)))
195
196(ert-deftest cl-extra-test-gcd ()
197 (should (equal (cl-gcd 4) 4))
198 (should (equal (cl-gcd 3 5) 1))
199 (should (equal (cl-gcd 4 8) 4))
200 (should (equal (cl-gcd 3 5 7) 1))
201 (should (equal (cl-gcd 4 8 12) 4))
202 (should (equal (cl-gcd 0) 0))
203 (should (equal (cl-gcd 4 0) 4))
204 (should (equal (cl-gcd 0 0) 0)))
205
206(ert-deftest cl-extra-test-lcm ()
207 (should (equal (cl-lcm 4) 4))
208 (should (equal (cl-lcm 3 5) 15))
209 (should (equal (cl-lcm 4 8) 8))
210 (should (equal (cl-lcm 3 5 7) 105))
211 (should (equal (cl-lcm 4 8 12) 24))
212 (should (equal (cl-lcm 0 4) 0))
213 (should (equal (cl-lcm 0 0) 0))
214 (should (equal (cl-lcm) 1)))
215
216(ert-deftest cl-extra-test-isqrt ()
217 (should (equal (cl-isqrt 4) 2))
218 (should (equal (cl-isqrt 100) 10))
219 (should (equal (cl-isqrt 1) 1))
220 (should (equal (cl-isqrt 0) 0))
221 (should (equal (cl-isqrt 3) 1))
222 (should (equal (cl-isqrt 10) 3))
223 (should-error (cl-isqrt -4))
224 (should-error (cl-isqrt 2.5)))
225
226(ert-deftest cl-extra-test-floor ()
227 (should (equal (cl-floor 4.5) '(4 0.5)))
228 (should (equal (cl-floor 10 3) '(3 1))))
229
230(ert-deftest cl-extra-test-ceiling ()
231 (should (equal (cl-ceiling 4.5) '(5 -0.5)))
232 (should (equal (cl-ceiling 10 3) '(4 -2))))
233
234(ert-deftest cl-extra-test-truncate ()
235 (should (equal (cl-truncate 4.5) '(4 0.5)))
236 (should (equal (cl-truncate 10 3) '(3 1))))
237
238(ert-deftest cl-extra-test-round ()
239 (should (equal (cl-round 4.5) '(4 0.5)))
240 (should (equal (cl-round 10 3) '(3 1)))
241 (should (equal (cl-round 1.5) '(2 -0.5)))
242 (should (equal (cl-round 2.5) '(2 0.5))))
243
244(ert-deftest cl-extra-test-mod ()
245 (should (equal (cl-mod 10 3) 1))
246 (should (equal (cl-mod -10 -3) -1))
247 (should (equal (cl-mod -10 3) 2))
248 (should (equal (cl-mod 10 -3) -2)))
249
250(ert-deftest cl-extra-test-rem ()
251 (should (equal (cl-rem 10 3) 1))
252 (should (equal (cl-rem -10 -3) -1))
253 (should (equal (cl-rem -10 3) -1))
254 (should (equal (cl-rem 10 -3) 1)))
255
256(ert-deftest cl-extra-test-signum ()
257 (should (equal (cl-signum 10) 1))
258 (should (equal (cl-signum -10) -1))
259 (should (equal (cl-signum 0) 0)))
260
261(ert-deftest cl-extra-test-parse-integer ()
262 (should (equal (cl-parse-integer "10") 10))
263 (should (equal (cl-parse-integer "-10") -10))
264 (should (equal (cl-parse-integer "+10") 10))
265 (should (equal (cl-parse-integer "ff" :radix 16) 255))
266 (should (equal (cl-parse-integer "11" :start 1) 1))
267 (should (equal (cl-parse-integer "abc def" :end 3 :junk-allowed t) nil)))
268
269(ert-deftest cl-extra-test-subseq ()
270 (should (equal (cl-subseq "hello" 1) "ello"))
271 (should (equal (cl-subseq "hello" 1 4) "ell"))
272 (should (equal (cl-subseq "hello" -1) "o"))
273 (should (equal (cl-subseq "hello world" -5 -1) "worl"))
274 (should (equal (cl-subseq '(1 2 3 4 5) 2) '(3 4 5)))
275 (should (equal (cl-subseq '(1 2 3 4 5) 1 3) '(2 3))))
276
277(ert-deftest cl-extra-test-concatenate ()
278 (should (equal (cl-concatenate 'string "hello " "world") "hello world"))
279 (should (equal (cl-concatenate 'list '(1 2) '(3 4) '(5 6)) '(1 2 3 4 5 6))))
280
281(ert-deftest cl-extra-test-revappend ()
282 (should (equal (cl-revappend '(1 2 3) '(4 5 6)) '(3 2 1 4 5 6))))
283
284(ert-deftest cl-extra-test-nreconc ()
285 (should (equal (cl-nreconc '(1 2 3) '(4 5 6)) '(3 2 1 4 5 6))))
286
287(ert-deftest cl-extra-test-list-length ()
288 (should (equal (cl-list-length '(1 2 3)) 3))
289 (should (equal (cl-list-length '()) 0))
290 (let ((xl (number-sequence 1 100)))
291 (setcdr (nthcdr 99 xl) xl)
292 (should (equal (cl-list-length xl) nil))))
293
294(ert-deftest cl-extra-test-tailp ()
295 (let ((l '(1 2 3 4 5)))
296 (should (cl-tailp (nthcdr 2 l) l))
297 (should (cl-tailp l l))
298 (should (not (cl-tailp '(4 5) l)))))
299
300(ert-deftest cl-extra-test-remprop ()
301 (let ((sym (make-symbol "test")))
302 (put sym 'foo 'bar)
303 (should (equal (cl-get sym 'foo) 'bar))
304 (cl-remprop sym 'foo)
305 (should (equal (cl-get sym 'foo 'default) 'default))))
306
130;;; cl-extra-tests.el ends here 307;;; cl-extra-tests.el ends here
diff --git a/test/lisp/emacs-lisp/cl-lib-tests.el b/test/lisp/emacs-lisp/cl-lib-tests.el
index a9c71fa5808..ff860d94468 100644
--- a/test/lisp/emacs-lisp/cl-lib-tests.el
+++ b/test/lisp/emacs-lisp/cl-lib-tests.el
@@ -242,6 +242,42 @@
242 (should (= (cl-the integer (cl-incf side-effect)) 1)) 242 (should (= (cl-the integer (cl-incf side-effect)) 1))
243 (should (= side-effect 1)))) 243 (should (= side-effect 1))))
244 244
245(ert-deftest cl-lib-test-pushnew ()
246 (let ((list '(1 2 3)))
247 (cl-pushnew 0 list)
248 (should (equal list '(0 1 2 3))))
249 (let ((list '((1 2) (3 4))))
250 (cl-pushnew '(3 7) list :key #'cdr)
251 (should (equal list '((3 7) (1 2) (3 4)) )))
252 (let ((list '((1 2) (3 4))))
253 (cl-pushnew '(3 7) list :key #'car)
254 (should (equal list '((1 2) (3 4)))))
255 (let ((list '((1 2) (3 4))))
256 (cl-pushnew '(3 4) list :test #'equal)
257 (should (equal list '((1 2) (3 4)))))
258 (let ((list '((1 2) (3 4))))
259 (cl-pushnew '(3 5) list :test #'equal)
260 (should (equal list '((3 5) (1 2) (3 4)))))
261 (let ((list '((1 2) (3 4))))
262 (cl-pushnew '(3 4) list :test-not #'equal)
263 (should (equal list '((1 2) (3 4)))))
264 (let ((list '((1 2) (3 4))))
265 (cl-pushnew '(3 5) list :test-not #'equal)
266 (should (equal list '((1 2) (3 4))))))
267
268(ert-deftest cl-lib-test-values-list ()
269 (let ((list '(:a :b :c)))
270 (should (equal (cl-values-list list) '(:a :b :c))))
271 (let ((not-a-list :a))
272 (should-error (cl-values-list not-a-list) :type 'wrong-type-argument)))
273
274(ert-deftest cl-lib-multiple-value-list ()
275 (should (equal (cl-multiple-value-list 1) 1))
276 (should (equal (cl-multiple-value-list '(1 2 3)) '(1 2 3)))
277 (should (equal (cl-multiple-value-list "string") "string"))
278 (should (equal (cl-multiple-value-list nil) nil))
279 (should (equal (cl-multiple-value-list (list 1 2 3)) '(1 2 3))))
280
245(ert-deftest cl-lib-test-incf () 281(ert-deftest cl-lib-test-incf ()
246 (let ((var 0)) 282 (let ((var 0))
247 (should (= (cl-incf var) 1)) 283 (should (= (cl-incf var) 1))
@@ -388,6 +424,50 @@
388 (should (= 10 (cl-tenth '(1 2 3 4 5 6 7 8 9 10 11)))) 424 (should (= 10 (cl-tenth '(1 2 3 4 5 6 7 8 9 10 11))))
389 (should-error (cl-tenth "1234567890") :type 'wrong-type-argument)) 425 (should-error (cl-tenth "1234567890") :type 'wrong-type-argument))
390 426
427(ert-deftest cl-lib-test-mapcar ()
428 (should (equal (cl-mapcar #'1+ '(1 2 3)) '(2 3 4)))
429 (should (equal (cl-mapcar #'+ '(1 2 3) '(4 5 6)) '(5 7 9)))
430 (should (equal (cl-mapcar #'+ '(1 2 3) '(4 5)) '(5 7)))
431 (should (equal (cl-mapcar #'+ '() '()) '()))
432 (should-error (cl-mapcar #'+ 1 '(4 5 6)))
433 (should-error (cl-mapcar #'+ '(1 2 3) 4)))
434
435(ert-deftest cl-lib-test-list* ()
436 (should (equal (cl-list* 'a) 'a))
437 (should (equal (cl-list* 'a 'b) '(a . b)))
438 (should (equal (cl-list* 'a 'b 'c 'd) '(a b c . d)))
439 (should (equal (cl-list* 'a 'b '(c d)) '(a b c d))))
440
441(ert-deftest cl-lib-test-copy-list ()
442 (let ((original '(1 2 . 3))
443 (result (cl-copy-list '(1 2 . 3))))
444 (and (should (equal original result))
445 (not (eq original result)))))
446
447(ert-deftest cl-lib-test-subst ()
448 (should (equal (cl-subst 'x 'a '(a b c)) '(x b c)))
449 (should (equal (cl-subst 'x 'a '(a b a c)) '(x b x c)))
450 (should (equal (cl-subst 'x 'a '(b c d)) '(b c d)))
451 (should (equal (cl-subst 'x 'a '(a b (a c) d)) '(x b (x c) d)))
452 (should (equal (cl-subst "a" "A" '("a" "b" "c" "a") :test #'equal) '("a" "b" "c" "a"))))
453
454(ert-deftest cl-lib-test-acons ()
455 (should (equal (cl-acons 'key 'value '()) '((key . value))))
456 (should (equal (cl-acons 'key 'value '((a . 1) (b . 2))) '((key . value) (a . 1) (b . 2))))
457 (should (equal (cl-acons 'a 1 '((a . 1) (b . 2))) '((a . 1) (a . 1) (b . 2))))
458 (should (equal (cl-acons nil 'value '((a . 1) (b . 2))) '((nil . value) (a . 1) (b . 2))))
459 (should (equal (cl-acons 'key nil '((a . 1) (b . 2))) '((key . nil) (a . 1) (b . 2)))))
460
461(ert-deftest cl-lib-test-pairlis ()
462 (should (equal (cl-pairlis '(a b c) '(1 2 3)) '((a . 1) (b . 2) (c . 3))))
463 (should (equal (cl-pairlis '(a b c d) '(1 2 3)) '((a . 1) (b . 2) (c . 3))))
464 (should (equal (cl-pairlis '(a b c) '(1 2 3 4)) '((a . 1) (b . 2) (c . 3))))
465 (should (equal (cl-pairlis '(a b c) '(1 2 3) '((d . 4) (e . 5))) '((a . 1) (b . 2) (c . 3) (d . 4) (e . 5))))
466 (should (equal (cl-pairlis '() '(1 2 3)) '()))
467 (should (equal (cl-pairlis '(a b c) '()) '()))
468 (should (equal (cl-pairlis '(a nil c) '(1 2 3)) '((a . 1) (nil . 2) (c . 3))))
469 (should (equal (cl-pairlis '(a b c) '(1 nil 3)) '((a . 1) (b) (c . 3)))))
470
391(ert-deftest cl-lib-test-endp () 471(ert-deftest cl-lib-test-endp ()
392 (should (cl-endp '())) 472 (should (cl-endp '()))
393 (should-not (cl-endp '(1))) 473 (should-not (cl-endp '(1)))
@@ -558,5 +638,37 @@
558 (should (equal (mapcar (cl-constantly 3) '(a b c d)) 638 (should (equal (mapcar (cl-constantly 3) '(a b c d))
559 '(3 3 3 3)))) 639 '(3 3 3 3))))
560 640
641(ert-deftest cl-lib-set-difference ()
642 ;; our set-difference preserves order, though it is not required to
643 ;; by cl standards. Nevertheless better keep that invariant
644 (should (equal (cl-set-difference '(1 2 3 4) '(3 4 5 6))
645 '(1 2))))
646
647(ert-deftest cl-nset-difference ()
648 ;; our nset-difference doesn't
649 (let* ((l1 (list 1 2 3 4)) (l2 '(3 4 5 6))
650 (diff (cl-nset-difference l1 l2)))
651 (should (memq 1 diff))
652 (should (memq 2 diff))
653 (should (= (length diff) 2))
654 (should (equal l2 '(3 4 5 6))))
655 (let* ((l1 (list "1" "2" "3" "4")) (l2 '("3" "4" "5" "6"))
656 (diff (cl-nset-difference l1 l2 :test #'equal)))
657 (should (member "1" diff))
658 (should (member "2" diff))
659 (should (= (length diff) 2))
660 (should (equal l2 '("3" "4" "5" "6"))))
661 (let* ((l1 (list '(a . 1) '(b . 2) '(c . 3) '(d . 4)))
662 (l2 (list '(c . 3) '(d . 4) '(e . 5) '(f . 6)))
663 (diff (cl-nset-difference l1 l2 :key #'car)))
664 (should (member '(a . 1) diff))
665 (should (member '(b . 2) diff))
666 (should (= (length diff) 2)))
667 (let* ((l1 (list '("a" . 1) '("b" . 2) '("c" . 3) '("d" . 4)))
668 (l2 (list '("c" . 3) '("d" . 4) '("e" . 5) '("f" . 6)))
669 (diff (cl-nset-difference l1 l2 :key #'car :test #'string=)))
670 (should (member '("a" . 1) diff))
671 (should (member '("b" . 2) diff))
672 (should (= (length diff) 2))))
561 673
562;;; cl-lib-tests.el ends here 674;;; cl-lib-tests.el ends here
diff --git a/test/lisp/emacs-lisp/cl-seq-tests.el b/test/lisp/emacs-lisp/cl-seq-tests.el
index 9c62379d857..59ece0e4006 100644
--- a/test/lisp/emacs-lisp/cl-seq-tests.el
+++ b/test/lisp/emacs-lisp/cl-seq-tests.el
@@ -59,6 +59,22 @@ Body are forms defining the test."
59 (when ,list2 59 (when ,list2
60 (setq cl-seq--test-list2 ,orig2)))))) 60 (setq cl-seq--test-list2 ,orig2))))))
61 61
62(ert-deftest cl-seq-endp-test ()
63 (should (cl-endp '()))
64 (should (not (cl-endp '(1 2 3))))
65 (should-error (cl-endp 42) :type 'wrong-type-argument))
66
67(ert-deftest cl-seq-reduce-test ()
68 (should (equal 6 (cl-reduce #'+ '(1 2 3))))
69 (should (equal 5 (cl-reduce #'+ '(1 2 3 4) :start 1 :end 3)))
70 (should (equal 10 (cl-reduce #'+ '(1 2 3 4) :from-end t)))
71 (should (equal 10 (cl-reduce #'+ '(1 2 3 4) :initial-value 0)))
72 (should (equal 24 (cl-reduce #'* '(1 2 3 4) :initial-value 1)))
73 (should (equal 0 (cl-reduce #'+ '())))
74 (should (equal 0 (cl-reduce #'+ '() :initial-value 0)))
75 (should (equal 1 (cl-reduce #'+ '(1))))
76 (should (equal 0 (cl-reduce #'+ '() :initial-value 0))))
77
62;; keywords supported: :start :end 78;; keywords supported: :start :end
63(ert-deftest cl-seq-fill-test () 79(ert-deftest cl-seq-fill-test ()
64 (let* ((cl-seq--test-list '(1 2 3 4 5 2 6)) 80 (let* ((cl-seq--test-list '(1 2 3 4 5 2 6))
@@ -116,6 +132,25 @@ Body are forms defining the test."
116 (should (equal '(1 3 4 5 2 6) (cl-remove 2 list :from-end nil :count 1))) 132 (should (equal '(1 3 4 5 2 6) (cl-remove 2 list :from-end nil :count 1)))
117 (should (equal '(1 2 3 4 5 6) (cl-remove 2 list :from-end t :count 1))))) 133 (should (equal '(1 2 3 4 5 6) (cl-remove 2 list :from-end t :count 1)))))
118 134
135(ert-deftest cl-remove-if-test ()
136 (should (equal '(1 3) (cl-remove-if 'evenp '(1 2 3 4))))
137 (should (equal '(1 3) (cl-remove-if 'evenp '(1 2 3 4) :count 2)))
138 (should (equal '(1 3 4) (cl-remove-if 'evenp '(1 2 3 4) :start 1 :end 3)))
139 (should (equal '(1 3) (cl-remove-if 'evenp '(1 2 3 4) :from-end t)))
140 (should (equal '(2 4) (cl-remove-if 'oddp '(1 2 3 4))))
141 (should (equal '() (cl-remove-if 'evenp '())))
142 (should (equal '() (cl-remove-if 'evenp '(2)))))
143
144(ert-deftest cl-remove-if-not-test ()
145 (should (equal '(2 4) (cl-remove-if-not 'evenp '(1 2 3 4))))
146 (should (equal '(2 4) (cl-remove-if-not 'evenp '(1 2 3 4) :count 2)))
147 (should (equal '(1 2 4) (cl-remove-if-not 'evenp '(1 2 3 4) :start 1 :end 3)))
148 (should (equal '(2 4) (cl-remove-if-not 'evenp '(1 2 3 4) :from-end t)))
149 (should (equal '(1 3) (cl-remove-if-not 'oddp '(1 2 3 4))))
150 (should (equal '() (cl-remove-if-not 'evenp '())))
151 (should (equal '(2) (cl-remove-if-not 'evenp '(2))))
152 (should (equal '(2) (cl-remove-if-not 'evenp '(2) :key #'(lambda (x) (- x))))))
153
119;; keywords supported: :test :test-not :key :count :start :end :from-end 154;; keywords supported: :test :test-not :key :count :start :end :from-end
120(ert-deftest cl-seq-delete-test () 155(ert-deftest cl-seq-delete-test ()
121 (let* ((cl-seq--test-list '(1 2 3 4 5 2 6)) 156 (let* ((cl-seq--test-list '(1 2 3 4 5 2 6))
@@ -139,6 +174,27 @@ Body are forms defining the test."
139 (cl-seq--with-side-effects orig nil 174 (cl-seq--with-side-effects orig nil
140 test))))) 175 test)))))
141 176
177(ert-deftest cl-delete-if-test ()
178 (let ((list (list 1 2 3 4 5)))
179 (cl-delete-if 'evenp list)
180 (should (equal '(1 3 5) list))
181 (should (equal '(1 3 5) (cl-delete-if 'evenp (list 1 2 3 4 5) :start 0 :end 4)))
182 (should (equal '(1 3 5) (cl-delete-if 'evenp (list 1 2 3 4 5) :from-end t)))
183 (should (equal '(2 4) (cl-delete-if 'oddp (list 1 2 3 4 5))))
184 (should (equal '() (cl-delete-if 'evenp '())))
185 (should (equal '() (cl-delete-if 'evenp (list 2))))))
186
187(ert-deftest cl-delete-if-not-test ()
188 (let ((list (list 1 2 3 4 5)))
189 (should (equal '(2 4) (cl-delete-if-not 'evenp list)))
190 (should (equal '() (cl-delete-if-not 'evenp '())))
191 (should (equal '() (cl-delete-if-not 'evenp (list 1))))))
192
193(ert-deftest cl-delete-duplicates-test ()
194 (let ((list (list 1 2 3 2 1)))
195 (should (equal '(3 2 1) (cl-delete-duplicates list)))
196 (should (equal '() (cl-delete-duplicates '())))))
197
142;; keywords supported: :test :test-not :key :start :end :from-end 198;; keywords supported: :test :test-not :key :start :end :from-end
143(ert-deftest cl-seq-remove-duplicates-test () 199(ert-deftest cl-seq-remove-duplicates-test ()
144 (let ((list '(1 2 3 4 5 2 6))) 200 (let ((list '(1 2 3 4 5 2 6)))
@@ -185,6 +241,65 @@ Body are forms defining the test."
185 (should (equal '(b 2 3 4 5 2 6) (cl-substitute 'b nil list 241 (should (equal '(b 2 3 4 5 2 6) (cl-substitute 'b nil list
186 :if-not (lambda (x) (> (cl-position x list :from-end t) 1))))))) 242 :if-not (lambda (x) (> (cl-position x list :from-end t) 1)))))))
187 243
244(ert-deftest cl-seq-substitute-if-test ()
245 (let ((result (cl-substitute-if 'x #'evenp '(1 2 3 4 5))))
246 (should (equal result '(1 x 3 x 5))))
247 (let ((result (cl-substitute-if 'x #'evenp '(1 3 5))))
248 (should (equal result '(1 3 5))))
249 (let ((result (cl-substitute-if 'x #'(lambda (n) t) '(1 2 3 4 5))))
250 (should (equal result '(x x x x x))))
251 (let ((result (cl-substitute-if 'x #'evenp '(1 2 3 4 5) :start 1 :end 4)))
252 (should (equal result '(1 x 3 x 5))))
253 (let ((result (cl-substitute-if 'x #'oddp '(1 2 3 4 5) :from-end t)))
254 (should (equal result '(x 2 x 4 x))))
255 (let ((result (cl-substitute-if 'x (lambda (n) (= n 3)) '(1 2 3 4 5) :key 'identity)))
256 (should (equal result '(1 2 x 4 5)))))
257
258(ert-deftest cl-seq-substitute-if-not-test ()
259 (let ((result (cl-substitute-if-not 'x #'evenp '(1 2 3 4 5))))
260 (should (equal result '(x 2 x 4 x))))
261 (let ((result (cl-substitute-if-not 'x #'evenp '(2 4 6))))
262 (should (equal result '(2 4 6))))
263 (let ((result (cl-substitute-if-not 'x #'(lambda (n) (> n 5)) '(1 2 3 4 5))))
264 (should (equal result '(x x x x x))))
265 (let ((result (cl-substitute-if-not 'x #'evenp '(1 2 3 4 5) :start 0 :end 4)))
266 (should (equal result '(x 2 x 4 5))))
267 (let ((result (cl-substitute-if-not 'x #'oddp '(1 2 3 4 5) :from-end t)))
268 (should (equal result '(1 x 3 x 5))))
269 (let ((result (cl-substitute-if-not 'x (lambda (n) (= n 3)) '(1 2 3 4 5) :key 'identity)))
270 (should (equal result '(x x 3 x x)))))
271
272(ert-deftest cl-find-if-test ()
273 (let ((result (cl-find-if #'evenp '(1 2 3 4 5))))
274 (should (equal result 2)))
275 (let ((result (cl-find-if #'(lambda (n) (> n 5)) '(1 2 3 4 5))))
276 (should (equal result nil)))
277 (let ((result (cl-find-if #'(lambda (n) (> n 3)) '(1 2 3 4 5 6 7))))
278 (should (equal result 4)))
279 (let ((result (cl-find-if #'evenp '(1 2 3 4 5) :start 2)))
280 (should (equal result 4)))
281 (let ((result (cl-find-if #'evenp '(1 2 3 4 5) :end 1)))
282 (should (equal result nil)))
283 (let ((result (cl-find-if #'oddp '(2 4 5 6 7) :from-end t)))
284 (should (equal result 7)))
285 (let ((result (cl-find-if (lambda (n) (= n 4)) '(1 2 3 4 5) :key 'identity)))
286 (should (equal result 4))))
287
288(ert-deftest cl-find-if-not-test ()
289 (let ((result (cl-find-if-not #'evenp '(1 2 3 4 5))))
290 (should (equal result 1)))
291 (let ((result (cl-find-if-not #'oddp '(1 3 5))))
292 (should (equal result nil)))
293 (let ((result (cl-find-if-not #'(lambda (n) (< n 4)) '(1 2 3 4 5 6 7))))
294 (should (equal result 4)))
295 (let ((result (cl-find-if-not #'evenp '(1 2 3 4 5) :start 2)))
296 (should (equal result 3)))
297 (let ((result (cl-find-if-not #'evenp '(1 2 3 4 5) :end 3)))
298 (should (equal result 1)))
299 (let ((result (cl-find-if-not #'oddp '(2 4 6 7 8) :from-end t)))
300 (should (equal result 8)))
301 (let ((result (cl-find-if-not (lambda (n) (= n 4)) '(1 2 3 4 5) :key 'identity)))
302 (should (equal result 1))))
188 303
189;; keywords supported: :test :test-not :key :count :start :end :from-end 304;; keywords supported: :test :test-not :key :count :start :end :from-end
190(ert-deftest cl-seq-nsubstitute-test () 305(ert-deftest cl-seq-nsubstitute-test ()
@@ -221,7 +336,7 @@ Body are forms defining the test."
221 (dolist (test tests) 336 (dolist (test tests)
222 (let ((_list cl-seq--test-list)) 337 (let ((_list cl-seq--test-list))
223 (cl-seq--with-side-effects orig nil 338 (cl-seq--with-side-effects orig nil
224 test))))) 339 test)))))
225 340
226;; keywords supported: :test :test-not :key :start :end :from-end 341;; keywords supported: :test :test-not :key :start :end :from-end
227(ert-deftest cl-seq-position-test () 342(ert-deftest cl-seq-position-test ()
@@ -241,6 +356,22 @@ Body are forms defining the test."
241 (should (= 1 (cl-position 5 list :key (lambda (x) (1+ (* x x)))))) 356 (should (= 1 (cl-position 5 list :key (lambda (x) (1+ (* x x))))))
242 (should (= 5 (cl-position 5 list :key (lambda (x) (1+ (* x x))) :from-end t))))) 357 (should (= 5 (cl-position 5 list :key (lambda (x) (1+ (* x x))) :from-end t)))))
243 358
359(ert-deftest cl-position-if-test ()
360 (let ((result (cl-position-if #'evenp '(1 2 3 4 5))))
361 (should (equal result 1)))
362 (let ((result (cl-position-if #'(lambda (n) (> n 5)) '(1 2 3 4 5))))
363 (should (equal result nil)))
364 (let ((result (cl-position-if #'(lambda (n) (> n 3)) '(1 2 3 4 5 6 7))))
365 (should (equal result 3)))
366 (let ((result (cl-position-if #'evenp '(1 2 3 4 5) :start 2)))
367 (should (equal result 3)))
368 (let ((result (cl-position-if #'evenp '(1 2 3 4 5) :end 1)))
369 (should (equal result nil)))
370 (let ((result (cl-position-if #'oddp '(2 4 5 6 7) :from-end t)))
371 (should (equal result 4)))
372 (let ((result (cl-position-if (lambda (n) (= n 4)) '(1 2 3 4 5) :key 'identity)))
373 (should (equal result 3))))
374
244;; keywords supported: :test :test-not :key :start :end 375;; keywords supported: :test :test-not :key :start :end
245(ert-deftest cl-seq-count-test () 376(ert-deftest cl-seq-count-test ()
246 (let ((list '(1 2 3 4 5 2 6))) 377 (let ((list '(1 2 3 4 5 2 6)))
@@ -254,6 +385,50 @@ Body are forms defining the test."
254 (should (equal (cl-count 'foo list :test (lambda (_a b) (cl-oddp b))) 385 (should (equal (cl-count 'foo list :test (lambda (_a b) (cl-oddp b)))
255 (cl-count 'foo list :test-not (lambda (_a b) (cl-evenp b))))))) 386 (cl-count 'foo list :test-not (lambda (_a b) (cl-evenp b)))))))
256 387
388(ert-deftest cl-count-if-test ()
389 (let ((result (cl-count-if #'evenp '(1 2 3 4 5))))
390 (should (equal result 2)))
391 (let ((result (cl-count-if #'oddp '(2 4 6 8))))
392 (should (equal result 0)))
393 (let ((result (cl-count-if (lambda (x) t) '(1 2 3 4))))
394 (should (equal result 4)))
395 (let ((result (cl-count-if (lambda (x) nil) '(1 2 3 4))))
396 (should (equal result 0)))
397 (let ((result (cl-count-if #'(lambda (x) (> x 2)) '(1 2 3 4 5) :key 'identity)))
398 (should (equal result 3)))
399 (let ((result (cl-count-if #'evenp '(1 2 3 4 5) :start 2)))
400 (should (equal result 1)))
401 (let ((result (cl-count-if #'evenp '(1 2 3 4 5) :end 3)))
402 (should (equal result 1)))
403 (let ((result (cl-count-if #'evenp '())))
404 (should (equal result 0)))
405 (let ((result (cl-count-if #'(lambda (x) (numberp x)) '(1 "two" 3 4 "five" 6))))
406 (should (equal result 4)))
407 (let ((result (cl-count-if (lambda (x) (and (numberp x) (> x 2))) '(1 2 3 4 5 6))))
408 (should (equal result 4))))
409
410(ert-deftest cl-count-if-not-test ()
411 (let ((result (cl-count-if-not #'evenp '(1 2 3 4 5))))
412 (should (equal result 3)))
413 (let ((result (cl-count-if-not #'oddp '(1 3 5))))
414 (should (equal result 0)))
415 (let ((result (cl-count-if-not (lambda (x) t) '(1 2 3 4))))
416 (should (equal result 0)))
417 (let ((result (cl-count-if-not (lambda (x) nil) '(1 2 3 4))))
418 (should (equal result 4)))
419 (let ((result (cl-count-if-not #'(lambda (x) (> x 3)) '(1 2 3 4 5) :key 'identity)))
420 (should (equal result 3)))
421 (let ((result (cl-count-if-not #'evenp '(1 2 3 4 5) :start 2)))
422 (should (equal result 2)))
423 (let ((result (cl-count-if-not #'evenp '(1 2 3 4 5) :end 3)))
424 (should (equal result 2)))
425 (let ((result (cl-count-if-not #'evenp '())))
426 (should (equal result 0)))
427 (let ((result (cl-count-if-not #'(lambda (x) (numberp x)) '(1 "two" 3 4 "five" 6))))
428 (should (equal result 2)))
429 (let ((result (cl-count-if-not (lambda (x) (and (numberp x) (> x 2))) '(1 2 3 4 5 6))))
430 (should (equal result 2))))
431
257;; keywords supported: :test :test-not :key :start1 :end1 :start2 :end2 :from-end 432;; keywords supported: :test :test-not :key :start1 :end1 :start2 :end2 :from-end
258(ert-deftest cl-seq-mismatch-test () 433(ert-deftest cl-seq-mismatch-test ()
259 (let ((list '(1 2 3 4 5 2 6)) 434 (let ((list '(1 2 3 4 5 2 6))
@@ -312,5 +487,536 @@ Body are forms defining the test."
312 (should (eq (cl-assoc x a) (car a))) 487 (should (eq (cl-assoc x a) (car a)))
313 (should (eq (cl-rassoc x a) (cadr a)))))) 488 (should (eq (cl-rassoc x a) (cadr a))))))
314 489
490(ert-deftest cl-sort-test ()
491 (let ((result (cl-sort '(3 1 4 1 5 9 2 6 5 3 5) '<)))
492 (should (equal result '(1 1 2 3 3 4 5 5 5 6 9))))
493 (let ((result (cl-sort '(5 3 2 8 1 4) '>)))
494 (should (equal result '(8 5 4 3 2 1))))
495 (let ((result (cl-sort '("banana" "apple" "cherry") 'string<)))
496 (should (equal result '("apple" "banana" "cherry"))))
497 (let ((result (cl-sort '("banana" "fig" "apple" "kiwi") (lambda (x y) (< (length x) (length y))) :key 'identity)))
498 (should (equal result '("fig" "kiwi" "apple" "banana"))))
499 (let ((result (cl-sort (vector 3 1 4 1 5) '<)))
500 (should (equal result (vector 1 1 3 4 5))))
501 (let ((result (cl-sort '(1 2 3 4 5) '<)))
502 (should (equal result '(1 2 3 4 5))))
503 (let ((result (cl-sort '(-3 1 4 -1 -5 9) '<)))
504 (should (equal result '(-5 -3 -1 1 4 9))))
505 (let ((result (cl-sort '(1 2 3 4 5) (lambda (x y) (> x y)))))
506 (should (equal result '(5 4 3 2 1))))
507 (let ((result (cl-sort '() '<)))
508 (should (equal result '())))
509 (let ((result (cl-sort '("Banana" "apple" "cherry") 'string< :key 'downcase)))
510 (should (equal result '("apple" "Banana" "cherry")))) )
511
512(ert-deftest cl-stable-sort-test ()
513 (let ((result (cl-stable-sort '(3 1 4 1 5 9 2 6 5 3 5) '<)))
514 (should (equal result '(1 1 2 3 3 4 5 5 5 6 9))))
515 (let ((result (cl-stable-sort '(5 3 2 8 1 4) '>)))
516 (should (equal result '(8 5 4 3 2 1))))
517 (let ((result (cl-stable-sort '("banana" "apple" "cherry") 'string<)))
518 (should (equal result '("apple" "banana" "cherry"))))
519 (let ((result (cl-stable-sort '("banana" "fig" "apple" "kiwi") (lambda (x y) (< (length x) (length y))) :key 'identity)))
520 (should (equal result '("fig" "kiwi" "apple" "banana"))))
521 (let ((result (cl-stable-sort (vector 3 1 4 1 5) '<)))
522 (should (equal result (vector 1 1 3 4 5))))
523 (let ((result (cl-stable-sort '(1 2 3 4 5) '<)))
524 (should (equal result '(1 2 3 4 5))))
525 (let ((result (cl-stable-sort '(-3 1 4 -1 -5 9) '<)))
526 (should (equal result '(-5 -3 -1 1 4 9))))
527 (let ((result (cl-stable-sort '(1 2 3 4 5) (lambda (x y) (> x y)))))
528 (should (equal result '(5 4 3 2 1))))
529 (let ((result (cl-stable-sort '() '<)))
530 (should (equal result '())))
531 (let ((result (cl-stable-sort '("Banana" "apple" "cherry") 'string< :key 'downcase)))
532 (should (equal result '("apple" "Banana" "cherry")))) )
533
534(ert-deftest cl-merge-test ()
535 (let ((result (cl-merge 'list '(1 3 5) '(2 4 6) '<)))
536 (should (equal result '(1 2 3 4 5 6))))
537 (let ((result (cl-merge 'list '(1 3 3 5) '(2 3 4 6) '<)))
538 (should (equal result '(1 2 3 3 3 4 5 6))))
539 (let ((result (cl-merge 'list '() '(2 4 6) '<)))
540 (should (equal result '(2 4 6))))
541 (let ((result (cl-merge 'list '(1 3 5) '() '<)))
542 (should (equal result '(1 3 5))))
543 (let ((result (cl-merge 'list '() '() '<)))
544 (should (equal result '())))
545 (let ((result (cl-merge 'list '(1 4 6) '(2 3 5) '< :key (lambda (x) x))))
546 (should (equal result '(1 2 3 4 5 6))))
547 (let ((result (cl-merge 'vector (vector 1 3 5) (vector 2 4 6) '<)))
548 (should (equal result (vector 1 2 3 4 5 6))))
549 (let ((result (cl-merge 'list '(5 3 1) '(6 4 2) '>)))
550 (should (equal result '(6 5 4 3 2 1))))
551 (let ((result (cl-merge 'list '(1 2 3) '(1 2 3) '>)))
552 (should (equal result '(1 2 3 1 2 3))))
553 (let ((result (cl-merge 'list '(1 2) '(3 4 5) '<)))
554 (should (equal result '(1 2 3 4 5))))
555 (let ((result (cl-merge 'list '(4 5 6) '(1 2 3) '<)))
556 (should (equal result '(1 2 3 4 5 6))))
557 (let ((result (cl-merge 'list '(1 2 3) '(1.5 2.5 3.5) '<)))
558 (should (equal result '(1 1.5 2 2.5 3 3.5))))
559 (let ((result (cl-merge 'list '(1 2 3) '(10 20 30) '< :key (lambda (x) (* x 10)))))
560 (should (equal result '(1 2 3 10 20 30)))))
561
562(ert-deftest cl-member-test ()
563 (let ((result (cl-member 'b '(a b c d))))
564 (should (equal result '(b c d))))
565 (let ((result (cl-member 'x '(a b c d))))
566 (should (equal result nil)))
567 (let ((result (cl-member 'a '(a b a c d))))
568 (should (equal result '(a b a c d))))
569 (let ((result (cl-member "test" '("test" "not-test" "test2") :test 'string=)))
570 (should (equal result '("test" "not-test" "test2"))))
571 (let ((result (cl-member 'x '(a b c d) :test-not 'eq)))
572 (should (equal result '(a b c d))))
573 (let ((result (cl-member 3 '(1 2 3 4 5) :key 'identity)))
574 (should (equal result '(3 4 5))))
575 (let ((result (cl-member 2.5 '(1 2 2.5 3) :test 'equal)))
576 (should (equal result '(2.5 3))))
577 (let ((result (cl-member 'a '(a a a a) :test 'eq)))
578 (should (equal result '(a a a a))))
579 (let ((result (cl-member 'a '())))
580 (should (equal result nil)))
581 (let ((result (cl-member 'b '(a c d) :test-not 'eq)))
582 (should (equal result '(a c d))))
583 (let ((result (cl-member 3 '(1 2 3 4 5) :key '1+)))
584 (should (equal result '(2 3 4 5)))))
585
586(ert-deftest cl-member-if-test ()
587 (let ((result (cl-member-if #'evenp '(1 2 3 4 5))))
588 (should (equal result '(2 3 4 5))))
589 (let ((result (cl-member-if #'(lambda (x) nil) '(1 2 3 4 5))))
590 (should (equal result nil)))
591 (let ((result (cl-member-if #'(lambda (x) t) '(1 2 3 4 5))))
592 (should (equal result '(1 2 3 4 5))))
593 (let ((result (cl-member-if #'(lambda (x) (= x 1)) '(1 2 3 4 5))))
594 (should (equal result '(1 2 3 4 5))))
595 (let ((result (cl-member-if #'(lambda (x) (and (numberp x) (evenp x))) '(1 3 5 4 2))))
596 (should (equal result '(4 2))))
597 (let ((result (cl-member-if (lambda (x) (string= (number-to-string x) "3")) '(1 2 3 4 5) :key 'identity)))
598 (should (equal result '(3 4 5))))
599 (let ((result (cl-member-if #'(lambda (x) (eq x 'a)) '(a a a a))))
600 (should (equal result '(a a a a))))
601 (let ((result (cl-member-if #'evenp '())))
602 (should (equal result nil)))
603 (let ((result (cl-member-if #'(lambda (x) (< x 0)) '(1 2 3 4 5))))
604 (should (equal result nil)))
605 (let ((result (cl-member-if (lambda (x) (and (numberp x) (<= x 2))) '(1 "two" 3 0))))
606 (should (equal result '(1 "two" 3 0))))
607 (let ((result (cl-member-if (lambda (x) (> x 5)) '(1 2 3 6 7 8) :key 'identity)))
608 (should (equal result '(6 7 8)))))
609
610(ert-deftest cl-member-if-not-test ()
611 (let ((result (cl-member-if-not #'evenp '(1 2 3 4 5))))
612 (should (equal result '(1 2 3 4 5))))
613 (let ((result (cl-member-if-not #'evenp '(2 4 6 8 10 11))))
614 (should (equal result '(11))))
615 (let ((result (cl-member-if-not #'(lambda (x) (> x 5)) '(1 2 3 4 5))))
616 (should (equal result '(1 2 3 4 5))))
617 (let ((result (cl-member-if-not #'(lambda (x) t) '(1 2 3 4 5))))
618 (should (equal result nil)))
619 (let ((result (cl-member-if-not #'(lambda (x) (= x 1)) '(1 2 3 4 5))))
620 (should (equal result '(2 3 4 5))))
621 (let ((result (cl-member-if-not (lambda (x) (string= (number-to-string x) "2")) '(1 2 3 4 5) :key 'identity)))
622 (should (equal result '(1 2 3 4 5))))
623 (let ((result (cl-member-if-not #'evenp '())))
624 (should (equal result nil)))
625 (let ((result (cl-member-if-not #'(lambda (x) (eq x 'a)) '(a a a a))))
626 (should (equal result nil)))
627 (let ((result (cl-member-if-not #'(lambda (x) (< x 0)) '(1 2 3 4 5))))
628 (should (equal result '(1 2 3 4 5))))
629 (let ((result (cl-member-if-not #'(lambda (x) (or (numberp x) (stringp x) (eq x 'b))) '(a "b" 3 nil))))
630 (should (equal result '(a "b" 3 nil))))
631 (let ((result (cl-member-if-not (lambda (x) (numberp x)) '(1 "two" 3 "four" 5) :key 'identity)))
632 (should (equal result '("two" 3 "four" 5)))))
633
634(ert-deftest cl-assoc-test ()
635 (let ((result (cl-assoc 'b '((a . 1) (b . 2) (c . 3)))))
636 (should (equal result '(b . 2))))
637 (let ((result (cl-assoc 'x '((a . 1) (b . 2) (c . 3)))))
638 (should (equal result nil)))
639 (let ((result (cl-assoc "key" '(("key" . 1) ("not-key" . 2)) :test 'string=)))
640 (should (equal result '("key" . 1))))
641 (let ((result (cl-assoc 'a '((a . 1) (b . 2) (c . 3)) :test-not 'eq)))
642 (should (equal result '(b . 2))))
643 (let ((result (cl-assoc '2 '((1 . 'a) (2 . 'b) (3 . 'c)) :key 'identity)))
644 (should (equal result '(2 . 'b))))
645 (let ((result (cl-assoc 'a '((a . 1) (a . 2) (a . 3)) :test 'eq)))
646 (should (equal result '(a . 1))))
647 (let ((result (cl-assoc 'a '())))
648 (should (equal result nil)))
649 (let ((result (cl-assoc 'b '((a . 1) (b . 2) (b . 3) (c . 4)))))
650 (should (equal result '(b . 2)))))
651
652(ert-deftest cl-assoc-if-test ()
653 (let ((result (cl-assoc-if #'evenp '((1 . "odd") (2 . "even") (3 . "odd") (4 . "even")))))
654 (should (equal result '(2 . "even"))))
655 (let ((result (cl-assoc-if #'(lambda (x) (= x 5)) '((1 . "one") (2 . "two") (3 . "three")))))
656 (should (equal result nil)))
657 (let ((result (cl-assoc-if #'(lambda (x) (= x 1)) '((1 . "one") (2 . "two") (3 . "three")))))
658 (should (equal result '(1 . "one"))))
659 (let ((result (cl-assoc-if #'(lambda (x) (string= x "baz")) '((foo . 1) (bar . 2) (baz . 3)))))
660 (should (equal result '(baz . 3))))
661 (let ((result (cl-assoc-if (lambda (x) (and (numberp x) (> x 2))) '((1 . "one") (3 . "three") (4 . "four")))))
662 (should (equal result '(3 . "three"))))
663 (let ((result (cl-assoc-if #'(lambda (x) (> x 1)) '((0 . "zero") (1 . "one") (2 . "two")))))
664 (should (equal result '(2 . "two"))))
665 (let ((result (cl-assoc-if #'evenp '())))
666 (should (equal result nil)))
667 (let ((result (cl-assoc-if #'(lambda (x) (eq x 'a)) '((a . "first") (a . "second") (b . "third")))))
668 (should (equal result '(a . "first"))))
669 (let ((result (cl-assoc-if #'(lambda (x) (and (symbolp x) (not (eq x 'b)))) '((b . "b") (c . "c") (d . "d")))))
670 (should (equal result '(c . "c"))))
671 (let ((result (cl-assoc-if (lambda (x) (and (listp x) (> (length x) 1))) '(((1 2) . "pair 1") ((1) . "pair 2")))))
672 (should (equal result '((1 2) . "pair 1")))))
673
674(ert-deftest cl-assoc-if-not-test ()
675 (let ((result (cl-assoc-if-not #'evenp '((1 . "odd") (2 . "even") (3 . "odd") (4 . "even")))))
676 (should (equal result '(1 . "odd"))))
677 (let ((result (cl-assoc-if-not #'(lambda (x) (> x 0)) '((1 . "one") (2 . "two") (3 . "three")))))
678 (should (equal result nil)))
679 (let ((result (cl-assoc-if-not #'(lambda (x) (< x 5)) '((1 . "one") (2 . "two") (3 . "three")))))
680 (should (equal result nil)))
681 (let ((result (cl-assoc-if-not #'(lambda (x) (= x 1)) '((1 . "one") (2 . "two") (3 . "three")))))
682 (should (equal result '(2 . "two"))))
683 (let ((result (cl-assoc-if-not #'(lambda (x) (string= x "baz")) '((foo . "first") (bar . "second") (baz . "third")))))
684 (should (equal result '(foo . "first"))))
685 (let ((result (cl-assoc-if-not (lambda (x) (and (numberp x) (> x 2))) '((1 . "one") (3 . "three") (4 . "four")))))
686 (should (equal result '(1 . "one"))))
687 (let ((result (cl-assoc-if-not #'(lambda (x) (symbolp x)) '((1 . "one") (b . "bee") (2 . "two")))))
688 (should (equal result '(1 . "one"))))
689 (let ((result (cl-assoc-if-not #'evenp '())))
690 (should (equal result nil)))
691 (let ((result (cl-assoc-if-not #'(lambda (x) (eq x 'a)) '((a . "first") (a . "second") (b . "third")))))
692 (should (equal result '(b . "third")))))
693
694(ert-deftest cl-rassoc-test ()
695 (let ((result (cl-rassoc 2 '(( "one" . 1) ("two" . 2) ("three" . 3)))))
696 (should (equal result (cons "two" 2))))
697 (let ((result (cl-rassoc 4 '(( "one" . 1) ("two" . 2) ("three" . 3)))))
698 (should (equal result nil)))
699 (let ((result (cl-rassoc 2 '(( "one" . 1) ("two" . 2) ("baz" . 2)) :test 'equal)))
700 (should (equal result (cons "two" 2))))
701 (let ((result (cl-rassoc 2 '(( "one" . 1) ("two" . 2) ("three" . 3)) :test-not 'equal)))
702 (should (equal result (cons "one" 1))))
703 (let ((result (cl-rassoc 1 '())))
704 (should (equal result nil)))
705 (let ((result (cl-rassoc 1 '(( "first" . 1) ("second" . 1) ("third" . 1)))))
706 (should (equal result (cons "first" 1))))
707 (let ((result (cl-rassoc 3 '(( "one" . 1) ("two" . 2) ("three" . 3)))))
708 (should (equal result (cons "three" 3))))
709 (let ((result (cl-rassoc 'found '((( "pair 1") . 1) ( "pair 2" . 2) ( "pair 3" . 3)))))
710 (should (equal result nil))))
711
712(ert-deftest cl-rassoc-if-test ()
713 (let ((result (cl-rassoc-if #'evenp '(( "one" . 1) ("two" . 2) ("three" . 3)))))
714 (should (equal result '("two" . 2))))
715 (let ((result (cl-rassoc-if #'evenp '(( "one" . 1) ("three" . 3) ("five" . 5)))))
716 (should (equal result nil)))
717 (let ((result (cl-rassoc-if #'(lambda (x) (= x 1)) '(( "one" . 1) ("two" . 2) ("three" . 3)))))
718 (should (equal result '("one" . 1))))
719 (let ((result (cl-rassoc-if (lambda (x) (> x 1)) '(( "one" . 1) ("two" . 2) ("three" . 3)))))
720 (should (equal result '("two" . 2))))
721 (let ((result (cl-rassoc-if #'(lambda (x) (and (numberp x) (< x 3))) '(( "one" . 1) ("two" . 2) ("three" . 3)))))
722 (should (equal result '("one" . 1))))
723 (let ((result (cl-rassoc-if #'evenp '())))
724 (should (equal result nil)))
725 (let ((result (cl-rassoc-if #'(lambda (x) (> x 0)) '(( "first" . 1) ("second" . 2) ("third" . 3)))))
726 (should (equal result '("first" . 1))))
727 (let ((result (cl-rassoc-if #'(lambda (x) (string= (number-to-string x) "two")) '(( "one" . 1) ("two" . 2) ("three" . 3)))))
728 (should (equal result nil)))
729 (let ((result (cl-rassoc-if #'(lambda (x) (stringp x)) '(( "one" . 1) ("two" . 2) ("three" . 3)))))
730 (should (equal result nil))))
731
732(ert-deftest cl-rassoc-if-not-test ()
733 (let ((result (cl-rassoc-if-not #'evenp '(( "one" . 1) ("two" . 2) ("three" . 3)))))
734 (should (equal result '("one" . 1))))
735 (let ((result (cl-rassoc-if-not #'(lambda (x) (> x 0)) '(( "one" . 1) ("two" . 2) ("three" . 3)))))
736 (should (equal result nil)))
737 (let ((result (cl-rassoc-if-not #'(lambda (x) (< x 5)) '(( "one" . 1) ("two" . 2) ("six" . 6)))))
738 (should (equal result '( "six" . 6))))
739 (let ((result (cl-rassoc-if-not #'(lambda (x) (= x 1)) '(( "one" . 1) ("two" . 2) ("three" . 3)))))
740 (should (equal result '("two" . 2))))
741 (let ((result (cl-rassoc-if-not #'(lambda (x) (> x 2)) '(( "one" . 1) ("two" . 1) ("three" . 3)))))
742 (should (equal result '("one" . 1))))
743 (let ((result (cl-rassoc-if-not #'(lambda (x) (and (numberp x) (< x 3))) '(( "one" . 1) ("two" . 2) ("three" . 3)))))
744 (should (equal result '("three" . 3))))
745 (let ((result (cl-rassoc-if-not #'(lambda (x) (equal x 2)) '(( "one" . 1) ("two" . 2) ("three" . 3)))))
746 (should (equal result '("one" . 1))))
747 (let ((result (cl-rassoc-if-not #'evenp '())))
748 (should (equal result nil)))
749 (let ((result (cl-rassoc-if-not #'(lambda (x) (numberp x)) '(( "one" . 1) ("two" . 2) ("three" . 3)))))
750 (should (equal result nil)))
751 (let ((result (cl-rassoc-if-not (lambda (x) (and (listp x) (= (length x) 1))) '(((1 2) . 1) ((3 4) . 2) ((5) . 2)))))
752 (should (equal result '((1 2) . 1)))))
753
754(ert-deftest cl-intersection-test ()
755 (let ((result (cl-intersection '(1 2 3 4) '(3 4 5 6))))
756 (should (equal result '(4 3))))
757 (let ((result (cl-intersection '(1 2) '(3 4))))
758 (should (equal result '())))
759 (let ((result (cl-intersection '(1 2 3) '(1 2 3))))
760 (should (equal result '(1 2 3))))
761 (let ((result (cl-intersection '(1 1 2 3) '(1 2 2 3 4))))
762 (should (equal result '(3 2 1 1))))
763 (let ((result (cl-intersection '(1 "two" 3) '(3 "two" 4))))
764 (should (equal result '(3))))
765 (let ((result (cl-intersection '(1 2 3) '(3 2 1) :test 'equal)))
766 (should (equal result '(1 2 3))))
767 (let ((result (cl-intersection '(1 2 3) '(3 4 5) :key #'identity)))
768 (should (equal result '(3))))
769 (let ((result (cl-intersection '() '(1 2 3))))
770 (should (equal result '())))
771 (let ((result (cl-intersection '() '())))
772 (should (equal result '())))
773 (let ((result (cl-intersection '(1 2 3 4 5) '(3 4 5 6 7 8))))
774 (should (equal result '(5 4 3)))))
775
776(ert-deftest cl-nintersection-test ()
777 (let ((list1 '(1 2 3 4))
778 (list2 '(3 4 5 6)))
779 (let ((result (cl-nintersection list1 list2)))
780 (should (equal result '(4 3)))
781 (should (equal list1 '(1 2 3 4)))
782 (should (equal list2 '(3 4 5 6)))))
783 (let ((list1 '(1 2))
784 (list2 '(3 4)))
785 (let ((result (cl-nintersection list1 list2)))
786 (should (equal result '()))
787 (should (equal list1 '(1 2)))
788 (should (equal list2 '(3 4)))))
789 (let ((list1 '(1 2 3))
790 (list2 '(1 2 3)))
791 (let ((result (cl-nintersection list1 list2)))
792 (should (equal result '(1 2 3)))
793 (should (equal list1 '(1 2 3)))
794 (should (equal list2 '(1 2 3)))))
795 (let ((list1 '(1 1 2 2 3))
796 (list2 '(2 2 3 4)))
797 (let ((result (cl-nintersection list1 list2)))
798 (should (equal result '(3 2 2)))
799 (should (equal list1 '(1 1 2 2 3)))
800 (should (equal list2 '(2 2 3 4)))))
801 (let ((list1 '(1 "two" 3))
802 (list2 '(3 "two" 4)))
803 (let ((result (cl-nintersection list1 list2)))
804 (should (equal result '(3)))
805 (should (equal list1 '(1 "two" 3)))
806 (should (equal list2 '(3 "two" 4)))))
807 (let ((list1 '(1 2 3))
808 (list2 '(3 2 1)))
809 (let ((result (cl-nintersection list1 list2 :test 'equal)))
810 (should (equal result '(1 2 3)))
811 (should (equal list1 '(1 2 3)))
812 (should (equal list2 '(3 2 1)))))
813 (let ((list1 '())
814 (list2 '(1 2 3)))
815 (let ((result (cl-nintersection list1 list2)))
816 (should (equal result '()))
817 (should (equal list1 '()))
818 (should (equal list2 '(1 2 3)))))
819 (let ((list1 '())
820 (list2 '()))
821 (let ((result (cl-nintersection list1 list2)))
822 (should (equal result '())))))
823
824(ert-deftest cl-set-difference-test ()
825 (let ((result (cl-set-difference '(1 2 3 4) '(3 4 5 6))))
826 (should (equal result '(1 2))))
827 (let ((result (cl-set-difference '(1 2 3) '())))
828 (should (equal result '(1 2 3))))
829 (let ((result (cl-set-difference '(1 2 3) '(1 2 3))))
830 (should (equal result '())))
831 (let ((result (cl-set-difference '(1 1 2 3 4) '(3 4 5))))
832 (should (equal result '(1 1 2))))
833 (let ((result (cl-set-difference '(1 2 3) '(3 2 4))))
834 (should (equal result '(1))))
835 (let ((result (cl-set-difference '(1 2 3) '(3 2 1) :test 'equal)))
836 (should (equal result '())))
837 (let ((result (cl-set-difference '((1 . "one") (2 . "two") (3 . "three"))
838 '((1 . "uno") (2 . "dos"))
839 :key 'car)))
840 (should (equal result '((3 . "three")))))
841 (let ((result (cl-set-difference '() '(1 2 3))))
842 (should (equal result '())))
843 (let ((result (cl-set-difference '(1 2 3) '())))
844 (should (equal result '(1 2 3))))
845 (let ((result (cl-set-difference '(1 2 3 4 5) '(3 4 5 6 7))))
846 (should (equal result '(1 2))))
847 (let ((list1 '(1 2 3))
848 (list2 '(2 3 4)))
849 (cl-set-difference list1 list2)
850 (should (equal list1 '(1 2 3)))
851 (should (equal list2 '(2 3 4)))))
852
853(ert-deftest cl-nset-difference-test ()
854 (let ((list1 '(1 2 3 4))
855 (list2 '(3 4 5 6)))
856 (let ((result (cl-nset-difference list1 list2)))
857 (should (equal result '(1 2)))
858 (should (equal list1 '(1 2 3 4)))
859 (should (equal list2 '(3 4 5 6)))))
860 (let ((list1 '(1 2 3))
861 (list2 '()))
862 (let ((result (cl-nset-difference list1 list2)))
863 (should (equal result '(1 2 3)))
864 (should (equal list1 '(1 2 3)))
865 (should (equal list2 '()))))
866 (let ((list1 '(1 2 3))
867 (list2 '(1 2 3)))
868 (let ((result (cl-nset-difference list1 list2)))
869 (should (equal result '()))
870 (should (equal list1 '(1 2 3)))
871 (should (equal list2 '(1 2 3)))))
872 (let ((list1 '(1 1 2 2 3))
873 (list2 '(3 4 5)))
874 (let ((result (cl-nset-difference list1 list2)))
875 (should (equal result '(1 1 2 2)))
876 (should (equal list1 '(1 1 2 2 3)))
877 (should (equal list2 '(3 4 5)))))
878 (let ((list1 '(1 2 3))
879 (list2 '(3 2 4)))
880 (let ((result (cl-nset-difference list1 list2)))
881 (should (equal result '(1)))
882 (should (equal list1 '(1 2 3)))
883 (should (equal list2 '(3 2 4)))))
884 (let ((list1 '(1 2 3))
885 (list2 '(3 2 1)))
886 (let ((result (cl-nset-difference list1 list2 :test 'equal)))
887 (should (equal result '()))
888 (should (equal list1 '(1 2 3)))
889 (should (equal list2 '(3 2 1)))))
890 (let ((list1 '())
891 (list2 '(1 2 3)))
892 (let ((result (cl-nset-difference list1 list2)))
893 (should (equal result '()))
894 (should (equal list1 '()))
895 (should (equal list2 '(1 2 3)))))
896 (let ((list1 '())
897 (list2 '()))
898 (let ((result (cl-nset-difference list1 list2)))
899 (should (equal result '()))))
900 (let ((list1 '(1 2 3 4 5))
901 (list2 '(3 4 5 6 7)))
902 (let ((result (cl-nset-difference list1 list2)))
903 (should (equal result '(1 2)))
904 (should (equal list1 '(1 2 3 4 5)))
905 (should (equal list2 '(3 4 5 6 7))))))
906
907(ert-deftest cl-set-exclusive-or-test ()
908 (let ((result (cl-set-exclusive-or '(1 2 3) '(3 4 5))))
909 (should (equal result '(1 2 4 5))))
910 (let ((result (cl-set-exclusive-or '(1 2 3) '())))
911 (should (equal result '(1 2 3))))
912 (let ((result (cl-set-exclusive-or '() '(3 4 5))))
913 (should (equal result '(3 4 5))))
914 (let ((result (cl-set-exclusive-or '(1 2 3) '(1 2 3))))
915 (should (equal result nil)))
916 (let ((result (cl-set-exclusive-or '(1 1 2 3) '(3 4 5))))
917 (should (equal result '(1 1 2 4 5))))
918 (let ((result (cl-set-exclusive-or '(1 2 3) '(3 3 4 5))))
919 (should (equal result '(1 2 4 5))))
920 (let ((result (cl-set-exclusive-or '(1 2 3) '(3 2 4))))
921 (should (equal result '(1 4))))
922 (let ((result (cl-set-exclusive-or '(1 2 3) '(3 2 1) :test 'equal)))
923 (should (equal result '())))
924 (let ((result (cl-set-exclusive-or '() '())))
925 (should (equal result '())))
926 (let ((result (cl-set-exclusive-or '(1 2 3 4 5) '(3 4 5 6 7)))
927 (list1 '(1 2 3 4 5))
928 (list2 '(3 4 5 6 7)))
929 (should (equal result '(1 2 6 7)))
930 (should (equal list1 '(1 2 3 4 5)))
931 (should (equal list2 '(3 4 5 6 7)))))
932
933(ert-deftest cl-nset-exclusive-or-test ()
934 (let ((list1 '(1 2 3))
935 (list2 '(3 4 5)))
936 (let ((result (cl-nset-exclusive-or list1 list2)))
937 (should (equal result '(1 2 4 5)))
938 (should (equal list1 '(1 2 3)))
939 (should (equal list2 '(3 4 5)))))
940 (let ((list1 '(1 2 3))
941 (list2 '()))
942 (let ((result (cl-nset-exclusive-or list1 list2)))
943 (should (equal result '(1 2 3)))
944 (should (equal list1 '(1 2 3)))
945 (should (equal list2 '()))))
946 (let ((list1 '(1 2 3))
947 (list2 '(1 2 3)))
948 (let ((result (cl-nset-exclusive-or list1 list2)))
949 (should (equal result nil)))
950 (should (equal list1 '(1 2 3)))
951 (should (equal list2 '(1 2 3))))
952 (let ((list1 '(1 1 2 2 3))
953 (list2 '(3 4 5)))
954 (let ((result (cl-nset-exclusive-or list1 list2)))
955 (should (equal result '(1 1 2 2 4 5)))
956 (should (equal list1 '(1 1 2 2 3)))
957 (should (equal list2 '(3 4 5)))))
958 (let ((list1 '(1 2 3))
959 (list2 '(3 3 4 5)))
960 (let ((result (cl-nset-exclusive-or list1 list2)))
961 (should (equal result '(1 2 4 5)))
962 (should (equal list1 '(1 2 3)))
963 (should (equal list2 '(3 3 4 5)))))
964 (let ((list1 '(1 2 3))
965 (list2 '(3 2 4)))
966 (let ((result (cl-nset-exclusive-or list1 list2)))
967 (should (equal result '(1 4)))
968 (should (equal list1 '(1 2 3)))
969 (should (equal list2 '(3 2 4)))))
970 (let ((list1 '(1 2 3))
971 (list2 '(3 2 1)))
972 (let ((result (cl-nset-exclusive-or list1 list2 :test 'equal)))
973 (should (equal result '()))
974 (should (equal list1 '(1 2 3)))
975 (should (equal list2 '(3 2 1)))))
976 (let ((list1 '())
977 (list2 '(1 2 3)))
978 (let ((result (cl-nset-exclusive-or list1 list2)))
979 (should (equal result '(1 2 3)))
980 (should (equal list1 '()))
981 (should (equal list2 '(1 2 3)))))
982 (let ((list1 '())
983 (list2 '()))
984 (let ((result (cl-nset-exclusive-or list1 list2)))
985 (should (equal result '()))))
986 (let ((list1 '(1 2 3 4 5))
987 (list2 '(3 4 5 6 7)))
988 (let ((result (cl-nset-exclusive-or list1 list2)))
989 (should (equal result '(1 2 6 7)))
990 (should (equal list1 '(1 2 3 4 5)))
991 (should (equal list2 '(3 4 5 6 7))))))
992
993(ert-deftest cl-subsetp-test ()
994 (let ((result (cl-subsetp '(1 2) '(1 2 3 4))))
995 (should (equal result t)))
996 (let ((result (cl-subsetp '() '(1 2 3 4))))
997 (should (equal result t)))
998 (let ((result (cl-subsetp '(1 2) '())))
999 (should (equal result nil)))
1000 (let ((result (cl-subsetp '(1 2 3) '(1 2 3))))
1001 (should (equal result t)))
1002 (let ((result (cl-subsetp '(1 1 2) '(1 2 3))))
1003 (should (equal result t)))
1004 (let ((result (cl-subsetp '(1 2) '(1 1 2 3 4))))
1005 (should (equal result t)))
1006 (let ((result (cl-subsetp '(1 "two" 3) '(3 "two" 1))))
1007 (should (equal result nil)))
1008 (let ((result (cl-subsetp '(1 2) '(2 1) :test 'equal)))
1009 (should (equal result t)))
1010 (let ((result (cl-subsetp '((1 . "one") (2 . "two")) '((1 . "uno") (2 . "dos")) :key 'car)))
1011 (should (equal result t)))
1012 (let ((result (cl-subsetp '(1 2) '(3 4 2 1) :test 'eq)))
1013 (should (equal result t)))
1014 (let ((result (cl-subsetp '((1 2) (3)) '((1 2 . "found") (3 . "found")) :key 'car)))
1015 (should (equal result t)))
1016 (let ((result (cl-subsetp '(1 2) '(1 2 3 2))))
1017 (should (equal result t)))
1018 (let ((result (cl-subsetp '() '())))
1019 (should (equal result t))))
1020
315(provide 'cl-seq-tests) 1021(provide 'cl-seq-tests)
316;;; cl-seq-tests.el ends here 1022;;; cl-seq-tests.el ends here