]> gitweb.factorcode.org Git - factor.git/blob - core/math/parser/parser-tests.factor
factor: Retrying on the unit tests. Also normalize some syntax with FUNCTION:.
[factor.git] / core / math / parser / parser-tests.factor
1 USING: kernel literals math math.parser sequences tools.test ;
2 IN: math.parser.tests
3
4 { f }
5 [ f string>number ]
6 unit-test
7
8 { f }
9 [ ";" string>number ]
10 unit-test
11
12 { f }
13 [ "<>" string>number ]
14 unit-test
15
16 { f }
17 [ "^" string>number ]
18 unit-test
19
20 { f }
21 [ "789:;<=>?@" string>number ]
22 unit-test
23
24 { f }
25 [ "12345abcdef" string>number ]
26 unit-test
27
28 { 12 }
29 [ "+12" string>number ]
30 unit-test
31
32 { -12 }
33 [ "-12" string>number ]
34 unit-test
35
36 { f }
37 [ "-+12" string>number ]
38 unit-test
39
40 { f }
41 [ "+-12" string>number ]
42 unit-test
43
44 { f }
45 [ "--12" string>number ]
46 unit-test
47
48 { f }
49 [ "-" string>number ]
50 unit-test
51
52 { f }
53 [ "e" string>number ]
54 unit-test
55
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
70
71 { 100000 } [ "100,000" string>number ] unit-test
72
73 { 100000.0 } [ "100,000.0" string>number ] unit-test
74
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
81
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
88
89 { 255 } [ "ff" hex> ] unit-test
90
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
94
95 { 100.0 } [ "1e2" string>number ] unit-test
96 { 100.0 } [ "1e+2" string>number ] unit-test
97 { 0x1e2 } [ "1e2" hex> ] unit-test
98
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
103
104 { "100.0" }
105 [ "1.0e2" string>number number>string ]
106 unit-test
107
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
111
112 { "-100.0" }
113 [ "-1.0e2" string>number number>string ]
114 unit-test
115
116 { -100.0 } [ "-1.e2" string>number ] unit-test
117
118 { "0.01" }
119 [ "1.0e-2" string>number number>string ]
120 unit-test
121
122 { 0.01 } [ "1.0e-2" string>number ] unit-test
123
124 { "-0.01" }
125 [ "-1.0e-2" string>number number>string ]
126 unit-test
127
128 { -0.01 } [ "-1.0e-2" string>number ] unit-test
129
130 { "-0.01" }
131 [ "-1.e-2" string>number number>string ]
132 unit-test
133
134 { -1.0e-12 } [ "-1.0e-12" string>number ] unit-test
135
136 { t }
137 [ "-1.0e-12" string>number number>string { "-1.0e-12" "-1.0e-012" } member? ]
138 unit-test
139
140 { f }
141 [ "-1e-2e4" string>number ]
142 unit-test
143
144 { "3.14" }
145 [ "3.14" string>number number>string ]
146 unit-test
147
148 { f }
149 [ "." string>number ]
150 unit-test
151
152 { f }
153 [ ".e" string>number ]
154 unit-test
155
156 { "101.0" }
157 [ "1.01e2" string>number number>string ]
158 unit-test
159
160 { "-101.0" }
161 [ "-1.01e2" string>number number>string ]
162 unit-test
163
164 { "1.01" }
165 [ "101.0e-2" string>number number>string ]
166 unit-test
167
168 { "-1.01" }
169 [ "-101.0e-2" string>number number>string ]
170 unit-test
171
172 { f }
173 [ "1e1/2" string>number ]
174 unit-test
175
176 { f }
177 [ "1e1.2" string>number ]
178 unit-test
179
180 { f }
181 [ "e/2" string>number ]
182 unit-test
183
184 { f } [ "12" bin> ] unit-test
185 { f } [ "fdsf" bin> ] unit-test
186 { 3 } [ "11" bin> ] unit-test
187
188 { f } [ "\0." string>number ] unit-test
189
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
196
197 { "0/0." } [ 0.0 0.0 / number>string ] unit-test
198
199 { "1/0." } [ 1.0 0.0 / number>string ] unit-test
200
201 { "-1/0." } [ -1.0 0.0 / number>string ] unit-test
202
203 { t } [ "0/0." string>number fp-nan? ] unit-test
204
205 { 1/0. } [ "1/0." string>number ] unit-test
206
207 { -1/0. } [ "-1/0." string>number ] unit-test
208
209 { -0.5 } [ "-1/2." string>number ] unit-test
210
211 { "-0.0" } [ -0.0 number>string ] unit-test
212
213 { "-3/4" } [ -3/4 number>string ] unit-test
214 { "-1-1/4" } [ -5/4 number>string ] unit-test
215
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
225
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
242
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
252
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
257
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
262
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
267
268 { 11 } [ "0x0b" string>number ] unit-test
269 { f  } [ "0x0o0" string>number ] unit-test
270
271 { 0x7FFF,ABCD } [ "0x7FFF,ABCD" string>number ] unit-test
272
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
278
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
291
292 ! #372
293 ! hex float requires exponent
294 { f } [ "0x1.0" string>number ] unit-test
295
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
301
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
306
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
311
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
315
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
319
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
323
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
327
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
331
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
335
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
339
340 ! #453
341 ! hex> dec> oct> bin> shouldn't admit radix prefixes
342
343 { 0x0b } [ "0b" hex> ] unit-test
344 { 0x0b0 } [ "0b0" hex> ] unit-test
345 { f } [ "0o0" hex> ] unit-test
346 { f } [ "0x0" hex> ] unit-test
347
348 { f } [ "0b" dec> ] unit-test
349 { f } [ "0b0" dec> ] unit-test
350 { f } [ "0o0" dec> ] unit-test
351 { f } [ "0x0" dec> ] unit-test
352
353 { f } [ "0b" oct> ] unit-test
354 { f } [ "0b0" oct> ] unit-test
355 { f } [ "0o0" oct> ] unit-test
356 { f } [ "0x0" oct> ] unit-test
357
358 { f } [ "0b" bin> ] unit-test
359 { f } [ "0b0" bin> ] unit-test
360 { f } [ "0o0" bin> ] unit-test
361 { f } [ "0x0" bin> ] unit-test