source: trunk/source/tests/ansi-tests/find-if-not.lsp @ 8991

Last change on this file since 8991 was 8991, checked in by gz, 12 years ago

Check in the gcl ansi test suite (original, in preparation for making local changes)

File size: 14.4 KB
Line 
1;-*- Mode:     Lisp -*-
2;;;; Author:   Paul Dietz
3;;;; Created:  Wed Aug 28 20:53:24 2002
4;;;; Contains: Tests for FIND-IF-NOT
5
6(in-package :cl-test)
7
8(deftest find-if-not-list.1
9  (find-if-not #'identity ())
10  nil)
11
12(deftest find-if-not-list.2
13  (find-if-not #'null '(a))
14  a)
15
16(deftest find-if-not-list.2a
17  (find-if-not 'null '(a))
18  a)
19
20(deftest find-if-not-list.3
21  (find-if-not #'oddp '(1 2 4 8 3 1 6 7))
22  2)
23
24(deftest find-if-not-list.4
25  (find-if-not #'oddp '(1 2 4 8 3 1 6 7) :from-end t)
26  6)
27
28(deftest find-if-not-list.5
29  (loop for i from 0 to 7 collect
30        (find-if-not #'oddp '(1 2 4 8 3 1 6 7) :start i))
31  (2 2 4 8 6 6 6 nil))
32
33(deftest find-if-not-list.6
34  (loop for i from 0 to 7 collect
35        (find-if-not #'oddp '(1 2 4 8 3 1 6 7) :start i :end nil))
36  (2 2 4 8 6 6 6 nil))
37
38(deftest find-if-not-list.7
39  (loop for i from 0 to 7 collect
40        (find-if-not #'oddp '(1 2 4 8 3 1 6 7) :start i :from-end t))
41  (6 6 6 6 6 6 6 nil))
42
43(deftest find-if-not-list.8
44  (loop for i from 0 to 7 collect
45        (find-if-not #'oddp '(1 2 4 8 3 1 6 7) :start i :end nil :from-end t))
46  (6 6 6 6 6 6 6 nil))
47
48(deftest find-if-not-list.9
49  (loop for i from 0 to 8 collect
50        (find-if-not #'oddp '(1 2 4 8 3 1 6 7) :end i))
51  (nil nil 2 2 2 2 2 2 2))
52
53(deftest find-if-not-list.10
54  (loop for i from 0 to 8 collect
55        (find-if-not #'oddp '(1 2 4 8 3 1 6 7) :end i :from-end t))
56  (nil nil 2 4 8 8 8 6 6))
57
58(deftest find-if-not-list.11
59  (loop for j from 0 to 7
60        collect
61        (loop for i from (1+ j) to 8 collect
62              (find-if-not #'oddp '(1 2 4 8 3 1 6 7) :start j :end i)))
63  ((nil 2 2 2 2 2 2 2)
64   (2 2 2 2 2 2 2)
65   (4 4 4 4 4 4)
66   (8 8 8 8 8)
67   (nil nil 6 6)
68   (nil 6 6)
69   (6 6)
70   (nil)))
71
72(deftest find-if-not-list.12
73  (loop for j from 0 to 7
74        collect
75        (loop for i from (1+ j) to 8 collect
76              (find-if-not #'oddp '(1 2 4 8 3 1 6 7) :start j :end i
77                       :from-end t)))
78  ((nil 2 4 8 8 8 6 6)
79   (2 4 8 8 8 6 6)
80   (4 8 8 8 6 6)
81   (8 8 8 6 6)
82   (nil nil 6 6)
83   (nil 6 6)
84   (6 6)
85   (nil)))
86
87(deftest find-if-not-list.13
88  (loop for i from 0 to 6
89        collect
90        (find-if-not #'oddp '(1 6 11 32 45 71 100) :key #'1+ :start i))
91  (1 11 11 45 45 71 nil))
92
93(deftest find-if-not-list.14
94  (loop for i from 0 to 6
95        collect
96        (find-if-not #'oddp '(1 6 11 32 45 71 100) :key '1+ :start i :from-end t))
97  (71 71 71 71 71 71 nil))
98
99(deftest find-if-not-list.15
100  (loop for i from 0 to 7
101        collect
102        (find-if-not #'oddp '(1 6 11 32 45 71 100) :key #'1+ :end i))
103  (nil 1 1 1 1 1 1 1))
104
105(deftest find-if-not-list.16
106  (loop for i from 0 to 7
107        collect
108        (find-if-not #'oddp '(1 6 11 32 45 71 100) :key '1+ :end i :from-end t))
109  (nil 1 1 11 11 45 71 71))
110
111(deftest find-if-not-list.17
112  (loop for j from 0 to 7
113        collect
114        (loop for i from (1+ j) to 8 collect
115              (find-if-not #'evenp '(1 2 4 8 3 1 6 7) :start j :end i :key #'1-)))
116  ((nil 2 2 2 2 2 2 2)
117   (2 2 2 2 2 2 2)
118   (4 4 4 4 4 4)
119   (8 8 8 8 8)
120   (nil nil 6 6)
121   (nil 6 6)
122   (6 6)
123   (nil)))
124
125(deftest find-if-not-list.18
126  (loop for j from 0 to 7
127        collect
128        (loop for i from (1+ j) to 8 collect
129              (find-if-not #'evenp '(1 2 4 8 3 1 6 7) :start j :end i
130                       :from-end t :key #'1+)))
131  ((nil 2 4 8 8 8 6 6)
132   (2 4 8 8 8 6 6)
133   (4 8 8 8 6 6)
134   (8 8 8 6 6)
135   (nil nil 6 6)
136   (nil 6 6)
137   (6 6)
138   (nil)))
139
140;;; tests for vectors
141
142(deftest find-if-not-vector.1
143  (find-if-not #'identity #())
144  nil)
145
146(deftest find-if-not-vector.2
147  (find-if-not #'not #(a))
148  a)
149
150(deftest find-if-not-vector.2a
151  (find-if-not 'null #(a))
152  a)
153
154(deftest find-if-not-vector.3
155  (find-if-not #'oddp #(1 2 4 8 3 1 6 7))
156  2)
157
158(deftest find-if-not-vector.4
159  (find-if-not #'oddp #(1 2 4 8 3 1 6 7) :from-end t)
160  6)
161
162(deftest find-if-not-vector.5
163  (loop for i from 0 to 7 collect
164        (find-if-not #'oddp #(1 2 4 8 3 1 6 7) :start i))
165  (2 2 4 8 6 6 6 nil))
166
167(deftest find-if-not-vector.6
168  (loop for i from 0 to 7 collect
169        (find-if-not #'oddp #(1 2 4 8 3 1 6 7) :start i :end nil))
170  (2 2 4 8 6 6 6 nil))
171
172(deftest find-if-not-vector.7
173  (loop for i from 0 to 7 collect
174        (find-if-not #'oddp #(1 2 4 8 3 1 6 7) :start i :from-end t))
175  (6 6 6 6 6 6 6 nil))
176
177(deftest find-if-not-vector.8
178  (loop for i from 0 to 7 collect
179        (find-if-not #'oddp #(1 2 4 8 3 1 6 7) :start i :end nil :from-end t))
180  (6 6 6 6 6 6 6 nil))
181
182(deftest find-if-not-vector.9
183  (loop for i from 0 to 8 collect
184        (find-if-not #'oddp #(1 2 4 8 3 1 6 7) :end i))
185  (nil nil 2 2 2 2 2 2 2))
186
187(deftest find-if-not-vector.10
188  (loop for i from 0 to 8 collect
189        (find-if-not #'oddp #(1 2 4 8 3 1 6 7) :end i :from-end t))
190  (nil nil 2 4 8 8 8 6 6))
191
192(deftest find-if-not-vector.11
193  (loop for j from 0 to 7
194        collect
195        (loop for i from (1+ j) to 8 collect
196              (find-if-not #'oddp #(1 2 4 8 3 1 6 7) :start j :end i)))
197  ((nil 2 2 2 2 2 2 2)
198   (2 2 2 2 2 2 2)
199   (4 4 4 4 4 4)
200   (8 8 8 8 8)
201   (nil nil 6 6)
202   (nil 6 6)
203   (6 6)
204   (nil)))
205
206(deftest find-if-not-vector.12
207  (loop for j from 0 to 7
208        collect
209        (loop for i from (1+ j) to 8 collect
210              (find-if-not #'oddp #(1 2 4 8 3 1 6 7) :start j :end i
211                       :from-end t)))
212  ((nil 2 4 8 8 8 6 6)
213   (2 4 8 8 8 6 6)
214   (4 8 8 8 6 6)
215   (8 8 8 6 6)
216   (nil nil 6 6)
217   (nil 6 6)
218   (6 6)
219   (nil)))
220
221(deftest find-if-not-vector.13
222  (loop for i from 0 to 6
223        collect
224        (find-if-not #'oddp #(1 6 11 32 45 71 100) :key #'1+ :start i))
225  (1 11 11 45 45 71 nil))
226
227(deftest find-if-not-vector.14
228  (loop for i from 0 to 6
229        collect
230        (find-if-not #'oddp #(1 6 11 32 45 71 100) :key '1+ :start i :from-end t))
231  (71 71 71 71 71 71 nil))
232
233(deftest find-if-not-vector.15
234  (loop for i from 0 to 7
235        collect
236        (find-if-not #'oddp #(1 6 11 32 45 71 100) :key #'1+ :end i))
237  (nil 1 1 1 1 1 1 1))
238
239(deftest find-if-not-vector.16
240  (loop for i from 0 to 7
241        collect
242        (find-if-not #'oddp #(1 6 11 32 45 71 100) :key '1+ :end i :from-end t))
243  (nil 1 1 11 11 45 71 71))
244
245(deftest find-if-not-vector.17
246  (loop for j from 0 to 7
247        collect
248        (loop for i from (1+ j) to 8 collect
249              (find-if-not #'evenp #(1 2 4 8 3 1 6 7) :start j :end i :key #'1-)))
250  ((nil 2 2 2 2 2 2 2)
251   (2 2 2 2 2 2 2)
252   (4 4 4 4 4 4)
253   (8 8 8 8 8)
254   (nil nil 6 6)
255   (nil 6 6)
256   (6 6)
257   (nil)))
258
259(deftest find-if-not-vector.18
260  (loop for j from 0 to 7
261        collect
262        (loop for i from (1+ j) to 8 collect
263              (find-if-not #'evenp #(1 2 4 8 3 1 6 7) :start j :end i
264                       :from-end t :key #'1+)))
265  ((nil 2 4 8 8 8 6 6)
266   (2 4 8 8 8 6 6)
267   (4 8 8 8 6 6)
268   (8 8 8 6 6)
269   (nil nil 6 6)
270   (nil 6 6)
271   (6 6)
272   (nil)))
273
274;;; Tests for bit vectors
275
276(deftest find-if-not-bit-vector.1
277  (find-if-not #'identity #*)
278  nil)
279
280(deftest find-if-not-bit-vector.2
281  (find-if-not #'null #*1)
282  1)
283
284(deftest find-if-not-bit-vector.3
285  (find-if-not #'not #*0)
286  0)
287
288(deftest find-if-not-bit-vector.4
289  (loop for i from 0 to 6
290        collect (loop for j from i to 7
291                      collect (find-if-not #'oddp #*0110110 :start i :end j)))
292  ((nil 0 0 0 0 0 0 0)
293   (nil nil nil 0 0 0 0)
294   (nil nil 0 0 0 0)
295   (nil 0 0 0 0)
296   (nil nil nil 0)
297   (nil nil 0)
298   (nil 0)))
299
300(deftest find-if-not-bit-vector.5
301  (loop for i from 0 to 6
302        collect (loop for j from i to 7
303                      collect (find-if-not #'oddp #*0110110 :start i :end j
304                                       :from-end t)))
305  ((nil 0 0 0 0 0 0 0)
306   (nil nil nil 0 0 0 0)
307   (nil nil 0 0 0 0)
308   (nil 0 0 0 0)
309   (nil nil nil 0)
310   (nil nil 0)
311   (nil 0)))
312
313(deftest find-if-not-bit-vector.6
314  (loop for i from 0 to 6
315        collect (loop for j from i to 7
316                      collect (find-if-not #'evenp #*0110110 :start i :end j
317                                       :from-end t :key #'1+)))
318  ((nil 0 0 0 0 0 0 0)
319   (nil nil nil 0 0 0 0)
320   (nil nil 0 0 0 0)
321   (nil 0 0 0 0)
322   (nil nil nil 0)
323   (nil nil 0)
324   (nil 0)))
325
326(deftest find-if-not-bit-vector.7
327  (loop for i from 0 to 6
328        collect (loop for j from i to 7
329                      collect (find-if-not #'evenp #*0110110 :start i :end j
330                                       :key '1-)))
331  ((nil 0 0 0 0 0 0 0)
332   (nil nil nil 0 0 0 0)
333   (nil nil 0 0 0 0)
334   (nil 0 0 0 0)
335   (nil nil nil 0)
336   (nil nil 0)
337   (nil 0)))
338
339;;; Tests for strings
340
341(deftest find-if-not-string.1
342  (find-if-not #'identity "")
343  nil)
344
345(deftest find-if-not-string.2
346  (find-if-not #'null "a")
347  #\a)
348
349(deftest find-if-not-string.2a
350  (find-if-not 'null "a")
351  #\a)
352
353(deftest find-if-not-string.3
354  (find-if-not #'odddigitp "12483167")
355  #\2)
356 
357(deftest find-if-not-string.3a
358  (find-if-not #'oddp "12483167" :key #'(lambda (c) (read-from-string (string c))))
359  #\2)
360
361(deftest find-if-not-string.4
362  (find-if-not #'odddigitp "12483167" :from-end t)
363  #\6)
364
365(deftest find-if-not-string.5
366  (loop for i from 0 to 7 collect
367        (find-if-not #'odddigitp "12483167" :start i))
368  (#\2 #\2 #\4 #\8 #\6 #\6 #\6 nil))
369
370(deftest find-if-not-string.6
371  (loop for i from 0 to 7 collect
372        (find-if-not #'odddigitp "12483167" :start i :end nil))
373  (#\2 #\2 #\4 #\8 #\6 #\6 #\6 nil))
374
375(deftest find-if-not-string.7
376  (loop for i from 0 to 7 collect
377        (find-if-not #'odddigitp "12483167" :start i :from-end t))
378  (#\6 #\6 #\6 #\6 #\6 #\6 #\6 nil))
379
380(deftest find-if-not-string.8
381  (loop for i from 0 to 7 collect
382        (find-if-not #'odddigitp "12483167" :start i :end nil :from-end t))
383  (#\6 #\6 #\6 #\6 #\6 #\6 #\6 nil))
384
385(deftest find-if-not-string.9
386  (loop for i from 0 to 8 collect
387        (find-if-not #'odddigitp "12483167" :end i))
388  (nil nil #\2 #\2 #\2 #\2 #\2 #\2 #\2))
389
390(deftest find-if-not-string.10
391  (loop for i from 0 to 8 collect
392        (find-if-not #'odddigitp "12483167" :end i :from-end t))
393  (nil nil #\2 #\4 #\8 #\8 #\8 #\6 #\6))
394
395(deftest find-if-not-string.11
396  (loop for j from 0 to 7
397        collect
398        (loop for i from (1+ j) to 8 collect
399              (find-if-not #'odddigitp "12483167" :start j :end i)))
400  ((nil #\2 #\2 #\2 #\2 #\2 #\2 #\2)
401   (#\2 #\2 #\2 #\2 #\2 #\2 #\2)
402   (#\4 #\4 #\4 #\4 #\4 #\4)
403   (#\8 #\8 #\8 #\8 #\8)
404   (nil nil #\6 #\6)
405   (nil #\6 #\6)
406   (#\6 #\6)
407   (nil)))
408
409(deftest find-if-not-string.12
410  (loop for j from 0 to 7
411        collect
412        (loop for i from (1+ j) to 8 collect
413              (find-if-not #'odddigitp "12483167" :start j :end i
414                       :from-end t)))
415  ((nil #\2 #\4 #\8 #\8 #\8 #\6 #\6)
416   (#\2 #\4 #\8 #\8 #\8 #\6 #\6)
417   (#\4 #\8 #\8 #\8 #\6 #\6)
418   (#\8 #\8 #\8 #\6 #\6)
419   (nil nil #\6 #\6)
420   (nil #\6 #\6)
421   (#\6 #\6)
422   (nil)))
423
424(deftest find-if-not-string.13
425  (loop for i from 0 to 6
426        collect
427        (find-if-not #'oddp "1473816"
428                 :key (compose #'read-from-string #'string)
429                 :start i))
430  (#\4 #\4 #\8 #\8 #\8 #\6 #\6))
431
432(deftest find-if-not-string.14
433  (loop for i from 0 to 6
434        collect
435        (find-if-not #'oddp "1473816"
436                 :key (compose #'read-from-string #'string)
437                 :start i :from-end t))
438  (#\6 #\6 #\6 #\6 #\6 #\6 #\6))
439
440(deftest find-if-not-string.15
441  (loop for i from 0 to 7
442        collect
443        (find-if-not #'oddp "1473816"
444                 :key (compose #'read-from-string #'string)
445                 :end i))
446  (nil nil #\4 #\4 #\4 #\4 #\4 #\4))
447
448(deftest find-if-not-string.16
449  (loop for i from 0 to 7
450        collect
451        (find-if-not #'oddp "1473816"
452                 :key (compose #'read-from-string #'string)
453                 :end i :from-end t))
454  (nil nil #\4 #\4 #\4 #\8 #\8 #\6))
455
456(deftest find-if-not-string.17
457  (loop for j from 0 to 6
458        collect
459        (loop for i from (1+ j) to 7 collect
460              (find-if-not #'oddp "1473816"
461                 :key (compose #'read-from-string #'string)
462                 :start j :end i)))
463  ((nil #\4 #\4 #\4 #\4 #\4 #\4)
464   (#\4 #\4 #\4 #\4 #\4 #\4)
465   (nil nil #\8 #\8 #\8)
466   (nil #\8 #\8 #\8)
467   (#\8 #\8 #\8)
468   (nil #\6)
469   (#\6))) 
470
471(deftest find-if-not-string.18
472  (loop for j from 0 to 6
473        collect
474        (loop for i from (1+ j) to 7 collect
475              (find-if-not #'oddp "1473816"
476                 :key (compose #'read-from-string #'string)
477                 :start j :end i
478                 :from-end t)))
479  ((nil #\4 #\4 #\4 #\8 #\8 #\6)
480   (#\4 #\4 #\4 #\8 #\8 #\6)
481   (nil nil #\8 #\8 #\6)
482   (nil #\8 #\8 #\6)
483   (#\8 #\8 #\6)
484   (nil #\6)
485   (#\6)))
486
487(deftest find-if-not-string.19
488  (do-special-strings
489   (s "abc1def" nil)
490   (assert (eql (find-if-not #'alpha-char-p s) #\1)))
491  nil)
492
493;;; Keyword tests
494
495(deftest find-if-not.allow-other-keys.1
496  (find-if-not #'oddp '(1 2 3 4 5) :bad t :allow-other-keys t)
497  2)
498
499(deftest find-if-not.allow-other-keys.2
500  (find-if-not #'oddp '(1 2 3 4 5) :allow-other-keys t :also-bad t)
501  2)
502
503;;; The leftmost of two :allow-other-keys arguments is the one that  matters.
504(deftest find-if-not.allow-other-keys.3
505  (find-if-not #'oddp '(1 2 3 4 5)
506            :allow-other-keys t
507            :allow-other-keys nil
508            :bad t)
509  2)
510
511(deftest find-if-not.keywords.4
512  (find-if-not #'oddp '(1 2 3 4 5) :key #'identity :key #'1+)
513  2)
514
515(deftest find-if-not.allow-other-keys.5
516  (find-if-not #'null '(nil a b c nil) :allow-other-keys nil)
517  a)
518
519;;; Error tests
520
521(deftest find-if-not.error.1
522  (check-type-error #'(lambda (x) (find-if-not #'null x)) #'(lambda (x) (typep x 'sequence)))
523  nil)
524
525(deftest find-if-not.error.4
526  (signals-error (find-if-not 'identity '(a b c . d))
527                 type-error)
528  t)
529
530(deftest find-if-not.error.5
531  (signals-error (find-if-not) program-error)
532  t)
533
534(deftest find-if-not.error.6
535  (signals-error (find-if-not #'null) program-error)
536  t)
537
538(deftest find-if-not.error.7
539  (signals-error (find-if-not #'null nil :bad t) program-error)
540  t)
541
542(deftest find-if-not.error.8
543  (signals-error (find-if-not #'null nil :bad t :allow-other-keys nil)
544                 program-error)
545  t)
546
547(deftest find-if-not.error.9
548  (signals-error (find-if-not #'null nil 1 1) program-error)
549  t)
550
551(deftest find-if-not.error.10
552  (signals-error (find-if-not #'null nil :key) program-error)
553  t)
554
555(deftest find-if-not.error.11
556  (signals-error (locally (find-if-not #'null 'b) t) type-error)
557  t)
558
559(deftest find-if-not.error.12
560  (signals-error (find-if-not #'cons '(a b c)) program-error)
561  t)
562
563(deftest find-if-not.error.13
564  (signals-error (find-if-not #'car '(a b c)) type-error)
565  t)
566
567(deftest find-if-not.error.14
568  (signals-error (find-if-not #'identity '(a b c) :key #'cons)
569                 program-error)
570  t)
571
572(deftest find-if-not.error.15
573  (signals-error (find-if-not #'identity '(a b c) :key #'car)
574                 type-error)
575  t)
576
577;;; Order of evaluation tests
578
579(deftest find-if-not.order.1
580  (let ((i 0) x y)
581    (values
582     (find-if-not (progn (setf x (incf i)) #'null)
583                  (progn (setf y (incf i)) '(nil nil nil a nil nil)))
584     i x y))
585  a 2 1 2)
586
587(deftest find-if-not.order.2
588  (let ((i 0) a b c d e f)
589    (values
590     (find-if-not (progn (setf a (incf i)) #'identity)
591                  (progn (setf b (incf i)) '(nil nil nil a nil nil))
592                  :start (progn (setf c (incf i)) 1)
593                  :end   (progn (setf d (incf i)) 4)
594                  :from-end (setf e (incf i))
595                  :key   (progn (setf f (incf i)) #'null)
596                  )
597     i a b c d e f))
598  a 6 1 2 3 4 5 6)
599
600
601(deftest find-if-not.order.3
602  (let ((i 0) a b c d e f)
603    (values
604     (find-if-not (progn (setf a (incf i)) #'identity)
605                  (progn (setf b (incf i)) '(nil nil nil a nil nil))
606                  :key   (progn (setf c (incf i)) #'null)
607                  :from-end (setf d (incf i))
608                  :end   (progn (setf e (incf i)) 4)
609                  :start (progn (setf f (incf i)) 1)
610                  )
611     i a b c d e f))
612  a 6 1 2 3 4 5 6)
Note: See TracBrowser for help on using the repository browser.