2
;;;; Author: Paul Dietz
3
;;;; Created: Wed Aug 28 18:37:52 2002
4
;;;; Contains: Tests for FIND-IF
8
(deftest find-if-list.1
9
(find-if #'identity ())
12
(deftest find-if-list.2
13
(find-if #'identity '(a))
16
(deftest find-if-list.2a
17
(find-if 'identity '(a))
20
(deftest find-if-list.3
21
(find-if #'evenp '(1 2 4 8 3 1 6 7))
24
(deftest find-if-list.4
25
(find-if #'evenp '(1 2 4 8 3 1 6 7) :from-end t)
28
(deftest find-if-list.5
29
(loop for i from 0 to 7 collect
30
(find-if #'evenp '(1 2 4 8 3 1 6 7) :start i))
33
(deftest find-if-list.6
34
(loop for i from 0 to 7 collect
35
(find-if #'evenp '(1 2 4 8 3 1 6 7) :start i :end nil))
38
(deftest find-if-list.7
39
(loop for i from 0 to 7 collect
40
(find-if #'evenp '(1 2 4 8 3 1 6 7) :start i :from-end t))
43
(deftest find-if-list.8
44
(loop for i from 0 to 7 collect
45
(find-if #'evenp '(1 2 4 8 3 1 6 7) :start i :end nil :from-end t))
48
(deftest find-if-list.9
49
(loop for i from 0 to 8 collect
50
(find-if #'evenp '(1 2 4 8 3 1 6 7) :end i))
51
(nil nil 2 2 2 2 2 2 2))
53
(deftest find-if-list.10
54
(loop for i from 0 to 8 collect
55
(find-if #'evenp '(1 2 4 8 3 1 6 7) :end i :from-end t))
56
(nil nil 2 4 8 8 8 6 6))
58
(deftest find-if-list.11
59
(loop for j from 0 to 7
61
(loop for i from (1+ j) to 8 collect
62
(find-if #'evenp '(1 2 4 8 3 1 6 7) :start j :end i)))
72
(deftest find-if-list.12
73
(loop for j from 0 to 7
75
(loop for i from (1+ j) to 8 collect
76
(find-if #'evenp '(1 2 4 8 3 1 6 7) :start j :end i
87
(deftest find-if-list.13
88
(loop for i from 0 to 6
90
(find-if #'evenp '(1 6 11 32 45 71 100) :key #'1+ :start i))
91
(1 11 11 45 45 71 nil))
93
(deftest find-if-list.14
94
(loop for i from 0 to 6
96
(find-if #'evenp '(1 6 11 32 45 71 100) :key '1+ :start i :from-end t))
97
(71 71 71 71 71 71 nil))
99
(deftest find-if-list.15
100
(loop for i from 0 to 7
102
(find-if #'evenp '(1 6 11 32 45 71 100) :key #'1+ :end i))
105
(deftest find-if-list.16
106
(loop for i from 0 to 7
108
(find-if #'evenp '(1 6 11 32 45 71 100) :key '1+ :end i :from-end t))
109
(nil 1 1 11 11 45 71 71))
111
(deftest find-if-list.17
112
(loop for j from 0 to 7
114
(loop for i from (1+ j) to 8 collect
115
(find-if #'oddp '(1 2 4 8 3 1 6 7) :start j :end i :key #'1-)))
125
(deftest find-if-list.18
126
(loop for j from 0 to 7
128
(loop for i from (1+ j) to 8 collect
129
(find-if #'oddp '(1 2 4 8 3 1 6 7) :start j :end i
130
:from-end t :key #'1+)))
140
;;; tests for vectors
142
(deftest find-if-vector.1
143
(find-if #'identity #())
146
(deftest find-if-vector.2
147
(find-if #'identity #(a))
150
(deftest find-if-vector.2a
151
(find-if 'identity #(a))
154
(deftest find-if-vector.3
155
(find-if #'evenp #(1 2 4 8 3 1 6 7))
158
(deftest find-if-vector.4
159
(find-if #'evenp #(1 2 4 8 3 1 6 7) :from-end t)
162
(deftest find-if-vector.5
163
(loop for i from 0 to 7 collect
164
(find-if #'evenp #(1 2 4 8 3 1 6 7) :start i))
167
(deftest find-if-vector.6
168
(loop for i from 0 to 7 collect
169
(find-if #'evenp #(1 2 4 8 3 1 6 7) :start i :end nil))
172
(deftest find-if-vector.7
173
(loop for i from 0 to 7 collect
174
(find-if #'evenp #(1 2 4 8 3 1 6 7) :start i :from-end t))
177
(deftest find-if-vector.8
178
(loop for i from 0 to 7 collect
179
(find-if #'evenp #(1 2 4 8 3 1 6 7) :start i :end nil :from-end t))
182
(deftest find-if-vector.9
183
(loop for i from 0 to 8 collect
184
(find-if #'evenp #(1 2 4 8 3 1 6 7) :end i))
185
(nil nil 2 2 2 2 2 2 2))
187
(deftest find-if-vector.10
188
(loop for i from 0 to 8 collect
189
(find-if #'evenp #(1 2 4 8 3 1 6 7) :end i :from-end t))
190
(nil nil 2 4 8 8 8 6 6))
192
(deftest find-if-vector.11
193
(loop for j from 0 to 7
195
(loop for i from (1+ j) to 8 collect
196
(find-if #'evenp #(1 2 4 8 3 1 6 7) :start j :end i)))
206
(deftest find-if-vector.12
207
(loop for j from 0 to 7
209
(loop for i from (1+ j) to 8 collect
210
(find-if #'evenp #(1 2 4 8 3 1 6 7) :start j :end i
221
(deftest find-if-vector.13
222
(loop for i from 0 to 6
224
(find-if #'evenp #(1 6 11 32 45 71 100) :key #'1+ :start i))
225
(1 11 11 45 45 71 nil))
227
(deftest find-if-vector.14
228
(loop for i from 0 to 6
230
(find-if #'evenp #(1 6 11 32 45 71 100) :key '1+ :start i :from-end t))
231
(71 71 71 71 71 71 nil))
233
(deftest find-if-vector.15
234
(loop for i from 0 to 7
236
(find-if #'evenp #(1 6 11 32 45 71 100) :key #'1+ :end i))
239
(deftest find-if-vector.16
240
(loop for i from 0 to 7
242
(find-if #'evenp #(1 6 11 32 45 71 100) :key '1+ :end i :from-end t))
243
(nil 1 1 11 11 45 71 71))
245
(deftest find-if-vector.17
246
(loop for j from 0 to 7
248
(loop for i from (1+ j) to 8 collect
249
(find-if #'oddp #(1 2 4 8 3 1 6 7) :start j :end i :key #'1-)))
259
(deftest find-if-vector.18
260
(loop for j from 0 to 7
262
(loop for i from (1+ j) to 8 collect
263
(find-if #'oddp #(1 2 4 8 3 1 6 7) :start j :end i
264
:from-end t :key #'1+)))
274
(deftest find-if-vector.19
275
(let ((a (make-array '(10) :initial-contents '(1 2 3 4 5 6 7 8 9 10)
279
(find-if #'evenp a :from-end t)
281
(find-if #'oddp a :from-end t)
285
;;; Tests for bit vectors
287
(deftest find-if-bit-vector.1
288
(find-if #'identity #*)
291
(deftest find-if-bit-vector.2
292
(find-if #'identity #*1)
295
(deftest find-if-bit-vector.3
296
(find-if #'identity #*0)
299
(deftest find-if-bit-vector.4
300
(loop for i from 0 to 6
301
collect (loop for j from i to 7
302
collect (find-if #'evenp #*0110110 :start i :end j)))
304
(nil nil nil 0 0 0 0)
311
(deftest find-if-bit-vector.5
312
(loop for i from 0 to 6
313
collect (loop for j from i to 7
314
collect (find-if #'evenp #*0110110 :start i :end j
317
(nil nil nil 0 0 0 0)
324
(deftest find-if-bit-vector.6
325
(loop for i from 0 to 6
326
collect (loop for j from i to 7
327
collect (find-if #'oddp #*0110110 :start i :end j
328
:from-end t :key #'1+)))
330
(nil nil nil 0 0 0 0)
337
(deftest find-if-bit-vector.7
338
(loop for i from 0 to 6
339
collect (loop for j from i to 7
340
collect (find-if #'oddp #*0110110 :start i :end j
343
(nil nil nil 0 0 0 0)
350
;;; Tests for strings
352
(deftest find-if-string.1
353
(find-if #'identity "")
356
(deftest find-if-string.2
357
(find-if #'identity "a")
360
(deftest find-if-string.2a
361
(find-if 'identity "a")
364
(deftest find-if-string.3
365
(find-if #'evendigitp "12483167")
368
(deftest find-if-string.3a
369
(find-if #'evenp "12483167" :key #'(lambda (c) (read-from-string (string c))))
372
(deftest find-if-string.4
373
(find-if #'evendigitp "12483167" :from-end t)
376
(deftest find-if-string.5
377
(loop for i from 0 to 7 collect
378
(find-if #'evendigitp "12483167" :start i))
379
(#\2 #\2 #\4 #\8 #\6 #\6 #\6 nil))
381
(deftest find-if-string.6
382
(loop for i from 0 to 7 collect
383
(find-if #'evendigitp "12483167" :start i :end nil))
384
(#\2 #\2 #\4 #\8 #\6 #\6 #\6 nil))
386
(deftest find-if-string.7
387
(loop for i from 0 to 7 collect
388
(find-if #'evendigitp "12483167" :start i :from-end t))
389
(#\6 #\6 #\6 #\6 #\6 #\6 #\6 nil))
391
(deftest find-if-string.8
392
(loop for i from 0 to 7 collect
393
(find-if #'evendigitp "12483167" :start i :end nil :from-end t))
394
(#\6 #\6 #\6 #\6 #\6 #\6 #\6 nil))
396
(deftest find-if-string.9
397
(loop for i from 0 to 8 collect
398
(find-if #'evendigitp "12483167" :end i))
399
(nil nil #\2 #\2 #\2 #\2 #\2 #\2 #\2))
401
(deftest find-if-string.10
402
(loop for i from 0 to 8 collect
403
(find-if #'evendigitp "12483167" :end i :from-end t))
404
(nil nil #\2 #\4 #\8 #\8 #\8 #\6 #\6))
406
(deftest find-if-string.11
407
(loop for j from 0 to 7
409
(loop for i from (1+ j) to 8 collect
410
(find-if #'evendigitp "12483167" :start j :end i)))
411
((nil #\2 #\2 #\2 #\2 #\2 #\2 #\2)
412
(#\2 #\2 #\2 #\2 #\2 #\2 #\2)
413
(#\4 #\4 #\4 #\4 #\4 #\4)
414
(#\8 #\8 #\8 #\8 #\8)
420
(deftest find-if-string.12
421
(loop for j from 0 to 7
423
(loop for i from (1+ j) to 8 collect
424
(find-if #'evendigitp "12483167" :start j :end i
426
((nil #\2 #\4 #\8 #\8 #\8 #\6 #\6)
427
(#\2 #\4 #\8 #\8 #\8 #\6 #\6)
428
(#\4 #\8 #\8 #\8 #\6 #\6)
429
(#\8 #\8 #\8 #\6 #\6)
435
(deftest find-if-string.13
436
(loop for i from 0 to 6
438
(find-if #'evenp "1473816"
439
:key (compose #'read-from-string #'string)
441
(#\4 #\4 #\8 #\8 #\8 #\6 #\6))
443
(deftest find-if-string.14
444
(loop for i from 0 to 6
446
(find-if #'evenp "1473816"
447
:key (compose #'read-from-string #'string)
448
:start i :from-end t))
449
(#\6 #\6 #\6 #\6 #\6 #\6 #\6))
451
(deftest find-if-string.15
452
(loop for i from 0 to 7
454
(find-if #'evenp "1473816"
455
:key (compose #'read-from-string #'string)
457
(nil nil #\4 #\4 #\4 #\4 #\4 #\4))
459
(deftest find-if-string.16
460
(loop for i from 0 to 7
462
(find-if #'evenp "1473816"
463
:key (compose #'read-from-string #'string)
465
(nil nil #\4 #\4 #\4 #\8 #\8 #\6))
467
(deftest find-if-string.17
468
(loop for j from 0 to 6
470
(loop for i from (1+ j) to 7 collect
471
(find-if #'evenp "1473816"
472
:key (compose #'read-from-string #'string)
474
((nil #\4 #\4 #\4 #\4 #\4 #\4)
475
(#\4 #\4 #\4 #\4 #\4 #\4)
476
(nil nil #\8 #\8 #\8)
482
(deftest find-if-string.18
483
(loop for j from 0 to 6
485
(loop for i from (1+ j) to 7 collect
486
(find-if #'evenp "1473816"
487
:key (compose #'read-from-string #'string)
490
((nil #\4 #\4 #\4 #\8 #\8 #\6)
491
(#\4 #\4 #\4 #\8 #\8 #\6)
492
(nil nil #\8 #\8 #\6)
498
(deftest find-if-string.19
499
(let ((a (make-array '(10) :initial-contents "123456789a"
501
:element-type 'character)))
503
(find-if #'evendigitp a)
504
(find-if #'evendigitp a :from-end t)
505
(find-if #'odddigitp a)
506
(find-if #'odddigitp a :from-end t)
512
(deftest find-if.allow-other-keys.1
513
(find-if #'evenp '(1 2 3 4 5) :bad t :allow-other-keys t)
516
(deftest find-if.allow-other-keys.2
517
(find-if #'evenp '(1 2 3 4 5) :allow-other-keys t :also-bad t)
520
;;; The leftmost of two :allow-other-keys arguments is the one that matters.
521
(deftest find-if.allow-other-keys.3
522
(find-if #'evenp '(1 2 3 4 5)
524
:allow-other-keys nil
528
(deftest find-if.keywords.4
529
(find-if #'evenp '(1 2 3 4 5) :key #'identity :key #'1+)
532
(deftest find-if.allow-other-keys.5
533
(find-if #'identity '(nil a b c nil) :allow-other-keys nil)
539
(deftest find-if.error.1
540
(signals-error (find-if #'null 'b) type-error)
543
(deftest find-if.error.2
544
(signals-error (find-if #'identity 10) type-error)
547
(deftest find-if.error.3
548
(signals-error (find-if '1+ 1.4) type-error)
551
(deftest find-if.error.4
552
(signals-error (find-if 'null '(a b c . d)) type-error)
555
(deftest find-if.error.5
556
(signals-error (find-if) program-error)
559
(deftest find-if.error.6
560
(signals-error (find-if #'null) program-error)
563
(deftest find-if.error.7
564
(signals-error (find-if #'null nil :bad t) program-error)
567
(deftest find-if.error.8
568
(signals-error (find-if #'null nil :bad t :allow-other-keys nil)
572
(deftest find-if.error.9
573
(signals-error (find-if #'null nil 1 1) program-error)
576
(deftest find-if.error.10
577
(signals-error (find-if #'null nil :key) program-error)
580
(deftest find-if.error.11
581
(signals-error (locally (find-if #'null 'b) t) type-error)
584
(deftest find-if.error.12
585
(signals-error (find-if #'cons '(a b c)) program-error)
588
(deftest find-if.error.13
589
(signals-error (find-if #'car '(a b c)) type-error)
592
(deftest find-if.error.14
593
(signals-error (find-if #'identity '(a b c) :key #'cons) program-error)
596
(deftest find-if.error.15
597
(signals-error (find-if #'identity '(a b c) :key #'car)
601
;;; Order of evaluation tests
603
(deftest find-if.order.1
606
(find-if (progn (setf x (incf i)) #'identity)
607
(progn (setf y (incf i)) '(nil nil nil a nil nil)))
611
(deftest find-if.order.2
612
(let ((i 0) a b c d e f g)
614
(find-if (progn (setf a (incf i)) #'null)
615
(progn (setf b (incf i)) '(nil nil nil a nil nil))
616
:start (progn (setf c (incf i)) 1)
617
:end (progn (setf d (incf i)) 4)
618
:from-end (setf e (incf i))
619
:key (progn (setf f (incf i)) #'null)
625
(deftest find-if.order.3
626
(let ((i 0) a b c d e f g)
628
(find-if (progn (setf a (incf i)) #'null)
629
(progn (setf b (incf i)) '(nil nil nil a nil nil))
630
:key (progn (setf c (incf i)) #'null)
631
:from-end (setf d (incf i))
632
:end (progn (setf e (incf i)) 4)
633
:start (progn (setf f (incf i)) 1)