71 |
program-error) |
program-error) |
72 |
|
|
73 |
|
|
74 |
|
;;; Non-congruent methods cause defgeneric to signal an error |
75 |
|
|
76 |
|
(deftest defgeneric.error.9 |
77 |
|
(handler-case |
78 |
|
(progn |
79 |
|
(eval '(defgeneric defgeneric-error-fn.9 (x) |
80 |
|
(:method ((x t)(y t)) t))) |
81 |
|
:bad) |
82 |
|
(error () :good)) |
83 |
|
:good) |
84 |
|
|
85 |
|
|
86 |
|
(deftest defgeneric.error.10 |
87 |
|
(handler-case |
88 |
|
(progn |
89 |
|
(eval '(defgeneric defgeneric-error-fn.10 (x &optional y) |
90 |
|
(:method ((x t)) t))) |
91 |
|
:bad) |
92 |
|
(error () :good)) |
93 |
|
:good) |
94 |
|
|
95 |
|
(deftest defgeneric.error.11 |
96 |
|
(handler-case |
97 |
|
(progn |
98 |
|
(eval '(defgeneric defgeneric-error-fn.11 (x &optional y) |
99 |
|
(:method (x &optional y z) t))) |
100 |
|
:bad) |
101 |
|
(error () :good)) |
102 |
|
:good) |
103 |
|
|
104 |
|
(deftest defgeneric.error.12 |
105 |
|
(handler-case |
106 |
|
(progn |
107 |
|
(eval '(defgeneric defgeneric-error-fn.12 (x &rest y) |
108 |
|
(:method (x) t))) |
109 |
|
:bad) |
110 |
|
(error () :good)) |
111 |
|
:good) |
112 |
|
|
113 |
|
(deftest defgeneric.error.13 |
114 |
|
(handler-case |
115 |
|
(progn |
116 |
|
(eval '(defgeneric defgeneric-error-fn.13 (x) |
117 |
|
(:method (x &rest y) t))) |
118 |
|
:bad) |
119 |
|
(error () :good)) |
120 |
|
:good) |
121 |
|
|
122 |
|
(deftest defgeneric.error.14 |
123 |
|
(handler-case |
124 |
|
(progn |
125 |
|
(eval '(defgeneric defgeneric-error-fn.14 (x &key) |
126 |
|
(:method (x) t))) |
127 |
|
:bad) |
128 |
|
(error () :good)) |
129 |
|
:good) |
130 |
|
|
131 |
|
(deftest defgeneric.error.15 |
132 |
|
(handler-case |
133 |
|
(progn |
134 |
|
(eval '(defgeneric defgeneric-error-fn.15 (x &key y) |
135 |
|
(:method (x) t))) |
136 |
|
:bad) |
137 |
|
(error () :good)) |
138 |
|
:good) |
139 |
|
|
140 |
|
(deftest defgeneric.error.16 |
141 |
|
(handler-case |
142 |
|
(progn |
143 |
|
(eval '(defgeneric defgeneric-error-fn.16 (x) |
144 |
|
(:method (x &key) t))) |
145 |
|
:bad) |
146 |
|
(error () :good)) |
147 |
|
:good) |
148 |
|
|
149 |
|
(deftest defgeneric.error.17 |
150 |
|
(handler-case |
151 |
|
(progn |
152 |
|
(eval '(defgeneric defgeneric-error-fn.17 (x) |
153 |
|
(:method (x &key foo) t))) |
154 |
|
:bad) |
155 |
|
(error () :good)) |
156 |
|
:good) |
157 |
|
|
158 |
|
(deftest defgeneric.error.18 |
159 |
|
(handler-case |
160 |
|
(progn |
161 |
|
(eval '(defgeneric defgeneric-error-fn.18 (x &key foo) |
162 |
|
(:method (x &key) t))) |
163 |
|
:bad) |
164 |
|
(error () :good)) |
165 |
|
:good) |
166 |
|
|
167 |
|
(deftest defgeneric.error.19 |
168 |
|
(handler-case |
169 |
|
(progn |
170 |
|
(eval '(defgeneric defgeneric-error-fn.19 (x &key foo) |
171 |
|
(:method (x &key bar) t))) |
172 |
|
:bad) |
173 |
|
(error () :good)) |
174 |
|
:good) |
175 |
|
|
176 |
;;; Non error cases |
;;; Non error cases |
177 |
|
|
178 |
(deftest defgeneric.1 |
(deftest defgeneric.1 |
270 |
(multiple-value-list (apply fn nil)))) |
(multiple-value-list (apply fn nil)))) |
271 |
t t (a) (a) (a)) |
t t (a) (a) (a)) |
272 |
|
|
273 |
|
(deftest defgeneric.8 |
274 |
|
(let ((fn (eval '(defgeneric defgeneric.fun.8 (x &optional y z) |
275 |
|
(:method ((x number) &optional y z) |
276 |
|
(list x y z)) |
277 |
|
(:method ((p symbol) &optional q r) |
278 |
|
(list r q p)))))) |
279 |
|
(values |
280 |
|
(typep* fn 'generic-function) |
281 |
|
(typep* fn 'standard-generic-function) |
282 |
|
(multiple-value-list (funcall fn 1)) |
283 |
|
(multiple-value-list (funcall fn 1 2)) |
284 |
|
(multiple-value-list (funcall fn 1 2 3)) |
285 |
|
(multiple-value-list (defgeneric.fun.8 'a)) |
286 |
|
(multiple-value-list (defgeneric.fun.8 'a 'b)) |
287 |
|
(multiple-value-list (defgeneric.fun.8 'a 'b 'c)) |
288 |
|
(multiple-value-list (apply fn '(x y z))))) |
289 |
|
t t |
290 |
|
((1 nil nil)) |
291 |
|
((1 2 nil)) |
292 |
|
((1 2 3)) |
293 |
|
((nil nil a)) |
294 |
|
((nil b a)) |
295 |
|
((c b a)) |
296 |
|
((z y x))) |
297 |
|
|