8 |
(compile-and-load "printer-aux.lsp") |
(compile-and-load "printer-aux.lsp") |
9 |
|
|
10 |
(deftest format.o.1 |
(deftest format.o.1 |
11 |
(with-standard-io-syntax |
(let ((fn (formatter "~o"))) |
12 |
(loop for x = (ash 1 (+ 2 (random 80))) |
(with-standard-io-syntax |
13 |
for i = (- (random (+ x x)) x) |
(loop for x = (ash 1 (+ 2 (random 80))) |
14 |
for s1 = (format nil "~O" i) |
for i = (- (random (+ x x)) x) |
15 |
for j = (let ((*read-base* 8)) (read-from-string s1)) |
for s1 = (format nil "~O" i) |
16 |
repeat 1000 |
for j = (let ((*read-base* 8)) (read-from-string s1)) |
17 |
when (or (/= i j) |
for s2 = (formatter-call-to-string fn i) |
18 |
(find #\. s1) |
repeat 1000 |
19 |
(find #\+ s1) |
when (or (/= i j) |
20 |
|
(not (string= s1 s2)) |
21 |
|
(find #\. s1) |
22 |
|
(find #\+ s1) |
23 |
(find-if #'alpha-char-p s1)) |
(find-if #'alpha-char-p s1)) |
24 |
collect (list i s1 j))) |
collect (list i s1 j s2)))) |
25 |
nil) |
nil) |
26 |
|
|
27 |
(deftest format.o.2 |
(deftest format.o.2 |
28 |
|
(let ((fn (formatter "~@O"))) |
29 |
|
(with-standard-io-syntax |
30 |
|
(loop for x = (ash 1 (+ 2 (random 80))) |
31 |
|
for i = (- (random (+ x x)) x) |
32 |
|
for s1 = (format nil "~@o" i) |
33 |
|
for j = (let ((*read-base* 8)) (read-from-string s1)) |
34 |
|
for s2 = (formatter-call-to-string fn i) |
35 |
|
repeat 1000 |
36 |
|
when (or (/= i j) |
37 |
|
(not (string= s1 s2)) |
38 |
|
(find #\. s1) |
39 |
|
;; (find #\+ s1) |
40 |
|
(find-if #'alpha-char-p s1)) |
41 |
|
collect (list i s1 j s2)))) |
42 |
|
nil) |
43 |
|
|
44 |
|
(deftest format.o.3 |
45 |
(with-standard-io-syntax |
(with-standard-io-syntax |
46 |
(loop for x = (ash 1 (+ 2 (random 80))) |
(loop for x = (ash 1 (+ 2 (random 80))) |
47 |
|
for mincol = (random 30) |
48 |
for i = (- (random (+ x x)) x) |
for i = (- (random (+ x x)) x) |
49 |
for s1 = (format nil "~@o" i) |
for s1 = (format nil "~o" i) |
50 |
for j = (let ((*read-base* 8)) (read-from-string s1)) |
for fmt = (format nil "~~~do" mincol) |
51 |
|
for s2 = (format nil fmt i) |
52 |
|
for pos = (search s1 s2) |
53 |
repeat 1000 |
repeat 1000 |
54 |
when (or (/= i j) |
when (or (null pos) |
55 |
(find #\. s1) |
(and (> mincol (length s1)) |
56 |
;; (find #\+ s1) |
(or (/= (length s2) mincol) |
57 |
(find-if #'alpha-char-p s1)) |
(not (eql (position #\Space s2 :test-not #'eql) |
58 |
collect (list i s1 j))) |
(- (length s2) (length s1))))))) |
59 |
|
collect (list i mincol s1 s2 pos))) |
60 |
nil) |
nil) |
61 |
|
|
62 |
(deftest format.o.3 |
(deftest formatter.o.3 |
63 |
(with-standard-io-syntax |
(with-standard-io-syntax |
64 |
(loop for x = (ash 1 (+ 2 (random 80))) |
(loop for x = (ash 1 (+ 2 (random 80))) |
65 |
for mincol = (random 30) |
for mincol = (random 30) |
66 |
for i = (- (random (+ x x)) x) |
for i = (- (random (+ x x)) x) |
67 |
for s1 = (format nil "~o" i) |
for s1 = (format nil "~o" i) |
68 |
for s2 = (format nil (format nil "~~~do" mincol) i) |
for fmt = (format nil "~~~do" mincol) |
69 |
|
for fn = (eval `(formatter ,fmt)) |
70 |
|
for s2 = (formatter-call-to-string fn i) |
71 |
for pos = (search s1 s2) |
for pos = (search s1 s2) |
72 |
repeat 1000 |
repeat 100 |
73 |
when (or (null pos) |
when (or (null pos) |
74 |
(and (> mincol (length s1)) |
(and (> mincol (length s1)) |
75 |
(or (/= (length s2) mincol) |
(or (/= (length s2) mincol) |
84 |
for mincol = (random 30) |
for mincol = (random 30) |
85 |
for i = (- (random (+ x x)) x) |
for i = (- (random (+ x x)) x) |
86 |
for s1 = (format nil "~@O" i) |
for s1 = (format nil "~@O" i) |
87 |
for s2 = (format nil (format nil "~~~d@o" mincol) i) |
for fmt = (format nil "~~~d@o" mincol) |
88 |
|
for s2 = (format nil fmt i) |
89 |
for pos = (search s1 s2) |
for pos = (search s1 s2) |
90 |
repeat 1000 |
repeat 1000 |
91 |
when (or (null pos) |
when (or (null pos) |
97 |
collect (list i mincol s1 s2 pos))) |
collect (list i mincol s1 s2 pos))) |
98 |
nil) |
nil) |
99 |
|
|
100 |
(deftest format.o.5 |
(deftest formatter.o.4 |
101 |
(with-standard-io-syntax |
(with-standard-io-syntax |
102 |
(loop for x = (ash 1 (+ 2 (random 80))) |
(loop for x = (ash 1 (+ 2 (random 80))) |
103 |
for mincol = (random 30) |
for mincol = (random 30) |
|
for padchar = (random-from-seq +standard-chars+) |
|
104 |
for i = (- (random (+ x x)) x) |
for i = (- (random (+ x x)) x) |
105 |
for s1 = (format nil "~o" i) |
for s1 = (format nil "~@O" i) |
106 |
for s2 = (format nil (format nil "~~~d,'~c~c" mincol padchar |
for fmt = (format nil "~~~d@o" mincol) |
107 |
(random-from-seq "oO")) |
for fn = (eval `(formatter ,fmt)) |
108 |
i) |
for s2 = (formatter-call-to-string fn i) |
109 |
for pos = (search s1 s2) |
for pos = (search s1 s2) |
110 |
repeat 1000 |
repeat 100 |
111 |
when (or (null pos) |
when (or (null pos) |
112 |
|
(and (>= i 0) (not (eql (elt s1 0) #\+))) |
113 |
(and (> mincol (length s1)) |
(and (> mincol (length s1)) |
114 |
(or (/= (length s2) mincol) |
(or (/= (length s2) mincol) |
115 |
(find padchar s2 :end (- (length s2) (length s1)) |
(not (eql (position #\Space s2 :test-not #'eql) |
116 |
:test-not #'eql)))) |
(- (length s2) (length s1))))))) |
117 |
collect (list i mincol s1 s2 pos))) |
collect (list i mincol s1 s2 pos))) |
118 |
nil) |
nil) |
119 |
|
|
120 |
(deftest format.o.6 |
(deftest format.o.5 |
121 |
(with-standard-io-syntax |
(with-standard-io-syntax |
122 |
(loop for x = (ash 1 (+ 2 (random 80))) |
(loop for x = (ash 1 (+ 2 (random 80))) |
123 |
for mincol = (random 30) |
for mincol = (random 30) |
124 |
for padchar = (random-from-seq +standard-chars+) |
for padchar = (random-from-seq +standard-chars+) |
125 |
for i = (- (random (+ x x)) x) |
for i = (- (random (+ x x)) x) |
126 |
for s1 = (format nil "~o" i) |
for s1 = (format nil "~o" i) |
127 |
for s2 = (format nil "~v,vO" mincol padchar i) |
for fmt = (format nil "~~~d,'~c~c" mincol padchar |
128 |
|
(random-from-seq "oO")) |
129 |
|
for s2 = (format nil fmt i) |
130 |
for pos = (search s1 s2) |
for pos = (search s1 s2) |
131 |
repeat 1000 |
repeat 1000 |
132 |
when (or (null pos) |
when (or (null pos) |
137 |
collect (list i mincol s1 s2 pos))) |
collect (list i mincol s1 s2 pos))) |
138 |
nil) |
nil) |
139 |
|
|
140 |
(deftest format.o.7 |
(deftest formatter.o.5 |
141 |
(with-standard-io-syntax |
(with-standard-io-syntax |
142 |
(loop for x = (ash 1 (+ 2 (random 80))) |
(loop for x = (ash 1 (+ 2 (random 80))) |
143 |
for mincol = (random 30) |
for mincol = (random 30) |
144 |
for padchar = (random-from-seq +standard-chars+) |
for padchar = (random-from-seq +standard-chars+) |
145 |
for i = (- (random (+ x x)) x) |
for i = (- (random (+ x x)) x) |
146 |
for s1 = (format nil "~@o" i) |
for s1 = (format nil "~o" i) |
147 |
for s2 = (format nil "~v,v@o" mincol padchar i) |
for fmt = (format nil "~~~d,'~c~c" mincol padchar |
148 |
|
(random-from-seq "oO")) |
149 |
|
for fn = (eval `(formatter ,fmt)) |
150 |
|
for s2 = (formatter-call-to-string fn i) |
151 |
for pos = (search s1 s2) |
for pos = (search s1 s2) |
152 |
repeat 1000 |
repeat 100 |
153 |
when (or (null pos) |
when (or (null pos) |
|
(and (>= i 0) (not (eql (elt s1 0) #\+))) |
|
154 |
(and (> mincol (length s1)) |
(and (> mincol (length s1)) |
155 |
(or (/= (length s2) mincol) |
(or (/= (length s2) mincol) |
156 |
(find padchar s2 :end (- (length s2) (length s1)) |
(find padchar s2 :end (- (length s2) (length s1)) |
158 |
collect (list i mincol s1 s2 pos))) |
collect (list i mincol s1 s2 pos))) |
159 |
nil) |
nil) |
160 |
|
|
161 |
|
(deftest format.o.6 |
162 |
|
(let ((fn (formatter "~V,Vo"))) |
163 |
|
(with-standard-io-syntax |
164 |
|
(loop for x = (ash 1 (+ 2 (random 80))) |
165 |
|
for mincol = (random 30) |
166 |
|
for padchar = (random-from-seq +standard-chars+) |
167 |
|
for i = (- (random (+ x x)) x) |
168 |
|
for s1 = (format nil "~o" i) |
169 |
|
for s2 = (format nil "~v,vO" mincol padchar i) |
170 |
|
for s3 = (formatter-call-to-string fn mincol padchar i) |
171 |
|
for pos = (search s1 s2) |
172 |
|
repeat 1000 |
173 |
|
when (or (null pos) |
174 |
|
(not (string= s2 s3)) |
175 |
|
(and (> mincol (length s1)) |
176 |
|
(or (/= (length s2) mincol) |
177 |
|
(find padchar s2 :end (- (length s2) (length s1)) |
178 |
|
:test-not #'eql)))) |
179 |
|
collect (list i mincol s1 s2 s3 pos)))) |
180 |
|
nil) |
181 |
|
|
182 |
|
(deftest format.o.7 |
183 |
|
(let ((fn (formatter "~v,V@O"))) |
184 |
|
(with-standard-io-syntax |
185 |
|
(loop for x = (ash 1 (+ 2 (random 80))) |
186 |
|
for mincol = (random 30) |
187 |
|
for padchar = (random-from-seq +standard-chars+) |
188 |
|
for i = (- (random (+ x x)) x) |
189 |
|
for s1 = (format nil "~@o" i) |
190 |
|
for s2 = (format nil "~v,v@o" mincol padchar i) |
191 |
|
for s3 = (formatter-call-to-string fn mincol padchar i) |
192 |
|
for pos = (search s1 s2) |
193 |
|
repeat 1000 |
194 |
|
when (or (null pos) |
195 |
|
(not (string= s2 s3)) |
196 |
|
(and (>= i 0) (not (eql (elt s1 0) #\+))) |
197 |
|
(and (> mincol (length s1)) |
198 |
|
(or (/= (length s2) mincol) |
199 |
|
(find padchar s2 :end (- (length s2) (length s1)) |
200 |
|
:test-not #'eql)))) |
201 |
|
collect (list i mincol s1 s2 s3 pos)))) |
202 |
|
nil) |
203 |
|
|
204 |
;;; Comma tests |
;;; Comma tests |
205 |
|
|
206 |
(deftest format.o.8 |
(deftest format.o.8 |
207 |
(loop for i from #o-777 to #o777 |
(let ((fn (formatter "~:O"))) |
208 |
for s1 = (format nil "~o" i) |
(loop for i from #o-777 to #o777 |
209 |
for s2 = (format nil "~:o" i) |
for s1 = (format nil "~o" i) |
210 |
unless (string= s1 s2) |
for s2 = (format nil "~:o" i) |
211 |
collect (list i s1 s2)) |
for s3 = (formatter-call-to-string fn i) |
212 |
|
unless (and (string= s1 s2) (string= s2 s3)) |
213 |
|
collect (list i s1 s2 s3))) |
214 |
nil) |
nil) |
215 |
|
|
216 |
(deftest format.o.9 |
(deftest format.o.9 |
217 |
(with-standard-io-syntax |
(let ((fn (formatter "~:o"))) |
218 |
(loop for x = (ash 1 (+ 2 (random 80))) |
(with-standard-io-syntax |
219 |
for i = (- (random (+ x x)) x) |
(loop for x = (ash 1 (+ 2 (random 80))) |
220 |
for commachar = #\, |
for i = (- (random (+ x x)) x) |
221 |
for s1 = (format nil "~o" i) |
for commachar = #\, |
222 |
for s2 = (format nil "~:o" i) |
for s1 = (format nil "~o" i) |
223 |
repeat 1000 |
for s2 = (format nil "~:O" i) |
224 |
unless (and (string= s1 (remove commachar s2)) |
for s3 = (formatter-call-to-string fn i) |
225 |
(not (eql (elt s2 0) commachar)) |
repeat 1000 |
226 |
(or (>= i 0) (not (eql (elt s2 1) commachar))) |
unless (and (string= s1 (remove commachar s2)) |
227 |
(let ((len (length s2)) |
(string= s2 s3) |
228 |
(ci+1 4)) |
(not (eql (elt s2 0) commachar)) |
229 |
(loop for i from (if (< i 0) 2 1) below len |
(or (>= i 0) (not (eql (elt s2 1) commachar))) |
230 |
always (if (= (mod (- len i) ci+1) 0) |
(let ((len (length s2)) |
231 |
(eql (elt s2 i) commachar) |
(ci+1 4)) |
232 |
(find (elt s2 i) "01234567"))))) |
(loop for i from (if (< i 0) 2 1) below len |
233 |
collect (list x i commachar s1 s2))) |
always (if (= (mod (- len i) ci+1) 0) |
234 |
|
(eql (elt s2 i) commachar) |
235 |
|
(find (elt s2 i) "01234567"))))) |
236 |
|
collect (list x i commachar s1 s2 s3)))) |
237 |
nil) |
nil) |
238 |
|
|
239 |
(deftest format.o.10 |
(deftest format.o.10 |
240 |
|
(let ((fn (formatter "~,,v:o"))) |
241 |
|
(with-standard-io-syntax |
242 |
|
(loop for x = (ash 1 (+ 2 (random 80))) |
243 |
|
for i = (- (random (+ x x)) x) |
244 |
|
for commachar = (random-from-seq +standard-chars+) |
245 |
|
for s1 = (format nil "~o" i) |
246 |
|
for s2 = (format nil "~,,v:o" commachar i) |
247 |
|
for s3 = (formatter-call-to-string fn commachar i) |
248 |
|
repeat 1000 |
249 |
|
unless (and |
250 |
|
(eql (elt s1 0) (elt s2 0)) |
251 |
|
(string= s2 s3) |
252 |
|
(if (< i 0) (eql (elt s1 1) (elt s2 1)) t) |
253 |
|
(let ((len (length s2)) |
254 |
|
(ci+1 4) |
255 |
|
(j (if (< i 0) 1 0))) |
256 |
|
(loop for i from (if (< i 0) 2 1) below len |
257 |
|
always (if (= (mod (- len i) ci+1) 0) |
258 |
|
(eql (elt s2 i) commachar) |
259 |
|
(eql (elt s1 (incf j)) (elt s2 i)))))) |
260 |
|
collect (list x i commachar s1 s2 s3)))) |
261 |
|
nil) |
262 |
|
|
263 |
|
(deftest format.o.11 |
264 |
(with-standard-io-syntax |
(with-standard-io-syntax |
265 |
(loop for x = (ash 1 (+ 2 (random 80))) |
(loop for x = (ash 1 (+ 2 (random 80))) |
266 |
for i = (- (random (+ x x)) x) |
for i = (- (random (+ x x)) x) |
267 |
for commachar = (random-from-seq +standard-chars+) |
for commachar = (random-from-seq +standard-chars+) |
268 |
for s1 = (format nil "~o" i) |
for s1 = (format nil "~o" i) |
269 |
for s2 = (format nil "~,,v:o" commachar i) |
for fmt = (format nil "~~,,'~c:~c" commachar (random-from-seq "oO")) |
270 |
|
for s2 = (format nil fmt i) |
271 |
repeat 1000 |
repeat 1000 |
272 |
unless (and |
unless (and |
273 |
(eql (elt s1 0) (elt s2 0)) |
(eql (elt s1 0) (elt s2 0)) |
282 |
collect (list x i commachar s1 s2))) |
collect (list x i commachar s1 s2))) |
283 |
nil) |
nil) |
284 |
|
|
285 |
(deftest format.o.11 |
(deftest formatter.o.11 |
286 |
(with-standard-io-syntax |
(with-standard-io-syntax |
287 |
(loop for x = (ash 1 (+ 2 (random 80))) |
(loop for x = (ash 1 (+ 2 (random 80))) |
288 |
for i = (- (random (+ x x)) x) |
for i = (- (random (+ x x)) x) |
289 |
for commachar = (random-from-seq +standard-chars+) |
for commachar = (random-from-seq +standard-chars+) |
290 |
for s1 = (format nil "~o" i) |
for s1 = (format nil "~o" i) |
291 |
for s2 = (format nil (format nil "~~,,'~c:~c" commachar |
for fmt = (format nil "~~,,'~c:~c" commachar (random-from-seq "oO")) |
292 |
(random-from-seq "oO")) |
for fn = (eval `(formatter ,fmt)) |
293 |
i) |
for s2 = (formatter-call-to-string fn i) |
294 |
repeat 1000 |
repeat 100 |
295 |
unless (and |
unless (and |
296 |
(eql (elt s1 0) (elt s2 0)) |
(eql (elt s1 0) (elt s2 0)) |
297 |
(if (< i 0) (eql (elt s1 1) (elt s2 1)) t) |
(if (< i 0) (eql (elt s1 1) (elt s2 1)) t) |
306 |
nil) |
nil) |
307 |
|
|
308 |
(deftest format.o.12 |
(deftest format.o.12 |
309 |
(with-standard-io-syntax |
(let ((fn (formatter "~,,V,v:O"))) |
310 |
(loop for x = (ash 1 (+ 2 (random 80))) |
(with-standard-io-syntax |
311 |
for i = (- (random (+ x x)) x) |
(loop for x = (ash 1 (+ 2 (random 80))) |
312 |
for commachar = (random-from-seq +standard-chars+) |
for i = (- (random (+ x x)) x) |
313 |
for commaint = (1+ (random 20)) |
for commachar = (random-from-seq +standard-chars+) |
314 |
for s1 = (format nil "~o" i) |
for commaint = (1+ (random 20)) |
315 |
for s2 = (format nil "~,,v,v:O" commachar commaint i) |
for s1 = (format nil "~o" i) |
316 |
repeat 1000 |
for s2 = (format nil "~,,v,v:O" commachar commaint i) |
317 |
unless (and |
for s3 = (formatter-call-to-string fn commachar commaint i) |
318 |
(eql (elt s1 0) (elt s2 0)) |
repeat 1000 |
319 |
(if (< i 0) (eql (elt s1 1) (elt s2 1)) t) |
unless (and |
320 |
(let ((len (length s2)) |
(eql (elt s1 0) (elt s2 0)) |
321 |
(ci+1 (1+ commaint)) |
(string= s2 s3) |
322 |
(j (if (< i 0) 1 0))) |
(if (< i 0) (eql (elt s1 1) (elt s2 1)) t) |
323 |
(loop for i from (if (< i 0) 2 1) below len |
(let ((len (length s2)) |
324 |
always (if (= (mod (- len i) ci+1) 0) |
(ci+1 (1+ commaint)) |
325 |
(eql (elt s2 i) commachar) |
(j (if (< i 0) 1 0))) |
326 |
(eql (elt s1 (incf j)) (elt s2 i)))))) |
(loop for i from (if (< i 0) 2 1) below len |
327 |
collect (list x i commachar s1 s2))) |
always (if (= (mod (- len i) ci+1) 0) |
328 |
|
(eql (elt s2 i) commachar) |
329 |
|
(eql (elt s1 (incf j)) (elt s2 i)))))) |
330 |
|
collect (list x i commachar s1 s2 s3)))) |
331 |
nil) |
nil) |
332 |
|
|
333 |
(deftest format.o.13 |
(deftest format.o.13 |
334 |
(with-standard-io-syntax |
(let ((fn (formatter "~,,v,V@:O"))) |
335 |
(loop for x = (ash 1 (+ 2 (random 80))) |
(with-standard-io-syntax |
336 |
for i = (- (random (+ x x)) x) |
(loop for x = (ash 1 (+ 2 (random 80))) |
337 |
for commachar = (random-from-seq +standard-chars+) |
for i = (- (random (+ x x)) x) |
338 |
for commaint = (1+ (random 20)) |
for commachar = (random-from-seq +standard-chars+) |
339 |
for s1 = (format nil "~@o" i) |
for commaint = (1+ (random 20)) |
340 |
for s2 = (format nil "~,,v,v:@o" commachar commaint i) |
for s1 = (format nil "~@o" i) |
341 |
repeat 1000 |
for s2 = (format nil "~,,v,v:@o" commachar commaint i) |
342 |
unless (and |
for s3 = (formatter-call-to-string fn commachar commaint i) |
343 |
(eql (elt s1 0) (elt s2 0)) |
repeat 1000 |
344 |
(eql (elt s1 1) (elt s2 1)) |
unless (and |
345 |
(let ((len (length s2)) |
(string= s2 s3) |
346 |
(ci+1 (1+ commaint)) |
(eql (elt s1 0) (elt s2 0)) |
347 |
(j 1)) |
(eql (elt s1 1) (elt s2 1)) |
348 |
(loop for i from 2 below len |
(let ((len (length s2)) |
349 |
always (if (= (mod (- len i) ci+1) 0) |
(ci+1 (1+ commaint)) |
350 |
(eql (elt s2 i) commachar) |
(j 1)) |
351 |
|
(loop for i from 2 below len |
352 |
|
always (if (= (mod (- len i) ci+1) 0) |
353 |
|
(eql (elt s2 i) commachar) |
354 |
(eql (elt s1 (incf j)) (elt s2 i)))))) |
(eql (elt s1 (incf j)) (elt s2 i)))))) |
355 |
collect (list x i commachar s1 s2))) |
collect (list x i commachar s1 s2 s3)))) |
356 |
nil) |
nil) |
357 |
|
|
358 |
;;; NIL arguments |
;;; NIL arguments |
372 |
;;; When the argument is not an integer, print as if using ~A and base 10 |
;;; When the argument is not an integer, print as if using ~A and base 10 |
373 |
|
|
374 |
(deftest format.o.18 |
(deftest format.o.18 |
375 |
(loop for x in *mini-universe* |
(let ((fn (formatter "~o"))) |
376 |
for s1 = (format nil "~o" x) |
(loop for x in *mini-universe* |
377 |
for s2 = (let ((*print-base* 8)) (format nil "~A" x)) |
for s1 = (format nil "~o" x) |
378 |
unless (or (integerp x) (string= s1 s2)) |
for s2 = (let ((*print-base* 8)) (format nil "~A" x)) |
379 |
collect (list x s1 s2)) |
for s3 = (formatter-call-to-string fn x) |
380 |
|
unless (or (integerp x) (and (string= s1 s2) (string= s2 s3))) |
381 |
|
collect (list x s1 s2 s3))) |
382 |
nil) |
nil) |
383 |
|
|
384 |
(deftest format.o.19 |
(deftest format.o.19 |
385 |
(loop for x in *mini-universe* |
(let ((fn (formatter "~:o"))) |
386 |
for s1 = (format nil "~:o" x) |
(loop for x in *mini-universe* |
387 |
for s2 = (let ((*print-base* 8)) (format nil "~A" x)) |
for s1 = (format nil "~:o" x) |
388 |
unless (or (integerp x) (string= s1 s2)) |
for s2 = (let ((*print-base* 8)) (format nil "~A" x)) |
389 |
collect (list x s1 s2)) |
for s3 = (formatter-call-to-string fn x) |
390 |
|
unless (or (integerp x) (and (string= s1 s2) (string= s2 s3))) |
391 |
|
collect (list x s1 s2 s3))) |
392 |
nil) |
nil) |
393 |
|
|
394 |
(deftest format.o.20 |
(deftest format.o.20 |
395 |
(loop for x in *mini-universe* |
(let ((fn (formatter "~@o"))) |
396 |
for s1 = (format nil "~@o" x) |
(loop for x in *mini-universe* |
397 |
for s2 = (let ((*print-base* 8)) (format nil "~A" x)) |
for s1 = (format nil "~@o" x) |
398 |
unless (or (integerp x) (string= s1 s2)) |
for s2 = (let ((*print-base* 8)) (format nil "~A" x)) |
399 |
collect (list x s1 s2)) |
for s3 = (formatter-call-to-string fn x) |
400 |
|
unless (or (integerp x) (and (string= s1 s2) (string= s2 s3))) |
401 |
|
collect (list x s1 s2 s3))) |
402 |
nil) |
nil) |
403 |
|
|
404 |
(deftest format.o.21 |
(deftest format.o.21 |
405 |
(loop for x in *mini-universe* |
(let ((fn (formatter "~:@o"))) |
406 |
for s1 = (format nil "~@:o" x) |
(loop for x in *mini-universe* |
407 |
for s2 = (let ((*print-base* 8)) (format nil "~A" x)) |
for s1 = (format nil "~@:o" x) |
408 |
unless (or (integerp x) (string= s1 s2)) |
for s2 = (let ((*print-base* 8)) (format nil "~A" x)) |
409 |
collect (list x s1 s2)) |
for s3 = (formatter-call-to-string fn x) |
410 |
|
unless (or (integerp x) (and (string= s1 s2) (string= s2 s3))) |
411 |
|
collect (list x s1 s2 s3))) |
412 |
nil) |
nil) |
413 |
|
|
414 |
;;; Must add tests for non-integers when the parameters |
;;; Must add tests for non-integers when the parameters |
421 |
(deftest format.o.22 |
(deftest format.o.22 |
422 |
(apply |
(apply |
423 |
#'values |
#'values |
424 |
(loop for i from 0 to 10 |
(let ((fn (formatter "~#o")) |
425 |
for args = (make-list i) |
(n #o12345)) |
426 |
for s = (apply #'format nil "~#o" #o12345 args) |
(loop for i from 0 to 10 |
427 |
collect s)) |
for args = (make-list i) |
428 |
|
for s = (apply #'format nil "~#o" n args) |
429 |
|
for s2 = (with-output-to-string |
430 |
|
(stream) |
431 |
|
(assert (equal (apply fn stream n args) args))) |
432 |
|
do (assert (string= s s2)) |
433 |
|
collect s))) |
434 |
"12345" |
"12345" |
435 |
"12345" |
"12345" |
436 |
"12345" |
"12345" |
446 |
(deftest format.o.23 |
(deftest format.o.23 |
447 |
(apply |
(apply |
448 |
#'values |
#'values |
449 |
(loop for i from 0 to 10 |
(let ((fn (formatter "~,,,#:o")) |
450 |
for args = (make-list i) |
(n #o1234567012)) |
451 |
for s = (apply #'format nil "~,,,#:o" #o1234567012 args) |
(loop for i from 0 to 10 |
452 |
collect s)) |
for args = (make-list i) |
453 |
|
for s = (apply #'format nil "~,,,#:o" n args) |
454 |
|
for s2 = (with-output-to-string |
455 |
|
(stream) |
456 |
|
(assert (equal (apply fn stream n args) args))) |
457 |
|
do (assert (string= s s2)) |
458 |
|
collect s))) |
459 |
"1,2,3,4,5,6,7,0,1,2" |
"1,2,3,4,5,6,7,0,1,2" |
460 |
"12,34,56,70,12" |
"12,34,56,70,12" |
461 |
"1,234,567,012" |
"1,234,567,012" |
471 |
(deftest format.o.24 |
(deftest format.o.24 |
472 |
(apply |
(apply |
473 |
#'values |
#'values |
474 |
(loop for i from 0 to 10 |
(let ((fn (formatter "~,,,#:@o")) |
475 |
for args = (make-list i) |
(n #o1234567012)) |
476 |
for s = (apply #'format nil "~,,,#@:O" #o1234567012 args) |
(loop for i from 0 to 10 |
477 |
collect s)) |
for args = (make-list i) |
478 |
|
for s = (apply #'format nil "~,,,#@:O" n args) |
479 |
|
for s2 = (with-output-to-string |
480 |
|
(stream) |
481 |
|
(assert (equal (apply fn stream n args) args))) |
482 |
|
do (assert (string= s s2)) |
483 |
|
collect s))) |
484 |
"+1,2,3,4,5,6,7,0,1,2" |
"+1,2,3,4,5,6,7,0,1,2" |
485 |
"+12,34,56,70,12" |
"+12,34,56,70,12" |
486 |
"+1,234,567,012" |
"+1,234,567,012" |
511 |
;;; Randomized test |
;;; Randomized test |
512 |
|
|
513 |
(deftest format.o.30 |
(deftest format.o.30 |
514 |
(loop |
(let ((fn (formatter "~v,v,v,vo"))) |
515 |
for mincol = (and (coin) (random 50)) |
(loop |
516 |
for padchar = (and (coin) |
for mincol = (and (coin) (random 50)) |
517 |
(random-from-seq +standard-chars+)) |
for padchar = (and (coin) |
|
for commachar = (and (coin) |
|
518 |
(random-from-seq +standard-chars+)) |
(random-from-seq +standard-chars+)) |
519 |
for commaint = (and (coin) (1+ (random 10))) |
for commachar = (and (coin) |
520 |
for k = (ash 1 (+ 2 (random 30))) |
(random-from-seq +standard-chars+)) |
521 |
for x = (- (random (+ k k)) k) |
for commaint = (and (coin) (1+ (random 10))) |
522 |
for fmt = (concatenate |
for k = (ash 1 (+ 2 (random 30))) |
523 |
'string |
for x = (- (random (+ k k)) k) |
524 |
(if mincol (format nil "~~~d," mincol) "~,") |
for fmt = (concatenate |
525 |
(if padchar (format nil "'~c," padchar) ",") |
'string |
526 |
(if commachar (format nil "'~c," commachar) ",") |
(if mincol (format nil "~~~d," mincol) "~,") |
527 |
(if commaint (format nil "~do" commaint) "o")) |
(if padchar (format nil "'~c," padchar) ",") |
528 |
for s1 = (format nil fmt x) |
(if commachar (format nil "'~c," commachar) ",") |
529 |
for s2 = (format nil "~v,v,v,vo" mincol padchar commachar commaint x) |
(if commaint (format nil "~do" commaint) "o")) |
530 |
repeat 2000 |
for s1 = (format nil fmt x) |
531 |
unless (string= s1 s2) |
for s2 = (format nil "~v,v,v,vo" mincol padchar commachar commaint x) |
532 |
collect (list mincol padchar commachar commaint fmt x s1 s2)) |
for s3 = (formatter-call-to-string fn mincol padchar commachar commaint x) |
533 |
|
repeat 2000 |
534 |
|
unless (and (string= s1 s2) (string= s2 s3)) |
535 |
|
collect (list mincol padchar commachar commaint fmt x s1 s2 s3))) |
536 |
nil) |
nil) |