1 USING: kernel literals math math.parser sequences tools.test ;
13 [ "<>" string>number ]
21 [ "789:;<=>?@" string>number ]
25 [ "12345abcdef" string>number ]
29 [ "+12" string>number ]
33 [ "-12" string>number ]
37 [ "-+12" string>number ]
41 [ "+-12" string>number ]
45 [ "--12" string>number ]
56 [ 1/2 ] [ "1/2" string>number ] unit-test
57 [ -1/2 ] [ "-1/2" string>number ] unit-test
58 [ 2 ] [ "4/2" string>number ] unit-test
59 [ f ] [ "1/-2" string>number ] unit-test
60 [ f ] [ "1/2/3" string>number ] unit-test
61 [ 1+1/2 ] [ "1+1/2" string>number ] unit-test
62 [ 1+1/2 ] [ "+1+1/2" string>number ] unit-test
63 [ f ] [ "1-1/2" string>number ] unit-test
64 [ -1-1/2 ] [ "-1-1/2" string>number ] unit-test
65 [ f ] [ "-1+1/2" string>number ] unit-test
66 [ f ] [ "1+2" string>number ] unit-test
67 [ f ] [ "1+" string>number ] unit-test
68 [ f ] [ "1-" string>number ] unit-test
69 [ f ] [ "1+1/2+2" string>number ] unit-test
71 [ 100000 ] [ "100,000" string>number ] unit-test
73 [ 100000.0 ] [ "100,000.0" string>number ] unit-test
75 [ f ] [ "," string>number ] unit-test
76 [ f ] [ "-," string>number ] unit-test
77 [ f ] [ "1," string>number ] unit-test
78 [ f ] [ "-1," string>number ] unit-test
79 [ f ] [ ",2" string>number ] unit-test
80 [ f ] [ "-,2" string>number ] unit-test
82 [ 2.0 ] [ "2." string>number ] unit-test
83 [ 2.0 ] [ "+2." string>number ] unit-test
84 [ 0.25 ] [ ".25" string>number ] unit-test
85 [ -2.0 ] [ "-2." string>number ] unit-test
86 [ -0.25 ] [ "-.25" string>number ] unit-test
87 [ f ] [ "-." string>number ] unit-test
89 [ 255 ] [ "ff" hex> ] unit-test
91 [ 100.0 ] [ "1.0e2" string>number ] unit-test
92 [ 100.0 ] [ "100.0" string>number ] unit-test
93 [ 100.0 ] [ "100." string>number ] unit-test
95 [ 100.0 ] [ "1e2" string>number ] unit-test
96 [ 100.0 ] [ "1e+2" string>number ] unit-test
97 [ 0x1e2 ] [ "1e2" hex> ] unit-test
99 [ 0x1.999999999999ap-3 ] [ "0.2" string>number ] unit-test
100 [ 0x1.3333333333333p0 ] [ "1.2" string>number ] unit-test
101 [ 0x1.5555555555555p0 ] [ "1.333,333,333,333,333,333" string>number ] unit-test
102 [ 0x1.aaaaaaaaaaaabp0 ] [ "1.666,666,666,666,666,666" string>number ] unit-test
105 [ "1.0e2" string>number number>string ]
108 [ -100.0 ] [ "-1.0e2" string>number ] unit-test
109 [ -100.0 ] [ "-100.0" string>number ] unit-test
110 [ -100.0 ] [ "-100." string>number ] unit-test
113 [ "-1.0e2" string>number number>string ]
116 [ -100.0 ] [ "-1.e2" string>number ] unit-test
119 [ "1.0e-2" string>number number>string ]
122 [ 0.01 ] [ "1.0e-2" string>number ] unit-test
125 [ "-1.0e-2" string>number number>string ]
128 [ -0.01 ] [ "-1.0e-2" string>number ] unit-test
131 [ "-1.e-2" string>number number>string ]
134 [ -1.0e-12 ] [ "-1.0e-12" string>number ] unit-test
137 [ "-1.0e-12" string>number number>string { "-1.0e-12" "-1.0e-012" } member? ]
141 [ "-1e-2e4" string>number ]
145 [ "3.14" string>number number>string ]
149 [ "." string>number ]
153 [ ".e" string>number ]
157 [ "1.01e2" string>number number>string ]
161 [ "-1.01e2" string>number number>string ]
165 [ "101.0e-2" string>number number>string ]
169 [ "-101.0e-2" string>number number>string ]
173 [ "1e1/2" string>number ]
177 [ "1e1.2" string>number ]
181 [ "e/2" string>number ]
184 [ f ] [ "12" bin> ] unit-test
185 [ f ] [ "fdsf" bin> ] unit-test
186 [ 3 ] [ "11" bin> ] unit-test
188 [ f ] [ "\0." string>number ] unit-test
190 [ 1 1 >base ] must-fail
191 [ 1 0 >base ] must-fail
192 [ 1 -1 >base ] must-fail
193 [ 2+1/2 -1 >base ] [ invalid-radix? ] must-fail-with
194 [ 123.456 8 >base ] [ invalid-radix? ] must-fail-with
195 [ 123.456 2 >base ] [ invalid-radix? ] must-fail-with
197 [ "0/0." ] [ 0.0 0.0 / number>string ] unit-test
199 [ "1/0." ] [ 1.0 0.0 / number>string ] unit-test
201 [ "-1/0." ] [ -1.0 0.0 / number>string ] unit-test
203 [ t ] [ "0/0." string>number fp-nan? ] unit-test
205 [ 1/0. ] [ "1/0." string>number ] unit-test
207 [ -1/0. ] [ "-1/0." string>number ] unit-test
209 [ -0.5 ] [ "-1/2." string>number ] unit-test
211 [ "-0.0" ] [ -0.0 number>string ] unit-test
213 [ "-3/4" ] [ -3/4 number>string ] unit-test
214 [ "-1-1/4" ] [ -5/4 number>string ] unit-test
216 [ "1.0p0" ] [ 1.0 >hex ] unit-test
217 [ "1.8p2" ] [ 6.0 >hex ] unit-test
218 [ "1.08p2" ] [ 4.125 >hex ] unit-test
219 [ "1.8p-2" ] [ 0.375 >hex ] unit-test
220 [ "-1.8p2" ] [ -6.0 >hex ] unit-test
221 [ "1.8p10" ] [ 1536.0 >hex ] unit-test
222 [ "0.0" ] [ 0.0 >hex ] unit-test
223 [ "1.0p-1074" ] [ 1 bits>double >hex ] unit-test
224 [ "-0.0" ] [ -0.0 >hex ] unit-test
226 [ 1.0 ] [ "1.0p0" hex> ] unit-test
227 [ 1.5 ] [ "1.8p0" hex> ] unit-test
228 [ 1.875 ] [ "1.ep0" hex> ] unit-test
229 [ 1.90625 ] [ "1.e8p0" hex> ] unit-test
230 [ 1.03125 ] [ "1.08p0" hex> ] unit-test
231 [ 15.5 ] [ "f.8p0" hex> ] unit-test
232 [ 15.53125 ] [ "f.88p0" hex> ] unit-test
233 [ -15.5 ] [ "-f.8p0" hex> ] unit-test
234 [ 15.5 ] [ "f.8p0" hex> ] unit-test
235 [ -15.5 ] [ "-f.8p0" hex> ] unit-test
236 [ 62.0 ] [ "f.8p2" hex> ] unit-test
237 [ 3.875 ] [ "f.8p-2" hex> ] unit-test
238 [ $[ 1 bits>double ] ] [ "1.0p-1074" hex> ] unit-test
239 [ 0.0 ] [ "1.0p-1075" hex> ] unit-test
240 [ 1/0. ] [ "1.0p1024" hex> ] unit-test
241 [ -1/0. ] [ "-1.0p1024" hex> ] unit-test
243 [ 0 ] [ "0" string>number ] unit-test
244 [ 0 ] [ "00" string>number ] unit-test
245 [ 0 ] [ "0,000" string>number ] unit-test
246 [ 0.0 ] [ "0." string>number ] unit-test
247 [ 0.0 ] [ "0.0" string>number ] unit-test
248 [ 0.0 ] [ "0x0.0p0" string>number ] unit-test
249 [ 0 ] [ "0x0" string>number ] unit-test
250 [ 0 ] [ "0o0" string>number ] unit-test
251 [ 0 ] [ "0b0" string>number ] unit-test
253 [ 10 ] [ "010" string>number ] unit-test
254 [ 16 ] [ "0x10" string>number ] unit-test
255 [ 8 ] [ "0o10" string>number ] unit-test
256 [ 2 ] [ "0b10" string>number ] unit-test
258 [ -10 ] [ "-010" string>number ] unit-test
259 [ -16 ] [ "-0x10" string>number ] unit-test
260 [ -8 ] [ "-0o10" string>number ] unit-test
261 [ -2 ] [ "-0b10" string>number ] unit-test
263 [ f ] [ "01a" string>number ] unit-test
264 [ f ] [ "0x1g" string>number ] unit-test
265 [ f ] [ "0o18" string>number ] unit-test
266 [ f ] [ "0b12" string>number ] unit-test
268 [ 11 ] [ "0x0b" string>number ] unit-test
269 [ f ] [ "0x0o0" string>number ] unit-test
271 [ 0x7FFF,ABCD ] [ "0x7FFF,ABCD" string>number ] unit-test
273 [ 1.0 ] [ "0x1.0p0" string>number ] unit-test
274 [ 6.0 ] [ "0x1.8p2" string>number ] unit-test
275 [ 0.375 ] [ "0x1.8p-2" string>number ] unit-test
276 [ -6.0 ] [ "-0x1.8p2" string>number ] unit-test
277 [ -0.375 ] [ "-0x1.8p-2" string>number ] unit-test
279 [ f ] [ "0x" string>number ] unit-test
280 [ f ] [ "0b" string>number ] unit-test
281 [ f ] [ "0o" string>number ] unit-test
282 [ f ] [ "0x," string>number ] unit-test
283 [ f ] [ "0b," string>number ] unit-test
284 [ f ] [ "0o," string>number ] unit-test
285 [ f ] [ "0x,1" string>number ] unit-test
286 [ f ] [ "0b,1" string>number ] unit-test
287 [ f ] [ "0o,1" string>number ] unit-test
288 [ f ] [ "0x1," string>number ] unit-test
289 [ f ] [ "0b1," string>number ] unit-test
290 [ f ] [ "0o1," string>number ] unit-test
293 ! hex float requires exponent
294 [ f ] [ "0x1.0" string>number ] unit-test
296 ! hex float rounds to even on half
297 [ 0x1.0000,0000,0000,0p0 ] [ "0x1.0000,0000,0000,0,8p0" string>number ] unit-test
298 [ 0x1.0000,0000,0000,2p0 ] [ "0x1.0000,0000,0000,1,8p0" string>number ] unit-test
299 [ 0x1.0000,0000,0000,0p0 ] [ "0x8.0000,0000,0000,4p-3" string>number ] unit-test
300 [ 0x1.0000,0000,0000,2p0 ] [ "0x8.0000,0000,0000,Cp-3" string>number ] unit-test
302 [ -0x1.0000,0000,0000,0p0 ] [ "-0x1.0000,0000,0000,0,8p0" string>number ] unit-test
303 [ -0x1.0000,0000,0000,2p0 ] [ "-0x1.0000,0000,0000,1,8p0" string>number ] unit-test
304 [ -0x1.0000,0000,0000,0p0 ] [ "-0x8.0000,0000,0000,4p-3" string>number ] unit-test
305 [ -0x1.0000,0000,0000,2p0 ] [ "-0x8.0000,0000,0000,Cp-3" string>number ] unit-test
307 ! hex float rounds to nearest with tiny epsilons
308 [ 0x1.0000,0000,0000,0p0 ] [ "0x1.0000,0000,0000,0,4p0" string>number ] unit-test
309 [ 0x1.0000,0000,0000,0p0 ] [ "0x1.0000,0000,0000,0,7Fp0" string>number ] unit-test
310 [ 0x1.0000,0000,0000,0p0 ] [ "0x1.0000,0000,0000,0,7FFF,FFFF,FFFF,FFFFp0" string>number ] unit-test
312 [ 0x1.0000,0000,0000,1p0 ] [ "0x1.0000,0000,0000,0,Cp0" string>number ] unit-test
313 [ 0x1.0000,0000,0000,1p0 ] [ "0x1.0000,0000,0000,0,81p0" string>number ] unit-test
314 [ 0x1.0000,0000,0000,1p0 ] [ "0x1.0000,0000,0000,0,8000,0000,0000,0001p0" string>number ] unit-test
316 [ 0x1.0000,0000,0000,1p0 ] [ "0x1.0000,0000,0000,1,4p0" string>number ] unit-test
317 [ 0x1.0000,0000,0000,1p0 ] [ "0x1.0000,0000,0000,1,7Fp0" string>number ] unit-test
318 [ 0x1.0000,0000,0000,1p0 ] [ "0x1.0000,0000,0000,1,7FFF,FFFF,FFFF,FFFFp0" string>number ] unit-test
320 [ 0x1.0000,0000,0000,2p0 ] [ "0x1.0000,0000,0000,1,Cp0" string>number ] unit-test
321 [ 0x1.0000,0000,0000,2p0 ] [ "0x1.0000,0000,0000,1,81p0" string>number ] unit-test
322 [ 0x1.0000,0000,0000,2p0 ] [ "0x1.0000,0000,0000,1,8000,0000,0000,0001p0" string>number ] unit-test
324 [ -0x1.0000,0000,0000,0p0 ] [ "-0x1.0000,0000,0000,0,4p0" string>number ] unit-test
325 [ -0x1.0000,0000,0000,0p0 ] [ "-0x1.0000,0000,0000,0,7Fp0" string>number ] unit-test
326 [ -0x1.0000,0000,0000,0p0 ] [ "-0x1.0000,0000,0000,0,7FFF,FFFF,FFFF,FFFFp0" string>number ] unit-test
328 [ -0x1.0000,0000,0000,1p0 ] [ "-0x1.0000,0000,0000,0,Cp0" string>number ] unit-test
329 [ -0x1.0000,0000,0000,1p0 ] [ "-0x1.0000,0000,0000,0,81p0" string>number ] unit-test
330 [ -0x1.0000,0000,0000,1p0 ] [ "-0x1.0000,0000,0000,0,8000,0000,0000,0001p0" string>number ] unit-test
332 [ -0x1.0000,0000,0000,1p0 ] [ "-0x1.0000,0000,0000,1,4p0" string>number ] unit-test
333 [ -0x1.0000,0000,0000,1p0 ] [ "-0x1.0000,0000,0000,1,7Fp0" string>number ] unit-test
334 [ -0x1.0000,0000,0000,1p0 ] [ "-0x1.0000,0000,0000,1,7FFF,FFFF,FFFF,FFFFp0" string>number ] unit-test
336 [ -0x1.0000,0000,0000,2p0 ] [ "-0x1.0000,0000,0000,1,Cp0" string>number ] unit-test
337 [ -0x1.0000,0000,0000,2p0 ] [ "-0x1.0000,0000,0000,1,81p0" string>number ] unit-test
338 [ -0x1.0000,0000,0000,2p0 ] [ "-0x1.0000,0000,0000,1,8000,0000,0000,0001p0" string>number ] unit-test
341 ! hex> dec> oct> bin> shouldn't admit radix prefixes
343 [ 0x0b ] [ "0b" hex> ] unit-test
344 [ 0x0b0 ] [ "0b0" hex> ] unit-test
345 [ f ] [ "0o0" hex> ] unit-test
346 [ f ] [ "0x0" hex> ] unit-test
348 [ f ] [ "0b" dec> ] unit-test
349 [ f ] [ "0b0" dec> ] unit-test
350 [ f ] [ "0o0" dec> ] unit-test
351 [ f ] [ "0x0" dec> ] unit-test
353 [ f ] [ "0b" oct> ] unit-test
354 [ f ] [ "0b0" oct> ] unit-test
355 [ f ] [ "0o0" oct> ] unit-test
356 [ f ] [ "0x0" oct> ] unit-test
358 [ f ] [ "0b" bin> ] unit-test
359 [ f ] [ "0b0" bin> ] unit-test
360 [ f ] [ "0o0" bin> ] unit-test
361 [ f ] [ "0x0" bin> ] unit-test