1 | |
---|
2 | ;;; clos-tests.lisp |
---|
3 | ;;; |
---|
4 | ;;; Copyright (C) 2010 Erik Huelsmann |
---|
5 | ;;; |
---|
6 | ;;; This program is free software; you can redistribute it and/or |
---|
7 | ;;; modify it under the terms of the GNU General Public License |
---|
8 | ;;; as published by the Free Software Foundation; either version 2 |
---|
9 | ;;; of the License, or (at your option) any later version. |
---|
10 | ;;; |
---|
11 | ;;; This program is distributed in the hope that it will be useful, |
---|
12 | ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
13 | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
14 | ;;; GNU General Public License for more details. |
---|
15 | ;;; |
---|
16 | ;;; You should have received a copy of the GNU General Public License |
---|
17 | ;;; along with this program; if not, write to the Free Software |
---|
18 | ;;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
---|
19 | |
---|
20 | |
---|
21 | ;; These tests are in clos tests, because e.g. D-M-C isn't mop, but *is* clos |
---|
22 | |
---|
23 | (in-package #:abcl.test.lisp) |
---|
24 | |
---|
25 | |
---|
26 | ;; tests for D-M-C, long form, some taken from SBCL |
---|
27 | |
---|
28 | ;; D-M-C should return the name of the new method combination, nothing else. |
---|
29 | |
---|
30 | (deftest dmc-return.1 |
---|
31 | (define-method-combination dmc-test-return-foo) |
---|
32 | dmc-test-return-foo) |
---|
33 | |
---|
34 | (deftest dmc-return.2 |
---|
35 | (define-method-combination dmc-test-return-bar :operator and) |
---|
36 | dmc-test-return-bar) |
---|
37 | |
---|
38 | (deftest dmc-return.3 |
---|
39 | (define-method-combination dmc-test-return |
---|
40 | (&optional (order :most-specific-first)) |
---|
41 | ((around (:around)) |
---|
42 | (primary (dmc-test-return) :order order :required t)) |
---|
43 | (let ((form (if (rest primary) |
---|
44 | `(and ,@(mapcar #'(lambda (method) |
---|
45 | `(call-method ,method)) |
---|
46 | primary)) |
---|
47 | `(call-method ,(first primary))))) |
---|
48 | (if around |
---|
49 | `(call-method ,(first around) |
---|
50 | (,@(rest around) |
---|
51 | (make-method ,form))) |
---|
52 | form))) |
---|
53 | dmc-test-return) |
---|
54 | |
---|
55 | ;; A method combination which originally failed; |
---|
56 | ;; for different reasons in SBCL than in ABCL (hence leaving out |
---|
57 | ;; the original comment) |
---|
58 | |
---|
59 | (define-method-combination dmc-test-mc.1 |
---|
60 | (&optional (order :most-specific-first)) |
---|
61 | ((around (:around)) |
---|
62 | (primary (dmc-test-mc) :order order :required t)) |
---|
63 | (let ((form (if (rest primary) |
---|
64 | `(and ,@(mapcar #'(lambda (method) |
---|
65 | `(call-method ,method)) |
---|
66 | primary)) |
---|
67 | `(call-method ,(first primary))))) |
---|
68 | (if around |
---|
69 | `(call-method ,(first around) |
---|
70 | (,@(rest around) |
---|
71 | (make-method ,form))) |
---|
72 | form))) |
---|
73 | |
---|
74 | (defgeneric dmc-test-mc.1 (&key k) (:method-combination dmc-test-mc.1)) |
---|
75 | |
---|
76 | (defmethod dmc-test-mc.1 dmc-test-mc (&key k) |
---|
77 | k) |
---|
78 | |
---|
79 | (deftest dmc-test-mc.1 |
---|
80 | (dmc-test-mc.1 :k 1) |
---|
81 | 1) |
---|
82 | |
---|
83 | |
---|
84 | ;; Completely DIY -- also taken from SBCL: |
---|
85 | (define-method-combination dmc-test-mc.2 () |
---|
86 | ((all-methods *)) |
---|
87 | (do ((methods all-methods (rest methods)) |
---|
88 | (primary nil) |
---|
89 | (around nil)) |
---|
90 | ((null methods) |
---|
91 | (let ((primary (nreverse primary)) |
---|
92 | (around (nreverse around))) |
---|
93 | (if primary |
---|
94 | (let ((form (if (rest primary) |
---|
95 | `(call-method ,(first primary) ,(rest primary)) |
---|
96 | `(call-method ,(first primary))))) |
---|
97 | (if around |
---|
98 | `(call-method ,(first around) (,@(rest around) |
---|
99 | (make-method ,form))) |
---|
100 | form)) |
---|
101 | `(make-method (error "No primary methods"))))) |
---|
102 | (let* ((method (first methods)) |
---|
103 | (qualifier (first (method-qualifiers method)))) |
---|
104 | (cond |
---|
105 | ((equal :around qualifier) |
---|
106 | (push method around)) |
---|
107 | ((null qualifier) |
---|
108 | (push method primary)))))) |
---|
109 | |
---|
110 | (defgeneric dmc-test-mc.2a (val) |
---|
111 | (:method-combination dmc-test-mc.2)) |
---|
112 | |
---|
113 | (defmethod dmc-test-mc.2a ((val number)) |
---|
114 | (+ val (if (next-method-p) (call-next-method) 0))) |
---|
115 | |
---|
116 | (deftest dmc-test-mc.2a |
---|
117 | (= (dmc-test-mc.2a 13) 13) |
---|
118 | T) |
---|
119 | |
---|
120 | (defgeneric dmc-test-mc.2b (val) |
---|
121 | (:method-combination dmc-test-mc.2)) |
---|
122 | |
---|
123 | (defmethod dmc-test-mc.2b ((val number)) |
---|
124 | (+ val (if (next-method-p) (call-next-method) 0))) |
---|
125 | |
---|
126 | (defmethod dmc-test-mc.2b :around ((val number)) |
---|
127 | (+ val (if (next-method-p) (call-next-method) 0))) |
---|
128 | |
---|
129 | (deftest dmc-test-mc.2b |
---|
130 | (= 26 (dmc-test-mc.2b 13)) |
---|
131 | T) |
---|
132 | |
---|
133 | |
---|
134 | ;;; Taken from SBCL: error when method sorting is ambiguous |
---|
135 | ;;; with multiple method groups |
---|
136 | |
---|
137 | (define-method-combination dmc-test-mc.3a () |
---|
138 | ((around (:around)) |
---|
139 | (primary * :required t)) |
---|
140 | (let ((form (if (rest primary) |
---|
141 | `(call-method ,(first primary) ,(rest primary)) |
---|
142 | `(call-method ,(first primary))))) |
---|
143 | (if around |
---|
144 | `(call-method ,(first around) (,@(rest around) |
---|
145 | (make-method ,form))) |
---|
146 | form))) |
---|
147 | |
---|
148 | (defgeneric dmc-test-mc.3a (val) |
---|
149 | (:method-combination dmc-test-mc.3a)) |
---|
150 | |
---|
151 | (defmethod dmc-test-mc.3a ((val number)) |
---|
152 | (+ val (if (next-method-p) (call-next-method) 0))) |
---|
153 | |
---|
154 | (defmethod dmc-test-mc.3a :around ((val number)) |
---|
155 | (+ val (if (next-method-p) (call-next-method) 0))) |
---|
156 | |
---|
157 | (defmethod dmc-test-mc.3a :somethingelse ((val number)) |
---|
158 | (+ val (if (next-method-p) (call-next-method) 0))) |
---|
159 | |
---|
160 | (deftest dmc-test-mc.3a |
---|
161 | (multiple-value-bind |
---|
162 | (value error) |
---|
163 | (ignore-errors (wam-test-mc.3a 13)) |
---|
164 | (declare (ignore value)) |
---|
165 | (typep error 'error)) |
---|
166 | T) |
---|
167 | |
---|
168 | ;;; Taken from SBCL: error when method sorting is ambiguous |
---|
169 | ;;; with a single (non *) method group |
---|
170 | |
---|
171 | |
---|
172 | (define-method-combination dmc-test-mc.3b () |
---|
173 | ((methods listp :required t)) |
---|
174 | (if (rest methods) |
---|
175 | `(call-method ,(first methods) ,(rest methods)) |
---|
176 | `(call-method ,(first methods)))) |
---|
177 | |
---|
178 | (defgeneric dmc-test-mc.3b (val) |
---|
179 | (:method-combination dmc-test-mc.3b)) |
---|
180 | |
---|
181 | (defmethod dmc-test-mc.3b :foo ((val number)) |
---|
182 | (+ val (if (next-method-p) (call-next-method) 0))) |
---|
183 | |
---|
184 | (defmethod dmc-test-mc.3b :bar ((val number)) |
---|
185 | (+ val (if (next-method-p) (call-next-method) 0))) |
---|
186 | |
---|
187 | (deftest dmc-test-mc.3b |
---|
188 | (multiple-value-bind |
---|
189 | (value error) |
---|
190 | (ignore-errors (dmc-test-mc.3b 13)) |
---|
191 | (declare (ignore value)) |
---|
192 | (typep error 'error)) |
---|
193 | T) |
---|
194 | |
---|
195 | |
---|
196 | ;; Taken from SBCL: test that GF invocation arguments |
---|
197 | ;; are correctly bound using the (:arguments ...) form |
---|
198 | |
---|
199 | (defparameter *dmc-test-4* nil) |
---|
200 | |
---|
201 | (defun object-lock (obj) |
---|
202 | (push "object-lock" *dmc-test-4*) |
---|
203 | obj) |
---|
204 | (defun unlock (obj) |
---|
205 | (push "unlock" *dmc-test-4*) |
---|
206 | obj) |
---|
207 | (defun lock (obj) |
---|
208 | (push "lock" *dmc-test-4*) |
---|
209 | obj) |
---|
210 | |
---|
211 | |
---|
212 | (define-method-combination dmc-test-mc.4 () |
---|
213 | ((methods *)) |
---|
214 | (:arguments object) |
---|
215 | `(unwind-protect |
---|
216 | (progn (lock (object-lock ,object)) |
---|
217 | ,@(mapcar #'(lambda (method) |
---|
218 | `(call-method ,method)) |
---|
219 | methods)) |
---|
220 | (unlock (object-lock ,object)))) |
---|
221 | |
---|
222 | (defgeneric dmc-test.4 (x) |
---|
223 | (:method-combination dmc-test-mc.4)) |
---|
224 | (defmethod dmc-test.4 ((x symbol)) |
---|
225 | (push "primary" *dmc-test-4*)) |
---|
226 | (defmethod dmc-test.4 ((x number)) |
---|
227 | (error "foo")) |
---|
228 | |
---|
229 | (deftest dmc-test.4a |
---|
230 | (progn |
---|
231 | (setq *dmc-test-4* nil) |
---|
232 | (values (equal (dmc-test.4 t) '("primary" "lock" "object-lock")) |
---|
233 | (equal *dmc-test-4* '("unlock" "object-lock" |
---|
234 | "primary" "lock" "object-lock")))) |
---|
235 | T T) |
---|
236 | |
---|
237 | (deftest dmc-test.4b |
---|
238 | (progn |
---|
239 | (setq *dmc-test-4* nil) |
---|
240 | (ignore-errors (dmc-test.4 1)) |
---|
241 | (equal *dmc-test-4* '("unlock" "object-lock" "lock" "object-lock"))) |
---|
242 | T) |
---|
243 | |
---|
244 | |
---|
245 | ;; From SBCL: method combination (long form) with arguments |
---|
246 | |
---|
247 | #-ccl ;; "The value (ABCL.TEST.LISP::EXTRA :EXTRA) is not of the expected type SYMBOL." |
---|
248 | (define-method-combination dmc-test.5 () |
---|
249 | ((method-list *)) |
---|
250 | (:arguments arg1 arg2 &aux (extra :extra)) |
---|
251 | `(progn ,@(mapcar (lambda (method) `(call-method ,method)) method-list))) |
---|
252 | |
---|
253 | #-ccl ;; "The value (ABCL.TEST.LISP::EXTRA :EXTRA) is not of the expected type SYMBOL." |
---|
254 | (defgeneric dmc-test-mc.5 (p1 p2 s) |
---|
255 | (:method-combination dmc-test.5) |
---|
256 | (:method ((p1 number) (p2 t) s) |
---|
257 | (vector-push-extend (list 'number p1 p2) s)) |
---|
258 | (:method ((p1 string) (p2 t) s) |
---|
259 | (vector-push-extend (list 'string p1 p2) s)) |
---|
260 | (:method ((p1 t) (p2 t) s) (vector-push-extend (list t p1 p2) s))) |
---|
261 | |
---|
262 | (deftest dmc-test.5a |
---|
263 | (let ((v (make-array 0 :adjustable t :fill-pointer t))) |
---|
264 | (values (dmc-test-mc.5 1 2 v) |
---|
265 | (equal (aref v 0) '(number 1 2)) |
---|
266 | (equal (aref v 1) '(t 1 2)))) |
---|
267 | 1 T T) |
---|
268 | |
---|
269 | |
---|
270 | |
---|
271 | (define-method-combination dmc-test.6 () |
---|
272 | ((normal ()) |
---|
273 | (ignored (:ignore :unused))) |
---|
274 | `(list 'result |
---|
275 | ,@(mapcar #'(lambda (method) `(call-method ,method)) normal))) |
---|
276 | |
---|
277 | (defgeneric dmc-test-mc.6 (x) |
---|
278 | (:method-combination dmc-test.6) |
---|
279 | (:method :ignore ((x number)) (/ 0))) |
---|
280 | |
---|
281 | (deftest dmc-test-mc.6a |
---|
282 | (multiple-value-bind |
---|
283 | (value error) |
---|
284 | (ignore-errors (dmc-test-mc.6 7)) |
---|
285 | (values (null value) |
---|
286 | (typep error 'error))) |
---|
287 | T T) |
---|
288 | |
---|
289 | |
---|
290 | (define-method-combination dmc-test.7 () |
---|
291 | ((methods *)) |
---|
292 | (:arguments x &rest others) |
---|
293 | `(progn |
---|
294 | ,@(mapcar (lambda (method) |
---|
295 | `(call-method ,method)) |
---|
296 | methods) |
---|
297 | (list ,x (length ,others)))) |
---|
298 | |
---|
299 | (defgeneric dmc-test-mc.7 (x &rest others) |
---|
300 | (:method-combination dmc-test.7)) |
---|
301 | |
---|
302 | (defmethod dmc-test-mc.7 (x &rest others) |
---|
303 | (declare (ignore others)) |
---|
304 | nil) |
---|
305 | |
---|
306 | (deftest dmc-test-mc.7a |
---|
307 | (equal (apply #'dmc-test-mc.7 :foo (list 1 2 3 4 5 6 7 8)) |
---|
308 | '(:foo 8)) |
---|
309 | T) |
---|
310 | |
---|
311 | |
---|
312 | ;; Tests for D-M-C with :arguments option |
---|
313 | ;; created due to http://abcl.org/trac/ticket/201 |
---|
314 | |
---|
315 | (define-method-combination dmc-test-args-with-whole.1 () |
---|
316 | ((methods ())) |
---|
317 | (:arguments &whole whole) |
---|
318 | `(progn (format nil "using ~a" ,whole) |
---|
319 | ,@(mapcar (lambda (method) `(call-method ,method)) |
---|
320 | methods))) |
---|
321 | |
---|
322 | (defgeneric dmc-test-args-with-whole.1 (x) |
---|
323 | (:method-combination dmc-test-args-with-whole.1) |
---|
324 | (:method (x) x)) |
---|
325 | |
---|
326 | ;; This test fails throws an error under #201 |
---|
327 | (deftest dmc-test-args-with-whole.1 |
---|
328 | (dmc-test-args-with-whole.1 T) |
---|
329 | T) |
---|
330 | |
---|
331 | (define-method-combination dmc-test-args-with-whole.2 () |
---|
332 | ((methods ())) |
---|
333 | (:arguments &whole whole &rest rest) |
---|
334 | `(progn (format nil "using ~a ~a" ,whole ,rest) |
---|
335 | ,@(mapcar (lambda (method) `(call-method ,method)) |
---|
336 | methods))) |
---|
337 | |
---|
338 | (defgeneric dmc-test-args-with-whole.2 (x) |
---|
339 | (:method-combination dmc-test-args-with-whole.2) |
---|
340 | (:method (x) x)) |
---|
341 | |
---|
342 | (deftest dmc-test-args-with-whole.2 |
---|
343 | (dmc-test-args-with-whole.2 T) |
---|
344 | T) |
---|
345 | |
---|
346 | |
---|
347 | (define-method-combination dmc-test-args-with-whole.3a () |
---|
348 | ((methods ())) |
---|
349 | (:arguments &whole whole &optional opt) |
---|
350 | `(progn (format nil "using ~a ~a" ,whole ,opt) |
---|
351 | ,@(mapcar (lambda (method) `(call-method ,method)) |
---|
352 | methods))) |
---|
353 | |
---|
354 | (defgeneric dmc-test-args-with-whole.3a (x) |
---|
355 | (:method-combination dmc-test-args-with-whole.3a) |
---|
356 | (:method (x) x)) |
---|
357 | |
---|
358 | (deftest dmc-test-args-with-whole.3a |
---|
359 | (dmc-test-args-with-whole.3a T) |
---|
360 | T) |
---|
361 | |
---|
362 | (define-method-combination dmc-test-args-with-whole.3b () |
---|
363 | ((methods ())) |
---|
364 | (:arguments &whole whole &optional opt &key k) |
---|
365 | `(progn (format nil "using ~a ~a ~a" ,whole ,opt ,k) |
---|
366 | ,@(mapcar (lambda (method) `(call-method ,method)) |
---|
367 | methods))) |
---|
368 | |
---|
369 | (defgeneric dmc-test-args-with-whole.3b (x) |
---|
370 | (:method-combination dmc-test-args-with-whole.3b) |
---|
371 | (:method (x) x)) |
---|
372 | |
---|
373 | (deftest dmc-test-args-with-whole.3b |
---|
374 | (dmc-test-args-with-whole.3b T) |
---|
375 | T) |
---|
376 | |
---|
377 | (define-method-combination dmc-test-args-with-whole.3c () |
---|
378 | ((methods ())) |
---|
379 | (:arguments &whole whole &optional opt &rest r) |
---|
380 | `(progn (format nil "using ~a ~a ~a" ,whole ,opt ,r) |
---|
381 | ,@(mapcar (lambda (method) `(call-method ,method)) |
---|
382 | methods))) |
---|
383 | |
---|
384 | (defgeneric dmc-test-args-with-whole.3c (x) |
---|
385 | (:method-combination dmc-test-args-with-whole.3c) |
---|
386 | (:method (x) x)) |
---|
387 | |
---|
388 | (deftest dmc-test-args-with-whole.3c |
---|
389 | (dmc-test-args-with-whole.3c T) |
---|
390 | T) |
---|
391 | |
---|
392 | |
---|
393 | (define-method-combination dmc-test-args-with-whole.3d () |
---|
394 | ((methods ())) |
---|
395 | (:arguments &whole whole &optional opt &rest r &key k) |
---|
396 | `(progn (format nil "using ~a ~a ~a ~a" ,whole ,opt ,r ,k) |
---|
397 | ,@(mapcar (lambda (method) `(call-method ,method)) |
---|
398 | methods))) |
---|
399 | |
---|
400 | (defgeneric dmc-test-args-with-whole.3d (x) |
---|
401 | (:method-combination dmc-test-args-with-whole.3d) |
---|
402 | (:method (x) x)) |
---|
403 | |
---|
404 | (deftest dmc-test-args-with-whole.3d |
---|
405 | (dmc-test-args-with-whole.3d T) |
---|
406 | T) |
---|
407 | |
---|
408 | (define-method-combination dmc-test-args-with-whole.4 () |
---|
409 | ((methods ())) |
---|
410 | (:arguments &whole whole &key k) |
---|
411 | `(progn (format nil "using ~a ~a" ,whole ,k) |
---|
412 | ,@(mapcar (lambda (method) `(call-method ,method)) |
---|
413 | methods))) |
---|
414 | |
---|
415 | (defgeneric dmc-test-args-with-whole.4 (x) |
---|
416 | (:method-combination dmc-test-args-with-whole.4) |
---|
417 | (:method (x) x)) |
---|
418 | |
---|
419 | (deftest dmc-test-args-with-whole.4 |
---|
420 | (dmc-test-args-with-whole.4 T) |
---|
421 | T) |
---|
422 | |
---|
423 | (define-method-combination dmc-test-args-with-whole.5 () |
---|
424 | ((methods ())) |
---|
425 | (:arguments &whole whole &aux a) |
---|
426 | `(progn (format nil "using ~a ~a" ,whole ,a) |
---|
427 | ,@(mapcar (lambda (method) `(call-method ,method)) |
---|
428 | methods))) |
---|
429 | |
---|
430 | (defgeneric dmc-test-args-with-whole.5 (x) |
---|
431 | (:method-combination dmc-test-args-with-whole.5) |
---|
432 | (:method (x) x)) |
---|
433 | |
---|
434 | (deftest dmc-test-args-with-whole.5 |
---|
435 | (dmc-test-args-with-whole.5 T) |
---|
436 | T) |
---|
437 | |
---|
438 | (define-method-combination dmc-test-args-with-optional.1 () |
---|
439 | ((methods ())) |
---|
440 | (:arguments &optional a) |
---|
441 | `(progn ,@(mapcar (lambda (method) `(call-method ,method)) |
---|
442 | methods) |
---|
443 | ,a)) |
---|
444 | |
---|
445 | (defgeneric dmc-test-args-with-optional.1 (x &optional b) |
---|
446 | (:method-combination dmc-test-args-with-optional.1) |
---|
447 | (:method (x &optional b) (progn x b))) |
---|
448 | |
---|
449 | (deftest dmc-test-args-with-optional.1a |
---|
450 | (dmc-test-args-with-optional.1 T) |
---|
451 | nil) |
---|
452 | |
---|
453 | (deftest dmc-test-args-with-optional.1b |
---|
454 | (dmc-test-args-with-optional.1 T T) |
---|
455 | T) |
---|
456 | |
---|
457 | #-ccl ;; "The value (ABCL.TEST.LISP::A :DEFAULT) is not of the expected type SYMBOL." |
---|
458 | (define-method-combination dmc-test-args-with-optional.2 () |
---|
459 | ((methods *)) |
---|
460 | (:arguments &optional (a :default)) |
---|
461 | (print `(progn ,@(mapcar (lambda (method) `(call-method ,method)) |
---|
462 | methods) |
---|
463 | ,a))) |
---|
464 | |
---|
465 | #-ccl ;; "The value (ABCL.TEST.LISP::A :DEFAULT) is not of the expected type SYMBOL." |
---|
466 | (defgeneric dmc-test-args-with-optional.2 (x &optional b) |
---|
467 | (:method-combination dmc-test-args-with-optional.2) |
---|
468 | (:method (x &optional b) (progn x b))) |
---|
469 | |
---|
470 | (deftest dmc-test-args-with-optional.2a |
---|
471 | :documentation "TODO" |
---|
472 | (dmc-test-args-with-optional.2 T) |
---|
473 | :default) |
---|
474 | |
---|
475 | (deftest dmc-test-args-with-optional.2b |
---|
476 | :documentation "Describe what the test does here." |
---|
477 | (dmc-test-args-with-optional.2 T T) |
---|
478 | T) |
---|
479 | |
---|
480 | #-ccl ;; The value (ABCL.TEST.LISP::A :DEFAULT) is not of the expected type SYMBOL. |
---|
481 | (define-method-combination dmc-test-args-with-optional.3 () |
---|
482 | ((methods *)) |
---|
483 | (:arguments &optional (a :default)) |
---|
484 | (print `(progn ,@(mapcar (lambda (method) `(call-method ,method)) |
---|
485 | methods) |
---|
486 | ,a))) |
---|
487 | |
---|
488 | #-ccl ;; The value (ABCL.TEST.LISP::A :DEFAULT) is not of the expected type SYMBOL. |
---|
489 | (defgeneric dmc-test-args-with-optional.3 (x) |
---|
490 | (:method-combination dmc-test-args-with-optional.3) |
---|
491 | (:method (x) (progn x))) |
---|
492 | |
---|
493 | #-ccl ;; The value (ABCL.TEST.LISP::A :DEFAULT) is not of the expected type SYMBOL. |
---|
494 | (deftest dmc-test-args-with-optional.3 |
---|
495 | :documentation "TODO" |
---|
496 | (dmc-test-args-with-optional.3 T) |
---|
497 | nil) |
---|
498 | |
---|
499 | #-ccl ;; The value (ABCL.TEST.LISP::A :DEFAULT ABCL.TEST.LISP::SUP-P) is not of the expected type SYMBOL. |
---|
500 | (define-method-combination dmc-test-args-with-optional.4 () |
---|
501 | ((methods ())) |
---|
502 | (:arguments &optional (a :default sup-p)) |
---|
503 | `(progn ,@(mapcar (lambda (method) `(call-method ,method)) |
---|
504 | methods) |
---|
505 | (values ,a ,sup-p))) |
---|
506 | |
---|
507 | #-ccl |
---|
508 | (defgeneric dmc-test-args-with-optional.4a (x &optional b) |
---|
509 | (:method-combination dmc-test-args-with-optional.4) |
---|
510 | (:method (x &optional b) (progn x b))) |
---|
511 | |
---|
512 | #-ccl |
---|
513 | (deftest dmc-test-args-with-optional.4a |
---|
514 | (dmc-test-args-with-optional.4a T) |
---|
515 | :default |
---|
516 | nil) |
---|
517 | |
---|
518 | #-ccl |
---|
519 | (deftest dmc-test-args-with-optional.4b |
---|
520 | (dmc-test-args-with-optional.4a T T) |
---|
521 | T |
---|
522 | T) |
---|
523 | |
---|
524 | #-ccl |
---|
525 | (defgeneric dmc-test-args-with-optional.4c (x) |
---|
526 | (:method-combination dmc-test-args-with-optional.4) |
---|
527 | (:method (x) (progn x))) |
---|
528 | |
---|
529 | #-ccl |
---|
530 | (deftest dmc-test-args-with-optional.4c |
---|
531 | :documentation "TODO" |
---|
532 | (dmc-test-args-with-optional.4c T) |
---|
533 | nil |
---|
534 | nil) |
---|