Mercurial > hg > xemacs-beta
comparison tests/automated/lisp-tests.el @ 384:bbff43aa5eb7 r21-2-7
Import from CVS: tag r21-2-7
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:08:24 +0200 |
parents | |
children | aabb7f5b1c81 |
comparison
equal
deleted
inserted
replaced
383:6a50c6a581a5 | 384:bbff43aa5eb7 |
---|---|
1 ;; Copyright (C) 1998 Free Software Foundation, Inc. | |
2 | |
3 ;; Author: Martin Buchholz <martin@xemacs.org> | |
4 ;; Maintainer: Martin Buchholz <martin@xemacs.org> | |
5 ;; Created: 1998 | |
6 ;; Keywords: tests | |
7 | |
8 ;; This file is part of XEmacs. | |
9 | |
10 ;; XEmacs is free software; you can redistribute it and/or modify it | |
11 ;; under the terms of the GNU General Public License as published by | |
12 ;; the Free Software Foundation; either version 2, or (at your option) | |
13 ;; any later version. | |
14 | |
15 ;; XEmacs is distributed in the hope that it will be useful, but | |
16 ;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
18 ;; General Public License for more details. | |
19 | |
20 ;; You should have received a copy of the GNU General Public License | |
21 ;; along with XEmacs; see the file COPYING. If not, write to the Free | |
22 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | |
23 ;; 02111-1307, USA. | |
24 | |
25 ;;; Synched up with: not in FSF Emacs. | |
26 | |
27 ;;; Commentary: | |
28 | |
29 ;;; Test basic Lisp engine functionality | |
30 ;;; See test-harness.el for instructions on how to run these tests. | |
31 | |
32 (eval-when-compile | |
33 (condition-case nil | |
34 (require 'test-harness) | |
35 (file-error | |
36 (push "." load-path) | |
37 (when (and (boundp 'load-file-name) (stringp load-file-name)) | |
38 (push (file-name-directory load-file-name) load-path)) | |
39 (require 'test-harness)))) | |
40 | |
41 (Check-Error wrong-number-of-arguments (setq setq-test-foo)) | |
42 (Check-Error wrong-number-of-arguments (setq setq-test-foo 1 setq-test-bar)) | |
43 (Check-Error wrong-number-of-arguments (setq-default setq-test-foo)) | |
44 (Check-Error wrong-number-of-arguments (setq-default setq-test-foo 1 setq-test-bar)) | |
45 (Assert (eq (setq) nil)) | |
46 (Assert (eq (setq-default) nil)) | |
47 (Assert (eq (setq setq-test-foo 42) 42)) | |
48 (Assert (eq (setq-default setq-test-foo 42) 42)) | |
49 (Assert (eq (setq setq-test-foo 42 setq-test-bar 99) 99)) | |
50 (Assert (eq (setq-default setq-test-foo 42 setq-test-bar 99) 99)) | |
51 | |
52 (macrolet ((test-setq (expected-result &rest body) | |
53 `(progn | |
54 (defun test-setq-fun () ,@body) | |
55 (Assert (eq ,expected-result (test-setq-fun))) | |
56 (byte-compile 'test-setq-fun) | |
57 (Assert (eq ,expected-result (test-setq-fun)))))) | |
58 (test-setq nil (setq)) | |
59 (test-setq nil (setq-default)) | |
60 (test-setq 42 (setq test-setq-var 42)) | |
61 (test-setq 42 (setq-default test-setq-var 42)) | |
62 (test-setq 42 (setq test-setq-bar 99 test-setq-var 42)) | |
63 (test-setq 42 (setq-default test-setq-bar 99 test-setq-var 42)) | |
64 ) | |
65 | |
66 (let ((my-vector [1 2 3 4]) | |
67 (my-bit-vector (bit-vector 1 0 1 0)) | |
68 (my-string "1234") | |
69 (my-list '(1 2 3 4))) | |
70 | |
71 ;;(Assert (fooooo)) ;; Generate Other failure | |
72 ;;(Assert (eq 1 2)) ;; Generate Assertion failure | |
73 | |
74 (dolist (sequence (list my-vector my-bit-vector my-string my-list)) | |
75 (Assert (sequencep sequence)) | |
76 (Assert (eq 4 (length sequence)))) | |
77 | |
78 (dolist (array (list my-vector my-bit-vector my-string)) | |
79 (Assert (arrayp array))) | |
80 | |
81 (Assert (eq (elt my-vector 0) 1)) | |
82 (Assert (eq (elt my-bit-vector 0) 1)) | |
83 (Assert (eq (elt my-string 0) ?1)) | |
84 (Assert (eq (elt my-list 0) 1)) | |
85 | |
86 (fillarray my-vector 5) | |
87 (fillarray my-bit-vector 1) | |
88 (fillarray my-string ?5) | |
89 | |
90 (dolist (array (list my-vector my-bit-vector)) | |
91 (Assert (eq 4 (length array)))) | |
92 | |
93 (Assert (eq (elt my-vector 0) 5)) | |
94 (Assert (eq (elt my-bit-vector 0) 1)) | |
95 (Assert (eq (elt my-string 0) ?5)) | |
96 | |
97 (Assert (eq (elt my-vector 3) 5)) | |
98 (Assert (eq (elt my-bit-vector 3) 1)) | |
99 (Assert (eq (elt my-string 3) ?5)) | |
100 | |
101 (fillarray my-bit-vector 0) | |
102 (Assert (eq 4 (length my-bit-vector))) | |
103 (Assert (eq (elt my-bit-vector 2) 0)) | |
104 ) | |
105 | |
106 (defun make-circular-list (length) | |
107 "Create evil emacs-crashing circular list of length LENGTH" | |
108 (let ((circular-list | |
109 (make-list | |
110 length | |
111 'you-are-trapped-in-a-twisty-maze-of-cons-cells-all-alike))) | |
112 (setcdr (last circular-list) circular-list) | |
113 circular-list)) | |
114 | |
115 ;;----------------------------------------------------- | |
116 ;; Test `nconc' | |
117 ;;----------------------------------------------------- | |
118 (defun make-list-012 () (list 0 1 2)) | |
119 | |
120 (Check-Error wrong-type-argument (nconc 'foo nil)) | |
121 | |
122 (dolist (length `(1 2 3 4 1000 2000)) | |
123 (Check-Error circular-list (nconc (make-circular-list length) 'foo)) | |
124 (Check-Error circular-list (nconc '(1 . 2) (make-circular-list length) 'foo)) | |
125 (Check-Error circular-list (nconc '(1 . 2) '(3 . 4) (make-circular-list length) 'foo))) | |
126 | |
127 (Assert (eq (nconc) nil)) | |
128 (Assert (eq (nconc nil) nil)) | |
129 (Assert (eq (nconc nil nil) nil)) | |
130 (Assert (eq (nconc nil nil nil) nil)) | |
131 | |
132 (let ((x (make-list-012))) (Assert (eq (nconc nil x) x))) | |
133 (let ((x (make-list-012))) (Assert (eq (nconc x nil) x))) | |
134 (let ((x (make-list-012))) (Assert (eq (nconc nil x nil) x))) | |
135 (let ((x (make-list-012))) (Assert (eq (nconc x) x))) | |
136 (let ((x (make-list-012))) (Assert (eq (nconc x (make-circular-list 3)) x))) | |
137 | |
138 (Assert (equal (nconc '(1 . 2) '(3 . 4) '(5 . 6)) '(1 3 5 . 6))) | |
139 | |
140 (let ((y (nconc (make-list-012) nil (list 3 4 5) nil))) | |
141 (Assert (eq (length y) 6)) | |
142 (Assert (eq (nth 3 y) 3))) | |
143 | |
144 ;;----------------------------------------------------- | |
145 ;; Test `last' | |
146 ;;----------------------------------------------------- | |
147 (Check-Error wrong-type-argument (last 'foo)) | |
148 (Check-Error wrong-number-of-arguments (last)) | |
149 (Check-Error wrong-number-of-arguments (last '(1 2) 1 1)) | |
150 (Check-Error circular-list (last (make-circular-list 1))) | |
151 (Check-Error circular-list (last (make-circular-list 2000))) | |
152 (let ((x (list 0 1 2 3))) | |
153 (Assert (eq (last nil) nil)) | |
154 (Assert (eq (last x 0) nil)) | |
155 (Assert (eq (last x ) (cdddr x))) | |
156 (Assert (eq (last x 1) (cdddr x))) | |
157 (Assert (eq (last x 2) (cddr x))) | |
158 (Assert (eq (last x 3) (cdr x))) | |
159 (Assert (eq (last x 4) x)) | |
160 (Assert (eq (last x 9) x)) | |
161 (Assert (eq (last `(1 . 2) 0) 2)) | |
162 ) | |
163 | |
164 ;;----------------------------------------------------- | |
165 ;; Test `butlast' and `nbutlast' | |
166 ;;----------------------------------------------------- | |
167 (Check-Error wrong-type-argument (butlast 'foo)) | |
168 (Check-Error wrong-type-argument (nbutlast 'foo)) | |
169 (Check-Error wrong-number-of-arguments (butlast)) | |
170 (Check-Error wrong-number-of-arguments (nbutlast)) | |
171 (Check-Error wrong-number-of-arguments (butlast '(1 2) 1 1)) | |
172 (Check-Error wrong-number-of-arguments (nbutlast '(1 2) 1 1)) | |
173 (Check-Error circular-list (butlast (make-circular-list 1))) | |
174 (Check-Error circular-list (nbutlast (make-circular-list 1))) | |
175 (Check-Error circular-list (butlast (make-circular-list 2000))) | |
176 (Check-Error circular-list (nbutlast (make-circular-list 2000))) | |
177 | |
178 (let* ((x (list 0 1 2 3)) | |
179 (y (butlast x)) | |
180 (z (nbutlast x))) | |
181 (Assert (eq z x)) | |
182 (Assert (not (eq y x))) | |
183 (Assert (equal y '(0 1 2))) | |
184 (Assert (equal z y))) | |
185 | |
186 (let* ((x (list 0 1 2 3 4)) | |
187 (y (butlast x 2)) | |
188 (z (nbutlast x 2))) | |
189 (Assert (eq z x)) | |
190 (Assert (not (eq y x))) | |
191 (Assert (equal y '(0 1 2))) | |
192 (Assert (equal z y))) | |
193 | |
194 (let* ((x (list 0 1 2 3)) | |
195 (y (butlast x 0)) | |
196 (z (nbutlast x 0))) | |
197 (Assert (eq z x)) | |
198 (Assert (not (eq y x))) | |
199 (Assert (equal y '(0 1 2 3))) | |
200 (Assert (equal z y))) | |
201 | |
202 (Assert (eq (butlast '(x)) nil)) | |
203 (Assert (eq (nbutlast '(x)) nil)) | |
204 (Assert (eq (butlast '()) nil)) | |
205 (Assert (eq (nbutlast '()) nil)) | |
206 | |
207 ;;----------------------------------------------------- | |
208 ;; Test `copy-list' | |
209 ;;----------------------------------------------------- | |
210 (Check-Error wrong-type-argument (copy-list 'foo)) | |
211 (Check-Error wrong-number-of-arguments (copy-list)) | |
212 (Check-Error wrong-number-of-arguments (copy-list '(1 2) 1)) | |
213 (Check-Error circular-list (copy-list (make-circular-list 1))) | |
214 (Check-Error circular-list (copy-list (make-circular-list 2000))) | |
215 (Assert (eq '() (copy-list '()))) | |
216 (dolist (x `((1) (1 2) (1 2 3) (1 2 . 3))) | |
217 (let ((y (copy-list x))) | |
218 (Assert (and (equal x y) (not (eq x y)))))) | |
219 | |
220 ;;----------------------------------------------------- | |
221 ;; Arithmetic operations | |
222 ;;----------------------------------------------------- | |
223 | |
224 ;; Test `+' | |
225 (Assert (eq (+ 1 1) 2)) | |
226 (Assert (= (+ 1.0 1.0) 2.0)) | |
227 (Assert (= (+ 1.0 3.0 0.0) 4.0)) | |
228 (Assert (= (+ 1 1.0) 2.0)) | |
229 (Assert (= (+ 1.0 1) 2.0)) | |
230 (Assert (= (+ 1.0 1 1) 3.0)) | |
231 (Assert (= (+ 1 1 1.0) 3.0)) | |
232 | |
233 ;; Test `-' | |
234 (Check-Error wrong-number-of-arguments (-)) | |
235 (Assert (eq (- 0) 0)) | |
236 (Assert (eq (- 1) -1)) | |
237 (dolist (one `(1 1.0 ?\1 ,(Int-to-Marker 1))) | |
238 (Assert (= (+ 1 one) 2)) | |
239 (Assert (= (+ one) 1)) | |
240 (Assert (= (+ one) one)) | |
241 (Assert (= (- one) -1)) | |
242 (Assert (= (- one one) 0)) | |
243 (Assert (= (- one one one) -1)) | |
244 (Assert (= (+ one 1) 2)) | |
245 (dolist (zero `(0 0.0 ?\0)) | |
246 (Assert (= (+ 1 zero) 1)) | |
247 (Assert (= (+ zero 1) 1)) | |
248 (Assert (= (- zero) zero)) | |
249 (Assert (= (- zero) 0)) | |
250 (Assert (= (- zero zero) 0)) | |
251 (Assert (= (- zero one one) -2)))) | |
252 | |
253 (Assert (= (- 1.5 1) .5)) | |
254 (Assert (= (- 1 1.5) (- .5))) | |
255 | |
256 ;; Test `/' | |
257 | |
258 ;; Test division by zero errors | |
259 (dolist (zero `(0 0.0 ?\0)) | |
260 (Check-Error arith-error (/ zero)) | |
261 (dolist (n1 `(42 42.0 ?\042 ,(Int-to-Marker 42))) | |
262 (Check-Error arith-error (/ n1 zero)) | |
263 (dolist (n2 `(3 3.0 ?\03 ,(Int-to-Marker 3))) | |
264 (Check-Error arith-error (/ n1 n2 zero))))) | |
265 | |
266 ;; Other tests for `/' | |
267 (Check-Error wrong-number-of-arguments (/)) | |
268 (let (x) | |
269 (Assert (= (/ (setq x 2)) 0)) | |
270 (Assert (= (/ (setq x 2.0)) 0.5))) | |
271 | |
272 (dolist (six `(6 6.0 ?\06)) | |
273 (dolist (two `(2 2.0 ?\02)) | |
274 (dolist (three `(3 3.0 ?\03)) | |
275 (Assert (= (/ six two) three))))) | |
276 | |
277 (dolist (three `(3 3.0 ?\03)) | |
278 (Assert (= (/ three 2.0) 1.5))) | |
279 (dolist (two `(2 2.0 ?\02)) | |
280 (Assert (= (/ 3.0 two) 1.5))) | |
281 | |
282 ;; Test `*' | |
283 (Assert (= 1 (*))) | |
284 | |
285 (dolist (one `(1 1.0 ?\01 ,(Int-to-Marker 1))) | |
286 (Assert (= 1 (* one)))) | |
287 | |
288 (dolist (two `(2 2.0 ?\02)) | |
289 (Assert (= 2 (* two)))) | |
290 | |
291 (dolist (six `(6 6.0 ?\06)) | |
292 (dolist (two `(2 2.0 ?\02)) | |
293 (dolist (three `(3 3.0 ?\03)) | |
294 (Assert (= (* three two) six))))) | |
295 | |
296 (dolist (three `(3 3.0 ?\03)) | |
297 (dolist (two `(2 2.0 ?\02)) | |
298 (Assert (= (* 1.5 two) three)) | |
299 (dolist (five `(5 5.0 ?\05)) | |
300 (Assert (= 30 (* five two three)))))) | |
301 | |
302 ;; Test `+' | |
303 (Assert (= 0 (+))) | |
304 | |
305 (dolist (one `(1 1.0 ?\01 ,(Int-to-Marker 1))) | |
306 (Assert (= 1 (+ one)))) | |
307 | |
308 (dolist (two `(2 2.0 ?\02)) | |
309 (Assert (= 2 (+ two)))) | |
310 | |
311 (dolist (five `(5 5.0 ?\05)) | |
312 (dolist (two `(2 2.0 ?\02)) | |
313 (dolist (three `(3 3.0 ?\03)) | |
314 (Assert (= (+ three two) five)) | |
315 (Assert (= 10 (+ five two three)))))) | |
316 | |
317 ;; Test `max', `min' | |
318 (dolist (one `(1 1.0 ?\01 ,(Int-to-Marker 1))) | |
319 (Assert (= one (max one))) | |
320 (Assert (= one (max one one))) | |
321 (Assert (= one (max one one one))) | |
322 (Assert (= one (min one))) | |
323 (Assert (= one (min one one))) | |
324 (Assert (= one (min one one one))) | |
325 (dolist (two `(2 2.0 ?\02 ,(Int-to-Marker 2))) | |
326 (Assert (= one (min one two))) | |
327 (Assert (= one (min one two two))) | |
328 (Assert (= one (min two two one))) | |
329 (Assert (= two (max one two))) | |
330 (Assert (= two (max one two two))) | |
331 (Assert (= two (max two two one))))) | |
332 | |
333 ;;----------------------------------------------------- | |
334 ;; Logical bit-twiddling operations | |
335 ;;----------------------------------------------------- | |
336 (Assert (= (logxor) 0)) | |
337 (Assert (= (logior) 0)) | |
338 (Assert (= (logand) -1)) | |
339 | |
340 (Check-Error wrong-type-argument (logxor 3.0)) | |
341 (Check-Error wrong-type-argument (logior 3.0)) | |
342 (Check-Error wrong-type-argument (logand 3.0)) | |
343 | |
344 (dolist (three `(3 ?\03)) | |
345 (Assert (eq 3 (logand three))) | |
346 (Assert (eq 3 (logxor three))) | |
347 (Assert (eq 3 (logior three))) | |
348 (Assert (eq 3 (logand three three))) | |
349 (Assert (eq 0 (logxor three three))) | |
350 (Assert (eq 3 (logior three three)))) | |
351 | |
352 (dolist (one `(1 ?\01 ,(Int-to-Marker 1))) | |
353 (dolist (two `(2 ?\02)) | |
354 (Assert (eq 0 (logand one two))) | |
355 (Assert (eq 3 (logior one two))) | |
356 (Assert (eq 3 (logxor one two)))) | |
357 (dolist (three `(3 ?\03)) | |
358 (Assert (eq 1 (logand one three))) | |
359 (Assert (eq 3 (logior one three))) | |
360 (Assert (eq 2 (logxor one three))))) | |
361 | |
362 ;;----------------------------------------------------- | |
363 ;; Test `%', mod | |
364 ;;----------------------------------------------------- | |
365 (Check-Error wrong-number-of-arguments (%)) | |
366 (Check-Error wrong-number-of-arguments (% 1)) | |
367 (Check-Error wrong-number-of-arguments (% 1 2 3)) | |
368 | |
369 (Check-Error wrong-number-of-arguments (mod)) | |
370 (Check-Error wrong-number-of-arguments (mod 1)) | |
371 (Check-Error wrong-number-of-arguments (mod 1 2 3)) | |
372 | |
373 (Check-Error wrong-type-argument (% 10.0 2)) | |
374 (Check-Error wrong-type-argument (% 10 2.0)) | |
375 | |
376 (dotimes (j 30) | |
377 (let ((x (- (random) (random)))) | |
378 (Assert (eq x (+ (% x 17) (* (/ x 17) 17)))) | |
379 (Assert (eq (- x) (+ (% (- x) 17) (* (/ (- x) 17) 17)))) | |
380 (Assert (eq (% x -17) (- (% (- x) 17)))) | |
381 )) | |
382 | |
383 (macrolet | |
384 ((division-test (seven) | |
385 `(progn | |
386 (Assert (eq (% ,seven 2) 1)) | |
387 (Assert (eq (% ,seven -2) 1)) | |
388 (Assert (eq (% (- ,seven) 2) -1)) | |
389 (Assert (eq (% (- ,seven) -2) -1)) | |
390 | |
391 (Assert (eq (% ,seven 4) 3)) | |
392 (Assert (eq (% ,seven -4) 3)) | |
393 (Assert (eq (% (- ,seven) 4) -3)) | |
394 (Assert (eq (% (- ,seven) -4) -3)) | |
395 | |
396 (Assert (eq (% 35 ,seven) 0)) | |
397 (Assert (eq (% -35 ,seven) 0)) | |
398 (Assert (eq (% 35 (- ,seven)) 0)) | |
399 (Assert (eq (% -35 (- ,seven)) 0)) | |
400 | |
401 (Assert (eq (mod ,seven 2) 1)) | |
402 (Assert (eq (mod ,seven -2) -1)) | |
403 (Assert (eq (mod (- ,seven) 2) 1)) | |
404 (Assert (eq (mod (- ,seven) -2) -1)) | |
405 | |
406 (Assert (eq (mod ,seven 4) 3)) | |
407 (Assert (eq (mod ,seven -4) -1)) | |
408 (Assert (eq (mod (- ,seven) 4) 1)) | |
409 (Assert (eq (mod (- ,seven) -4) -3)) | |
410 | |
411 (Assert (eq (mod 35 ,seven) 0)) | |
412 (Assert (eq (mod -35 ,seven) 0)) | |
413 (Assert (eq (mod 35 (- ,seven)) 0)) | |
414 (Assert (eq (mod -35 (- ,seven)) 0)) | |
415 | |
416 (Assert (= (mod ,seven 2.0) 1.0)) | |
417 (Assert (= (mod ,seven -2.0) -1.0)) | |
418 (Assert (= (mod (- ,seven) 2.0) 1.0)) | |
419 (Assert (= (mod (- ,seven) -2.0) -1.0)) | |
420 | |
421 (Assert (= (mod ,seven 4.0) 3.0)) | |
422 (Assert (= (mod ,seven -4.0) -1.0)) | |
423 (Assert (= (mod (- ,seven) 4.0) 1.0)) | |
424 (Assert (= (mod (- ,seven) -4.0) -3.0)) | |
425 | |
426 (Assert (eq (% 0 ,seven) 0)) | |
427 (Assert (eq (% 0 (- ,seven)) 0)) | |
428 | |
429 (Assert (eq (mod 0 ,seven) 0)) | |
430 (Assert (eq (mod 0 (- ,seven)) 0)) | |
431 | |
432 (Assert (= (mod 0.0 ,seven) 0.0)) | |
433 (Assert (= (mod 0.0 (- ,seven)) 0.0))))) | |
434 | |
435 (division-test 7) | |
436 (division-test ?\07) | |
437 (division-test (Int-to-Marker 7))) | |
438 | |
439 | |
440 | |
441 ;;----------------------------------------------------- | |
442 ;; Arithmetic comparison operations | |
443 ;;----------------------------------------------------- | |
444 (Check-Error wrong-number-of-arguments (=)) | |
445 (Check-Error wrong-number-of-arguments (<)) | |
446 (Check-Error wrong-number-of-arguments (>)) | |
447 (Check-Error wrong-number-of-arguments (<=)) | |
448 (Check-Error wrong-number-of-arguments (>=)) | |
449 (Check-Error wrong-number-of-arguments (/=)) | |
450 | |
451 ;; One argument always yields t | |
452 (loop for x in `(1 1.0 ,(Int-to-Marker 1) ?z) do | |
453 (Assert (eq t (= x))) | |
454 (Assert (eq t (< x))) | |
455 (Assert (eq t (> x))) | |
456 (Assert (eq t (>= x))) | |
457 (Assert (eq t (<= x))) | |
458 (Assert (eq t (/= x))) | |
459 ) | |
460 | |
461 ;; Type checking | |
462 (Check-Error wrong-type-argument (= 'foo 1)) | |
463 (Check-Error wrong-type-argument (<= 'foo 1)) | |
464 (Check-Error wrong-type-argument (>= 'foo 1)) | |
465 (Check-Error wrong-type-argument (< 'foo 1)) | |
466 (Check-Error wrong-type-argument (> 'foo 1)) | |
467 (Check-Error wrong-type-argument (/= 'foo 1)) | |
468 | |
469 ;; Meat | |
470 (dolist (one `(1 1.0 ,(Int-to-Marker 1) ?\01)) | |
471 (dolist (two `(2 2.0 ?\02)) | |
472 (Assert (< one two)) | |
473 (Assert (<= one two)) | |
474 (Assert (<= two two)) | |
475 (Assert (> two one)) | |
476 (Assert (>= two one)) | |
477 (Assert (>= two two)) | |
478 (Assert (/= one two)) | |
479 (Assert (not (/= two two))) | |
480 (Assert (not (< one one))) | |
481 (Assert (not (> one one))) | |
482 (Assert (<= one one two two)) | |
483 (Assert (not (< one one two two))) | |
484 (Assert (>= two two one one)) | |
485 (Assert (not (> two two one one))) | |
486 (Assert (= one one one)) | |
487 (Assert (not (= one one one two))) | |
488 (Assert (not (/= one two one))) | |
489 )) | |
490 | |
491 (dolist (one `(1 1.0 ,(Int-to-Marker 1) ?\01)) | |
492 (dolist (two `(2 2.0 ?\02)) | |
493 (Assert (< one two)) | |
494 (Assert (<= one two)) | |
495 (Assert (<= two two)) | |
496 (Assert (> two one)) | |
497 (Assert (>= two one)) | |
498 (Assert (>= two two)) | |
499 (Assert (/= one two)) | |
500 (Assert (not (/= two two))) | |
501 (Assert (not (< one one))) | |
502 (Assert (not (> one one))) | |
503 (Assert (<= one one two two)) | |
504 (Assert (not (< one one two two))) | |
505 (Assert (>= two two one one)) | |
506 (Assert (not (> two two one one))) | |
507 (Assert (= one one one)) | |
508 (Assert (not (= one one one two))) | |
509 (Assert (not (/= one two one))) | |
510 )) | |
511 | |
512 ;; ad-hoc | |
513 (Assert (< 1 2)) | |
514 (Assert (< 1 2 3 4 5 6)) | |
515 (Assert (not (< 1 1))) | |
516 (Assert (not (< 2 1))) | |
517 | |
518 | |
519 (Assert (not (< 1 1))) | |
520 (Assert (< 1 2 3 4 5 6)) | |
521 (Assert (<= 1 2 3 4 5 6)) | |
522 (Assert (<= 1 2 3 4 5 6 6)) | |
523 (Assert (not (< 1 2 3 4 5 6 6))) | |
524 (Assert (<= 1 1)) | |
525 | |
526 (Assert (not (eq (point) (point-marker)))) | |
527 (Assert (= 1 (Int-to-Marker 1))) | |
528 (Assert (= (point) (point-marker))) | |
529 | |
530 ;;----------------------------------------------------- | |
531 ;; testing list-walker functions | |
532 ;;----------------------------------------------------- | |
533 (macrolet | |
534 ((test-fun | |
535 (fun) | |
536 `(progn | |
537 (Check-Error wrong-number-of-arguments (,fun)) | |
538 (Check-Error wrong-number-of-arguments (,fun nil)) | |
539 (Check-Error malformed-list (,fun nil 1)) | |
540 ,@(loop for n in `(1 2 2000) | |
541 collect `(Check-Error circular-list (,fun 1 (make-circular-list ,n)))))) | |
542 (test-funs (&rest funs) `(progn ,@(loop for fun in funs collect `(test-fun ,fun))))) | |
543 | |
544 (test-funs member old-member | |
545 memq old-memq | |
546 assoc old-assoc | |
547 rassoc old-rassoc | |
548 rassq old-rassq | |
549 delete old-delete | |
550 delq old-delq | |
551 remassoc remassq remrassoc remrassq)) | |
552 | |
553 (let ((x '((1 . 2) 3 (4 . 5)))) | |
554 (Assert (eq (assoc 1 x) (car x))) | |
555 (Assert (eq (assq 1 x) (car x))) | |
556 (Assert (eq (rassoc 1 x) nil)) | |
557 (Assert (eq (rassq 1 x) nil)) | |
558 (Assert (eq (assoc 2 x) nil)) | |
559 (Assert (eq (assq 2 x) nil)) | |
560 (Assert (eq (rassoc 2 x) (car x))) | |
561 (Assert (eq (rassq 2 x) (car x))) | |
562 (Assert (eq (assoc 3 x) nil)) | |
563 (Assert (eq (assq 3 x) nil)) | |
564 (Assert (eq (rassoc 3 x) nil)) | |
565 (Assert (eq (rassq 3 x) nil)) | |
566 (Assert (eq (assoc 4 x) (caddr x))) | |
567 (Assert (eq (assq 4 x) (caddr x))) | |
568 (Assert (eq (rassoc 4 x) nil)) | |
569 (Assert (eq (rassq 4 x) nil)) | |
570 (Assert (eq (assoc 5 x) nil)) | |
571 (Assert (eq (assq 5 x) nil)) | |
572 (Assert (eq (rassoc 5 x) (caddr x))) | |
573 (Assert (eq (rassq 5 x) (caddr x))) | |
574 (Assert (eq (assoc 6 x) nil)) | |
575 (Assert (eq (assq 6 x) nil)) | |
576 (Assert (eq (rassoc 6 x) nil)) | |
577 (Assert (eq (rassq 6 x) nil))) | |
578 | |
579 (let ((x '(("1" . "2") "3" ("4" . "5")))) | |
580 (Assert (eq (assoc "1" x) (car x))) | |
581 (Assert (eq (assq "1" x) nil)) | |
582 (Assert (eq (rassoc "1" x) nil)) | |
583 (Assert (eq (rassq "1" x) nil)) | |
584 (Assert (eq (assoc "2" x) nil)) | |
585 (Assert (eq (assq "2" x) nil)) | |
586 (Assert (eq (rassoc "2" x) (car x))) | |
587 (Assert (eq (rassq "2" x) nil)) | |
588 (Assert (eq (assoc "3" x) nil)) | |
589 (Assert (eq (assq "3" x) nil)) | |
590 (Assert (eq (rassoc "3" x) nil)) | |
591 (Assert (eq (rassq "3" x) nil)) | |
592 (Assert (eq (assoc "4" x) (caddr x))) | |
593 (Assert (eq (assq "4" x) nil)) | |
594 (Assert (eq (rassoc "4" x) nil)) | |
595 (Assert (eq (rassq "4" x) nil)) | |
596 (Assert (eq (assoc "5" x) nil)) | |
597 (Assert (eq (assq "5" x) nil)) | |
598 (Assert (eq (rassoc "5" x) (caddr x))) | |
599 (Assert (eq (rassq "5" x) nil)) | |
600 (Assert (eq (assoc "6" x) nil)) | |
601 (Assert (eq (assq "6" x) nil)) | |
602 (Assert (eq (rassoc "6" x) nil)) | |
603 (Assert (eq (rassq "6" x) nil))) | |
604 | |
605 (flet ((a () (list '(1 . 2) 3 '(4 . 5)))) | |
606 (Assert (let* ((x (a)) (y (remassoc 1 x))) (and (not (eq x y)) (equal y '(3 (4 . 5)))))) | |
607 (Assert (let* ((x (a)) (y (remassq 1 x))) (and (not (eq x y)) (equal y '(3 (4 . 5)))))) | |
608 (Assert (let* ((x (a)) (y (remrassoc 1 x))) (and (eq x y) (equal y (a))))) | |
609 (Assert (let* ((x (a)) (y (remrassq 1 x))) (and (eq x y) (equal y (a))))) | |
610 | |
611 (Assert (let* ((x (a)) (y (remassoc 2 x))) (and (eq x y) (equal y (a))))) | |
612 (Assert (let* ((x (a)) (y (remassq 2 x))) (and (eq x y) (equal y (a))))) | |
613 (Assert (let* ((x (a)) (y (remrassoc 2 x))) (and (not (eq x y)) (equal y '(3 (4 . 5)))))) | |
614 (Assert (let* ((x (a)) (y (remrassq 2 x))) (and (not (eq x y)) (equal y '(3 (4 . 5)))))) | |
615 | |
616 (Assert (let* ((x (a)) (y (remassoc 3 x))) (and (eq x y) (equal y (a))))) | |
617 (Assert (let* ((x (a)) (y (remassq 3 x))) (and (eq x y) (equal y (a))))) | |
618 (Assert (let* ((x (a)) (y (remrassoc 3 x))) (and (eq x y) (equal y (a))))) | |
619 (Assert (let* ((x (a)) (y (remrassq 3 x))) (and (eq x y) (equal y (a))))) | |
620 | |
621 (Assert (let* ((x (a)) (y (remassoc 4 x))) (and (eq x y) (equal y '((1 . 2) 3))))) | |
622 (Assert (let* ((x (a)) (y (remassq 4 x))) (and (eq x y) (equal y '((1 . 2) 3))))) | |
623 (Assert (let* ((x (a)) (y (remrassoc 4 x))) (and (eq x y) (equal y (a))))) | |
624 (Assert (let* ((x (a)) (y (remrassq 4 x))) (and (eq x y) (equal y (a))))) | |
625 | |
626 (Assert (let* ((x (a)) (y (remassoc 5 x))) (and (eq x y) (equal y (a))))) | |
627 (Assert (let* ((x (a)) (y (remassq 5 x))) (and (eq x y) (equal y (a))))) | |
628 (Assert (let* ((x (a)) (y (remrassoc 5 x))) (and (eq x y) (equal y '((1 . 2) 3))))) | |
629 (Assert (let* ((x (a)) (y (remrassq 5 x))) (and (eq x y) (equal y '((1 . 2) 3))))) | |
630 | |
631 (Assert (let* ((x (a)) (y (remassoc 6 x))) (and (eq x y) (equal y (a))))) | |
632 (Assert (let* ((x (a)) (y (remassq 6 x))) (and (eq x y) (equal y (a))))) | |
633 (Assert (let* ((x (a)) (y (remrassoc 6 x))) (and (eq x y) (equal y (a))))) | |
634 (Assert (let* ((x (a)) (y (remrassq 6 x))) (and (eq x y) (equal y (a))))) | |
635 | |
636 (Assert (let* ((x (a)) (y (delete 3 x))) (and (eq x y) (equal y '((1 . 2) (4 . 5)))))) | |
637 (Assert (let* ((x (a)) (y (delq 3 x))) (and (eq x y) (equal y '((1 . 2) (4 . 5)))))) | |
638 (Assert (let* ((x (a)) (y (old-delete 3 x))) (and (eq x y) (equal y '((1 . 2) (4 . 5)))))) | |
639 (Assert (let* ((x (a)) (y (old-delq 3 x))) (and (eq x y) (equal y '((1 . 2) (4 . 5)))))) | |
640 | |
641 (Assert (let* ((x (a)) (y (delete '(1 . 2) x))) (and (not (eq x y)) (equal y '(3 (4 . 5)))))) | |
642 (Assert (let* ((x (a)) (y (delq '(1 . 2) x))) (and (eq x y) (equal y (a))))) | |
643 (Assert (let* ((x (a)) (y (old-delete '(1 . 2) x))) (and (not (eq x y)) (equal y '(3 (4 . 5)))))) | |
644 (Assert (let* ((x (a)) (y (old-delq '(1 . 2) x))) (and (eq x y) (equal y (a))))) | |
645 ) | |
646 | |
647 | |
648 | |
649 (flet ((a () (list '("1" . "2") "3" '("4" . "5")))) | |
650 (Assert (let* ((x (a)) (y (remassoc "1" x))) (and (not (eq x y)) (equal y '("3" ("4" . "5")))))) | |
651 (Assert (let* ((x (a)) (y (remassq "1" x))) (and (eq x y) (equal y (a))))) | |
652 (Assert (let* ((x (a)) (y (remrassoc "1" x))) (and (eq x y) (equal y (a))))) | |
653 (Assert (let* ((x (a)) (y (remrassq "1" x))) (and (eq x y) (equal y (a))))) | |
654 | |
655 (Assert (let* ((x (a)) (y (remassoc "2" x))) (and (eq x y) (equal y (a))))) | |
656 (Assert (let* ((x (a)) (y (remassq "2" x))) (and (eq x y) (equal y (a))))) | |
657 (Assert (let* ((x (a)) (y (remrassoc "2" x))) (and (not (eq x y)) (equal y '("3" ("4" . "5")))))) | |
658 (Assert (let* ((x (a)) (y (remrassq "2" x))) (and (eq x y) (equal y (a))))) | |
659 | |
660 (Assert (let* ((x (a)) (y (remassoc "3" x))) (and (eq x y) (equal y (a))))) | |
661 (Assert (let* ((x (a)) (y (remassq "3" x))) (and (eq x y) (equal y (a))))) | |
662 (Assert (let* ((x (a)) (y (remrassoc "3" x))) (and (eq x y) (equal y (a))))) | |
663 (Assert (let* ((x (a)) (y (remrassq "3" x))) (and (eq x y) (equal y (a))))) | |
664 | |
665 (Assert (let* ((x (a)) (y (remassoc "4" x))) (and (eq x y) (equal y '(("1" . "2") "3"))))) | |
666 (Assert (let* ((x (a)) (y (remassq "4" x))) (and (eq x y) (equal y (a))))) | |
667 (Assert (let* ((x (a)) (y (remrassoc "4" x))) (and (eq x y) (equal y (a))))) | |
668 (Assert (let* ((x (a)) (y (remrassq "4" x))) (and (eq x y) (equal y (a))))) | |
669 | |
670 (Assert (let* ((x (a)) (y (remassoc "5" x))) (and (eq x y) (equal y (a))))) | |
671 (Assert (let* ((x (a)) (y (remassq "5" x))) (and (eq x y) (equal y (a))))) | |
672 (Assert (let* ((x (a)) (y (remrassoc "5" x))) (and (eq x y) (equal y '(("1" . "2") "3"))))) | |
673 (Assert (let* ((x (a)) (y (remrassq "5" x))) (and (eq x y) (equal y (a))))) | |
674 | |
675 (Assert (let* ((x (a)) (y (remassoc "6" x))) (and (eq x y) (equal y (a))))) | |
676 (Assert (let* ((x (a)) (y (remassq "6" x))) (and (eq x y) (equal y (a))))) | |
677 (Assert (let* ((x (a)) (y (remrassoc "6" x))) (and (eq x y) (equal y (a))))) | |
678 (Assert (let* ((x (a)) (y (remrassq "6" x))) (and (eq x y) (equal y (a)))))) | |
679 | |
680 ;;----------------------------------------------------- | |
681 ;; function-max-args, function-min-args | |
682 ;;----------------------------------------------------- | |
683 (defmacro check-function-argcounts (fun min max) | |
684 `(progn | |
685 (Assert (eq (function-min-args ,fun) ,min)) | |
686 (Assert (eq (function-max-args ,fun) ,max)))) | |
687 | |
688 (check-function-argcounts 'prog1 1 nil) ; special form | |
689 (check-function-argcounts 'command-execute 1 3) ; normal subr | |
690 (check-function-argcounts 'funcall 1 nil) ; `MANY' subr | |
691 (check-function-argcounts 'garbage-collect 0 0) ; no args subr | |
692 | |
693 ;; Test interpreted and compiled functions | |
694 (loop for (arglist min max) in | |
695 '(((arg1 arg2 &rest args) 2 nil) | |
696 ((arg1 arg2 &optional arg3 arg4) 2 4) | |
697 ((arg1 arg2 &optional arg3 arg4 &rest args) 2 nil) | |
698 (() 0 0)) | |
699 do | |
700 (eval | |
701 `(progn | |
702 (defun test-fun ,arglist nil) | |
703 (check-function-argcounts '(lambda ,arglist nil) ,min ,max) | |
704 (check-function-argcounts (byte-compile '(lambda ,arglist nil)) ,min ,max)))) | |
705 | |
706 ;;----------------------------------------------------- | |
707 ;; Detection of cyclic variable indirection loops | |
708 ;;----------------------------------------------------- | |
709 (fset 'test-sym1 'test-sym1) | |
710 (Check-Error cyclic-function-indirection (test-sym1)) | |
711 | |
712 (fset 'test-sym1 'test-sym2) | |
713 (fset 'test-sym2 'test-sym1) | |
714 (Check-Error cyclic-function-indirection (test-sym1)) | |
715 (fmakunbound 'test-sym1) ; else macroexpand-internal infloops! | |
716 (fmakunbound 'test-sym2) | |
717 | |
718 ;;----------------------------------------------------- | |
719 ;; Test `type-of' | |
720 ;;----------------------------------------------------- | |
721 (Assert (eq (type-of load-path) 'cons)) | |
722 (Assert (eq (type-of obarray) 'vector)) | |
723 (Assert (eq (type-of 42) 'integer)) | |
724 (Assert (eq (type-of ?z) 'character)) | |
725 (Assert (eq (type-of "42") 'string)) | |
726 (Assert (eq (type-of 'foo) 'symbol)) | |
727 (Assert (eq (type-of (selected-device)) 'device)) | |
728 | |
729 ;;----------------------------------------------------- | |
730 ;; Test mapping functions | |
731 ;;----------------------------------------------------- | |
732 (Check-Error wrong-type-argument (mapcar #'identity (current-buffer))) | |
733 (Assert (equal (mapcar #'identity load-path) load-path)) | |
734 (Assert (equal (mapcar #'identity '(1 2 3)) '(1 2 3))) | |
735 (Assert (equal (mapcar #'identity "123") '(?1 ?2 ?3))) | |
736 (Assert (equal (mapcar #'identity [1 2 3]) '(1 2 3))) | |
737 (Assert (equal (mapcar #'identity #*010) '(0 1 0))) | |
738 | |
739 (let ((z 0) (list (make-list 1000 1))) | |
740 (mapc (lambda (x) (incf z x)) list) | |
741 (Assert (eq 1000 z))) | |
742 | |
743 (Check-Error wrong-type-argument (mapvector #'identity (current-buffer))) | |
744 (Assert (equal (mapvector #'identity '(1 2 3)) [1 2 3])) | |
745 (Assert (equal (mapvector #'identity "123") [?1 ?2 ?3])) | |
746 (Assert (equal (mapvector #'identity [1 2 3]) [1 2 3])) | |
747 (Assert (equal (mapvector #'identity #*010) [0 1 0])) | |
748 | |
749 (Check-Error wrong-type-argument (mapconcat #'identity (current-buffer) "foo")) | |
750 (Assert (equal (mapconcat #'identity '("1" "2" "3") "|") "1|2|3")) | |
751 (Assert (equal (mapconcat #'identity ["1" "2" "3"] "|") "1|2|3")) | |
752 | |
753 ;;----------------------------------------------------- | |
754 ;; Test vector functions | |
755 ;;----------------------------------------------------- | |
756 (Assert (equal [1 2 3] [1 2 3])) | |
757 (Assert (equal [] [])) | |
758 (Assert (not (equal [1 2 3] []))) | |
759 (Assert (not (equal [1 2 3] [1 2 4]))) | |
760 (Assert (not (equal [0 2 3] [1 2 3]))) | |
761 (Assert (not (equal [1 2 3] [1 2 3 4]))) | |
762 (Assert (not (equal [1 2 3 4] [1 2 3]))) | |
763 (Assert (equal (vector 1 2 3) [1 2 3])) | |
764 (Assert (equal (make-vector 3 1) [1 1 1])) | |
765 | |
766 ;;----------------------------------------------------- | |
767 ;; Test bit-vector functions | |
768 ;;----------------------------------------------------- | |
769 (Assert (equal #*010 #*010)) | |
770 (Assert (equal #* #*)) | |
771 (Assert (not (equal #*010 #*011))) | |
772 (Assert (not (equal #*010 #*))) | |
773 (Assert (not (equal #*110 #*010))) | |
774 (Assert (not (equal #*010 #*0100))) | |
775 (Assert (not (equal #*0101 #*010))) | |
776 (Assert (equal (bit-vector 0 1 0) #*010)) | |
777 (Assert (equal (make-bit-vector 3 1) #*111)) | |
778 (Assert (equal (make-bit-vector 3 0) #*000)) |