aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBasil L. Contovounesios2025-01-25 16:48:19 +0100
committerBasil L. Contovounesios2025-02-13 18:40:26 +0100
commit52034675a2e774fb0f819603f3d3f293fdeb448b (patch)
tree267f31d7af9cf34ba17fbb28e3866cbbcda819ec
parent9746fbc26415b5bff883b2134f316b2678528295 (diff)
downloademacs-52034675a2e774fb0f819603f3d3f293fdeb448b.tar.gz
emacs-52034675a2e774fb0f819603f3d3f293fdeb448b.zip
Fix cl-seq-tests.el
None of the tests using the macro cl-seq--with-side-effects were being evaluated (since bug#24264), and other tests were not robust against destructive operations or optimizations (since bug#24264 and bug#75633). For further discussion, see: https://lists.gnu.org/r/emacs-devel/2025-02/msg00053.html * test/lisp/emacs-lisp/cl-seq-tests.el: Fit first line within 80 columns. Remove empty Commentary section. (cl-union-test-00): Use bug#N reference in place of URL. (cl-seq-test-bug24264): Ditto. Use nconc in place of append. (cl-seq--test-list, cl-seq--test-list2, cl-seq--with-side-effects): Remove. (cl-seq-tests--relet*): New convenience macro replacing the need for cl-seq--with-side-effects. (cl-seq-fill-test, cl-seq-replace-test, cl-seq-delete-test): Use cl-seq-tests--relet* to actually evaluate tests. Avoid mutating quoted literals. (cl-seq-nsubstitute-test): Ditto. Actually call cl-nsubstitute, not cl-substitute. Avoid comparing mutated argument to itself; compare to its original copy instead. Avoid calling cl-position on list that is being mutated in :if predicate; use original copy instead. (cl-seq-remove-test, cl-remove-if-not-test, cl-delete-if-not-test) (cl-delete-duplicates-test, cl-seq-remove-duplicates-test) (cl-seq-substitute-test, cl-seq-substitute-if-test) (cl-seq-position-test, cl-count-if-test, cl-count-if-not-test) (cl-member-if-test, cl-member-if-not-test, cl-assoc-if-test) (cl-assoc-if-not-test, cl-rassoc-if-test, cl-subsetp-test): Simplify. (cl-remove-if-test, cl-seq-substitute-if-not-test, cl-find-if-test) (cl-find-if-not-test, cl-position-if-test, cl-member-test) (cl-assoc-test, cl-rassoc-test): Quote function symbols, not lambdas. (cl-delete-if-test): Use cl-seq-tests--relet*. Check result of cl-delete-if to avoid relying on its side effects, and to pacify byte-compiler warning. (cl-seq-mismatch-test): Avoid 'easy to misread' hidden argument. (cl-seq-search-test): Break long line. (cl-sort-test, cl-stable-sort-test, cl-merge-test): Avoid mutating quoted literals. (cl-intersection-test): Avoid comparing eql-ity of string literals. (cl-nintersection-test, cl-nset-difference-test) (cl-nset-exclusive-or-test): Avoid mutating quoted literals. Don't compare initial and final values of arguments, since they may have been mutated. (cl-set-difference-test, cl-set-exclusive-or-test): Use fresh arguments to check for absence of mutation.
-rw-r--r--test/lisp/emacs-lisp/cl-seq-tests.el898
1 files changed, 401 insertions, 497 deletions
diff --git a/test/lisp/emacs-lisp/cl-seq-tests.el b/test/lisp/emacs-lisp/cl-seq-tests.el
index 3541a989d34..97276be3870 100644
--- a/test/lisp/emacs-lisp/cl-seq-tests.el
+++ b/test/lisp/emacs-lisp/cl-seq-tests.el
@@ -1,4 +1,4 @@
1;;; cl-seq-tests.el --- Tests for cl-seq.el functionality -*- lexical-binding: t; -*- 1;;; cl-seq-tests.el --- Tests for cl-seq.el -*- lexical-binding: t; -*-
2 2
3;; Copyright (C) 2015-2025 Free Software Foundation, Inc. 3;; Copyright (C) 2015-2025 Free Software Foundation, Inc.
4 4
@@ -19,15 +19,13 @@
19;; You should have received a copy of the GNU General Public License 19;; You should have received a copy of the GNU General Public License
20;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. 20;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
21 21
22;;; Commentary:
23
24;;; Code: 22;;; Code:
25 23
26(require 'ert) 24(require 'ert)
27(require 'cl-seq) 25(require 'cl-seq)
28 26
29(ert-deftest cl-union-test-00 () 27(ert-deftest cl-union-test-00 ()
30 "Test for https://debbugs.gnu.org/22729 ." 28 "Test for bug#22729."
31 (let ((str1 "foo") 29 (let ((str1 "foo")
32 (str2 (make-string 3 ?o))) 30 (str2 (make-string 3 ?o)))
33 ;; Emacs may make two string literals eql when reading. 31 ;; Emacs may make two string literals eql when reading.
@@ -36,28 +34,23 @@
36 (should (equal str1 str2)) 34 (should (equal str1 str2))
37 (should (equal (cl-union (list str1) (list str2)) 35 (should (equal (cl-union (list str1) (list str2))
38 (list str2))) 36 (list str2)))
39 (should (equal (cl-union (list str1) (list str2) :test 'eql) 37 (should (equal (cl-union (list str1) (list str2) :test #'eql)
40 (list str1 str2))))) 38 (list str1 str2)))))
41 39
42(defvar cl-seq--test-list nil 40(defmacro cl-seq-tests--relet* (binders &rest body)
43 "List used on `cl-seq' tests with side effects.") 41 "Like `let*', but reevaluate BINDERS before each form in BODY.
44(defvar cl-seq--test-list2 nil 42Additionally register an `ert-info' to help identify test failures."
45 "List used on `cl-seq' tests with side effects.") 43 (declare (debug let) (indent 1))
46 44 (let ((syms (mapcar (lambda (binder)
47(defmacro cl-seq--with-side-effects (list list2 &rest body) 45 (if (consp binder) (car binder) binder))
48 "Run a test with side effects on lists; after the test restore the lists. 46 binders)))
49LIST is the value of `cl-seq--test-list' before the test. 47 (macroexp-progn
50LIST2, if non-nil, is the value of `cl-seq--test-list2' before the test. 48 (mapcar (lambda (form)
51Body are forms defining the test." 49 `(ert-info (,(lambda () (pp-to-string form)) :prefix "form: ")
52 (declare (indent 2) (debug t)) 50 (let* ,binders
53 (let ((orig (make-symbol "orig")) 51 ,@(and syms `((ignore ,@syms)))
54 (orig2 (make-symbol "orig2"))) 52 ,form)))
55 `(let ((,orig (copy-sequence ,list)) 53 body))))
56 (,orig2 (copy-sequence ,list2)))
57 (unwind-protect (progn ,@body)
58 (setq cl-seq--test-list ,orig)
59 (when ,list2
60 (setq cl-seq--test-list2 ,orig2))))))
61 54
62(ert-deftest cl-seq-endp-test () 55(ert-deftest cl-seq-endp-test ()
63 (should (cl-endp '())) 56 (should (cl-endp '()))
@@ -77,51 +70,39 @@ Body are forms defining the test."
77 70
78;; keywords supported: :start :end 71;; keywords supported: :start :end
79(ert-deftest cl-seq-fill-test () 72(ert-deftest cl-seq-fill-test ()
80 (let* ((cl-seq--test-list '(1 2 3 4 5 2 6)) 73 (cl-seq-tests--relet* ((l (list 1 2 3 4 5 2 6))
81 (orig (copy-sequence cl-seq--test-list)) 74 (orig (copy-sequence l)))
82 (tests '((should (equal '(b b b b b b b) (cl-fill _list 'b))) 75 (should (equal '(b b b b b b b) (cl-fill l 'b)))
83 (should (equal '(1 2 3 4 b b b) (cl-fill _list 'b :start 4))) 76 (should (equal '(1 2 3 4 b b b) (cl-fill l 'b :start 4)))
84 (should (equal '(b b b b 5 2 6) (cl-fill _list 'b :end 4))) 77 (should (equal '(b b b b 5 2 6) (cl-fill l 'b :end 4)))
85 (should (equal '(1 2 b b 5 2 6) (cl-fill _list 'b :start 2 :end 4))) 78 (should (equal '(1 2 b b 5 2 6) (cl-fill l 'b :start 2 :end 4)))
86 (should (equal orig (cl-fill _list 'b :end 0)))))) 79 (should (equal orig (cl-fill l 'b :end 0)))))
87 (dolist (test tests)
88 (let ((_list cl-seq--test-list))
89 (cl-seq--with-side-effects orig nil
90 test)))))
91 80
92;; keywords supported: :start1 :end1 :start2 :end2 81;; keywords supported: :start1 :end1 :start2 :end2
93(ert-deftest cl-seq-replace-test () 82(ert-deftest cl-seq-replace-test ()
94 (let* ((cl-seq--test-list '(1 2 3 4 5 2 6)) 83 (cl-seq-tests--relet* ((l1 (list 1 2 3 4 5 2 6))
95 (cl-seq--test-list2 (make-list 6 'a)) 84 (l2 (make-list 6 'a))
96 (orig (copy-sequence cl-seq--test-list)) 85 (orig1 (copy-sequence l1)))
97 (orig2 (copy-sequence cl-seq--test-list2)) 86 (should (equal '(a a a a a a 6) (cl-replace l1 l2)))
98 (tests '((should (equal '(a a a a a a 6) (cl-replace _list _list2))) 87 (should (equal '(a a a a a a 6) (cl-replace l1 l2 :start1 0)))
99 (should (equal '(a a a a a a 6) (cl-replace _list _list2 :start1 0))) 88 (should (equal '(a a a a a a 6) (cl-replace l1 l2 :start2 0)))
100 (should (equal '(a a a a a a 6) (cl-replace _list _list2 :start2 0))) 89 (should (equal orig1 (cl-replace l1 l2 :start1 (length l1))))
101 (should (equal orig (cl-replace _list _list2 :start1 (length _list)))) 90 (should (equal orig1 (cl-replace l1 l2 :start2 (length l2))))
102 (should (equal orig (cl-replace _list _list2 :start2 (length _list2)))) 91 (should (equal orig1 (cl-replace l1 l2 :end1 0)))
103 (should (equal orig (cl-replace _list _list2 :end1 0))) 92 (should (equal orig1 (cl-replace l1 l2 :end2 0)))
104 (should (equal orig (cl-replace _list _list2 :end2 0))) 93 (should (equal '(1 2 3 4 a a a) (cl-replace l1 l2 :start1 4)))
105 (should (equal '(1 2 3 4 a a a) (cl-replace _list _list2 :start1 4))) 94 (should (equal '(a a a a 5 2 6) (cl-replace l1 l2 :end1 4)))
106 (should (equal '(a a a a 5 2 6) (cl-replace _list _list2 :end1 4))) 95 (should (equal '(a a 3 4 5 2 6) (cl-replace l1 l2 :start2 4)))
107 (should (equal '(a a 3 4 5 2 6) (cl-replace _list _list2 :start2 4))) 96 (should (equal '(a a a a 5 2 6) (cl-replace l1 l2 :end2 4)))
108 (should (equal '(a a a a 5 2 6) (cl-replace _list _list2 :end2 4))) 97 (should (equal '(1 2 a a 5 2 6) (cl-replace l1 l2 :start1 2 :end1 4)))
109 (should (equal '(1 2 a a 5 2 6) (cl-replace _list _list2 :start1 2 :end1 4))) 98 (should (equal '(a a 3 4 5 2 6) (cl-replace l1 l2 :start2 2 :end2 4)))))
110 (should (equal '(a a 3 4 5 2 6) (cl-replace _list _list2 :start2 2 :end2 4))))))
111 (dolist (test tests)
112 (let ((_list cl-seq--test-list)
113 (_list2 cl-seq--test-list2))
114 (cl-seq--with-side-effects orig orig2
115 test)))))
116 99
117;; keywords supported: :test :test-not :key :count :start :end :from-end 100;; keywords supported: :test :test-not :key :count :start :end :from-end
118(ert-deftest cl-seq-remove-test () 101(ert-deftest cl-seq-remove-test ()
119 (let ((list '(1 2 3 4 5 2 6))) 102 (let ((list '(1 2 3 4 5 2 6)))
120 (should (equal list (cl-remove 'foo list))) 103 (should (equal list (cl-remove 'foo list)))
121 (should (equal '(1 3 4 5 6) (cl-remove 2 list))) 104 (should (equal '(1 3 4 5 6) (cl-remove 2 list)))
122 (should (equal '(1 3 4 5 6) (cl-remove 2 list 105 (should (equal '(1 3 4 5 6) (cl-remove 2 list :key #'identity :test #'eql)))
123 :key #'identity
124 :test (lambda (a b) (eql a b)))))
125 (should (equal '(1 2 3 4 2) (cl-remove 4 list :test (lambda (a b) (> b a))))) 106 (should (equal '(1 2 3 4 2) (cl-remove 4 list :test (lambda (a b) (> b a)))))
126 (should (equal '(5 6) (cl-remove 4 list :test-not (lambda (a b) (> b a))))) 107 (should (equal '(5 6) (cl-remove 4 list :test-not (lambda (a b) (> b a)))))
127 (should (equal '(1 3 5) (cl-remove 'foo list :if #'cl-evenp))) 108 (should (equal '(1 3 5) (cl-remove 'foo list :if #'cl-evenp)))
@@ -133,67 +114,58 @@ Body are forms defining the test."
133 (should (equal '(1 2 3 4 5 6) (cl-remove 2 list :from-end t :count 1))))) 114 (should (equal '(1 2 3 4 5 6) (cl-remove 2 list :from-end t :count 1)))))
134 115
135(ert-deftest cl-remove-if-test () 116(ert-deftest cl-remove-if-test ()
136 (should (equal '(1 3) (cl-remove-if 'cl-evenp '(1 2 3 4)))) 117 (should (equal '(1 3) (cl-remove-if #'cl-evenp '(1 2 3 4))))
137 (should (equal '(1 3) (cl-remove-if 'cl-evenp '(1 2 3 4) :count 2))) 118 (should (equal '(1 3) (cl-remove-if #'cl-evenp '(1 2 3 4) :count 2)))
138 (should (equal '(1 3 4) (cl-remove-if 'cl-evenp '(1 2 3 4) :start 1 :end 3))) 119 (should (equal '(1 3 4) (cl-remove-if #'cl-evenp '(1 2 3 4) :start 1 :end 3)))
139 (should (equal '(1 3) (cl-remove-if 'cl-evenp '(1 2 3 4) :from-end t))) 120 (should (equal '(1 3) (cl-remove-if #'cl-evenp '(1 2 3 4) :from-end t)))
140 (should (equal '(2 4) (cl-remove-if 'cl-oddp '(1 2 3 4)))) 121 (should (equal '(2 4) (cl-remove-if #'cl-oddp '(1 2 3 4))))
141 (should (equal '() (cl-remove-if 'cl-evenp '()))) 122 (should (equal '() (cl-remove-if #'cl-evenp '())))
142 (should (equal '() (cl-remove-if 'cl-evenp '(2))))) 123 (should (equal '() (cl-remove-if #'cl-evenp '(2)))))
143 124
144(ert-deftest cl-remove-if-not-test () 125(ert-deftest cl-remove-if-not-test ()
145 (should (equal '(2 4) (cl-remove-if-not 'cl-evenp '(1 2 3 4)))) 126 (should (equal '(2 4) (cl-remove-if-not #'cl-evenp '(1 2 3 4))))
146 (should (equal '(2 4) (cl-remove-if-not 'cl-evenp '(1 2 3 4) :count 2))) 127 (should (equal '(2 4) (cl-remove-if-not #'cl-evenp '(1 2 3 4) :count 2)))
147 (should (equal '(1 2 4) (cl-remove-if-not 'cl-evenp '(1 2 3 4) :start 1 :end 3))) 128 (should (equal '(1 2 4) (cl-remove-if-not #'cl-evenp '(1 2 3 4) :start 1 :end 3)))
148 (should (equal '(2 4) (cl-remove-if-not 'cl-evenp '(1 2 3 4) :from-end t))) 129 (should (equal '(2 4) (cl-remove-if-not #'cl-evenp '(1 2 3 4) :from-end t)))
149 (should (equal '(1 3) (cl-remove-if-not 'cl-oddp '(1 2 3 4)))) 130 (should (equal '(1 3) (cl-remove-if-not #'cl-oddp '(1 2 3 4))))
150 (should (equal '() (cl-remove-if-not 'cl-evenp '()))) 131 (should (equal '() (cl-remove-if-not #'cl-evenp '())))
151 (should (equal '(2) (cl-remove-if-not 'cl-evenp '(2)))) 132 (should (equal '(2) (cl-remove-if-not #'cl-evenp '(2))))
152 (should (equal '(2) (cl-remove-if-not 'cl-evenp '(2) :key #'(lambda (x) (- x)))))) 133 (should (equal '(2) (cl-remove-if-not #'cl-evenp '(2) :key #'-))))
153 134
154;; keywords supported: :test :test-not :key :count :start :end :from-end 135;; keywords supported: :test :test-not :key :count :start :end :from-end
155(ert-deftest cl-seq-delete-test () 136(ert-deftest cl-seq-delete-test ()
156 (let* ((cl-seq--test-list '(1 2 3 4 5 2 6)) 137 (cl-seq-tests--relet* ((l (list 1 2 3 4 5 2 6))
157 (orig (copy-sequence cl-seq--test-list)) 138 (orig (copy-sequence l)))
158 (tests '((should (equal orig (cl-delete 'foo _list))) 139 (should (equal orig (cl-delete 'foo l)))
159 (should (equal '(1 3 4 5 6) (cl-delete 2 _list))) 140 (should (equal '(1 3 4 5 6) (cl-delete 2 l)))
160 (should (equal '(1 3 4 5 6) (cl-delete 2 _list 141 (should (equal '(1 3 4 5 6) (cl-delete 2 l :key #'identity :test #'eql)))
161 :key #'identity 142 (should (equal '(1 2 3 4 2) (cl-delete 4 l :test (lambda (a b) (> b a)))))
162 :test (lambda (a b) (eql a b))))) 143 (should (equal '(5 6) (cl-delete 4 l :test-not (lambda (a b) (> b a)))))
163 (should (equal '(1 2 3 4 2) (cl-delete 4 _list :test (lambda (a b) (> b a))))) 144 (should (equal '(1 3 5) (cl-delete 'foo l :if #'cl-evenp)))
164 (should (equal '(5 6) (cl-delete 4 _list :test-not (lambda (a b) (> b a))))) 145 (should (equal '(2 4 2 6) (cl-delete 'foo l :if-not #'cl-evenp)))
165 (should (equal '(1 3 5) (cl-delete 'foo _list :if #'cl-evenp))) 146 (should (equal '(1 2 3 4 5) (cl-delete 'foo l :if #'cl-evenp :start 4)))
166 (should (equal '(2 4 2 6) (cl-delete 'foo _list :if-not #'cl-evenp))) 147 (should (equal '(1 2 3 4 5 6) (cl-delete 2 l :start 5 :end 6)))
167 (should (equal '(1 2 3 4 5) (cl-delete 'foo _list :if #'cl-evenp :start 4))) 148 (should (equal '(1 3 4 5 2 6) (cl-delete 2 l :count 1)))
168 (should (equal '(1 2 3 4 5 6) (cl-delete 2 _list :start 5 :end 6))) 149 (should (equal '(1 3 4 5 2 6) (cl-delete 2 l :from-end nil :count 1)))
169 (should (equal '(1 3 4 5 2 6) (cl-delete 2 _list :count 1))) 150 (should (equal '(1 2 3 4 5 6) (cl-delete 2 l :from-end t :count 1)))))
170 (should (equal '(1 3 4 5 2 6) (cl-delete 2 _list :from-end nil :count 1)))
171 (should (equal '(1 2 3 4 5 6) (cl-delete 2 _list :from-end t :count 1))))))
172 (dolist (test tests)
173 (let ((_list cl-seq--test-list))
174 (cl-seq--with-side-effects orig nil
175 test)))))
176 151
177(ert-deftest cl-delete-if-test () 152(ert-deftest cl-delete-if-test ()
178 (let ((list (list 1 2 3 4 5))) 153 (cl-seq-tests--relet* ((l (list 1 2 3 4 5)))
179 (cl-delete-if 'cl-evenp list) 154 (should (equal '(1 3 5) (cl-delete-if #'cl-evenp l)))
180 (should (equal '(1 3 5) list)) 155 (should (equal '(1 3 5) (cl-delete-if #'cl-evenp l :start 0 :end 4)))
181 (should (equal '(1 3 5) (cl-delete-if 'cl-evenp (list 1 2 3 4 5) :start 0 :end 4))) 156 (should (equal '(1 3 5) (cl-delete-if #'cl-evenp l :from-end t)))
182 (should (equal '(1 3 5) (cl-delete-if 'cl-evenp (list 1 2 3 4 5) :from-end t))) 157 (should (equal '(2 4) (cl-delete-if #'cl-oddp l))))
183 (should (equal '(2 4) (cl-delete-if 'cl-oddp (list 1 2 3 4 5)))) 158 (should (equal '() (cl-delete-if #'cl-evenp '())))
184 (should (equal '() (cl-delete-if 'cl-evenp '()))) 159 (should (equal '() (cl-delete-if #'cl-evenp (list 2)))))
185 (should (equal '() (cl-delete-if 'cl-evenp (list 2))))))
186 160
187(ert-deftest cl-delete-if-not-test () 161(ert-deftest cl-delete-if-not-test ()
188 (let ((list (list 1 2 3 4 5))) 162 (should (equal '(2 4) (cl-delete-if-not #'cl-evenp (list 1 2 3 4 5))))
189 (should (equal '(2 4) (cl-delete-if-not 'cl-evenp list))) 163 (should (equal '() (cl-delete-if-not #'cl-evenp '())))
190 (should (equal '() (cl-delete-if-not 'cl-evenp '()))) 164 (should (equal '() (cl-delete-if-not #'cl-evenp (list 1)))))
191 (should (equal '() (cl-delete-if-not 'cl-evenp (list 1))))))
192 165
193(ert-deftest cl-delete-duplicates-test () 166(ert-deftest cl-delete-duplicates-test ()
194 (let ((list (list 1 2 3 2 1))) 167 (should (equal '(3 2 1) (cl-delete-duplicates (list 1 2 3 2 1))))
195 (should (equal '(3 2 1) (cl-delete-duplicates list))) 168 (should (equal '() (cl-delete-duplicates '()))))
196 (should (equal '() (cl-delete-duplicates '())))))
197 169
198;; keywords supported: :test :test-not :key :start :end :from-end 170;; keywords supported: :test :test-not :key :start :end :from-end
199(ert-deftest cl-seq-remove-duplicates-test () 171(ert-deftest cl-seq-remove-duplicates-test ()
@@ -203,10 +175,10 @@ Body are forms defining the test."
203 (should (equal list (cl-remove-duplicates list :start 2))) 175 (should (equal list (cl-remove-duplicates list :start 2)))
204 (should (equal list (cl-remove-duplicates list :start 2 :from-end t))) 176 (should (equal list (cl-remove-duplicates list :start 2 :from-end t)))
205 (should (equal list (cl-remove-duplicates list :end 4))) 177 (should (equal list (cl-remove-duplicates list :end 4)))
206 (should (equal '(6) (cl-remove-duplicates list :test (lambda (a b) (< a b))))) 178 (should (equal '(6) (cl-remove-duplicates list :test #'<)))
207 (should (equal '(1 2 6) (cl-remove-duplicates list :test (lambda (a b) (>= a b))))) 179 (should (equal '(1 2 6) (cl-remove-duplicates list :test #'>=)))
208 (should (equal (cl-remove-duplicates list :test (lambda (a b) (>= a b))) 180 (should (equal (cl-remove-duplicates list :test #'>=)
209 (cl-remove-duplicates list :test-not (lambda (a b) (< a b))))) 181 (cl-remove-duplicates list :test-not #'<)))
210 (should (equal (cl-remove-duplicates list) 182 (should (equal (cl-remove-duplicates list)
211 (cl-remove-duplicates list :key #'number-to-string :test #'string=))) 183 (cl-remove-duplicates list :key #'number-to-string :test #'string=)))
212 (should (equal list 184 (should (equal list
@@ -224,35 +196,38 @@ Body are forms defining the test."
224 (should (equal '(1 b 3 4 5 2 6) (cl-substitute 'b 2 list :count 1))) 196 (should (equal '(1 b 3 4 5 2 6) (cl-substitute 'b 2 list :count 1)))
225 (should (equal '(1 2 3 4 5 b 6) (cl-substitute 'b 2 list :count 1 :from-end t))) 197 (should (equal '(1 2 3 4 5 b 6) (cl-substitute 'b 2 list :count 1 :from-end t)))
226 (should (equal list (cl-substitute 'b 2 list :count -1))) 198 (should (equal list (cl-substitute 'b 2 list :count -1)))
227 (should (equal '(1 b 3 4 5 b 6) (cl-substitute 'b "2" list :key #'number-to-string 199 (should (equal '(1 b 3 4 5 b 6) (cl-substitute 'b "2" list
200 :key #'number-to-string
228 :test #'string=))) 201 :test #'string=)))
229 (should (equal (cl-substitute 'b 2 list) 202 (should (equal (cl-substitute 'b 2 list)
230 (cl-substitute 'b 2 list :test #'eq))) 203 (cl-substitute 'b 2 list :test #'eq)))
231 (should (equal '(1 2 b b b 2 b) (cl-substitute 'b 2 list :test (lambda (a b) (< a b))))) 204 (should (equal '(1 2 b b b 2 b) (cl-substitute 'b 2 list :test #'<)))
232 (should (equal '(b b 3 4 5 b 6) (cl-substitute 'b 2 list :test (lambda (a b) (>= a b))))) 205 (should (equal '(b b 3 4 5 b 6) (cl-substitute 'b 2 list :test #'>=)))
233 (should (equal list (cl-substitute 'b 99 list :test (lambda (a b) (< a b))))) 206 (should (equal list (cl-substitute 'b 99 list :test #'<)))
234 (should (equal (cl-substitute 'b 2 list :test (lambda (a b) (>= a b))) 207 (should (equal (cl-substitute 'b 2 list :test #'>=)
235 (cl-substitute 'b 2 list :test-not (lambda (a b) (< a b))))) 208 (cl-substitute 'b 2 list :test-not #'<)))
236 (should (equal '(1 2 b b b 2 b) (cl-substitute 'b nil list :if (lambda (x) (> (cl-position x list) 1))))) 209 (let ((pred (lambda (x) (> (cl-position x list) 1))))
237 (should (equal '(1 b b b b b b) (cl-substitute 'b nil list :if (lambda (x) (> (cl-position x list :from-end t) 1))))) 210 (should (equal '(1 2 b b b 2 b) (cl-substitute 'b nil list :if pred))))
238 211 (let ((pred (lambda (x) (> (cl-position x list :from-end t) 1))))
239 (should (equal '(b b 3 4 5 b 6) (cl-substitute 'b nil list 212 (should (equal '(1 b b b b b b) (cl-substitute 'b nil list :if pred))))
240 :if-not (lambda (x) (> (cl-position x list) 1))))) 213 (let ((pred (lambda (x) (> (cl-position x list) 1))))
241 (should (equal '(b 2 3 4 5 2 6) (cl-substitute 'b nil list 214 (should (equal '(b b 3 4 5 b 6) (cl-substitute 'b nil list :if-not pred))))
242 :if-not (lambda (x) (> (cl-position x list :from-end t) 1))))))) 215 (let ((pred (lambda (x) (> (cl-position x list :from-end t) 1))))
216 (should (equal '(b 2 3 4 5 2 6) (cl-substitute 'b nil list :if-not pred))))))
243 217
244(ert-deftest cl-seq-substitute-if-test () 218(ert-deftest cl-seq-substitute-if-test ()
245 (let ((result (cl-substitute-if 'x #'cl-evenp '(1 2 3 4 5)))) 219 (let ((result (cl-substitute-if 'x #'cl-evenp '(1 2 3 4 5))))
246 (should (equal result '(1 x 3 x 5)))) 220 (should (equal result '(1 x 3 x 5))))
247 (let ((result (cl-substitute-if 'x #'cl-evenp '(1 3 5)))) 221 (let ((result (cl-substitute-if 'x #'cl-evenp '(1 3 5))))
248 (should (equal result '(1 3 5)))) 222 (should (equal result '(1 3 5))))
249 (let ((result (cl-substitute-if 'x #'(lambda (n) t) '(1 2 3 4 5)))) 223 (let ((result (cl-substitute-if 'x #'always '(1 2 3 4 5))))
250 (should (equal result '(x x x x x)))) 224 (should (equal result '(x x x x x))))
251 (let ((result (cl-substitute-if 'x #'cl-evenp '(1 2 3 4 5) :start 1 :end 4))) 225 (let ((result (cl-substitute-if 'x #'cl-evenp '(1 2 3 4 5) :start 1 :end 4)))
252 (should (equal result '(1 x 3 x 5)))) 226 (should (equal result '(1 x 3 x 5))))
253 (let ((result (cl-substitute-if 'x #'cl-oddp '(1 2 3 4 5) :from-end t))) 227 (let ((result (cl-substitute-if 'x #'cl-oddp '(1 2 3 4 5) :from-end t)))
254 (should (equal result '(x 2 x 4 x)))) 228 (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))) 229 (let ((result (cl-substitute-if 'x (lambda (n) (= n 3)) '(1 2 3 4 5)
230 :key #'identity)))
256 (should (equal result '(1 2 x 4 5))))) 231 (should (equal result '(1 2 x 4 5)))))
257 232
258(ert-deftest cl-seq-substitute-if-not-test () 233(ert-deftest cl-seq-substitute-if-not-test ()
@@ -260,21 +235,22 @@ Body are forms defining the test."
260 (should (equal result '(x 2 x 4 x)))) 235 (should (equal result '(x 2 x 4 x))))
261 (let ((result (cl-substitute-if-not 'x #'cl-evenp '(2 4 6)))) 236 (let ((result (cl-substitute-if-not 'x #'cl-evenp '(2 4 6))))
262 (should (equal result '(2 4 6)))) 237 (should (equal result '(2 4 6))))
263 (let ((result (cl-substitute-if-not 'x #'(lambda (n) (> n 5)) '(1 2 3 4 5)))) 238 (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)))) 239 (should (equal result '(x x x x x))))
265 (let ((result (cl-substitute-if-not 'x #'cl-evenp '(1 2 3 4 5) :start 0 :end 4))) 240 (let ((result (cl-substitute-if-not 'x #'cl-evenp '(1 2 3 4 5) :start 0 :end 4)))
266 (should (equal result '(x 2 x 4 5)))) 241 (should (equal result '(x 2 x 4 5))))
267 (let ((result (cl-substitute-if-not 'x #'cl-oddp '(1 2 3 4 5) :from-end t))) 242 (let ((result (cl-substitute-if-not 'x #'cl-oddp '(1 2 3 4 5) :from-end t)))
268 (should (equal result '(1 x 3 x 5)))) 243 (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))) 244 (let ((result (cl-substitute-if-not 'x (lambda (n) (= n 3)) '(1 2 3 4 5)
245 :key #'identity)))
270 (should (equal result '(x x 3 x x))))) 246 (should (equal result '(x x 3 x x)))))
271 247
272(ert-deftest cl-find-if-test () 248(ert-deftest cl-find-if-test ()
273 (let ((result (cl-find-if #'cl-evenp '(1 2 3 4 5)))) 249 (let ((result (cl-find-if #'cl-evenp '(1 2 3 4 5))))
274 (should (equal result 2))) 250 (should (equal result 2)))
275 (let ((result (cl-find-if #'(lambda (n) (> n 5)) '(1 2 3 4 5)))) 251 (let ((result (cl-find-if (lambda (n) (> n 5)) '(1 2 3 4 5))))
276 (should (equal result nil))) 252 (should (equal result nil)))
277 (let ((result (cl-find-if #'(lambda (n) (> n 3)) '(1 2 3 4 5 6 7)))) 253 (let ((result (cl-find-if (lambda (n) (> n 3)) '(1 2 3 4 5 6 7))))
278 (should (equal result 4))) 254 (should (equal result 4)))
279 (let ((result (cl-find-if #'cl-evenp '(1 2 3 4 5) :start 2))) 255 (let ((result (cl-find-if #'cl-evenp '(1 2 3 4 5) :start 2)))
280 (should (equal result 4))) 256 (should (equal result 4)))
@@ -282,7 +258,7 @@ Body are forms defining the test."
282 (should (equal result nil))) 258 (should (equal result nil)))
283 (let ((result (cl-find-if #'cl-oddp '(2 4 5 6 7) :from-end t))) 259 (let ((result (cl-find-if #'cl-oddp '(2 4 5 6 7) :from-end t)))
284 (should (equal result 7))) 260 (should (equal result 7)))
285 (let ((result (cl-find-if (lambda (n) (= n 4)) '(1 2 3 4 5) :key 'identity))) 261 (let ((result (cl-find-if (lambda (n) (= n 4)) '(1 2 3 4 5) :key #'identity)))
286 (should (equal result 4)))) 262 (should (equal result 4))))
287 263
288(ert-deftest cl-find-if-not-test () 264(ert-deftest cl-find-if-not-test ()
@@ -290,7 +266,7 @@ Body are forms defining the test."
290 (should (equal result 1))) 266 (should (equal result 1)))
291 (let ((result (cl-find-if-not #'cl-oddp '(1 3 5)))) 267 (let ((result (cl-find-if-not #'cl-oddp '(1 3 5))))
292 (should (equal result nil))) 268 (should (equal result nil)))
293 (let ((result (cl-find-if-not #'(lambda (n) (< n 4)) '(1 2 3 4 5 6 7)))) 269 (let ((result (cl-find-if-not (lambda (n) (< n 4)) '(1 2 3 4 5 6 7))))
294 (should (equal result 4))) 270 (should (equal result 4)))
295 (let ((result (cl-find-if-not #'cl-evenp '(1 2 3 4 5) :start 2))) 271 (let ((result (cl-find-if-not #'cl-evenp '(1 2 3 4 5) :start 2)))
296 (should (equal result 3))) 272 (should (equal result 3)))
@@ -298,45 +274,40 @@ Body are forms defining the test."
298 (should (equal result 1))) 274 (should (equal result 1)))
299 (let ((result (cl-find-if-not #'cl-oddp '(2 4 6 7 8) :from-end t))) 275 (let ((result (cl-find-if-not #'cl-oddp '(2 4 6 7 8) :from-end t)))
300 (should (equal result 8))) 276 (should (equal result 8)))
301 (let ((result (cl-find-if-not (lambda (n) (= n 4)) '(1 2 3 4 5) :key 'identity))) 277 (let ((result (cl-find-if-not (lambda (n) (= n 4)) '(1 2 3 4 5) :key #'identity)))
302 (should (equal result 1)))) 278 (should (equal result 1))))
303 279
304;; keywords supported: :test :test-not :key :count :start :end :from-end 280;; keywords supported: :test :test-not :key :count :start :end :from-end
305(ert-deftest cl-seq-nsubstitute-test () 281(ert-deftest cl-seq-nsubstitute-test ()
306 (let ((cl-seq--test-list '(1 2 3 4 5 2 6)) 282 (cl-seq-tests--relet* ((l (list 1 2 3 4 5 2 6))
307 (orig (copy-sequence cl-seq--test-list)) 283 (orig (copy-sequence l)))
308 (tests '((should (equal '(1 b 3 4 5 b 6) (cl-nsubstitute 'b 2 _list))) 284 (should (equal '(1 b 3 4 5 b 6) (cl-nsubstitute 'b 2 l)))
309 (should (equal _list (cl-substitute 'b 2 _list :start (length _list)))) 285 (should (equal orig (cl-nsubstitute 'b 2 l :start (length l))))
310 (should (equal _list (cl-substitute 'b 2 _list :end 0))) 286 (should (equal orig (cl-nsubstitute 'b 2 l :end 0)))
311 (should (equal '(1 2 3 4 5 b 6) (cl-substitute 'b 2 _list :start 2))) 287 (should (equal '(1 2 3 4 5 b 6) (cl-nsubstitute 'b 2 l :start 2)))
312 (should (equal '(1 b 3 4 5 2 6) (cl-substitute 'b 2 _list :end 2))) 288 (should (equal '(1 b 3 4 5 2 6) (cl-nsubstitute 'b 2 l :end 2)))
313 (should (equal _list (cl-substitute 'b 2 _list :start 2 :end 4))) 289 (should (equal orig (cl-nsubstitute 'b 2 l :start 2 :end 4)))
314 (should (equal '(1 b 3 4 5 2 6) (cl-nsubstitute 'b 2 _list :count 1))) 290 (should (equal '(1 b 3 4 5 2 6) (cl-nsubstitute 'b 2 l :count 1)))
315 (should (equal '(1 2 3 4 5 b 6) (cl-nsubstitute 'b 2 _list :count 1 :from-end t))) 291 (should (equal '(1 2 3 4 5 b 6) (cl-nsubstitute 'b 2 l :count 1 :from-end t)))
316 (should (equal _list (cl-nsubstitute 'b 2 _list :count -1))) 292 (should (equal orig (cl-nsubstitute 'b 2 l :count -1)))
317 (should (equal '(1 b 3 4 5 b 6) (cl-nsubstitute 'b "2" _list :key #'number-to-string 293 (should (equal '(1 b 3 4 5 b 6) (cl-nsubstitute 'b "2" l
318 :test #'string=))) 294 :key #'number-to-string
319 (should (equal (cl-nsubstitute 'b 2 _list) 295 :test #'string=)))
320 (cl-nsubstitute 'b 2 _list :test #'eq))) 296 (should (equal (cl-nsubstitute 'b 2 orig)
321 (should (equal '(1 2 b b b 2 b) (cl-nsubstitute 'b 2 _list :test (lambda (a b) (< a b))))) 297 (cl-nsubstitute 'b 2 l :test #'eq)))
322 (should (equal '(b b 3 4 5 b 6) (cl-nsubstitute 'b 2 _list :test (lambda (a b) (>= a b))))) 298 (should (equal '(1 2 b b b 2 b) (cl-nsubstitute 'b 2 l :test #'<)))
323 (should (equal _list (cl-nsubstitute 'b 99 _list :test (lambda (a b) (< a b))))) 299 (should (equal '(b b 3 4 5 b 6) (cl-nsubstitute 'b 2 l :test #'>=)))
324 (should (equal (cl-nsubstitute 'b 2 _list :test (lambda (a b) (>= a b))) 300 (should (equal orig (cl-nsubstitute 'b 99 l :test #'<)))
325 (cl-nsubstitute 'b 2 _list :test-not (lambda (a b) (< a b))))) 301 (should (equal (cl-nsubstitute 'b 2 orig :test #'>=)
326 (should (equal '(1 2 b b b 2 b) 302 (cl-nsubstitute 'b 2 l :test-not #'<)))
327 (cl-nsubstitute 'b nil _list :if (lambda (x) (> (cl-position x _list) 1))))) 303 (let ((pred (lambda (x) (> (cl-position x orig) 1))))
328 (should (equal '(1 b b b b b b) 304 (should (equal '(1 2 b b b 2 b) (cl-nsubstitute 'b nil l :if pred))))
329 (cl-nsubstitute 'b nil _list :if (lambda (x) (> (cl-position x _list :from-end t) 1))))) 305 (let ((pred (lambda (x) (> (cl-position x orig :from-end t) 1))))
330 (should (equal '(b b 3 4 5 b 6) 306 (should (equal '(1 b b b b b b) (cl-nsubstitute 'b nil l :if pred))))
331 (cl-nsubstitute 'b nil _list 307 (let ((pred (lambda (x) (> (cl-position x orig) 1))))
332 :if-not (lambda (x) (> (cl-position x _list) 1))))) 308 (should (equal '(b b 3 4 5 b 6) (cl-nsubstitute 'b nil l :if-not pred))))
333 (should (equal '(b 2 3 4 5 2 6) 309 (let ((pred (lambda (x) (> (cl-position x orig :from-end t) 1))))
334 (cl-nsubstitute 'b nil _list 310 (should (equal '(b 2 3 4 5 2 6) (cl-nsubstitute 'b nil l :if-not pred))))))
335 :if-not (lambda (x) (> (cl-position x _list :from-end t) 1))))))))
336 (dolist (test tests)
337 (let ((_list cl-seq--test-list))
338 (cl-seq--with-side-effects orig nil
339 test)))))
340 311
341;; keywords supported: :test :test-not :key :start :end :from-end 312;; keywords supported: :test :test-not :key :start :end :from-end
342(ert-deftest cl-seq-position-test () 313(ert-deftest cl-seq-position-test ()
@@ -346,10 +317,10 @@ Body are forms defining the test."
346 (should (= 5 (cl-position 2 list :start 5 :end 6))) 317 (should (= 5 (cl-position 2 list :start 5 :end 6)))
347 (should (= 1 (cl-position 2 list :from-end nil))) 318 (should (= 1 (cl-position 2 list :from-end nil)))
348 (should (= 5 (cl-position 2 list :from-end t))) 319 (should (= 5 (cl-position 2 list :from-end t)))
349 (should (cl-position 2 list :key #'identity 320 (should (cl-position 2 list :key #'identity :test #'eql))
350 :test (lambda (a b) (eql a b))))
351 (should (= 1 (cl-position "2" list :key #'number-to-string :test #'string=))) 321 (should (= 1 (cl-position "2" list :key #'number-to-string :test #'string=)))
352 (should (= 5 (cl-position "2" list :key #'number-to-string :test #'string= :from-end t))) 322 (should (= 5 (cl-position "2" list :key #'number-to-string
323 :test #'string= :from-end t)))
353 (should-not (cl-position "2" list :key #'number-to-string)) 324 (should-not (cl-position "2" list :key #'number-to-string))
354 (should (cl-position 5 list :key (lambda (x) (1+ (* 1.0 x x))) :test #'=)) 325 (should (cl-position 5 list :key (lambda (x) (1+ (* 1.0 x x))) :test #'=))
355 (should-not (cl-position 5 list :key (lambda (x) (1+ (* 1.0 x x))))) 326 (should-not (cl-position 5 list :key (lambda (x) (1+ (* 1.0 x x)))))
@@ -359,9 +330,9 @@ Body are forms defining the test."
359(ert-deftest cl-position-if-test () 330(ert-deftest cl-position-if-test ()
360 (let ((result (cl-position-if #'cl-evenp '(1 2 3 4 5)))) 331 (let ((result (cl-position-if #'cl-evenp '(1 2 3 4 5))))
361 (should (equal result 1))) 332 (should (equal result 1)))
362 (let ((result (cl-position-if #'(lambda (n) (> n 5)) '(1 2 3 4 5)))) 333 (let ((result (cl-position-if (lambda (n) (> n 5)) '(1 2 3 4 5))))
363 (should (equal result nil))) 334 (should (equal result nil)))
364 (let ((result (cl-position-if #'(lambda (n) (> n 3)) '(1 2 3 4 5 6 7)))) 335 (let ((result (cl-position-if (lambda (n) (> n 3)) '(1 2 3 4 5 6 7))))
365 (should (equal result 3))) 336 (should (equal result 3)))
366 (let ((result (cl-position-if #'cl-evenp '(1 2 3 4 5) :start 2))) 337 (let ((result (cl-position-if #'cl-evenp '(1 2 3 4 5) :start 2)))
367 (should (equal result 3))) 338 (should (equal result 3)))
@@ -369,7 +340,7 @@ Body are forms defining the test."
369 (should (equal result nil))) 340 (should (equal result nil)))
370 (let ((result (cl-position-if #'cl-oddp '(2 4 5 6 7) :from-end t))) 341 (let ((result (cl-position-if #'cl-oddp '(2 4 5 6 7) :from-end t)))
371 (should (equal result 4))) 342 (should (equal result 4)))
372 (let ((result (cl-position-if (lambda (n) (= n 4)) '(1 2 3 4 5) :key 'identity))) 343 (let ((result (cl-position-if (lambda (n) (= n 4)) '(1 2 3 4 5) :key #'identity)))
373 (should (equal result 3)))) 344 (should (equal result 3))))
374 345
375;; keywords supported: :test :test-not :key :start :end 346;; keywords supported: :test :test-not :key :start :end
@@ -390,11 +361,11 @@ Body are forms defining the test."
390 (should (equal result 2))) 361 (should (equal result 2)))
391 (let ((result (cl-count-if #'cl-oddp '(2 4 6 8)))) 362 (let ((result (cl-count-if #'cl-oddp '(2 4 6 8))))
392 (should (equal result 0))) 363 (should (equal result 0)))
393 (let ((result (cl-count-if (lambda (x) t) '(1 2 3 4)))) 364 (let ((result (cl-count-if #'always '(1 2 3 4))))
394 (should (equal result 4))) 365 (should (equal result 4)))
395 (let ((result (cl-count-if (lambda (x) nil) '(1 2 3 4)))) 366 (let ((result (cl-count-if #'ignore '(1 2 3 4))))
396 (should (equal result 0))) 367 (should (equal result 0)))
397 (let ((result (cl-count-if #'(lambda (x) (> x 2)) '(1 2 3 4 5) :key 'identity))) 368 (let ((result (cl-count-if (lambda (x) (> x 2)) '(1 2 3 4 5) :key #'identity)))
398 (should (equal result 3))) 369 (should (equal result 3)))
399 (let ((result (cl-count-if #'cl-evenp '(1 2 3 4 5) :start 2))) 370 (let ((result (cl-count-if #'cl-evenp '(1 2 3 4 5) :start 2)))
400 (should (equal result 1))) 371 (should (equal result 1)))
@@ -402,7 +373,7 @@ Body are forms defining the test."
402 (should (equal result 1))) 373 (should (equal result 1)))
403 (let ((result (cl-count-if #'cl-evenp '()))) 374 (let ((result (cl-count-if #'cl-evenp '())))
404 (should (equal result 0))) 375 (should (equal result 0)))
405 (let ((result (cl-count-if #'(lambda (x) (numberp x)) '(1 "two" 3 4 "five" 6)))) 376 (let ((result (cl-count-if #'numberp '(1 "two" 3 4 "five" 6))))
406 (should (equal result 4))) 377 (should (equal result 4)))
407 (let ((result (cl-count-if (lambda (x) (and (numberp x) (> x 2))) '(1 2 3 4 5 6)))) 378 (let ((result (cl-count-if (lambda (x) (and (numberp x) (> x 2))) '(1 2 3 4 5 6))))
408 (should (equal result 4)))) 379 (should (equal result 4))))
@@ -412,11 +383,11 @@ Body are forms defining the test."
412 (should (equal result 3))) 383 (should (equal result 3)))
413 (let ((result (cl-count-if-not #'cl-oddp '(1 3 5)))) 384 (let ((result (cl-count-if-not #'cl-oddp '(1 3 5))))
414 (should (equal result 0))) 385 (should (equal result 0)))
415 (let ((result (cl-count-if-not (lambda (x) t) '(1 2 3 4)))) 386 (let ((result (cl-count-if-not #'always '(1 2 3 4))))
416 (should (equal result 0))) 387 (should (equal result 0)))
417 (let ((result (cl-count-if-not (lambda (x) nil) '(1 2 3 4)))) 388 (let ((result (cl-count-if-not #'ignore '(1 2 3 4))))
418 (should (equal result 4))) 389 (should (equal result 4)))
419 (let ((result (cl-count-if-not #'(lambda (x) (> x 3)) '(1 2 3 4 5) :key 'identity))) 390 (let ((result (cl-count-if-not (lambda (x) (> x 3)) '(1 2 3 4 5) :key #'identity)))
420 (should (equal result 3))) 391 (should (equal result 3)))
421 (let ((result (cl-count-if-not #'cl-evenp '(1 2 3 4 5) :start 2))) 392 (let ((result (cl-count-if-not #'cl-evenp '(1 2 3 4 5) :start 2)))
422 (should (equal result 2))) 393 (should (equal result 2)))
@@ -424,9 +395,10 @@ Body are forms defining the test."
424 (should (equal result 2))) 395 (should (equal result 2)))
425 (let ((result (cl-count-if-not #'cl-evenp '()))) 396 (let ((result (cl-count-if-not #'cl-evenp '())))
426 (should (equal result 0))) 397 (should (equal result 0)))
427 (let ((result (cl-count-if-not #'(lambda (x) (numberp x)) '(1 "two" 3 4 "five" 6)))) 398 (let ((result (cl-count-if-not #'numberp '(1 "two" 3 4 "five" 6))))
428 (should (equal result 2))) 399 (should (equal result 2)))
429 (let ((result (cl-count-if-not (lambda (x) (and (numberp x) (> x 2))) '(1 2 3 4 5 6)))) 400 (let ((result (cl-count-if-not (lambda (x) (and (numberp x) (> x 2)))
401 '(1 2 3 4 5 6))))
430 (should (equal result 2)))) 402 (should (equal result 2))))
431 403
432;; keywords supported: :test :test-not :key :start1 :end1 :start2 :end2 :from-end 404;; keywords supported: :test :test-not :key :start1 :end1 :start2 :end2 :from-end
@@ -443,9 +415,9 @@ Body are forms defining the test."
443 (should-not (cl-mismatch list list2 :end1 1 :end2 1)) 415 (should-not (cl-mismatch list list2 :end1 1 :end2 1))
444 (should-not (cl-mismatch list list2 :start1 1 :start2 2)) 416 (should-not (cl-mismatch list list2 :start1 1 :start2 2))
445 (should (= 1 (cl-mismatch list list2 :start1 1 :end1 2 :start2 4 :end2 4))) 417 (should (= 1 (cl-mismatch list list2 :start1 1 :end1 2 :start2 4 :end2 4)))
446 (should (= -1 (cl-mismatch list list2 :key #'number-to-string 418 (should (= -1 (cl-mismatch list list2 :from-end t :key #'number-to-string
447 :test (lambda (a b) 419 :test (lambda (a b)
448 (and (stringp a) (stringp b))) :from-end t))) 420 (and (stringp a) (stringp b))))))
449 (should (= 7 (cl-mismatch list list2 :key #'number-to-string 421 (should (= 7 (cl-mismatch list list2 :key #'number-to-string
450 :test (lambda (a b) 422 :test (lambda (a b)
451 (and (stringp a) (stringp b)))))))) 423 (and (stringp a) (stringp b))))))))
@@ -461,16 +433,17 @@ Body are forms defining the test."
461 (should (= 0 (cl-search list list2 :end1 1))) 433 (should (= 0 (cl-search list list2 :end1 1)))
462 (should (= 0 (cl-search nil list2))) 434 (should (= 0 (cl-search nil list2)))
463 (should (= 2 (cl-search list list2 :start1 1 :end1 2 :end2 3))) 435 (should (= 2 (cl-search list list2 :start1 1 :end1 2 :end2 3)))
464 (should (= 0 (cl-search list list2 :test (lambda (a b) (and (numberp a) (numberp b)))))) 436 (should (= 0 (cl-search list list2 :test (lambda (a b)
437 (and (numberp a) (numberp b))))))
465 (should (= 0 (cl-search list list2 :key (lambda (x) (and (numberp x) 'foo)) 438 (should (= 0 (cl-search list list2 :key (lambda (x) (and (numberp x) 'foo))
466 :test (lambda (a b) (and (eq a 'foo) (eq b 'foo)))))) 439 :test (lambda (a b) (and (eq a 'foo) (eq b 'foo))))))
467 (should (= 1 (cl-search (nthcdr 2 list) (nthcdr 2 list2)))) 440 (should (= 1 (cl-search (nthcdr 2 list) (nthcdr 2 list2))))
468 (should (= 3 (cl-search (nthcdr 2 list) list2))))) 441 (should (= 3 (cl-search (nthcdr 2 list) list2)))))
469 442
470(ert-deftest cl-seq-test-bug24264 () 443(ert-deftest cl-seq-test-bug24264 ()
471 "Test for https://debbugs.gnu.org/24264 ." 444 "Test for bug#24264."
472 :tags '(:expensive-test) 445 :tags '(:expensive-test)
473 (let ((list (append (make-list 8000005 1) '(8))) 446 (let ((list (nconc (make-list 8000005 1) '(8)))
474 (list2 (make-list 8000005 2))) 447 (list2 (make-list 8000005 2)))
475 (should (cl-position 8 list)) 448 (should (cl-position 8 list))
476 (should-not (equal '(8) (last (cl-remove 8 list)))) 449 (should-not (equal '(8) (last (cl-remove 8 list))))
@@ -488,75 +461,82 @@ Body are forms defining the test."
488 (should (eq (cl-rassoc x a) (cadr a)))))) 461 (should (eq (cl-rassoc x a) (cadr a))))))
489 462
490(ert-deftest cl-sort-test () 463(ert-deftest cl-sort-test ()
491 (let ((result (cl-sort '(3 1 4 1 5 9 2 6 5 3 5) '<))) 464 (let ((result (cl-sort (list 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)))) 465 (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) '>))) 466 (let ((result (cl-sort (list 5 3 2 8 1 4) #'>)))
494 (should (equal result '(8 5 4 3 2 1)))) 467 (should (equal result '(8 5 4 3 2 1))))
495 (let ((result (cl-sort '("banana" "apple" "cherry") 'string<))) 468 (let ((result (cl-sort (list "banana" "apple" "cherry") #'string<)))
496 (should (equal result '("apple" "banana" "cherry")))) 469 (should (equal result '("apple" "banana" "cherry"))))
497 (let ((result (cl-sort '("banana" "fig" "apple" "kiwi") (lambda (x y) (< (length x) (length y))) :key 'identity))) 470 (let ((result (cl-sort (list "banana" "fig" "apple" "kiwi")
471 (lambda (x y) (length< x (length y)))
472 :key #'identity)))
498 (should (equal result '("fig" "kiwi" "apple" "banana")))) 473 (should (equal result '("fig" "kiwi" "apple" "banana"))))
499 (let ((result (cl-sort (vector 3 1 4 1 5) '<))) 474 (let ((result (cl-sort (vector 3 1 4 1 5) #'<)))
500 (should (equal result (vector 1 1 3 4 5)))) 475 (should (equal result [1 1 3 4 5])))
501 (let ((result (cl-sort '(1 2 3 4 5) '<))) 476 (let ((result (cl-sort (list 1 2 3 4 5) #'<)))
502 (should (equal result '(1 2 3 4 5)))) 477 (should (equal result '(1 2 3 4 5))))
503 (let ((result (cl-sort '(-3 1 4 -1 -5 9) '<))) 478 (let ((result (cl-sort (list -3 1 4 -1 -5 9) #'<)))
504 (should (equal result '(-5 -3 -1 1 4 9)))) 479 (should (equal result '(-5 -3 -1 1 4 9))))
505 (let ((result (cl-sort '(1 2 3 4 5) (lambda (x y) (> x y))))) 480 (let ((result (cl-sort (list 1 2 3 4 5) #'>)))
506 (should (equal result '(5 4 3 2 1)))) 481 (should (equal result '(5 4 3 2 1))))
507 (let ((result (cl-sort '() '<))) 482 (let ((result (cl-sort '() #'<)))
508 (should (equal result '()))) 483 (should (equal result '())))
509 (let ((result (cl-sort '("Banana" "apple" "cherry") 'string< :key 'downcase))) 484 (let ((result (cl-sort (list "Banana" "apple" "cherry")
485 #'string< :key #'downcase)))
510 (should (equal result '("apple" "Banana" "cherry")))) ) 486 (should (equal result '("apple" "Banana" "cherry")))) )
511 487
512(ert-deftest cl-stable-sort-test () 488(ert-deftest cl-stable-sort-test ()
513 (let ((result (cl-stable-sort '(3 1 4 1 5 9 2 6 5 3 5) '<))) 489 (let ((result (cl-stable-sort (list 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)))) 490 (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) '>))) 491 (let ((result (cl-stable-sort (list 5 3 2 8 1 4) #'>)))
516 (should (equal result '(8 5 4 3 2 1)))) 492 (should (equal result '(8 5 4 3 2 1))))
517 (let ((result (cl-stable-sort '("banana" "apple" "cherry") 'string<))) 493 (let ((result (cl-stable-sort (list "banana" "apple" "cherry") #'string<)))
518 (should (equal result '("apple" "banana" "cherry")))) 494 (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))) 495 (let ((result (cl-stable-sort (list "banana" "fig" "apple" "kiwi")
496 (lambda (x y) (length< x (length y)))
497 :key #'identity)))
520 (should (equal result '("fig" "kiwi" "apple" "banana")))) 498 (should (equal result '("fig" "kiwi" "apple" "banana"))))
521 (let ((result (cl-stable-sort (vector 3 1 4 1 5) '<))) 499 (let ((result (cl-stable-sort (vector 3 1 4 1 5) #'<)))
522 (should (equal result (vector 1 1 3 4 5)))) 500 (should (equal result [1 1 3 4 5])))
523 (let ((result (cl-stable-sort '(1 2 3 4 5) '<))) 501 (let ((result (cl-stable-sort (list 1 2 3 4 5) #'<)))
524 (should (equal result '(1 2 3 4 5)))) 502 (should (equal result '(1 2 3 4 5))))
525 (let ((result (cl-stable-sort '(-3 1 4 -1 -5 9) '<))) 503 (let ((result (cl-stable-sort (list -3 1 4 -1 -5 9) #'<)))
526 (should (equal result '(-5 -3 -1 1 4 9)))) 504 (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))))) 505 (let ((result (cl-stable-sort (list 1 2 3 4 5) #'>)))
528 (should (equal result '(5 4 3 2 1)))) 506 (should (equal result '(5 4 3 2 1))))
529 (let ((result (cl-stable-sort '() '<))) 507 (let ((result (cl-stable-sort '() #'<)))
530 (should (equal result '()))) 508 (should (equal result '())))
531 (let ((result (cl-stable-sort '("Banana" "apple" "cherry") 'string< :key 'downcase))) 509 (let ((result (cl-stable-sort (list "Banana" "apple" "cherry")
510 #'string< :key #'downcase)))
532 (should (equal result '("apple" "Banana" "cherry")))) ) 511 (should (equal result '("apple" "Banana" "cherry")))) )
533 512
534(ert-deftest cl-merge-test () 513(ert-deftest cl-merge-test ()
535 (let ((result (cl-merge 'list '(1 3 5) '(2 4 6) '<))) 514 (let ((result (cl-merge 'list (list 1 3 5) (list 2 4 6) #'<)))
536 (should (equal result '(1 2 3 4 5 6)))) 515 (should (equal result '(1 2 3 4 5 6))))
537 (let ((result (cl-merge 'list '(1 3 3 5) '(2 3 4 6) '<))) 516 (let ((result (cl-merge 'list (list 1 3 3 5) (list 2 3 4 6) #'<)))
538 (should (equal result '(1 2 3 3 3 4 5 6)))) 517 (should (equal result '(1 2 3 3 3 4 5 6))))
539 (let ((result (cl-merge 'list '() '(2 4 6) '<))) 518 (let ((result (cl-merge 'list '() (list 2 4 6) #'<)))
540 (should (equal result '(2 4 6)))) 519 (should (equal result '(2 4 6))))
541 (let ((result (cl-merge 'list '(1 3 5) '() '<))) 520 (let ((result (cl-merge 'list (list 1 3 5) '() #'<)))
542 (should (equal result '(1 3 5)))) 521 (should (equal result '(1 3 5))))
543 (let ((result (cl-merge 'list '() '() '<))) 522 (let ((result (cl-merge 'list '() '() #'<)))
544 (should (equal result '()))) 523 (should (equal result '())))
545 (let ((result (cl-merge 'list '(1 4 6) '(2 3 5) '< :key (lambda (x) x)))) 524 (let ((result (cl-merge 'list (list 1 4 6) (list 2 3 5) #'< :key #'identity)))
546 (should (equal result '(1 2 3 4 5 6)))) 525 (should (equal result '(1 2 3 4 5 6))))
547 (let ((result (cl-merge 'vector (vector 1 3 5) (vector 2 4 6) '<))) 526 (let ((result (cl-merge 'vector (vector 1 3 5) (vector 2 4 6) #'<)))
548 (should (equal result (vector 1 2 3 4 5 6)))) 527 (should (equal result [1 2 3 4 5 6])))
549 (let ((result (cl-merge 'list '(5 3 1) '(6 4 2) '>))) 528 (let ((result (cl-merge 'list (list 5 3 1) (list 6 4 2) #'>)))
550 (should (equal result '(6 5 4 3 2 1)))) 529 (should (equal result '(6 5 4 3 2 1))))
551 (let ((result (cl-merge 'list '(1 2 3) '(1 2 3) '>))) 530 (let ((result (cl-merge 'list (list 1 2 3) (list 1 2 3) #'>)))
552 (should (equal result '(1 2 3 1 2 3)))) 531 (should (equal result '(1 2 3 1 2 3))))
553 (let ((result (cl-merge 'list '(1 2) '(3 4 5) '<))) 532 (let ((result (cl-merge 'list (list 1 2) (list 3 4 5) #'<)))
554 (should (equal result '(1 2 3 4 5)))) 533 (should (equal result '(1 2 3 4 5))))
555 (let ((result (cl-merge 'list '(4 5 6) '(1 2 3) '<))) 534 (let ((result (cl-merge 'list (list 4 5 6) (list 1 2 3) #'<)))
556 (should (equal result '(1 2 3 4 5 6)))) 535 (should (equal result '(1 2 3 4 5 6))))
557 (let ((result (cl-merge 'list '(1 2 3) '(1.5 2.5 3.5) '<))) 536 (let ((result (cl-merge 'list (list 1 2 3) (list 1.5 2.5 3.5) #'<)))
558 (should (equal result '(1 1.5 2 2.5 3 3.5)))) 537 (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))))) 538 (let ((result (cl-merge 'list (list 1 2 3) (list 10 20 30)
539 #'< :key (lambda (x) (* x 10)))))
560 (should (equal result '(1 2 3 10 20 30))))) 540 (should (equal result '(1 2 3 10 20 30)))))
561 541
562(ert-deftest cl-member-test () 542(ert-deftest cl-member-test ()
@@ -566,45 +546,49 @@ Body are forms defining the test."
566 (should (equal result nil))) 546 (should (equal result nil)))
567 (let ((result (cl-member 'a '(a b a c d)))) 547 (let ((result (cl-member 'a '(a b a c d))))
568 (should (equal result '(a b a c d)))) 548 (should (equal result '(a b a c d))))
569 (let ((result (cl-member "test" '("test" "not-test" "test2") :test 'string=))) 549 (let ((result (cl-member "test" '("test" "not-test" "test2") :test #'string=)))
570 (should (equal result '("test" "not-test" "test2")))) 550 (should (equal result '("test" "not-test" "test2"))))
571 (let ((result (cl-member 'x '(a b c d) :test-not 'eq))) 551 (let ((result (cl-member 'x '(a b c d) :test-not #'eq)))
572 (should (equal result '(a b c d)))) 552 (should (equal result '(a b c d))))
573 (let ((result (cl-member 3 '(1 2 3 4 5) :key 'identity))) 553 (let ((result (cl-member 3 '(1 2 3 4 5) :key #'identity)))
574 (should (equal result '(3 4 5)))) 554 (should (equal result '(3 4 5))))
575 (let ((result (cl-member 2.5 '(1 2 2.5 3) :test 'equal))) 555 (let ((result (cl-member 2.5 '(1 2 2.5 3) :test #'equal)))
576 (should (equal result '(2.5 3)))) 556 (should (equal result '(2.5 3))))
577 (let ((result (cl-member 'a '(a a a a) :test 'eq))) 557 (let ((result (cl-member 'a '(a a a a) :test #'eq)))
578 (should (equal result '(a a a a)))) 558 (should (equal result '(a a a a))))
579 (let ((result (cl-member 'a '()))) 559 (let ((result (cl-member 'a '())))
580 (should (equal result nil))) 560 (should (equal result nil)))
581 (let ((result (cl-member 'b '(a c d) :test-not 'eq))) 561 (let ((result (cl-member 'b '(a c d) :test-not #'eq)))
582 (should (equal result '(a c d)))) 562 (should (equal result '(a c d))))
583 (let ((result (cl-member 3 '(1 2 3 4 5) :key '1+))) 563 (let ((result (cl-member 3 '(1 2 3 4 5) :key #'1+)))
584 (should (equal result '(2 3 4 5))))) 564 (should (equal result '(2 3 4 5)))))
585 565
586(ert-deftest cl-member-if-test () 566(ert-deftest cl-member-if-test ()
587 (let ((result (cl-member-if #'cl-evenp '(1 2 3 4 5)))) 567 (let ((result (cl-member-if #'cl-evenp '(1 2 3 4 5))))
588 (should (equal result '(2 3 4 5)))) 568 (should (equal result '(2 3 4 5))))
589 (let ((result (cl-member-if #'(lambda (x) nil) '(1 2 3 4 5)))) 569 (let ((result (cl-member-if #'ignore '(1 2 3 4 5))))
590 (should (equal result nil))) 570 (should (equal result nil)))
591 (let ((result (cl-member-if #'(lambda (x) t) '(1 2 3 4 5)))) 571 (let ((result (cl-member-if #'always '(1 2 3 4 5))))
592 (should (equal result '(1 2 3 4 5)))) 572 (should (equal result '(1 2 3 4 5))))
593 (let ((result (cl-member-if #'(lambda (x) (= x 1)) '(1 2 3 4 5)))) 573 (let ((result (cl-member-if (lambda (x) (= x 1)) '(1 2 3 4 5))))
594 (should (equal result '(1 2 3 4 5)))) 574 (should (equal result '(1 2 3 4 5))))
595 (let ((result (cl-member-if #'(lambda (x) (and (numberp x) (cl-evenp x))) '(1 3 5 4 2)))) 575 (let ((result (cl-member-if (lambda (x) (and (numberp x) (cl-evenp x)))
576 '(1 3 5 4 2))))
596 (should (equal result '(4 2)))) 577 (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))) 578 (let ((result (cl-member-if (lambda (x) (string= (number-to-string x) "3"))
579 '(1 2 3 4 5) :key #'identity)))
598 (should (equal result '(3 4 5)))) 580 (should (equal result '(3 4 5))))
599 (let ((result (cl-member-if #'(lambda (x) (eq x 'a)) '(a a a a)))) 581 (let ((result (cl-member-if (lambda (x) (eq x 'a)) '(a a a a))))
600 (should (equal result '(a a a a)))) 582 (should (equal result '(a a a a))))
601 (let ((result (cl-member-if #'cl-evenp '()))) 583 (let ((result (cl-member-if #'cl-evenp '())))
602 (should (equal result nil))) 584 (should (equal result nil)))
603 (let ((result (cl-member-if #'(lambda (x) (< x 0)) '(1 2 3 4 5)))) 585 (let ((result (cl-member-if #'cl-minusp '(1 2 3 4 5))))
604 (should (equal result nil))) 586 (should (equal result nil)))
605 (let ((result (cl-member-if (lambda (x) (and (numberp x) (<= x 2))) '(1 "two" 3 0)))) 587 (let ((result (cl-member-if (lambda (x) (and (numberp x) (<= x 2)))
588 '(1 "two" 3 0))))
606 (should (equal result '(1 "two" 3 0)))) 589 (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))) 590 (let ((result (cl-member-if (lambda (x) (> x 5)) '(1 2 3 6 7 8)
591 :key #'identity)))
608 (should (equal result '(6 7 8))))) 592 (should (equal result '(6 7 8)))))
609 593
610(ert-deftest cl-member-if-not-test () 594(ert-deftest cl-member-if-not-test ()
@@ -612,23 +596,27 @@ Body are forms defining the test."
612 (should (equal result '(1 2 3 4 5)))) 596 (should (equal result '(1 2 3 4 5))))
613 (let ((result (cl-member-if-not #'cl-evenp '(2 4 6 8 10 11)))) 597 (let ((result (cl-member-if-not #'cl-evenp '(2 4 6 8 10 11))))
614 (should (equal result '(11)))) 598 (should (equal result '(11))))
615 (let ((result (cl-member-if-not #'(lambda (x) (> x 5)) '(1 2 3 4 5)))) 599 (let ((result (cl-member-if-not (lambda (x) (> x 5)) '(1 2 3 4 5))))
616 (should (equal result '(1 2 3 4 5)))) 600 (should (equal result '(1 2 3 4 5))))
617 (let ((result (cl-member-if-not #'(lambda (x) t) '(1 2 3 4 5)))) 601 (let ((result (cl-member-if-not #'always '(1 2 3 4 5))))
618 (should (equal result nil))) 602 (should (equal result nil)))
619 (let ((result (cl-member-if-not #'(lambda (x) (= x 1)) '(1 2 3 4 5)))) 603 (let ((result (cl-member-if-not (lambda (x) (= x 1)) '(1 2 3 4 5))))
620 (should (equal result '(2 3 4 5)))) 604 (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))) 605 (let ((result (cl-member-if-not (lambda (x) (string= (number-to-string x) "2"))
606 '(1 2 3 4 5) :key #'identity)))
622 (should (equal result '(1 2 3 4 5)))) 607 (should (equal result '(1 2 3 4 5))))
623 (let ((result (cl-member-if-not #'cl-evenp '()))) 608 (let ((result (cl-member-if-not #'cl-evenp '())))
624 (should (equal result nil))) 609 (should (equal result nil)))
625 (let ((result (cl-member-if-not #'(lambda (x) (eq x 'a)) '(a a a a)))) 610 (let ((result (cl-member-if-not (lambda (x) (eq x 'a)) '(a a a a))))
626 (should (equal result nil))) 611 (should (equal result nil)))
627 (let ((result (cl-member-if-not #'(lambda (x) (< x 0)) '(1 2 3 4 5)))) 612 (let ((result (cl-member-if-not #'cl-minusp '(1 2 3 4 5))))
628 (should (equal result '(1 2 3 4 5)))) 613 (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)))) 614 (let ((result (cl-member-if-not
615 (lambda (x) (or (numberp x) (stringp x) (eq x 'b)))
616 '(a "b" 3 nil))))
630 (should (equal result '(a "b" 3 nil)))) 617 (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))) 618 (let ((result (cl-member-if-not #'numberp '(1 "two" 3 "four" 5)
619 :key #'identity)))
632 (should (equal result '("two" 3 "four" 5))))) 620 (should (equal result '("two" 3 "four" 5)))))
633 621
634(ert-deftest cl-assoc-test () 622(ert-deftest cl-assoc-test ()
@@ -636,13 +624,13 @@ Body are forms defining the test."
636 (should (equal result '(b . 2)))) 624 (should (equal result '(b . 2))))
637 (let ((result (cl-assoc 'x '((a . 1) (b . 2) (c . 3))))) 625 (let ((result (cl-assoc 'x '((a . 1) (b . 2) (c . 3)))))
638 (should (equal result nil))) 626 (should (equal result nil)))
639 (let ((result (cl-assoc "key" '(("key" . 1) ("not-key" . 2)) :test 'string=))) 627 (let ((result (cl-assoc "key" '(("key" . 1) ("not-key" . 2)) :test #'string=)))
640 (should (equal result '("key" . 1)))) 628 (should (equal result '("key" . 1))))
641 (let ((result (cl-assoc 'a '((a . 1) (b . 2) (c . 3)) :test-not 'eq))) 629 (let ((result (cl-assoc 'a '((a . 1) (b . 2) (c . 3)) :test-not #'eq)))
642 (should (equal result '(b . 2)))) 630 (should (equal result '(b . 2))))
643 (let ((result (cl-assoc '2 '((1 . 'a) (2 . 'b) (3 . 'c)) :key 'identity))) 631 (let ((result (cl-assoc '2 '((1 . 'a) (2 . 'b) (3 . 'c)) :key #'identity)))
644 (should (equal result '(2 . 'b)))) 632 (should (equal result '(2 . 'b))))
645 (let ((result (cl-assoc 'a '((a . 1) (a . 2) (a . 3)) :test 'eq))) 633 (let ((result (cl-assoc 'a '((a . 1) (a . 2) (a . 3)) :test #'eq)))
646 (should (equal result '(a . 1)))) 634 (should (equal result '(a . 1))))
647 (let ((result (cl-assoc 'a '()))) 635 (let ((result (cl-assoc 'a '())))
648 (should (equal result nil))) 636 (should (equal result nil)))
@@ -650,105 +638,142 @@ Body are forms defining the test."
650 (should (equal result '(b . 2))))) 638 (should (equal result '(b . 2)))))
651 639
652(ert-deftest cl-assoc-if-test () 640(ert-deftest cl-assoc-if-test ()
653 (let ((result (cl-assoc-if #'cl-evenp '((1 . "odd") (2 . "even") (3 . "odd") (4 . "even"))))) 641 (let ((result (cl-assoc-if #'cl-evenp
642 '((1 . "odd") (2 . "even") (3 . "odd") (4 . "even")))))
654 (should (equal result '(2 . "even")))) 643 (should (equal result '(2 . "even"))))
655 (let ((result (cl-assoc-if #'(lambda (x) (= x 5)) '((1 . "one") (2 . "two") (3 . "three"))))) 644 (let ((result (cl-assoc-if (lambda (x) (= x 5))
645 '((1 . "one") (2 . "two") (3 . "three")))))
656 (should (equal result nil))) 646 (should (equal result nil)))
657 (let ((result (cl-assoc-if #'(lambda (x) (= x 1)) '((1 . "one") (2 . "two") (3 . "three"))))) 647 (let ((result (cl-assoc-if (lambda (x) (= x 1))
648 '((1 . "one") (2 . "two") (3 . "three")))))
658 (should (equal result '(1 . "one")))) 649 (should (equal result '(1 . "one"))))
659 (let ((result (cl-assoc-if #'(lambda (x) (string= x "baz")) '((foo . 1) (bar . 2) (baz . 3))))) 650 (let ((result (cl-assoc-if (lambda (x) (string= x "baz"))
651 '((foo . 1) (bar . 2) (baz . 3)))))
660 (should (equal result '(baz . 3)))) 652 (should (equal result '(baz . 3))))
661 (let ((result (cl-assoc-if (lambda (x) (and (numberp x) (> x 2))) '((1 . "one") (3 . "three") (4 . "four"))))) 653 (let ((result (cl-assoc-if (lambda (x) (and (numberp x) (> x 2)))
654 '((1 . "one") (3 . "three") (4 . "four")))))
662 (should (equal result '(3 . "three")))) 655 (should (equal result '(3 . "three"))))
663 (let ((result (cl-assoc-if #'(lambda (x) (> x 1)) '((0 . "zero") (1 . "one") (2 . "two"))))) 656 (let ((result (cl-assoc-if (lambda (x) (> x 1))
657 '((0 . "zero") (1 . "one") (2 . "two")))))
664 (should (equal result '(2 . "two")))) 658 (should (equal result '(2 . "two"))))
665 (let ((result (cl-assoc-if #'cl-evenp '()))) 659 (let ((result (cl-assoc-if #'cl-evenp '())))
666 (should (equal result nil))) 660 (should (equal result nil)))
667 (let ((result (cl-assoc-if #'(lambda (x) (eq x 'a)) '((a . "first") (a . "second") (b . "third"))))) 661 (let ((result (cl-assoc-if (lambda (x) (eq x 'a))
662 '((a . "first") (a . "second") (b . "third")))))
668 (should (equal result '(a . "first")))) 663 (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"))))) 664 (let ((result (cl-assoc-if (lambda (x) (and (symbolp x) (not (eq x 'b))))
665 '((b . "b") (c . "c") (d . "d")))))
670 (should (equal result '(c . "c")))) 666 (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"))))) 667 (let ((result (cl-assoc-if #'cdr '(((1 2) . "pair 1") ((1) . "pair 2")))))
672 (should (equal result '((1 2) . "pair 1"))))) 668 (should (equal result '((1 2) . "pair 1")))))
673 669
674(ert-deftest cl-assoc-if-not-test () 670(ert-deftest cl-assoc-if-not-test ()
675 (let ((result (cl-assoc-if-not #'cl-evenp '((1 . "odd") (2 . "even") (3 . "odd") (4 . "even"))))) 671 (let* ((alist '((1 . "odd") (2 . "even") (3 . "odd") (4 . "even")))
672 (result (cl-assoc-if-not #'cl-evenp alist)))
676 (should (equal result '(1 . "odd")))) 673 (should (equal result '(1 . "odd"))))
677 (let ((result (cl-assoc-if-not #'(lambda (x) (> x 0)) '((1 . "one") (2 . "two") (3 . "three"))))) 674 (let ((result (cl-assoc-if-not #'cl-plusp
675 '((1 . "one") (2 . "two") (3 . "three")))))
678 (should (equal result nil))) 676 (should (equal result nil)))
679 (let ((result (cl-assoc-if-not #'(lambda (x) (< x 5)) '((1 . "one") (2 . "two") (3 . "three"))))) 677 (let ((result (cl-assoc-if-not (lambda (x) (< x 5))
678 '((1 . "one") (2 . "two") (3 . "three")))))
680 (should (equal result nil))) 679 (should (equal result nil)))
681 (let ((result (cl-assoc-if-not #'(lambda (x) (= x 1)) '((1 . "one") (2 . "two") (3 . "three"))))) 680 (let ((result (cl-assoc-if-not (lambda (x) (= x 1))
681 '((1 . "one") (2 . "two") (3 . "three")))))
682 (should (equal result '(2 . "two")))) 682 (should (equal result '(2 . "two"))))
683 (let ((result (cl-assoc-if-not #'(lambda (x) (string= x "baz")) '((foo . "first") (bar . "second") (baz . "third"))))) 683 (let ((result (cl-assoc-if-not
684 (lambda (x) (string= x "baz"))
685 '((foo . "first") (bar . "second") (baz . "third")))))
684 (should (equal result '(foo . "first")))) 686 (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"))))) 687 (let ((result (cl-assoc-if-not (lambda (x) (and (numberp x) (> x 2)))
688 '((1 . "one") (3 . "three") (4 . "four")))))
686 (should (equal result '(1 . "one")))) 689 (should (equal result '(1 . "one"))))
687 (let ((result (cl-assoc-if-not #'(lambda (x) (symbolp x)) '((1 . "one") (b . "bee") (2 . "two"))))) 690 (let ((result (cl-assoc-if-not #'symbolp
691 '((1 . "one") (b . "bee") (2 . "two")))))
688 (should (equal result '(1 . "one")))) 692 (should (equal result '(1 . "one"))))
689 (let ((result (cl-assoc-if-not #'cl-evenp '()))) 693 (let ((result (cl-assoc-if-not #'cl-evenp '())))
690 (should (equal result nil))) 694 (should (equal result nil)))
691 (let ((result (cl-assoc-if-not #'(lambda (x) (eq x 'a)) '((a . "first") (a . "second") (b . "third"))))) 695 (let ((result (cl-assoc-if-not (lambda (x) (eq x 'a))
696 '((a . "first") (a . "second") (b . "third")))))
692 (should (equal result '(b . "third"))))) 697 (should (equal result '(b . "third")))))
693 698
694(ert-deftest cl-rassoc-test () 699(ert-deftest cl-rassoc-test ()
695 (let ((result (cl-rassoc 2 '(( "one" . 1) ("two" . 2) ("three" . 3))))) 700 (let ((result (cl-rassoc 2 '(("one" . 1) ("two" . 2) ("three" . 3)))))
696 (should (equal result (cons "two" 2)))) 701 (should (equal result '("two" . 2))))
697 (let ((result (cl-rassoc 4 '(( "one" . 1) ("two" . 2) ("three" . 3))))) 702 (let ((result (cl-rassoc 4 '(("one" . 1) ("two" . 2) ("three" . 3)))))
698 (should (equal result nil))) 703 (should (equal result nil)))
699 (let ((result (cl-rassoc 2 '(( "one" . 1) ("two" . 2) ("baz" . 2)) :test 'equal))) 704 (let ((result (cl-rassoc 2 '(("one" . 1) ("two" . 2) ("baz" . 2))
700 (should (equal result (cons "two" 2)))) 705 :test #'equal)))
701 (let ((result (cl-rassoc 2 '(( "one" . 1) ("two" . 2) ("three" . 3)) :test-not 'equal))) 706 (should (equal result '("two" . 2))))
702 (should (equal result (cons "one" 1)))) 707 (let ((result (cl-rassoc 2 '(("one" . 1) ("two" . 2) ("three" . 3))
708 :test-not #'equal)))
709 (should (equal result '("one" . 1))))
703 (let ((result (cl-rassoc 1 '()))) 710 (let ((result (cl-rassoc 1 '())))
704 (should (equal result nil))) 711 (should (equal result nil)))
705 (let ((result (cl-rassoc 1 '(( "first" . 1) ("second" . 1) ("third" . 1))))) 712 (let ((result (cl-rassoc 1 '(("first" . 1) ("second" . 1) ("third" . 1)))))
706 (should (equal result (cons "first" 1)))) 713 (should (equal result '("first" . 1))))
707 (let ((result (cl-rassoc 3 '(( "one" . 1) ("two" . 2) ("three" . 3))))) 714 (let ((result (cl-rassoc 3 '(("one" . 1) ("two" . 2) ("three" . 3)))))
708 (should (equal result (cons "three" 3)))) 715 (should (equal result '("three" . 3))))
709 (let ((result (cl-rassoc 'found '((( "pair 1") . 1) ( "pair 2" . 2) ( "pair 3" . 3))))) 716 (let ((result (cl-rassoc 'found
717 '((("pair 1") . 1) ("pair 2" . 2) ("pair 3" . 3)))))
710 (should (equal result nil)))) 718 (should (equal result nil))))
711 719
712(ert-deftest cl-rassoc-if-test () 720(ert-deftest cl-rassoc-if-test ()
713 (let ((result (cl-rassoc-if #'cl-evenp '(( "one" . 1) ("two" . 2) ("three" . 3))))) 721 (let ((result (cl-rassoc-if #'cl-evenp
722 '(("one" . 1) ("two" . 2) ("three" . 3)))))
714 (should (equal result '("two" . 2)))) 723 (should (equal result '("two" . 2))))
715 (let ((result (cl-rassoc-if #'cl-evenp '(( "one" . 1) ("three" . 3) ("five" . 5))))) 724 (let ((result (cl-rassoc-if #'cl-evenp
725 '(("one" . 1) ("three" . 3) ("five" . 5)))))
716 (should (equal result nil))) 726 (should (equal result nil)))
717 (let ((result (cl-rassoc-if #'(lambda (x) (= x 1)) '(( "one" . 1) ("two" . 2) ("three" . 3))))) 727 (let ((result (cl-rassoc-if (lambda (x) (= x 1))
728 '(("one" . 1) ("two" . 2) ("three" . 3)))))
718 (should (equal result '("one" . 1)))) 729 (should (equal result '("one" . 1))))
719 (let ((result (cl-rassoc-if (lambda (x) (> x 1)) '(( "one" . 1) ("two" . 2) ("three" . 3))))) 730 (let ((result (cl-rassoc-if (lambda (x) (> x 1))
731 '(("one" . 1) ("two" . 2) ("three" . 3)))))
720 (should (equal result '("two" . 2)))) 732 (should (equal result '("two" . 2))))
721 (let ((result (cl-rassoc-if #'(lambda (x) (and (numberp x) (< x 3))) '(( "one" . 1) ("two" . 2) ("three" . 3))))) 733 (let ((result (cl-rassoc-if (lambda (x) (and (numberp x) (< x 3)))
734 '(("one" . 1) ("two" . 2) ("three" . 3)))))
722 (should (equal result '("one" . 1)))) 735 (should (equal result '("one" . 1))))
723 (let ((result (cl-rassoc-if #'cl-evenp '()))) 736 (let ((result (cl-rassoc-if #'cl-evenp '())))
724 (should (equal result nil))) 737 (should (equal result nil)))
725 (let ((result (cl-rassoc-if #'(lambda (x) (> x 0)) '(( "first" . 1) ("second" . 2) ("third" . 3))))) 738 (let ((result (cl-rassoc-if #'cl-plusp
739 '(("first" . 1) ("second" . 2) ("third" . 3)))))
726 (should (equal result '("first" . 1)))) 740 (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))))) 741 (let ((result (cl-rassoc-if (lambda (x) (string= (number-to-string x) "two"))
742 '(("one" . 1) ("two" . 2) ("three" . 3)))))
728 (should (equal result nil))) 743 (should (equal result nil)))
729 (let ((result (cl-rassoc-if #'(lambda (x) (stringp x)) '(( "one" . 1) ("two" . 2) ("three" . 3))))) 744 (let ((result (cl-rassoc-if #'stringp
745 '(("one" . 1) ("two" . 2) ("three" . 3)))))
730 (should (equal result nil)))) 746 (should (equal result nil))))
731 747
732(ert-deftest cl-rassoc-if-not-test () 748(ert-deftest cl-rassoc-if-not-test ()
733 (let ((result (cl-rassoc-if-not #'cl-evenp '(( "one" . 1) ("two" . 2) ("three" . 3))))) 749 (let ((result (cl-rassoc-if-not #'cl-evenp
750 '(("one" . 1) ("two" . 2) ("three" . 3)))))
734 (should (equal result '("one" . 1)))) 751 (should (equal result '("one" . 1))))
735 (let ((result (cl-rassoc-if-not #'(lambda (x) (> x 0)) '(( "one" . 1) ("two" . 2) ("three" . 3))))) 752 (let ((result (cl-rassoc-if-not #'cl-plusp
753 '(("one" . 1) ("two" . 2) ("three" . 3)))))
736 (should (equal result nil))) 754 (should (equal result nil)))
737 (let ((result (cl-rassoc-if-not #'(lambda (x) (< x 5)) '(( "one" . 1) ("two" . 2) ("six" . 6))))) 755 (let ((result (cl-rassoc-if-not (lambda (x) (< x 5))
738 (should (equal result '( "six" . 6)))) 756 '(("one" . 1) ("two" . 2) ("six" . 6)))))
739 (let ((result (cl-rassoc-if-not #'(lambda (x) (= x 1)) '(( "one" . 1) ("two" . 2) ("three" . 3))))) 757 (should (equal result '("six" . 6))))
758 (let ((result (cl-rassoc-if-not (lambda (x) (= x 1))
759 '(("one" . 1) ("two" . 2) ("three" . 3)))))
740 (should (equal result '("two" . 2)))) 760 (should (equal result '("two" . 2))))
741 (let ((result (cl-rassoc-if-not #'(lambda (x) (> x 2)) '(( "one" . 1) ("two" . 1) ("three" . 3))))) 761 (let ((result (cl-rassoc-if-not (lambda (x) (> x 2))
762 '(("one" . 1) ("two" . 1) ("three" . 3)))))
742 (should (equal result '("one" . 1)))) 763 (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))))) 764 (let ((result (cl-rassoc-if-not (lambda (x) (and (numberp x) (< x 3)))
765 '(("one" . 1) ("two" . 2) ("three" . 3)))))
744 (should (equal result '("three" . 3)))) 766 (should (equal result '("three" . 3))))
745 (let ((result (cl-rassoc-if-not #'(lambda (x) (equal x 2)) '(( "one" . 1) ("two" . 2) ("three" . 3))))) 767 (let ((result (cl-rassoc-if-not (lambda (x) (equal x 2))
768 '(("one" . 1) ("two" . 2) ("three" . 3)))))
746 (should (equal result '("one" . 1)))) 769 (should (equal result '("one" . 1))))
747 (let ((result (cl-rassoc-if-not #'cl-evenp '()))) 770 (let ((result (cl-rassoc-if-not #'cl-evenp '())))
748 (should (equal result nil))) 771 (should (equal result nil)))
749 (let ((result (cl-rassoc-if-not #'(lambda (x) (numberp x)) '(( "one" . 1) ("two" . 2) ("three" . 3))))) 772 (let ((result (cl-rassoc-if-not #'numberp
773 '(("one" . 1) ("two" . 2) ("three" . 3)))))
750 (should (equal result nil))) 774 (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))))) 775 (let ((result (cl-rassoc-if-not (lambda (x) (eql (proper-list-p x) 1))
776 '(((1 2) . 1) ((3 4) . 2) ((5) . 2)))))
752 (should (equal result '((1 2) . 1))))) 777 (should (equal result '((1 2) . 1)))))
753 778
754(ert-deftest cl-intersection-test () 779(ert-deftest cl-intersection-test ()
@@ -760,9 +785,9 @@ Body are forms defining the test."
760 (should (equal result '(1 2 3)))) 785 (should (equal result '(1 2 3))))
761 (let ((result (cl-intersection '(1 1 2 3) '(1 2 2 3 4)))) 786 (let ((result (cl-intersection '(1 1 2 3) '(1 2 2 3 4))))
762 (should (equal result '(3 2 1 1)))) 787 (should (equal result '(3 2 1 1))))
763 (let ((result (cl-intersection '(1 "two" 3) '(3 "two" 4)))) 788 (let ((result (cl-intersection `(1 ,(copy-sequence "two") 3) '(3 "two" 4))))
764 (should (equal result '(3)))) 789 (should (equal result '(3))))
765 (let ((result (cl-intersection '(1 2 3) '(3 2 1) :test 'equal))) 790 (let ((result (cl-intersection '(1 2 3) '(3 2 1) :test #'equal)))
766 (should (equal result '(1 2 3)))) 791 (should (equal result '(1 2 3))))
767 (let ((result (cl-intersection '(1 2 3) '(3 4 5) :key #'identity))) 792 (let ((result (cl-intersection '(1 2 3) '(3 4 5) :key #'identity)))
768 (should (equal result '(3)))) 793 (should (equal result '(3))))
@@ -774,52 +799,20 @@ Body are forms defining the test."
774 (should (equal result '(5 4 3))))) 799 (should (equal result '(5 4 3)))))
775 800
776(ert-deftest cl-nintersection-test () 801(ert-deftest cl-nintersection-test ()
777 (let ((list1 '(1 2 3 4)) 802 (should-not (cl-nintersection () ()))
778 (list2 '(3 4 5 6))) 803 (should-not (cl-nintersection () (list 1 2 3)))
779 (let ((result (cl-nintersection list1 list2))) 804 (should-not (cl-nintersection (list 1 2) (list 3 4)))
780 (should (equal result '(4 3))) 805 (should (equal (cl-nintersection (list 1 2 3 4) (list 3 4 5 6))
781 (should (equal list1 '(1 2 3 4))) 806 '(4 3)))
782 (should (equal list2 '(3 4 5 6))))) 807 (should (equal (cl-nintersection (list 1 2 3) (list 1 2 3))
783 (let ((list1 '(1 2)) 808 '(1 2 3)))
784 (list2 '(3 4))) 809 (should (equal (cl-nintersection (list 1 1 2 2 3) (list 2 2 3 4))
785 (let ((result (cl-nintersection list1 list2))) 810 '(3 2 2)))
786 (should (equal result '())) 811 (should (equal (cl-nintersection (list 1 (copy-sequence "two") 3)
787 (should (equal list1 '(1 2))) 812 (list 3 "two" 4))
788 (should (equal list2 '(3 4))))) 813 '(3)))
789 (let ((list1 '(1 2 3)) 814 (should (equal (cl-nintersection (list 1 2 3) (list 3 2 1) :test #'equal)
790 (list2 '(1 2 3))) 815 '(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 816
824(ert-deftest cl-set-difference-test () 817(ert-deftest cl-set-difference-test ()
825 (let ((result (cl-set-difference '(1 2 3 4) '(3 4 5 6)))) 818 (let ((result (cl-set-difference '(1 2 3 4) '(3 4 5 6))))
@@ -832,11 +825,11 @@ Body are forms defining the test."
832 (should (equal result '(1 1 2)))) 825 (should (equal result '(1 1 2))))
833 (let ((result (cl-set-difference '(1 2 3) '(3 2 4)))) 826 (let ((result (cl-set-difference '(1 2 3) '(3 2 4))))
834 (should (equal result '(1)))) 827 (should (equal result '(1))))
835 (let ((result (cl-set-difference '(1 2 3) '(3 2 1) :test 'equal))) 828 (let ((result (cl-set-difference '(1 2 3) '(3 2 1) :test #'equal)))
836 (should (equal result '()))) 829 (should (equal result '())))
837 (let ((result (cl-set-difference '((1 . "one") (2 . "two") (3 . "three")) 830 (let ((result (cl-set-difference '((1 . "one") (2 . "two") (3 . "three"))
838 '((1 . "uno") (2 . "dos")) 831 '((1 . "uno") (2 . "dos"))
839 :key 'car))) 832 :key #'car)))
840 (should (equal result '((3 . "three"))))) 833 (should (equal result '((3 . "three")))))
841 (let ((result (cl-set-difference '() '(1 2 3)))) 834 (let ((result (cl-set-difference '() '(1 2 3))))
842 (should (equal result '()))) 835 (should (equal result '())))
@@ -844,65 +837,29 @@ Body are forms defining the test."
844 (should (equal result '(1 2 3)))) 837 (should (equal result '(1 2 3))))
845 (let ((result (cl-set-difference '(1 2 3 4 5) '(3 4 5 6 7)))) 838 (let ((result (cl-set-difference '(1 2 3 4 5) '(3 4 5 6 7))))
846 (should (equal result '(1 2)))) 839 (should (equal result '(1 2))))
847 (let ((list1 '(1 2 3)) 840 (let ((list1 (list 1 2 3))
848 (list2 '(2 3 4))) 841 (list2 (list 2 3 4)))
849 (cl-set-difference list1 list2) 842 (should (equal (cl-set-difference list1 list2) '(1)))
850 (should (equal list1 '(1 2 3))) 843 (should (equal list1 '(1 2 3)))
851 (should (equal list2 '(2 3 4))))) 844 (should (equal list2 '(2 3 4)))))
852 845
853(ert-deftest cl-nset-difference-test () 846(ert-deftest cl-nset-difference-test ()
854 (let ((list1 '(1 2 3 4)) 847 (should-not (cl-nset-difference () ()))
855 (list2 '(3 4 5 6))) 848 (should-not (cl-nset-difference () (list 1 2 3)))
856 (let ((result (cl-nset-difference list1 list2))) 849 (should-not (cl-nset-difference (list 1 2 3) (list 1 2 3)))
857 (should (equal result '(1 2))) 850 (should-not (cl-nset-difference (list 1 2 3) (list 3 2 1) :test #'equal))
858 (should (equal list1 '(1 2 3 4))) 851 (should (equal (cl-nset-difference (list 1 2 3) ())
859 (should (equal list2 '(3 4 5 6))))) 852 '(1 2 3)))
860 (let ((list1 '(1 2 3)) 853 (should (equal (cl-nset-difference (list 1 2 3 4) (list 3 4 5 6))
861 (list2 '())) 854 '(1 2)))
862 (let ((result (cl-nset-difference list1 list2))) 855 (should (equal (cl-nset-difference (list 1 1 2 2 3) (list 3 4 5))
863 (should (equal result '(1 2 3))) 856 '(1 1 2 2)))
864 (should (equal list1 '(1 2 3))) 857 (should (equal (cl-nset-difference (list 1 2 3) (list 3 2 4))
865 (should (equal list2 '())))) 858 '(1)))
866 (let ((list1 '(1 2 3)) 859 (should (equal (cl-nset-difference (list 1 2 3 4 5) (list 3 4 5 6 7))
867 (list2 '(1 2 3))) 860 '(1 2)))
868 (let ((result (cl-nset-difference list1 list2))) 861 (should (equal (cl-nset-difference (list 1 (copy-sequence "a")) (list 1 "a"))
869 (should (equal result '())) 862 '("a"))))
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 863
907(ert-deftest cl-set-exclusive-or-test () 864(ert-deftest cl-set-exclusive-or-test ()
908 (let ((result (cl-set-exclusive-or '(1 2 3) '(3 4 5)))) 865 (let ((result (cl-set-exclusive-or '(1 2 3) '(3 4 5))))
@@ -919,104 +876,51 @@ Body are forms defining the test."
919 (should (equal result '(1 2 4 5)))) 876 (should (equal result '(1 2 4 5))))
920 (let ((result (cl-set-exclusive-or '(1 2 3) '(3 2 4)))) 877 (let ((result (cl-set-exclusive-or '(1 2 3) '(3 2 4))))
921 (should (equal result '(1 4)))) 878 (should (equal result '(1 4))))
922 (let ((result (cl-set-exclusive-or '(1 2 3) '(3 2 1) :test 'equal))) 879 (let ((result (cl-set-exclusive-or '(1 2 3) '(3 2 1) :test #'equal)))
923 (should (equal result '()))) 880 (should (equal result '())))
924 (let ((result (cl-set-exclusive-or '() '()))) 881 (let ((result (cl-set-exclusive-or '() '())))
925 (should (equal result '()))) 882 (should (equal result '())))
926 (let ((result (cl-set-exclusive-or '(1 2 3 4 5) '(3 4 5 6 7))) 883 (let ((list1 (list 1 2 3 4 5))
927 (list1 '(1 2 3 4 5)) 884 (list2 (list 3 4 5 6 7)))
928 (list2 '(3 4 5 6 7))) 885 (should (equal (cl-set-exclusive-or list1 list2) '(1 2 6 7)))
929 (should (equal result '(1 2 6 7)))
930 (should (equal list1 '(1 2 3 4 5))) 886 (should (equal list1 '(1 2 3 4 5)))
931 (should (equal list2 '(3 4 5 6 7))))) 887 (should (equal list2 '(3 4 5 6 7)))))
932 888
933(ert-deftest cl-nset-exclusive-or-test () 889(ert-deftest cl-nset-exclusive-or-test ()
934 (let ((list1 '(1 2 3)) 890 (should-not (cl-nset-exclusive-or () ()))
935 (list2 '(3 4 5))) 891 (should-not (cl-nset-exclusive-or (list 1 2 3) (list 1 2 3)))
936 (let ((result (cl-nset-exclusive-or list1 list2))) 892 (should-not (cl-nset-exclusive-or (list 1 2 3) (list 3 2 1) :test #'equal))
937 (should (equal result '(1 2 4 5))) 893 (should (equal (cl-nset-exclusive-or (list 1 2 3) (list 3 4 5))
938 (should (equal list1 '(1 2 3))) 894 '(1 2 4 5)))
939 (should (equal list2 '(3 4 5))))) 895 (should (equal (cl-nset-exclusive-or (list 1 2 3) ())
940 (let ((list1 '(1 2 3)) 896 '(1 2 3)))
941 (list2 '())) 897 (should (equal (cl-nset-exclusive-or (list 1 1 2 2 3) (list 3 4 5))
942 (let ((result (cl-nset-exclusive-or list1 list2))) 898 '(1 1 2 2 4 5)))
943 (should (equal result '(1 2 3))) 899 (should (equal (cl-nset-exclusive-or (list 1 2 3) (list 3 3 4 5))
944 (should (equal list1 '(1 2 3))) 900 '(1 2 4 5)))
945 (should (equal list2 '())))) 901 (should (equal (cl-nset-exclusive-or (list 1 2 3) (list 3 2 4))
946 (let ((list1 '(1 2 3)) 902 '(1 4)))
947 (list2 '(1 2 3))) 903 (should (equal (cl-nset-exclusive-or () (list 1 2 3))
948 (let ((result (cl-nset-exclusive-or list1 list2))) 904 '(1 2 3)))
949 (should (equal result nil))) 905 (should (equal (cl-nset-exclusive-or (list 1 2 3 4 5) (list 3 4 5 6 7))
950 (should (equal list1 '(1 2 3))) 906 '(1 2 6 7))))
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 907
993(ert-deftest cl-subsetp-test () 908(ert-deftest cl-subsetp-test ()
994 (let ((result (cl-subsetp '(1 2) '(1 2 3 4)))) 909 (should (cl-subsetp '(1 2) '(1 2 3 4)))
995 (should (equal result t))) 910 (should (cl-subsetp () '(1 2 3 4)))
996 (let ((result (cl-subsetp '() '(1 2 3 4)))) 911 (should-not (cl-subsetp '(1 2) ()))
997 (should (equal result t))) 912 (should (cl-subsetp '(1 2 3) '(1 2 3)))
998 (let ((result (cl-subsetp '(1 2) '()))) 913 (should (cl-subsetp '(1 1 2) '(1 2 3)))
999 (should (equal result nil))) 914 (should (cl-subsetp '(1 2) '(1 1 2 3 4)))
1000 (let ((result (cl-subsetp '(1 2 3) '(1 2 3)))) 915 (should-not (cl-subsetp '(1 "two" 3) '(3 "two" 1)))
1001 (should (equal result t))) 916 (should (cl-subsetp '(1 2) '(2 1) :test #'equal))
1002 (let ((result (cl-subsetp '(1 1 2) '(1 2 3)))) 917 (should (cl-subsetp '((1 . "one") (2 . "two"))
1003 (should (equal result t))) 918 '((1 . "uno") (2 . "dos"))
1004 (let ((result (cl-subsetp '(1 2) '(1 1 2 3 4)))) 919 :key #'car))
1005 (should (equal result t))) 920 (should (cl-subsetp '(1 2) '(3 4 2 1) :test #'eq))
1006 (let ((result (cl-subsetp '(1 "two" 3) '(3 "two" 1)))) 921 (should (cl-subsetp '((1 2) (3)) '((1 2 . "found") (3 . "found")) :key #'car))
1007 (should (equal result nil))) 922 (should (cl-subsetp '(1 2) '(1 2 3 2)))
1008 (let ((result (cl-subsetp '(1 2) '(2 1) :test 'equal))) 923 (should (cl-subsetp () ())))
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 924
1021(provide 'cl-seq-tests) 925(provide 'cl-seq-tests)
1022;;; cl-seq-tests.el ends here 926;;; cl-seq-tests.el ends here