]> gitweb.factorcode.org Git - factor.git/blob - core/math/parser/parser-tests.factor
b3b889c0c19ed5f1adfee1b6e8eaf8ef3cb3e2b9
[factor.git] / core / math / parser / parser-tests.factor
1 USING: kernel layouts literals math math.parser.private sequences
2 strings tools.test ;
3 IN: math.parser
4
5 { f }
6 [ f string>number ]
7 unit-test
8
9 { f }
10 [ ";" string>number ]
11 unit-test
12
13 { f }
14 [ "<>" string>number ]
15 unit-test
16
17 { f }
18 [ "^" string>number ]
19 unit-test
20
21 { f }
22 [ "789:;<=>?@" string>number ]
23 unit-test
24
25 { f }
26 [ "12345abcdef" string>number ]
27 unit-test
28
29 { 12 }
30 [ "+12" string>number ]
31 unit-test
32
33 { -12 }
34 [ "-12" string>number ]
35 unit-test
36
37 { f }
38 [ "-+12" string>number ]
39 unit-test
40
41 { f }
42 [ "+-12" string>number ]
43 unit-test
44
45 { f }
46 [ "--12" string>number ]
47 unit-test
48
49 { f }
50 [ "-" string>number ]
51 unit-test
52
53 { f }
54 [ "e" string>number ]
55 unit-test
56
57 { f } [ "1/0" string>number ] unit-test
58 { f } [ "-1/0" string>number ] unit-test
59 { 1/2 } [ "1/2" string>number ] unit-test
60 { -1/2 } [ "-1/2" string>number ] unit-test
61 { 2 } [ "4/2" string>number ] unit-test
62 { f } [ "1/-2" string>number ] unit-test
63 { f } [ "1/2/3" string>number ] unit-test
64 { 1+1/2 } [ "1+1/2" string>number ] unit-test
65 { 1+1/2 } [ "+1+1/2" string>number ] unit-test
66 { f } [ "1-1/2" string>number ] unit-test
67 { -1-1/2 } [ "-1-1/2" string>number ] unit-test
68 { f } [ "-1+1/2" string>number ] unit-test
69 { f } [ "1+2" string>number ] unit-test
70 { f } [ "1+" string>number ] unit-test
71 { f } [ "1-" string>number ] unit-test
72 { f } [ "1+1/2+2" string>number ] unit-test
73
74 { 100000 } [ "100,000" string>number ] unit-test
75
76 { 100000.0 } [ "100,000.0" string>number ] unit-test
77
78 { f } [ "," string>number ] unit-test
79 { f } [ "-," string>number ] unit-test
80 { f } [ "1," string>number ] unit-test
81 { f } [ "-1," string>number ] unit-test
82 { f } [ ",2" string>number ] unit-test
83 { f } [ "-,2" string>number ] unit-test
84
85 { 2.0 } [ "2." string>number ] unit-test
86 { 2.0 } [ "+2." string>number ] unit-test
87 { 0.25 } [ ".25" string>number ] unit-test
88 { -2.0 } [ "-2." string>number ] unit-test
89 { -0.25 } [ "-.25" string>number ] unit-test
90 { f }  [ "-." string>number ] unit-test
91
92 { 255 } [ "ff" hex> ] unit-test
93
94 { 100.0 } [ "1.0e2" string>number ] unit-test
95 { 100.0 } [ "100.0" string>number ] unit-test
96 { 100.0 } [ "100." string>number ] unit-test
97
98 { 100.0 } [ "1e2" string>number ] unit-test
99 { 100.0 } [ "1e+2" string>number ] unit-test
100 { 0x1e2 } [ "1e2" hex> ] unit-test
101
102 { 0x1.999999999999ap-3 } [ "0.2" string>number ] unit-test
103 { 0x1.3333333333333p0  } [ "1.2" string>number ] unit-test
104 { 0o1.146314631463146314p0 } [ "1.2" string>number ] unit-test
105 { 0b1.0011001100110011001100110011001100110011001100110011p0 } [ "1.2" string>number ] unit-test
106 { 0x1.5555555555555p0  } [ "1.333,333,333,333,333,333" string>number ] unit-test
107 { 0x1.aaaaaaaaaaaabp0  } [ "1.666,666,666,666,666,666" string>number ] unit-test
108
109 { "100.0" }
110 [ "1.0e2" string>number number>string ]
111 unit-test
112
113 { -100.0 } [ "-1.0e2" string>number ] unit-test
114 { -100.0 } [ "-100.0" string>number ] unit-test
115 { -100.0 } [ "-100." string>number ] unit-test
116
117 { "-100.0" }
118 [ "-1.0e2" string>number number>string ]
119 unit-test
120
121 { -100.0 } [ "-1.e2" string>number ] unit-test
122
123 { "0.01" }
124 [ "1.0e-2" string>number number>string ]
125 unit-test
126
127 { 0.01 } [ "1.0e-2" string>number ] unit-test
128
129 { "-0.01" }
130 [ "-1.0e-2" string>number number>string ]
131 unit-test
132
133 { -0.01 } [ "-1.0e-2" string>number ] unit-test
134
135 { "-0.01" }
136 [ "-1.e-2" string>number number>string ]
137 unit-test
138
139 { -1.0e-12 } [ "-1.0e-12" string>number ] unit-test
140
141 { t }
142 [ "-1.0e-12" string>number number>string { "-1.0e-12" "-1.0e-012" } member? ]
143 unit-test
144
145 { f }
146 [ "-1e-2e4" string>number ]
147 unit-test
148
149 { "3.14" }
150 [ "3.14" string>number number>string ]
151 unit-test
152
153 { f }
154 [ "." string>number ]
155 unit-test
156
157 { f }
158 [ ".e" string>number ]
159 unit-test
160
161 { "101.0" }
162 [ "1.01e2" string>number number>string ]
163 unit-test
164
165 { "-101.0" }
166 [ "-1.01e2" string>number number>string ]
167 unit-test
168
169 { "1.01" }
170 [ "101.0e-2" string>number number>string ]
171 unit-test
172
173 { "-1.01" }
174 [ "-101.0e-2" string>number number>string ]
175 unit-test
176
177 { f }
178 [ "1e1/2" string>number ]
179 unit-test
180
181 { f }
182 [ "1e1.2" string>number ]
183 unit-test
184
185 { f }
186 [ "e/2" string>number ]
187 unit-test
188
189 { f } [ "12" bin> ] unit-test
190 { f } [ "fdsf" bin> ] unit-test
191 { 3 } [ "11" bin> ] unit-test
192
193 { f } [ "\0." string>number ] unit-test
194
195 [ 1 1 >base ] must-fail
196 [ 1 0 >base ] must-fail
197 [ 1 -1 >base ] must-fail
198 [ 2+1/2 -1 >base ] [ invalid-radix? ] must-fail-with
199 [ 123.456 7 >base ] [ invalid-radix? ] must-fail-with
200
201 { "0/0." } [ 0.0 0.0 / number>string ] unit-test
202
203 { "1/0." } [ 1.0 0.0 / number>string ] unit-test
204
205 { "-1/0." } [ -1.0 0.0 / number>string ] unit-test
206
207 { t } [ "0/0." string>number fp-nan? ] unit-test
208
209 { 1/0. } [ "1/0." string>number ] unit-test
210
211 { -1/0. } [ "-1/0." string>number ] unit-test
212
213 { -0.5 } [ "-1/2." string>number ] unit-test
214
215 { "-0.0" } [ -0.0 number>string ] unit-test
216
217 { "-3/4" } [ -3/4 number>string ] unit-test
218 { "-1-1/4" } [ -5/4 number>string ] unit-test
219
220 { "1.0p0" } [ 1.0 >hex ] unit-test
221 { "1.8p2" } [ 6.0 >hex ] unit-test
222 { "1.08p2" } [ 4.125 >hex ] unit-test
223 { "1.8p-2" } [ 0.375 >hex ] unit-test
224 { "-1.8p2" } [ -6.0 >hex ] unit-test
225 { "1.8p10" } [ 1536.0 >hex ] unit-test
226 { "0.0" } [ 0.0 >hex ] unit-test
227 { "1.0p-1074" } [ 1 bits>double >hex ] unit-test
228 { "-0.0" } [ -0.0 >hex ] unit-test
229
230 { "1.0p0" } [ 1.0 >bin ] unit-test
231 { "1.1p2" } [ 6.0 >bin ] unit-test
232 { "1.00001p2" } [ 4.125 >bin ] unit-test
233 { "1.1p-2" } [ 0.375 >bin ] unit-test
234 { "-1.1p2" } [ -6.0 >bin ] unit-test
235 { "1.1p10" } [ 1536.0 >bin ] unit-test
236 { "0.0" } [ 0.0 >bin ] unit-test
237 { "1.0p-1074" } [ 1 bits>double >bin ] unit-test
238 { "-0.0" } [ -0.0 >bin ] unit-test
239
240 { "1.0p0" } [ 1.0 >oct ] unit-test
241 { "1.4p2" } [ 6.0 >oct ] unit-test
242 { "1.02p2" } [ 4.125 >oct ] unit-test
243 { "1.4p-2" } [ 0.375 >oct ] unit-test
244 { "-1.4p2" } [ -6.0 >oct ] unit-test
245 { "1.4p10" } [ 1536.0 >oct ] unit-test
246 { "0.0" } [ 0.0 >oct ] unit-test
247 { "1.0p-1074" } [ 1 bits>double >oct ] unit-test
248 { "-0.0" } [ -0.0 >oct ] unit-test
249
250 { 1.0 } [ "1.0p0" hex> ] unit-test
251 { 1.5 } [ "1.8p0" hex> ] unit-test
252 { 1.875 } [ "1.ep0" hex> ] unit-test
253 { 1.90625 } [ "1.e8p0" hex> ] unit-test
254 { 1.03125 } [ "1.08p0" hex> ] unit-test
255 { 15.5 } [ "f.8p0" hex> ] unit-test
256 { 15.53125 } [ "f.88p0" hex> ] unit-test
257 { -15.5 } [ "-f.8p0" hex> ] unit-test
258 { 15.5 } [ "f.8p0" hex> ] unit-test
259 { -15.5 } [ "-f.8p0" hex> ] unit-test
260 { 62.0 } [ "f.8p2" hex> ] unit-test
261 { 3.875 } [ "f.8p-2" hex> ] unit-test
262 { $[ 1 bits>double ] } [ "1.0p-1074" hex> ] unit-test
263 { 0.0 } [ "1.0p-1075" hex> ] unit-test
264 { 1/0. } [ "1.0p1024" hex> ] unit-test
265 { -1/0. } [ "-1.0p1024" hex> ] unit-test
266
267 { 1.0 } [ "1.0p0" bin> ] unit-test
268 { 1.5 } [ "1.1p0" bin> ] unit-test
269 { 1.875 } [ "1.111p0" bin> ] unit-test
270 { 1.90625 } [ "1.11101p0" bin> ] unit-test
271 { 1.03125 } [ "1.00001p0" bin> ] unit-test
272 { 15.5 } [ "1111.1p0" bin> ] unit-test
273 { 15.53125 } [ "1111.10001p0" bin> ] unit-test
274 { -15.5 } [ "-1111.1p0" bin> ] unit-test
275 { 15.5 } [ "1111.1p0" bin> ] unit-test
276 { -15.5 } [ "-1111.1p0" bin> ] unit-test
277 { 62.0 } [ "1111.1p2" bin> ] unit-test
278 { 3.875 } [ "1111.1p-2" bin> ] unit-test
279 { $[ 1 bits>double ] } [ "1.0p-1074" bin> ] unit-test
280 { 0.0 } [ "1.0p-1075" bin> ] unit-test
281 { 1/0. } [ "1.0p1024" bin> ] unit-test
282 { -1/0. } [ "-1.0p1024" bin> ] unit-test
283
284 { 1.0 } [ "1.0p0" oct> ] unit-test
285 { 1.5 } [ "1.4p0" oct> ] unit-test
286 { 1.875 } [ "1.7p0" oct> ] unit-test
287 { 1.90625 } [ "1.72p0" oct> ] unit-test
288 { 1.03125 } [ "1.02p0" oct> ] unit-test
289 { 15.5 } [ "17.4p0" oct> ] unit-test
290 { 15.53125 } [ "17.42p0" oct> ] unit-test
291 { -15.5 } [ "-17.4p0" oct> ] unit-test
292 { 15.5 } [ "17.4p0" oct> ] unit-test
293 { -15.5 } [ "-17.4p0" oct> ] unit-test
294 { 62.0 } [ "17.4p2" oct> ] unit-test
295 { 3.875 } [ "17.4p-2" oct> ] unit-test
296 { $[ 1 bits>double ] } [ "1.0p-1074" oct> ] unit-test
297 { 0.0 } [ "1.0p-1075" oct> ] unit-test
298 { 1/0. } [ "1.0p1024" oct> ] unit-test
299 { -1/0. } [ "-1.0p1024" oct> ] unit-test
300
301 { 0 } [ "0" string>number ] unit-test
302 { 0 } [ "00" string>number ] unit-test
303 { 0 } [ "0,000" string>number ] unit-test
304 { 0.0 } [ "0." string>number ] unit-test
305 { 0.0 } [ "0.0" string>number ] unit-test
306 { 0.0 } [ "0x0.0p0" string>number ] unit-test
307 { 0 } [ "0x0" string>number ] unit-test
308 { 0 } [ "0o0" string>number ] unit-test
309 { 0 } [ "0b0" string>number ] unit-test
310
311 { 10 } [ "010" string>number ] unit-test
312 { 16 } [ "0x10" string>number ] unit-test
313 {  8 } [ "0o10" string>number ] unit-test
314 {  2 } [ "0b10" string>number ] unit-test
315
316 { -10 } [ "-010" string>number ] unit-test
317 { -16 } [ "-0x10" string>number ] unit-test
318 {  -8 } [ "-0o10" string>number ] unit-test
319 {  -2 } [ "-0b10" string>number ] unit-test
320
321 { 16 } [ "0X10" string>number ] unit-test
322 {  8 } [ "0O10" string>number ] unit-test
323 {  2 } [ "0B10" string>number ] unit-test
324
325 { -16 } [ "-0X10" string>number ] unit-test
326 {  -8 } [ "-0O10" string>number ] unit-test
327 {  -2 } [ "-0B10" string>number ] unit-test
328
329 { f } [ "01a" string>number ] unit-test
330 { f } [ "0x1g" string>number ] unit-test
331 { f } [ "0o18" string>number ] unit-test
332 { f } [ "0b12" string>number ] unit-test
333
334 { 11 } [ "0x0b" string>number ] unit-test
335 { f  } [ "0x0o0" string>number ] unit-test
336
337 { 0x7FFF,ABCD } [ "0x7FFF,ABCD" string>number ] unit-test
338
339 { 1.0 } [ "0x1.0p0" string>number ] unit-test
340 { 6.0 } [ "0x1.8p2" string>number ] unit-test
341 { 0.375 } [ "0x1.8p-2" string>number ] unit-test
342 { -6.0 } [ "-0x1.8p2" string>number ] unit-test
343 { -0.375 } [ "-0x1.8p-2" string>number ] unit-test
344
345 { f } [ "0x" string>number ] unit-test
346 { f } [ "0b" string>number ] unit-test
347 { f } [ "0o" string>number ] unit-test
348 { f } [ "0x," string>number ] unit-test
349 { f } [ "0b," string>number ] unit-test
350 { f } [ "0o," string>number ] unit-test
351 { f } [ "0x,1" string>number ] unit-test
352 { f } [ "0b,1" string>number ] unit-test
353 { f } [ "0o,1" string>number ] unit-test
354 { f } [ "0x1," string>number ] unit-test
355 { f } [ "0b1," string>number ] unit-test
356 { f } [ "0o1," string>number ] unit-test
357
358 ! #372
359 ! hex float requires exponent
360 { f } [ "0x1.0" string>number ] unit-test
361
362 ! hex float rounds to even on half
363 { 0x1.0000,0000,0000,0p0 } [ "0x1.0000,0000,0000,0,8p0" string>number ] unit-test
364 { 0x1.0000,0000,0000,2p0 } [ "0x1.0000,0000,0000,1,8p0" string>number ] unit-test
365 { 0x1.0000,0000,0000,0p0 } [ "0x8.0000,0000,0000,4p-3" string>number ] unit-test
366 { 0x1.0000,0000,0000,2p0 } [ "0x8.0000,0000,0000,Cp-3" string>number ] unit-test
367
368 { -0x1.0000,0000,0000,0p0 } [ "-0x1.0000,0000,0000,0,8p0" string>number ] unit-test
369 { -0x1.0000,0000,0000,2p0 } [ "-0x1.0000,0000,0000,1,8p0" string>number ] unit-test
370 { -0x1.0000,0000,0000,0p0 } [ "-0x8.0000,0000,0000,4p-3" string>number ] unit-test
371 { -0x1.0000,0000,0000,2p0 } [ "-0x8.0000,0000,0000,Cp-3" string>number ] unit-test
372
373 ! hex float rounds to nearest with tiny epsilons
374 { 0x1.0000,0000,0000,0p0 } [ "0x1.0000,0000,0000,0,4p0" string>number ] unit-test
375 { 0x1.0000,0000,0000,0p0 } [ "0x1.0000,0000,0000,0,7Fp0" string>number ] unit-test
376 { 0x1.0000,0000,0000,0p0 } [ "0x1.0000,0000,0000,0,7FFF,FFFF,FFFF,FFFFp0" string>number ] unit-test
377
378 { 0x1.0000,0000,0000,1p0 } [ "0x1.0000,0000,0000,0,Cp0" string>number ] unit-test
379 { 0x1.0000,0000,0000,1p0 } [ "0x1.0000,0000,0000,0,81p0" string>number ] unit-test
380 { 0x1.0000,0000,0000,1p0 } [ "0x1.0000,0000,0000,0,8000,0000,0000,0001p0" string>number ] unit-test
381
382 { 0x1.0000,0000,0000,1p0 } [ "0x1.0000,0000,0000,1,4p0" string>number ] unit-test
383 { 0x1.0000,0000,0000,1p0 } [ "0x1.0000,0000,0000,1,7Fp0" string>number ] unit-test
384 { 0x1.0000,0000,0000,1p0 } [ "0x1.0000,0000,0000,1,7FFF,FFFF,FFFF,FFFFp0" string>number ] unit-test
385
386 { 0x1.0000,0000,0000,2p0 } [ "0x1.0000,0000,0000,1,Cp0" string>number ] unit-test
387 { 0x1.0000,0000,0000,2p0 } [ "0x1.0000,0000,0000,1,81p0" string>number ] unit-test
388 { 0x1.0000,0000,0000,2p0 } [ "0x1.0000,0000,0000,1,8000,0000,0000,0001p0" string>number ] unit-test
389
390 { -0x1.0000,0000,0000,0p0 } [ "-0x1.0000,0000,0000,0,4p0" string>number ] unit-test
391 { -0x1.0000,0000,0000,0p0 } [ "-0x1.0000,0000,0000,0,7Fp0" string>number ] unit-test
392 { -0x1.0000,0000,0000,0p0 } [ "-0x1.0000,0000,0000,0,7FFF,FFFF,FFFF,FFFFp0" string>number ] unit-test
393
394 { -0x1.0000,0000,0000,1p0 } [ "-0x1.0000,0000,0000,0,Cp0" string>number ] unit-test
395 { -0x1.0000,0000,0000,1p0 } [ "-0x1.0000,0000,0000,0,81p0" string>number ] unit-test
396 { -0x1.0000,0000,0000,1p0 } [ "-0x1.0000,0000,0000,0,8000,0000,0000,0001p0" string>number ] unit-test
397
398 { -0x1.0000,0000,0000,1p0 } [ "-0x1.0000,0000,0000,1,4p0" string>number ] unit-test
399 { -0x1.0000,0000,0000,1p0 } [ "-0x1.0000,0000,0000,1,7Fp0" string>number ] unit-test
400 { -0x1.0000,0000,0000,1p0 } [ "-0x1.0000,0000,0000,1,7FFF,FFFF,FFFF,FFFFp0" string>number ] unit-test
401
402 { -0x1.0000,0000,0000,2p0 } [ "-0x1.0000,0000,0000,1,Cp0" string>number ] unit-test
403 { -0x1.0000,0000,0000,2p0 } [ "-0x1.0000,0000,0000,1,81p0" string>number ] unit-test
404 { -0x1.0000,0000,0000,2p0 } [ "-0x1.0000,0000,0000,1,8000,0000,0000,0001p0" string>number ] unit-test
405
406 ! #453
407 ! hex> dec> oct> bin> shouldn't admit radix prefixes
408
409 { 0x0b } [ "0b" hex> ] unit-test
410 { 0x0b0 } [ "0b0" hex> ] unit-test
411 { f } [ "0o0" hex> ] unit-test
412 { f } [ "0x0" hex> ] unit-test
413
414 { f } [ "0b" dec> ] unit-test
415 { f } [ "0b0" dec> ] unit-test
416 { f } [ "0o0" dec> ] unit-test
417 { f } [ "0x0" dec> ] unit-test
418
419 { f } [ "0b" oct> ] unit-test
420 { f } [ "0b0" oct> ] unit-test
421 { f } [ "0o0" oct> ] unit-test
422 { f } [ "0x0" oct> ] unit-test
423
424 { f } [ "0b" bin> ] unit-test
425 { f } [ "0b0" bin> ] unit-test
426 { f } [ "0o0" bin> ] unit-test
427 { f } [ "0x0" bin> ] unit-test
428
429 ! #1229, float parsing bug, and a regression
430 { -0.5 } [ "-.5" dec> ] unit-test
431 { 0 } [ "0" hex> ] unit-test
432
433 { t } [ most-positive-fixnum number>string string>number fixnum? ] unit-test
434 { t } [ most-negative-fixnum number>string string>number fixnum? ] unit-test
435
436 ! large/small numbers/exponents correctly cancel out
437 { 1.0 } [ "1" 3000 [ CHAR: 0 ] "" replicate-as append "e-3000" append string>number ] unit-test
438 { 1.0 } [ "0x1" 1000 [ CHAR: 0 ] "" replicate-as append "p-4000" append string>number ] unit-test
439 { 1.0 } [ "0." 3000 [ CHAR: 0 ] "" replicate-as append "1e3001" append string>number ] unit-test
440 { 1.0 } [ "0x0." 1000 [ CHAR: 0 ] "" replicate-as append "1p4004" append string>number ] unit-test
441 { 1.0 } [ "1" 3000 [ CHAR: 0 ] "" replicate-as append "." append
442               3000 [ CHAR: 0 ] "" replicate-as append "e-3000" append string>number ] unit-test
443
444 ! We correctly parse the biggest/smallest float correctly
445 ! (ie the 1/0. or 0/0. short-circuit optimization doesn't apply)
446 { 1 } [ "4.9406564584124655e-324" string>number double>bits ] unit-test
447 { 1 } [ "0x1.0p-1074" string>number double>bits ] unit-test
448 { 1 } [ "0o1.0p-1074" string>number double>bits ] unit-test
449 { 1 } [ "0b1.0p-1074" string>number double>bits ] unit-test
450 { 0x7fefffffffffffff } [ "1.7976931348623157e+308" string>number double>bits ] unit-test
451 { 0x7fefffffffffffff } [ "0x1.fffffffffffffp1023" string>number double>bits ] unit-test
452 { 0x7fefffffffffffff } [ "0o1.777777777777777774p1023" string>number double>bits ] unit-test
453 { 0x7fefffffffffffff } [ "0b1.1111111111111111111111111111111111111111111111111111p1023" string>number double>bits ] unit-test
454 ! Actual biggest/smallest parseable floats are a little
455 ! larger/smaller than IEE754 values because of rounding
456 { 0x1.0p-1074 } [ "0x0.fffffffffffffcp-1074" string>number ] unit-test
457 { 4.94065645841246544e-324 } [ "4.94065645841246517e-324" string>number ] unit-test
458 { 0x1.fffffffffffffp1023 } [ "0x1.fffffffffffff7ffffffffffffffffp1023" string>number ] unit-test
459 { 1.79769313486231571e+308 } [ "1.797693134862315807e+308" string>number ] unit-test
460
461 ! works with ratios
462 { 0.25 } [ "1/4" 3000 [ CHAR: 0 ] "" replicate-as append "e-3000" append string>number ] unit-test
463 ! XXX: disable for right now, see #1362 or #1408
464 ! { 1.25 } [ "1+1/4" 3000 [ CHAR: 0 ] "" replicate-as append "e-3000" append string>number ] unit-test
465
466 ! #1356 #1231
467 { 1/0. } [ "1e100000" string>number ] unit-test
468 { 0.0  } [ "1e-100000" string>number ] unit-test
469 { 1/0. } [ "0x1p300000" string>number ] unit-test
470 { 0.0  } [ "0x1p-300000" string>number ] unit-test
471
472 { "deadbeef" } [ B{ 222 173 190 239 } bytes>hex-string ] unit-test
473 { B{ 222 173 190 239 } } [ "deADbeEF" hex-string>bytes ] unit-test
474
475 {
476     B{ 49 46 53 53 69 43 48 53 }
477 } [
478     155000.0 B{ 0 } -1 3 B{ 69 0 } B{ 67 0 } (format-float)
479 ] unit-test
480
481 {
482     B{ 32 32 32 32 32 32 32 49 46 53 53 69 43 48 53 }
483 } [
484     155000.0 B{ 0 } 15 3 B{ 69 0 } B{ 67 0 } (format-float)
485 ] unit-test
486
487 ! Missing locale
488 { "" } [
489     33.4 "" 4 4 "f" "missing" format-float
490 ] unit-test
491
492 ! Literal byte arrays are mutable, so (format-float) isn't foldable.
493 : trouble ( -- str ba )
494     155000.0 B{ } -1 3 B{ 69 0 } [
495         B{ 67 0 } (format-float) >string
496     ] keep ;
497
498 {
499     "1.55E+05"
500     "1.550e+05"
501 } [
502     trouble CHAR: e 0 rot set-nth trouble drop
503 ] unit-test