1 USING: kernel layouts literals math math.parser
2 math.parser.private sequences strings tools.test ;
14 [ "<>" string>number ]
22 [ "789:;<=>?@" string>number ]
26 [ "12345abcdef" string>number ]
30 [ "+12" string>number ]
34 [ "-12" string>number ]
38 [ "-+12" string>number ]
42 [ "+-12" string>number ]
46 [ "--12" string>number ]
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
74 { 100000 } [ "100,000" string>number ] unit-test
76 { 100000.0 } [ "100,000.0" string>number ] unit-test
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
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
92 { 255 } [ "ff" hex> ] unit-test
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
98 { 100.0 } [ "1e2" string>number ] unit-test
99 { 100.0 } [ "1e+2" string>number ] unit-test
100 { 0x1e2 } [ "1e2" hex> ] unit-test
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
110 [ "1.0e2" string>number number>string ]
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
118 [ "-1.0e2" string>number number>string ]
121 { -100.0 } [ "-1.e2" string>number ] unit-test
124 [ "1.0e-2" string>number number>string ]
127 { 0.01 } [ "1.0e-2" string>number ] unit-test
130 [ "-1.0e-2" string>number number>string ]
133 { -0.01 } [ "-1.0e-2" string>number ] unit-test
136 [ "-1.e-2" string>number number>string ]
139 { -1.0e-12 } [ "-1.0e-12" string>number ] unit-test
141 { "-0.000000000001" }
142 [ "-1.0e-12" string>number number>string ]
146 [ "-1e-2e4" string>number ]
150 [ "3.14" string>number number>string ]
154 [ "." string>number ]
158 [ ".e" string>number ]
162 [ "1.01e2" string>number number>string ]
166 [ "-1.01e2" string>number number>string ]
170 [ "101.0e-2" string>number number>string ]
174 [ "-101.0e-2" string>number number>string ]
178 [ "1e1/2" string>number ]
182 [ "1e1.2" string>number ]
186 [ "e/2" string>number ]
189 { f } [ "12" bin> ] unit-test
190 { f } [ "fdsf" bin> ] unit-test
191 { 3 } [ "11" bin> ] unit-test
193 { f } [ "\0." string>number ] unit-test
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
201 { "0/0." } [ 0/0. number>string ] unit-test
202 { "-0/0." } [ -0/0. number>string ] unit-test
204 { t } [ "0/0." string>number fp-nan? ] unit-test
205 { t } [ "-0/0." string>number fp-nan? ] unit-test
207 { f } [ "0/0." string>number fp-sign ] unit-test
208 { t } [ "-0/0." string>number fp-sign ] unit-test
211 { "1/0." } [ 1/0. number>string ] unit-test
212 { 1/0. } [ "1/0." string>number ] unit-test
214 { "-1/0." } [ -1/0. number>string ] unit-test
215 { -1/0. } [ "-1/0." string>number ] unit-test
217 { -0.5 } [ "-1/2." string>number ] unit-test
219 { "-0.0" } [ -0.0 number>string ] unit-test
221 { "-3/4" } [ -3/4 number>string ] unit-test
222 { "-1-1/4" } [ -5/4 number>string ] unit-test
224 { "1.0p0" } [ 1.0 >hex ] unit-test
225 { "1.8p2" } [ 6.0 >hex ] unit-test
226 { "1.08p2" } [ 4.125 >hex ] unit-test
227 { "1.8p-2" } [ 0.375 >hex ] unit-test
228 { "-1.8p2" } [ -6.0 >hex ] unit-test
229 { "1.8p10" } [ 1536.0 >hex ] unit-test
230 { "0.0" } [ 0.0 >hex ] unit-test
231 { "1.0p-1074" } [ 1 bits>double >hex ] unit-test
232 { "-0.0" } [ -0.0 >hex ] unit-test
234 { "1.0p0" } [ 1.0 >bin ] unit-test
235 { "1.1p2" } [ 6.0 >bin ] unit-test
236 { "1.00001p2" } [ 4.125 >bin ] unit-test
237 { "1.1p-2" } [ 0.375 >bin ] unit-test
238 { "-1.1p2" } [ -6.0 >bin ] unit-test
239 { "1.1p10" } [ 1536.0 >bin ] unit-test
240 { "0.0" } [ 0.0 >bin ] unit-test
241 { "1.0p-1074" } [ 1 bits>double >bin ] unit-test
242 { "-0.0" } [ -0.0 >bin ] unit-test
244 { "1.0p0" } [ 1.0 >oct ] unit-test
245 { "1.4p2" } [ 6.0 >oct ] unit-test
246 { "1.02p2" } [ 4.125 >oct ] unit-test
247 { "1.4p-2" } [ 0.375 >oct ] unit-test
248 { "-1.4p2" } [ -6.0 >oct ] unit-test
249 { "1.4p10" } [ 1536.0 >oct ] unit-test
250 { "0.0" } [ 0.0 >oct ] unit-test
251 { "1.0p-1074" } [ 1 bits>double >oct ] unit-test
252 { "-0.0" } [ -0.0 >oct ] unit-test
254 { 1.0 } [ "1.0p0" hex> ] unit-test
255 { 1.5 } [ "1.8p0" hex> ] unit-test
256 { 1.875 } [ "1.ep0" hex> ] unit-test
257 { 1.90625 } [ "1.e8p0" hex> ] unit-test
258 { 1.03125 } [ "1.08p0" hex> ] unit-test
259 { 15.5 } [ "f.8p0" hex> ] unit-test
260 { 15.53125 } [ "f.88p0" hex> ] unit-test
261 { -15.5 } [ "-f.8p0" hex> ] unit-test
262 { 15.5 } [ "f.8p0" hex> ] unit-test
263 { -15.5 } [ "-f.8p0" hex> ] unit-test
264 { 62.0 } [ "f.8p2" hex> ] unit-test
265 { 3.875 } [ "f.8p-2" hex> ] unit-test
266 { $[ 1 bits>double ] } [ "1.0p-1074" hex> ] unit-test
267 { 0.0 } [ "1.0p-1075" hex> ] unit-test
268 { 1/0. } [ "1.0p1024" hex> ] unit-test
269 { -1/0. } [ "-1.0p1024" hex> ] unit-test
271 { 1.0 } [ "1.0p0" bin> ] unit-test
272 { 1.5 } [ "1.1p0" bin> ] unit-test
273 { 1.875 } [ "1.111p0" bin> ] unit-test
274 { 1.90625 } [ "1.11101p0" bin> ] unit-test
275 { 1.03125 } [ "1.00001p0" bin> ] unit-test
276 { 15.5 } [ "1111.1p0" bin> ] unit-test
277 { 15.53125 } [ "1111.10001p0" bin> ] unit-test
278 { -15.5 } [ "-1111.1p0" bin> ] unit-test
279 { 15.5 } [ "1111.1p0" bin> ] unit-test
280 { -15.5 } [ "-1111.1p0" bin> ] unit-test
281 { 62.0 } [ "1111.1p2" bin> ] unit-test
282 { 3.875 } [ "1111.1p-2" bin> ] unit-test
283 { $[ 1 bits>double ] } [ "1.0p-1074" bin> ] unit-test
284 { 0.0 } [ "1.0p-1075" bin> ] unit-test
285 { 1/0. } [ "1.0p1024" bin> ] unit-test
286 { -1/0. } [ "-1.0p1024" bin> ] unit-test
288 { 1.0 } [ "1.0p0" oct> ] unit-test
289 { 1.5 } [ "1.4p0" oct> ] unit-test
290 { 1.875 } [ "1.7p0" oct> ] unit-test
291 { 1.90625 } [ "1.72p0" oct> ] unit-test
292 { 1.03125 } [ "1.02p0" oct> ] unit-test
293 { 15.5 } [ "17.4p0" oct> ] unit-test
294 { 15.53125 } [ "17.42p0" oct> ] unit-test
295 { -15.5 } [ "-17.4p0" oct> ] unit-test
296 { 15.5 } [ "17.4p0" oct> ] unit-test
297 { -15.5 } [ "-17.4p0" oct> ] unit-test
298 { 62.0 } [ "17.4p2" oct> ] unit-test
299 { 3.875 } [ "17.4p-2" oct> ] unit-test
300 { $[ 1 bits>double ] } [ "1.0p-1074" oct> ] unit-test
301 { 0.0 } [ "1.0p-1075" oct> ] unit-test
302 { 1/0. } [ "1.0p1024" oct> ] unit-test
303 { -1/0. } [ "-1.0p1024" oct> ] unit-test
305 { 0 } [ "0" string>number ] unit-test
306 { 0 } [ "00" string>number ] unit-test
307 { 0 } [ "0,000" string>number ] unit-test
308 { 0.0 } [ "0." string>number ] unit-test
309 { 0.0 } [ "0.0" string>number ] unit-test
310 { 0.0 } [ "0x0.0p0" string>number ] unit-test
311 { 0 } [ "0x0" string>number ] unit-test
312 { 0 } [ "0o0" string>number ] unit-test
313 { 0 } [ "0b0" string>number ] unit-test
315 { 10 } [ "010" string>number ] unit-test
316 { 16 } [ "0x10" string>number ] unit-test
317 { 8 } [ "0o10" string>number ] unit-test
318 { 2 } [ "0b10" string>number ] unit-test
320 { -10 } [ "-010" string>number ] unit-test
321 { -16 } [ "-0x10" string>number ] unit-test
322 { -8 } [ "-0o10" string>number ] unit-test
323 { -2 } [ "-0b10" string>number ] unit-test
325 { 16 } [ "0X10" string>number ] unit-test
326 { 8 } [ "0O10" string>number ] unit-test
327 { 2 } [ "0B10" string>number ] unit-test
329 { -16 } [ "-0X10" string>number ] unit-test
330 { -8 } [ "-0O10" string>number ] unit-test
331 { -2 } [ "-0B10" string>number ] unit-test
333 { f } [ "01a" string>number ] unit-test
334 { f } [ "0x1g" string>number ] unit-test
335 { f } [ "0o18" string>number ] unit-test
336 { f } [ "0b12" string>number ] unit-test
338 { 11 } [ "0x0b" string>number ] unit-test
339 { f } [ "0x0o0" string>number ] unit-test
341 { 0x7FFF,ABCD } [ "0x7FFF,ABCD" string>number ] unit-test
343 { 1.0 } [ "0x1.0p0" string>number ] unit-test
344 { 6.0 } [ "0x1.8p2" string>number ] unit-test
345 { 0.375 } [ "0x1.8p-2" string>number ] unit-test
346 { -6.0 } [ "-0x1.8p2" string>number ] unit-test
347 { -0.375 } [ "-0x1.8p-2" string>number ] unit-test
349 { f } [ "0x" string>number ] unit-test
350 { f } [ "0b" string>number ] unit-test
351 { f } [ "0o" string>number ] unit-test
352 { f } [ "0x," string>number ] unit-test
353 { f } [ "0b," string>number ] unit-test
354 { f } [ "0o," string>number ] unit-test
355 { f } [ "0x,1" string>number ] unit-test
356 { f } [ "0b,1" string>number ] unit-test
357 { f } [ "0o,1" string>number ] unit-test
358 { f } [ "0x1," string>number ] unit-test
359 { f } [ "0b1," string>number ] unit-test
360 { f } [ "0o1," string>number ] unit-test
362 { f } [ "1_" string>number ] unit-test
363 { 12 } [ "1_2" string>number ] unit-test
364 { f } [ "1_2_" string>number ] unit-test
365 { 123 } [ "1_2_3" string>number ] unit-test
368 ! hex float requires exponent
369 { f } [ "0x1.0" string>number ] unit-test
371 ! hex float rounds to even on half
372 { 0x1.0000,0000,0000,0p0 } [ "0x1.0000,0000,0000,0,8p0" string>number ] unit-test
373 { 0x1.0000,0000,0000,2p0 } [ "0x1.0000,0000,0000,1,8p0" string>number ] unit-test
374 { 0x1.0000,0000,0000,0p0 } [ "0x8.0000,0000,0000,4p-3" string>number ] unit-test
375 { 0x1.0000,0000,0000,2p0 } [ "0x8.0000,0000,0000,Cp-3" string>number ] unit-test
377 { -0x1.0000,0000,0000,0p0 } [ "-0x1.0000,0000,0000,0,8p0" string>number ] unit-test
378 { -0x1.0000,0000,0000,2p0 } [ "-0x1.0000,0000,0000,1,8p0" string>number ] unit-test
379 { -0x1.0000,0000,0000,0p0 } [ "-0x8.0000,0000,0000,4p-3" string>number ] unit-test
380 { -0x1.0000,0000,0000,2p0 } [ "-0x8.0000,0000,0000,Cp-3" string>number ] unit-test
382 ! hex float rounds to nearest with tiny epsilons
383 { 0x1.0000,0000,0000,0p0 } [ "0x1.0000,0000,0000,0,4p0" string>number ] unit-test
384 { 0x1.0000,0000,0000,0p0 } [ "0x1.0000,0000,0000,0,7Fp0" string>number ] unit-test
385 { 0x1.0000,0000,0000,0p0 } [ "0x1.0000,0000,0000,0,7FFF,FFFF,FFFF,FFFFp0" string>number ] unit-test
387 { 0x1.0000,0000,0000,1p0 } [ "0x1.0000,0000,0000,0,Cp0" string>number ] unit-test
388 { 0x1.0000,0000,0000,1p0 } [ "0x1.0000,0000,0000,0,81p0" string>number ] unit-test
389 { 0x1.0000,0000,0000,1p0 } [ "0x1.0000,0000,0000,0,8000,0000,0000,0001p0" string>number ] unit-test
391 { 0x1.0000,0000,0000,1p0 } [ "0x1.0000,0000,0000,1,4p0" string>number ] unit-test
392 { 0x1.0000,0000,0000,1p0 } [ "0x1.0000,0000,0000,1,7Fp0" string>number ] unit-test
393 { 0x1.0000,0000,0000,1p0 } [ "0x1.0000,0000,0000,1,7FFF,FFFF,FFFF,FFFFp0" string>number ] unit-test
395 { 0x1.0000,0000,0000,2p0 } [ "0x1.0000,0000,0000,1,Cp0" string>number ] unit-test
396 { 0x1.0000,0000,0000,2p0 } [ "0x1.0000,0000,0000,1,81p0" string>number ] unit-test
397 { 0x1.0000,0000,0000,2p0 } [ "0x1.0000,0000,0000,1,8000,0000,0000,0001p0" string>number ] unit-test
399 { -0x1.0000,0000,0000,0p0 } [ "-0x1.0000,0000,0000,0,4p0" string>number ] unit-test
400 { -0x1.0000,0000,0000,0p0 } [ "-0x1.0000,0000,0000,0,7Fp0" string>number ] unit-test
401 { -0x1.0000,0000,0000,0p0 } [ "-0x1.0000,0000,0000,0,7FFF,FFFF,FFFF,FFFFp0" string>number ] unit-test
403 { -0x1.0000,0000,0000,1p0 } [ "-0x1.0000,0000,0000,0,Cp0" string>number ] unit-test
404 { -0x1.0000,0000,0000,1p0 } [ "-0x1.0000,0000,0000,0,81p0" string>number ] unit-test
405 { -0x1.0000,0000,0000,1p0 } [ "-0x1.0000,0000,0000,0,8000,0000,0000,0001p0" string>number ] unit-test
407 { -0x1.0000,0000,0000,1p0 } [ "-0x1.0000,0000,0000,1,4p0" string>number ] unit-test
408 { -0x1.0000,0000,0000,1p0 } [ "-0x1.0000,0000,0000,1,7Fp0" string>number ] unit-test
409 { -0x1.0000,0000,0000,1p0 } [ "-0x1.0000,0000,0000,1,7FFF,FFFF,FFFF,FFFFp0" string>number ] unit-test
411 { -0x1.0000,0000,0000,2p0 } [ "-0x1.0000,0000,0000,1,Cp0" string>number ] unit-test
412 { -0x1.0000,0000,0000,2p0 } [ "-0x1.0000,0000,0000,1,81p0" string>number ] unit-test
413 { -0x1.0000,0000,0000,2p0 } [ "-0x1.0000,0000,0000,1,8000,0000,0000,0001p0" string>number ] unit-test
416 ! hex> dec> oct> bin> shouldn't admit radix prefixes
418 { 0x0b } [ "0b" hex> ] unit-test
419 { 0x0b0 } [ "0b0" hex> ] unit-test
420 { f } [ "0o0" hex> ] unit-test
421 { f } [ "0x0" hex> ] unit-test
423 { f } [ "0b" dec> ] unit-test
424 { f } [ "0b0" dec> ] unit-test
425 { f } [ "0o0" dec> ] unit-test
426 { f } [ "0x0" dec> ] unit-test
428 { f } [ "0b" oct> ] unit-test
429 { f } [ "0b0" oct> ] unit-test
430 { f } [ "0o0" oct> ] unit-test
431 { f } [ "0x0" oct> ] unit-test
433 { f } [ "0b" bin> ] unit-test
434 { f } [ "0b0" bin> ] unit-test
435 { f } [ "0o0" bin> ] unit-test
436 { f } [ "0x0" bin> ] unit-test
438 ! #1229, float parsing bug, and a regression
439 { -0.5 } [ "-.5" dec> ] unit-test
440 { 0 } [ "0" hex> ] unit-test
442 { t } [ most-positive-fixnum number>string string>number fixnum? ] unit-test
443 { t } [ most-negative-fixnum number>string string>number fixnum? ] unit-test
445 ! large/small numbers/exponents correctly cancel out
446 { 1.0 } [ "1" 3000 [ CHAR: 0 ] "" replicate-as append "e-3000" append string>number ] unit-test
447 { 1.0 } [ "0x1" 1000 [ CHAR: 0 ] "" replicate-as append "p-4000" append string>number ] unit-test
448 { 1.0 } [ "0." 3000 [ CHAR: 0 ] "" replicate-as append "1e3001" append string>number ] unit-test
449 { 1.0 } [ "0x0." 1000 [ CHAR: 0 ] "" replicate-as append "1p4004" append string>number ] unit-test
450 { 1.0 } [ "1" 3000 [ CHAR: 0 ] "" replicate-as append "." append
451 3000 [ CHAR: 0 ] "" replicate-as append "e-3000" append string>number ] unit-test
453 ! We correctly parse the biggest/smallest float correctly
454 ! (ie the 1/0. or 0/0. short-circuit optimization doesn't apply)
455 { 1 } [ "4.9406564584124655e-324" string>number double>bits ] unit-test
456 { 1 } [ "0x1.0p-1074" string>number double>bits ] unit-test
457 { 1 } [ "0o1.0p-1074" string>number double>bits ] unit-test
458 { 1 } [ "0b1.0p-1074" string>number double>bits ] unit-test
459 { 0x7fefffffffffffff } [ "1.7976931348623157e+308" string>number double>bits ] unit-test
460 { 0x7fefffffffffffff } [ "0x1.fffffffffffffp1023" string>number double>bits ] unit-test
461 { 0x7fefffffffffffff } [ "0o1.777777777777777774p1023" string>number double>bits ] unit-test
462 { 0x7fefffffffffffff } [ "0b1.1111111111111111111111111111111111111111111111111111p1023" string>number double>bits ] unit-test
463 ! Actual biggest/smallest parseable floats are a little
464 ! larger/smaller than IEE754 values because of rounding
465 { 0x1.0p-1074 } [ "0x0.fffffffffffffcp-1074" string>number ] unit-test
466 { 4.94065645841246544e-324 } [ "4.94065645841246517e-324" string>number ] unit-test
467 { 0x1.fffffffffffffp1023 } [ "0x1.fffffffffffff7ffffffffffffffffp1023" string>number ] unit-test
468 { 1.79769313486231571e+308 } [ "1.797693134862315807e+308" string>number ] unit-test
471 { 0.25 } [ "1/4" 3000 [ CHAR: 0 ] "" replicate-as append "e-3000" append string>number ] unit-test
472 ! XXX: disable for right now, see #1362 or #1408
473 ! { 1.25 } [ "1+1/4" 3000 [ CHAR: 0 ] "" replicate-as append "e-3000" append string>number ] unit-test
476 { 1/0. } [ "1e100000" string>number ] unit-test
477 { 0.0 } [ "1e-100000" string>number ] unit-test
478 { 1/0. } [ "0x1p300000" string>number ] unit-test
479 { 0.0 } [ "0x1p-300000" string>number ] unit-test
481 { "deadbeef" } [ B{ 222 173 190 239 } bytes>hex-string ] unit-test
482 { B{ 222 173 190 239 } } [ "deADbeEF" hex-string>bytes ] unit-test
483 [ "0" hex-string>bytes ] [ invalid-hex-string-length? ] must-fail-with
485 { "143.99999999999997" } [ 0x1.1ffffffffffffp7 number>string ] unit-test
486 { "144.0" } [ 0x1.2p7 number>string ] unit-test
487 { "144.00000000000003" } [ 0x1.2000000000001p7 number>string ] unit-test
488 { "0.16996714290024104" } [ 0x1.5c17bbc13570bp-3 number>string ] unit-test
490 { 0x80000000000000000000000000000000 } [ 0 φ ] unit-test
496 { 0x000fffffffffffff 0 "2.225073858507201e-308" }
497 { 0 1 "2.2250738585072014e-308" }
498 { 1 1 "2.225073858507202e-308" }
499 { 0x000fffffffffffff 1 "4.4501477170144023e-308" }
500 { 0 2 "4.450147717014403e-308" }
501 { 1 2 "4.450147717014404e-308" }
502 { 0 4 "1.7800590868057611e-307" }
503 { 0 5 "3.5601181736115222e-307" }
504 { 0 6 "7.120236347223045e-307" }
505 { 0 10 "1.1392378155556871e-305" }
506 { 0x000ffffffffffffe 2046 "1.7976931348623155e+308" }
507 { 0x000fffffffffffff 2046 "1.7976931348623157e+308" }
509 ! stress tests, < 1/2 ulp
510 { 4007430392905160 733 "9.5e-88" }
511 { 698388779696245 251 "4.65e-233" }
512 { 1903293320899403 1312 "1.415e+87" }
513 { 3927554571361996 1147 "3.9815e+37" }
514 { 1971449568774091 1174 "4.10405e+45" }
515 { 3770707915602346 1801 "2.920845e+234" }
516 { 877465856894836 619 "2.8919465e-122" }
517 { 2258128958129238 18 "4.37877185e-303" }
518 { 3472938851240260 1451 "1.227701635e+129" }
519 { 1478804231587571 1452 "1.8415524525e+129" }
520 { 1033395563260341 1168 "5.48357443505e+43" }
521 { 2721851261911698 1785 "3.891901811465e+229" }
522 { 2721851261911698 1784 "1.9459509057325e+229" }
523 { 4199773113776883 1192 "1.44609583816055e+51" }
524 { 4440663047904721 74 "4.173677474585315e-286" }
525 { 2956204068717196 368 "1.1079507728788885e-197" }
526 { 1576869389299883 694 "1.234550136632744e-99" }
527 { 3881915519664261 1796 "9.25031711960365e+232" }
528 { 3010617184019290 247 "4.19804715028489e-234" }
529 { 3893698175890015 730 "1.1716315319786511e-88" }
530 { 2229859611940047 1277 "4.328100728446125e+76" }
531 { 3587850959922298 602 "3.317710118160031e-127" }
533 ! stress tests, > 1/2 ulp
534 { 2063659254706906 2027 "2.5e+302" }
535 { 2209131796074438 1610 "7.55e+176" }
536 { 2209131796074438 1609 "3.775e+176" }
537 { 794805784202541 118 "4.3495e-273" }
538 { 633711540289011 931 "2.30365e-28" }
539 { 2218681082291372 1438 "1.263005e+125" }
540 { 840836770664431 906 "7.1422105e-36" }
541 { 3865523976906785 222 "1.39345735e-241" }
542 { 4492222481117167 295 "1.414634485e-219" }
543 { 4439233208194286 692 "4.5392779195e-100" }
544 { 4439233208194286 691 "2.26963895975e-100" }
545 { 4439233208194286 690 "1.134819479875e-100" }
546 { 2462349842116650 826 "7.7003665618895e-60" }
547 { 2462349842116650 825 "3.85018328094475e-60" }
548 { 2462349842116650 824 "1.925091640472375e-60" }
549 { 2983653093616330 1623 "6.8985865317742005e+180" }
550 { 1088518052258015 1239 "1.3076622631878654e+65" }
551 { 4383455621985292 1740 "1.3605202075612124e+216" }
552 { 2490587845261953 1765 "3.5928102174759597e+223" }
553 { 4293976951641647 1663 "8.912519771248455e+192" }
554 { 2859727106134841 1347 "5.5876975736230114e+97" }
555 { 4045897783924006 627 "1.1762578307285404e-119" }
557 tuple first3 :> ( F E str )
558 { str } [ f F E dragonbox general-format ] unit-test
563 { 1.5745340942675811e+257 "1.574534094267581e+257" }
564 { 1.6521200219181297e-180 "1.6521200219181297e-180" }
565 { 4.6663180925160944e-302 "4.6663180925160944e-302" }
566 { 2.0919495182368195e+19 "2.0919495182368195e+19" }
567 { 2.6760179287532483e+19 "2.6760179287532483e+19" }
568 { 3.2942957306323907e+19 "3.2942957306323907e+19" }
569 { 3.9702293349085635e+19 "3.9702293349085635e+19" }
570 { 4.0647939013152195e+19 "4.0647939013152195e+19" }
571 { 18014398509481984.0 "18014398509481984.0" }
572 { 18014398509481985.0 "18014398509481984.0" }
573 { 0.16996714290024104 "0.16996714290024104" }
576 { 1.00000000000000005 "1.0" }
577 { 1.00000000000000015 "1.0000000000000002" }
578 { 1.99999999999999985 "1.9999999999999998" }
579 { 1.99999999999999995 "2.0" }
580 { 1125899906842623.75 "1125899906842623.8" }
581 { 1125899906842624.25 "1125899906842624.2" }
582 { 562949953421312.25 "562949953421312.2" }
583 { 2.20781707763671875 "2.2078170776367188" }
584 { 1.81835174560546875 "1.8183517456054688" }
585 { 3.94171905517578125 "3.9417190551757812" }
586 { 3.73860931396484375 "3.7386093139648438" }
587 { 3.96773529052734375 "3.9677352905273438" }
588 { 1.32802581787109375 "1.3280258178710938" }
589 { 3.92096710205078125 "3.9209671020507812" }
590 { 1.01523590087890625 "1.0152359008789062" }
591 { 1.33522796630859375 "1.3352279663085938" }
592 { 1.34452056884765625 "1.3445205688476562" }
593 { 2.87912750244140625 "2.8791275024414062" }
594 { 3.69583892822265625 "3.6958389282226562" }
595 { 1.84534454345703125 "1.8453445434570312" }
596 { 3.79395294189453125 "3.7939529418945312" }
597 { 3.21140289306640625 "3.2114028930664062" }
598 { 2.56597137451171875 "2.5659713745117188" }
599 { 0.96515655517578125 "0.9651565551757812" }
600 { 2.70000457763671875 "2.7000045776367188" }
601 { 0.76709747314453125 "0.7670974731445312" }
602 { 1.78044891357421875 "1.7804489135742188" }
603 { 2.62483978271484375 "2.6248397827148438" }
604 { 1.30529022216796875 "1.3052902221679688" }
605 { 3.83492279052734375 "3.8349227905273438" }
612 { 10000.0 "10000.0" }
613 { 100000.0 "100000.0" }
614 { 1000000.0 "1000000.0" }
615 { 10000000.0 "10000000.0" }
616 { 100000000.0 "100000000.0" }
617 { 1000000000.0 "1000000000.0" }
618 { 10000000000.0 "10000000000.0" }
619 { 100000000000.0 "100000000000.0" }
620 { 1000000000000.0 "1000000000000.0" }
621 { 10000000000000.0 "10000000000000.0" }
622 { 100000000000000.0 "100000000000000.0" }
623 { 1000000000000000.0 "1000000000000000.0" }
624 { 9007199254740000.0 "9007199254740000.0" }
625 { 9007199254740992.0 "9007199254740992.0" }
629 tuple first2 :> ( n str )
630 { str } [ n float>dec ] unit-test
635 6.1734402962680736e+199 2.4400113864427797e-153
636 5.2632699518024996e+199 5.0806205262434145e+252
637 6.7785205636751565e+118 1.1240911411101675e-251
638 8.139240250313929e+194 4.8614002257993364e+178
639 2.752696193128505e+129 3.1770556126883376e-271
640 2.242759017628732e-248 1.7802970329193148e-77
641 3.806109028477244e+187 1.1848198569896827e+213
642 2.9391656381652973e-100 6.424228912347e+278
643 1.2645752114230544e+236 8.42515920555967e-234
644 2.7329003323103567e+46 1.3794281777002848e+132
645 1.7142202471499735e+280 9.634269789762257e+200
646 8.083700236068939e-82 1.5588992945750237e+163
647 1.0074862449311154e-133 3.1674528983750413e+156
648 1.8663368017075642e+168 2.7789467828287196e-24
649 1.3816831617696479e+116 8.197561614832019e-114
650 1.7020441232782313e-247 4.1401971003386077e-194
651 1.5769408597238478e-194 3.3471805328331117e+299
652 5.529329422375565e-66 1.6103234499457023e-135
653 2.9198565218330256e-280 8.038156131293134e+163
654 1.3920716328733164e-171 6.827324062276435e-27
655 8.807592735347699e-71 3.3728552641313123e-123
656 2.4122679021903798e+236 8.266944620606866e-263
657 2.7137385859318285e+105 1.863720230324117e+232
658 7.972905225864674e-54 2.2844314792315022e+125
659 9.70790738880233e-169 1.2665834799024419e+44
660 3.3484409434495807e+284 1.3582268200372764e+84
661 3.4534664118884534e-136 9.035819340849007e+181
662 2.0437259151405597e+174 9.859326049199017e-251
663 1.3201219024272826e+162 1.3893748715780833e+65
664 6.447847606411378e+49 5.465125341473931e+80
666 { n } [ n float>dec dec> ] unit-test
671 0x38FB2D4A60898DAB 0x453F265980DCB674 0x0A4FB5016FF839C0
672 0x38F1C98B4F73D69C 0x1F8D0A0A25B8C46D 0x4361B4CCC78673FD
673 0x43C3F516F5C2AE90 0x4386C73EFAE567DA 0x471F25D5F53ACB9B
674 0x459AF3D7E7CDDDFF 0x465D1C534CC2368F 0x455FCEB5B44D932F
677 { n } [ n bits>double float>dec dec> double>bits ]