diff options
| author | Ahmed Khanzada | 2025-01-17 09:48:57 -0500 |
|---|---|---|
| committer | Eli Zaretskii | 2025-01-18 13:03:19 +0200 |
| commit | 103ae72ee9f197943265b76590cbad1d6e08a9b5 (patch) | |
| tree | 56a977bac6b0f8c62fadda264fb95c8b219b4003 /test | |
| parent | 43c2e49d19f2e7a840507ae9e728b623fcb7c341 (diff) | |
| download | emacs-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.el | 177 | ||||
| -rw-r--r-- | test/lisp/emacs-lisp/cl-lib-tests.el | 112 | ||||
| -rw-r--r-- | test/lisp/emacs-lisp/cl-seq-tests.el | 708 |
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 |