2
;;;; Author: Paul Dietz
3
;;;; Created: Mon Aug 19 07:31:55 2002
4
;;;; Contains: Tests for COUNT
9
(count 'a '(a b c d e a e f))
13
(count 'a '(a b c d e a e f) :test #'eql)
17
(count 'a '(a b c d e a e f) :test 'eql)
21
(count 1 '(1 2 2 3 2 1 2 2 5 4) :key #'1-)
25
(count 1 '(1 2 2 3 2 1 2 2 5 4) :key '1-)
29
(count 1 '(1 2 2 3 2 1 2 2 5 4) :key #'1- :test #'equal)
33
(count 1 '(2 1 1 2 3 1 4 1 7 6 1 8) :from-end t)
38
(count 1 '(1 2 3 1 4 1 7 6 1 8)
40
;; (format t "~%~A ~A" x c)
41
(prog1 (- x c) (incf c)))))
46
(count 1 '(1 2 3 7 4 5 7 6 2 8)
49
;; (format t "~%~A ~A" x c)
50
(prog1 (- x c) (incf c)))))
53
(deftest count-list.10
54
(count 1 '(1 1 1 1 1 2 1 1) :start 3)
57
(deftest count-list.11
58
(count 1 '(1 1 1 1 1 2 1 1) :end 6)
61
(deftest count-list.12
62
(count 1 '(1 1 1 1 1 2 1 1) :start 2 :end 7)
65
(deftest count-list.13
66
(count 1 '(1 1 1 1 1 2 1 1) :start 3 :end nil)
69
(deftest count-list.14
70
(count 1 '(1 1 1 1 1 2 1 1) :end nil)
73
(deftest count-list.15
74
(count 1 '(1 1 1 1 1 2 1 1) :test-not #'eql)
77
(deftest count-list.16
78
(count 1 '(1 1 1 3 1 2 1 1) :start 2 :end 7
79
:test #'(lambda (x y) (declare (ignore x y)) t))
82
(deftest count-list.17
83
(count 10 '(1 11 2 4 14 5 18 6 7) :test #'<)
86
(deftest count-list.18
87
(count 10 '(1 11 2 4 14 5 18 6 7) :test-not #'>=)
90
(defharmless count-list.test-and-test-not.1
91
(count 0 '(0 1 2 0 1 2 3 0 1) :test #'eql :test-not #'eql))
93
(defharmless count-list.test-and-test-not.2
94
(count 0 '(0 1 2 0 1 2 3 0 1) :test-not #'eql :test #'eql))
98
(deftest count-vector.1
99
(count 'a #(a b c d e a e f))
102
(deftest count-vector.2
103
(count 'a #(a b c d e a e f) :test #'eql)
106
(deftest count-vector.3
107
(count 'a #(a b c d e a e f) :test 'eql)
110
(deftest count-vector.4
111
(count 1 #(1 2 2 3 2 1 2 2 5 4) :key #'1-)
114
(deftest count-vector.5
115
(count 1 #(1 2 2 3 2 1 2 2 5 4) :key '1-)
118
(deftest count-vector.6
119
(count 1 #(1 2 2 3 2 1 2 2 5 4) :key #'1- :test #'equal)
122
(deftest count-vector.7
123
(count 1 #(2 1 1 2 3 1 4 1 7 6 1 8) :from-end t)
126
(deftest count-vector.8
128
(count 1 #(1 2 3 1 4 1 7 6 1 8)
130
;; (format t "~%~A ~A" x c)
131
(prog1 (- x c) (incf c)))))
134
(deftest count-vector.9
136
(count 1 #(1 2 3 7 4 5 7 6 2 8)
139
;; (format t "~%~A ~A" x c)
140
(prog1 (- x c) (incf c)))))
143
(deftest count-vector.10
144
(count 1 #(1 1 1 1 1 2 1 1) :start 3)
147
(deftest count-vector.11
148
(count 1 #(1 1 1 1 1 2 1 1) :end 6)
151
(deftest count-vector.12
152
(count 1 #(1 1 1 1 1 2 1 1) :start 2 :end 7)
155
(deftest count-vector.13
156
(count 1 #(1 1 1 1 1 2 1 1) :start 3 :end nil)
159
(deftest count-vector.14
160
(count 1 #(1 1 1 1 1 2 1 1) :end nil)
163
(deftest count-vector.15
164
(count 1 #(1 1 1 1 1 2 1 1) :test-not #'eql)
167
(deftest count-vector.16
168
(count 1 #(1 1 1 3 1 2 1 1) :start 2 :end 7
169
:test #'(lambda (x y) (declare (ignore x y)) t))
172
(deftest count-vector.17
173
(count 10 #(1 11 2 4 14 5 18 6 7) :test #'<)
176
(deftest count-vector.18
177
(count 10 #(1 11 2 4 14 5 18 6 7) :test-not #'>=)
180
(defharmless count-vector.test-and-test-not.1
181
(count 0 #(0 1 2 0 1 2 3 0 1) :test #'eql :test-not #'eql))
183
(defharmless count-vector.test-and-test-not.2
184
(count 0 #(0 1 2 0 1 2 3 0 1) :test-not #'eql :test #'eql))
186
;;; Non-simple vectors
188
(deftest count-filled-vector.1
189
(count 'a (make-array 8 :initial-contents '(a b c d e a e f)
193
(deftest count-filled-vector.2
194
(count 'a (make-array 8 :initial-contents '(a b c d e a e f)
199
(deftest count-filled-vector.3
200
(count 'a (make-array 8 :initial-contents '(a b c d e a e f)
205
(deftest count-filled-vector.4
206
(count 1 (make-array 10 :initial-contents '(1 2 2 3 2 1 2 2 5 4)
211
(deftest count-filled-vector.5
212
(count 1 (make-array 10 :initial-contents '(1 2 2 3 2 1 2 2 5 4)
217
(deftest count-filled-vector.6
218
(count 1 (make-array 10 :initial-contents '(1 2 2 3 2 1 2 2 5 4)
220
:key #'1- :test #'equal)
223
(deftest count-filled-vector.7
224
(count 1 (make-array 12 :initial-contents '(2 1 1 2 3 1 4 1 7 6 1 8)
229
(deftest count-filled-vector.8
231
(count 1 (make-array 10 :initial-contents '(1 2 3 1 4 1 7 6 1 8)
234
;; (format t "~%~A ~A" x c)
235
(prog1 (- x c) (incf c)))))
238
(deftest count-filled-vector.9
240
(count 1 (make-array 10 :initial-contents '(1 2 3 7 4 5 7 6 2 8)
244
;; (format t "~%~A ~A" x c)
245
(prog1 (- x c) (incf c)))))
248
(deftest count-filled-vector.10
249
(count 1 (make-array 8 :initial-contents '(1 1 1 1 1 2 1 1)
254
(deftest count-filled-vector.11
255
(count 1 (make-array 8 :initial-contents '(1 1 1 1 1 2 1 1)
260
(deftest count-filled-vector.12
261
(count 1 (make-array 8 :initial-contents '(1 1 1 1 1 2 1 1)
266
(deftest count-filled-vector.13
267
(count 1 (make-array 8 :initial-contents '(1 1 1 1 1 2 1 1)
272
(deftest count-filled-vector.14
273
(count 1 (make-array 8 :initial-contents '(1 1 1 1 1 2 1 1)
278
(deftest count-filled-vector.15
279
(count 1 (make-array 8 :initial-contents '(1 1 1 1 1 2 1 1)
284
(deftest count-filled-vector.16
285
(count 1 (make-array 8 :initial-contents '(1 1 1 3 1 2 1 1)
288
:test #'(lambda (x y) (declare (ignore x y)) t))
291
(deftest count-filled-vector.17
292
(count 1 (make-array 8 :initial-contents '(1 1 1 1 1 1 1 1)
296
(deftest count-filled-vector.18
297
(count 1 (make-array 8 :initial-contents '(1 1 1 1 1 1 1 1)
301
(deftest count-filled-vector.19
302
(count 1 (make-array 8 :initial-contents '(1 1 1 1 1 1 1 1)
307
(deftest count-filled-vector.20
308
(count 1 (make-array 8 :initial-contents '(1 1 1 1 1 1 1 1)
310
:start 2 :from-end 'yes)
315
;;; Tests on bit vectors
317
(deftest count-bit-vector.1
318
(count 1 #*00101100011011000)
321
(deftest count-bit-vector.2
322
(count 1 #*00101100011011000 :test #'eql)
325
(deftest count-bit-vector.3
326
(count 1 #*00101100011011000 :test 'eql)
329
(deftest count-bit-vector.4
330
(count 1 #*00101100011011000 :key #'1+)
333
(deftest count-bit-vector.5
334
(count 0 #*00101100011011000 :key '1-)
337
(deftest count-bit-vector.6
338
(count 0 #*00101100011011000 :key #'1- :test #'equal)
341
(deftest count-bit-vector.7
342
(count 1 #*00101100011011000 :from-end t)
345
(deftest count-bit-vector.8
347
(count 0 #*0000110101001
348
:key #'(lambda (x) (setf c (- c)) (+ c x))))
351
(deftest count-bit-vector.9
353
(count 0 #*0000011010101
355
:key #'(lambda (x) (setf c (- c)) (+ c x))))
358
(deftest count-bit-vector.10
359
(count 1 #*11000110110 :start 3)
362
(deftest count-bit-vector.11
363
(count 1 '#*110111110111 :end 6)
366
(deftest count-bit-vector.12
367
(count 1 #*11111011 :start 2 :end 7)
370
(deftest count-bit-vector.13
371
(count 1 #*11111011 :start 3 :end nil)
374
(deftest count-bit-vector.14
375
(count 1 #*11111011 :end nil)
378
(deftest count-bit-vector.15
379
(count 1 #*11111011 :test-not #'eql)
382
(deftest count-bit-vector.16
383
(count 1 #*11101101 :start 2 :end 7
384
:test #'(lambda (x y) (declare (ignore x y)) t))
387
(deftest count-bit-vector.17
388
(count 1 (make-array 8 :initial-contents '(1 0 1 1 1 1 1 1)
393
(deftest count-bit-vector.18
394
(count 1 (make-array 8 :initial-contents '(1 0 1 1 1 1 1 1)
400
(deftest count-bit-vector.19
401
(count 1 (make-array 8 :initial-contents '(1 0 1 1 1 1 1 1)
408
(deftest count-bit-vector.20
409
(count 1 (make-array 8 :initial-contents '(1 0 1 1 1 1 1 1)
415
(deftest count-bit-vector.21
416
(count 1 #*00001100100 :test #'<=)
419
(deftest count-bit-vector.22
420
(count 1 #*00001100100 :test-not #'>)
423
(defharmless count-bit-vector.test-and-test-not.1
424
(count 0 #*0011010101100010000 :test #'eql :test-not #'eql))
426
(defharmless count-bit-vector.test-and-test-not.2
427
(count 0 #*0011010101100010000 :test-not #'eql :test #'eql))
431
(deftest count-string.1
432
(count #\1 "00101100011011000")
435
(deftest count-string.2
436
(count #\1 "00101100011011000" :test #'eql)
439
(deftest count-string.3
440
(count #\1 "00101100011011000" :test 'eql)
443
(deftest count-string.4
444
(count #\1 "00101100011011000" :key #'(lambda (x) (if (eql x #\0) #\1 #\2)))
447
(deftest count-string.5
448
(count #\1 "00101100011011000" :key 'identity)
451
(deftest count-string.6
452
(count #\1 "00101100011011000" :key #'identity :test #'equal)
455
(deftest count-string.7
456
(count #\1 "00101100011011000" :from-end t)
459
(deftest count-string.8
461
(count #\0 "0000110101001"
462
:key #'(lambda (x) (setf c (not c))
466
(deftest count-string.9
468
(count #\0 "0000011010101"
470
:key #'(lambda (x) (setf c (not c))
474
(deftest count-string.10
475
(count #\1 "11000110110" :start 3)
478
(deftest count-string.11
479
(count #\1 '"110111110111" :end 6)
482
(deftest count-string.12
483
(count #\1 "11111011" :start 2 :end 7)
486
(deftest count-string.13
487
(count #\1 "11111011" :start 3 :end nil)
490
(deftest count-string.14
491
(count #\1 "11111011" :end nil)
494
(deftest count-string.15
495
(count #\1 "11111011" :test-not #'eql)
498
(deftest count-string.16
499
(count #\1 "11101101" :start 2 :end 7
500
:test #'(lambda (x y) (declare (ignore x y)) t))
503
(deftest count-string.17
504
(count #\a (make-array 10 :initial-contents "abaaacaaaa"
506
:element-type 'character))
509
(deftest count-string.18
510
(count #\a (make-array 10 :initial-contents "abaaacaaaa"
512
:element-type 'character)
516
(deftest count-string.19
517
(count #\a (make-array 10 :initial-contents "abaaacaaaa"
519
:element-type 'character)
523
(deftest count-string.20
524
(count #\a (make-array 10 :initial-contents "abaaacaaaa"
526
:element-type 'character)
530
(deftest count-string.21
531
(count #\1 "00001100100" :test #'char<=)
534
(deftest count-string.22
535
(count #\1 "00001100100" :test-not #'char>)
538
(defharmless count-string.test-and-test-not.1
539
(count #\0 "0011010101100010000" :test #'eql :test-not #'eql))
541
(defharmless count-string.test-and-test-not.2
542
(count #\0 "0011010101100010000" :test-not #'eql :test #'eql))
544
;;; Argument order tests
546
(deftest count.order.1
547
(let ((i 0) c1 c2 c3 c4 c5 c6 c7)
549
(count (progn (setf c1 (incf i)) nil)
550
(progn (setf c2 (incf i)) '(a nil b c nil d e))
551
:start (progn (setf c3 (incf i)) 0)
552
:end (progn (setf c4 (incf i)) 3)
553
:key (progn (setf c5 (incf i)) #'identity)
554
:from-end (progn (setf c6 (incf i)) nil)
555
:test (progn (setf c7 (incf i)) #'eql)
557
i c1 c2 c3 c4 c5 c6 c7))
560
(deftest count.order.2
561
(let ((i 0) c1 c2 c3 c4 c5 c6 c7)
563
(count (progn (setf c1 (incf i)) nil)
564
(progn (setf c2 (incf i)) '(a nil b c nil d e))
565
:test (progn (setf c3 (incf i)) #'eql)
566
:from-end (progn (setf c4 (incf i)) nil)
567
:key (progn (setf c5 (incf i)) #'identity)
568
:end (progn (setf c6 (incf i)) 3)
569
:start (progn (setf c7 (incf i)) 0)
571
i c1 c2 c3 c4 c5 c6 c7))
577
(deftest count.allow-other-keys.1
578
(count 'a '(b a d a c) :bad t :allow-other-keys t)
581
(deftest count.allow-other-keys.2
582
(count 'a '(b a d a c) :allow-other-keys #p"*" :also-bad t)
585
;;; The leftmost of two :allow-other-keys arguments is the one that matters.
586
(deftest count.allow-other-keys.3
587
(count 'a '(b a d a c)
589
:allow-other-keys nil
593
(deftest count.keywords.4
594
(count 2 '(1 2 3 2 5) :key #'identity :key #'1+)
597
(deftest count.allow-other-keys.5
598
(count 'a '(a b c a) :allow-other-keys nil)
603
(deftest count.error.1
604
(signals-error (count 'a 1) type-error)
607
(deftest count.error.2
608
(signals-error (count 'a 'a) type-error)
611
(deftest count.error.3
612
(signals-error (count 'a #\a) type-error)
615
(deftest count.error.4
616
(signals-error (count) program-error)
619
(deftest count.error.5
620
(signals-error (count nil) program-error)
623
(deftest count.error.6
624
(signals-error (count nil nil :bad t) program-error)
627
(deftest count.error.7
628
(signals-error (count nil nil :bad t :allow-other-keys nil)
632
(deftest count.error.8
633
(signals-error (count nil nil :key) program-error)
636
(deftest count.error.9
637
(signals-error (count nil nil 3 3) program-error)
640
;;; Only leftmost :allow-other-keys argument matters
641
(deftest count.error.10
642
(signals-error (count 'a nil :bad t
643
:allow-other-keys nil
648
(deftest count.error.11
649
(signals-error (locally (count 'a 1) t) type-error)
652
(deftest count.error.12
653
(signals-error (count 'b '(a b c) :test #'identity)
657
(deftest count.error.13
658
(signals-error (count 'b '(a b c) :key #'car) type-error)
661
(deftest count.error.14
662
(signals-error (count 'b '(a b c) :test-not #'identity)
666
(deftest count.error.15
667
(signals-error (count 'b '(a b c) :key #'cons)