This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Cleanup
[perl5.git] / lib / bigfloat.t
1 #!./perl
2
3 BEGIN { @INC = '../lib' }
4 require "bigfloat.pl";
5
6 $test = 0;
7 $| = 1;
8 print "1..355\n";
9 while (<DATA>) {
10         chop;
11         if (/^&/) {
12                 $f = $_;
13         } elsif (/^\$.*/) {
14                 eval "$_;";
15         } else {
16                 ++$test;
17                 @args = split(/:/,$_,99);
18                 $ans = pop(@args);
19                 $try = "$f('" . join("','", @args) . "');";
20                 if (($ans1 = eval($try)) eq $ans) {
21                         print "ok $test\n";
22                 } else {
23                         print "not ok $test\n";
24                         print "# '$try' expected: '$ans' got: '$ans1'\n";
25                 }
26         }
27
28 __END__
29 &fnorm
30 abc:NaN
31    1 a:NaN
32 1bcd2:NaN
33 11111b:NaN
34 +1z:NaN
35 -1z:NaN
36 0:+0E+0
37 +0:+0E+0
38 +00:+0E+0
39 +0 0 0:+0E+0
40 000000  0000000   00000:+0E+0
41 -0:+0E+0
42 -0000:+0E+0
43 +1:+1E+0
44 +01:+1E+0
45 +001:+1E+0
46 +00000100000:+1E+5
47 123456789:+123456789E+0
48 -1:-1E+0
49 -01:-1E+0
50 -001:-1E+0
51 -123456789:-123456789E+0
52 -00000100000:-1E+5
53 123.456a:NaN
54 123.456:+123456E-3
55 0.01:+1E-2
56 .002:+2E-3
57 -0.0003:-3E-4
58 -.0000000004:-4E-10
59 123456E2:+123456E+2
60 123456E-2:+123456E-2
61 -123456E2:-123456E+2
62 -123456E-2:-123456E-2
63 1e1:+1E+1
64 2e-11:+2E-11
65 -3e111:-3E+111
66 -4e-1111:-4E-1111
67 &fneg
68 abd:NaN
69 +0:+0E+0
70 +1:-1E+0
71 -1:+1E+0
72 +123456789:-123456789E+0
73 -123456789:+123456789E+0
74 +123.456789:-123456789E-6
75 -123456.789:+123456789E-3
76 &fabs
77 abc:NaN
78 +0:+0E+0
79 +1:+1E+0
80 -1:+1E+0
81 +123456789:+123456789E+0
82 -123456789:+123456789E+0
83 +123.456789:+123456789E-6
84 -123456.789:+123456789E-3
85 &fround
86 $bigfloat::rnd_mode = 'trunc'
87 +10123456789:5:+10123E+6
88 -10123456789:5:-10123E+6
89 +10123456789:9:+101234567E+2
90 -10123456789:9:-101234567E+2
91 +101234500:6:+101234E+3
92 -101234500:6:-101234E+3
93 $bigfloat::rnd_mode = 'zero'
94 +20123456789:5:+20123E+6
95 -20123456789:5:-20123E+6
96 +20123456789:9:+201234568E+2
97 -20123456789:9:-201234568E+2
98 +201234500:6:+201234E+3
99 -201234500:6:-201234E+3
100 $bigfloat::rnd_mode = '+inf'
101 +30123456789:5:+30123E+6
102 -30123456789:5:-30123E+6
103 +30123456789:9:+301234568E+2
104 -30123456789:9:-301234568E+2
105 +301234500:6:+301235E+3
106 -301234500:6:-301234E+3
107 $bigfloat::rnd_mode = '-inf'
108 +40123456789:5:+40123E+6
109 -40123456789:5:-40123E+6
110 +40123456789:9:+401234568E+2
111 -40123456789:9:-401234568E+2
112 +401234500:6:+401234E+3
113 -401234500:6:-401235E+3
114 $bigfloat::rnd_mode = 'odd'
115 +50123456789:5:+50123E+6
116 -50123456789:5:-50123E+6
117 +50123456789:9:+501234568E+2
118 -50123456789:9:-501234568E+2
119 +501234500:6:+501235E+3
120 -501234500:6:-501235E+3
121 $bigfloat::rnd_mode = 'even'
122 +60123456789:5:+60123E+6
123 -60123456789:5:-60123E+6
124 +60123456789:9:+601234568E+2
125 -60123456789:9:-601234568E+2
126 +601234500:6:+601234E+3
127 -601234500:6:-601234E+3
128 &ffround
129 $bigfloat::rnd_mode = 'trunc'
130 +1.23:-1:+12E-1
131 -1.23:-1:-12E-1
132 +1.27:-1:+12E-1
133 -1.27:-1:-12E-1
134 +1.25:-1:+12E-1
135 -1.25:-1:-12E-1
136 +1.35:-1:+13E-1
137 -1.35:-1:-13E-1
138 -0.006:-1:+0E+0
139 -0.006:-2:+0E+0
140 $bigfloat::rnd_mode = 'zero'
141 +2.23:-1:+22E-1
142 -2.23:-1:-22E-1
143 +2.27:-1:+23E-1
144 -2.27:-1:-23E-1
145 +2.25:-1:+22E-1
146 -2.25:-1:-22E-1
147 +2.35:-1:+23E-1
148 -2.35:-1:-23E-1
149 -0.0065:-1:+0E+0
150 -0.0065:-2:-1E-2
151 -0.0065:-3:-6E-3
152 -0.0065:-4:-65E-4
153 -0.0065:-5:-65E-4
154 $bigfloat::rnd_mode = '+inf'
155 +3.23:-1:+32E-1
156 -3.23:-1:-32E-1
157 +3.27:-1:+33E-1
158 -3.27:-1:-33E-1
159 +3.25:-1:+33E-1
160 -3.25:-1:-32E-1
161 +3.35:-1:+34E-1
162 -3.35:-1:-33E-1
163 -0.0065:-1:+0E+0
164 -0.0065:-2:-1E-2
165 -0.0065:-3:-6E-3
166 -0.0065:-4:-65E-4
167 -0.0065:-5:-65E-4
168 $bigfloat::rnd_mode = '-inf'
169 +4.23:-1:+42E-1
170 -4.23:-1:-42E-1
171 +4.27:-1:+43E-1
172 -4.27:-1:-43E-1
173 +4.25:-1:+42E-1
174 -4.25:-1:-43E-1
175 +4.35:-1:+43E-1
176 -4.35:-1:-44E-1
177 -0.0065:-1:+0E+0
178 -0.0065:-2:-1E-2
179 -0.0065:-3:-7E-3
180 -0.0065:-4:-65E-4
181 -0.0065:-5:-65E-4
182 $bigfloat::rnd_mode = 'odd'
183 +5.23:-1:+52E-1
184 -5.23:-1:-52E-1
185 +5.27:-1:+53E-1
186 -5.27:-1:-53E-1
187 +5.25:-1:+53E-1
188 -5.25:-1:-53E-1
189 +5.35:-1:+53E-1
190 -5.35:-1:-53E-1
191 -0.0065:-1:+0E+0
192 -0.0065:-2:-1E-2
193 -0.0065:-3:-7E-3
194 -0.0065:-4:-65E-4
195 -0.0065:-5:-65E-4
196 $bigfloat::rnd_mode = 'even'
197 +6.23:-1:+62E-1
198 -6.23:-1:-62E-1
199 +6.27:-1:+63E-1
200 -6.27:-1:-63E-1
201 +6.25:-1:+62E-1
202 -6.25:-1:-62E-1
203 +6.35:-1:+64E-1
204 -6.35:-1:-64E-1
205 -0.0065:-1:+0E+0
206 -0.0065:-2:-1E-2
207 -0.0065:-3:-6E-3
208 -0.0065:-4:-65E-4
209 -0.0065:-5:-65E-4
210 &fcmp
211 abc:abc:
212 abc:+0:
213 +0:abc:
214 +0:+0:0
215 -1:+0:-1
216 +0:-1:1
217 +1:+0:1
218 +0:+1:-1
219 -1:+1:-1
220 +1:-1:1
221 -1:-1:0
222 +1:+1:0
223 +123:+123:0
224 +123:+12:1
225 +12:+123:-1
226 -123:-123:0
227 -123:-12:-1
228 -12:-123:1
229 +123:+124:-1
230 +124:+123:1
231 -123:-124:1
232 -124:-123:-1
233 &fadd
234 abc:abc:NaN
235 abc:+0:NaN
236 +0:abc:NaN
237 +0:+0:+0E+0
238 +1:+0:+1E+0
239 +0:+1:+1E+0
240 +1:+1:+2E+0
241 -1:+0:-1E+0
242 +0:-1:-1E+0
243 -1:-1:-2E+0
244 -1:+1:+0E+0
245 +1:-1:+0E+0
246 +9:+1:+1E+1
247 +99:+1:+1E+2
248 +999:+1:+1E+3
249 +9999:+1:+1E+4
250 +99999:+1:+1E+5
251 +999999:+1:+1E+6
252 +9999999:+1:+1E+7
253 +99999999:+1:+1E+8
254 +999999999:+1:+1E+9
255 +9999999999:+1:+1E+10
256 +99999999999:+1:+1E+11
257 +10:-1:+9E+0
258 +100:-1:+99E+0
259 +1000:-1:+999E+0
260 +10000:-1:+9999E+0
261 +100000:-1:+99999E+0
262 +1000000:-1:+999999E+0
263 +10000000:-1:+9999999E+0
264 +100000000:-1:+99999999E+0
265 +1000000000:-1:+999999999E+0
266 +10000000000:-1:+9999999999E+0
267 +123456789:+987654321:+111111111E+1
268 -123456789:+987654321:+864197532E+0
269 -123456789:-987654321:-111111111E+1
270 +123456789:-987654321:-864197532E+0
271 &fsub
272 abc:abc:NaN
273 abc:+0:NaN
274 +0:abc:NaN
275 +0:+0:+0E+0
276 +1:+0:+1E+0
277 +0:+1:-1E+0
278 +1:+1:+0E+0
279 -1:+0:-1E+0
280 +0:-1:+1E+0
281 -1:-1:+0E+0
282 -1:+1:-2E+0
283 +1:-1:+2E+0
284 +9:+1:+8E+0
285 +99:+1:+98E+0
286 +999:+1:+998E+0
287 +9999:+1:+9998E+0
288 +99999:+1:+99998E+0
289 +999999:+1:+999998E+0
290 +9999999:+1:+9999998E+0
291 +99999999:+1:+99999998E+0
292 +999999999:+1:+999999998E+0
293 +9999999999:+1:+9999999998E+0
294 +99999999999:+1:+99999999998E+0
295 +10:-1:+11E+0
296 +100:-1:+101E+0
297 +1000:-1:+1001E+0
298 +10000:-1:+10001E+0
299 +100000:-1:+100001E+0
300 +1000000:-1:+1000001E+0
301 +10000000:-1:+10000001E+0
302 +100000000:-1:+100000001E+0
303 +1000000000:-1:+1000000001E+0
304 +10000000000:-1:+10000000001E+0
305 +123456789:+987654321:-864197532E+0
306 -123456789:+987654321:-111111111E+1
307 -123456789:-987654321:+864197532E+0
308 +123456789:-987654321:+111111111E+1
309 &fmul
310 abc:abc:NaN
311 abc:+0:NaN
312 +0:abc:NaN
313 +0:+0:+0E+0
314 +0:+1:+0E+0
315 +1:+0:+0E+0
316 +0:-1:+0E+0
317 -1:+0:+0E+0
318 +123456789123456789:+0:+0E+0
319 +0:+123456789123456789:+0E+0
320 -1:-1:+1E+0
321 -1:+1:-1E+0
322 +1:-1:-1E+0
323 +1:+1:+1E+0
324 +2:+3:+6E+0
325 -2:+3:-6E+0
326 +2:-3:-6E+0
327 -2:-3:+6E+0
328 +111:+111:+12321E+0
329 +10101:+10101:+102030201E+0
330 +1001001:+1001001:+1002003002001E+0
331 +100010001:+100010001:+10002000300020001E+0
332 +10000100001:+10000100001:+100002000030000200001E+0
333 +11111111111:+9:+99999999999E+0
334 +22222222222:+9:+199999999998E+0
335 +33333333333:+9:+299999999997E+0
336 +44444444444:+9:+399999999996E+0
337 +55555555555:+9:+499999999995E+0
338 +66666666666:+9:+599999999994E+0
339 +77777777777:+9:+699999999993E+0
340 +88888888888:+9:+799999999992E+0
341 +99999999999:+9:+899999999991E+0
342 &fdiv
343 abc:abc:NaN
344 abc:+1:abc:NaN
345 +1:abc:NaN
346 +0:+0:NaN
347 +0:+1:+0E+0
348 +1:+0:NaN
349 +0:-1:+0E+0
350 -1:+0:NaN
351 +1:+1:+1E+0
352 -1:-1:+1E+0
353 +1:-1:-1E+0
354 -1:+1:-1E+0
355 +1:+2:+5E-1
356 +2:+1:+2E+0
357 +10:+5:+2E+0
358 +100:+4:+25E+0
359 +1000:+8:+125E+0
360 +10000:+16:+625E+0
361 +10000:-16:-625E+0
362 +999999999999:+9:+111111111111E+0
363 +999999999999:+99:+10101010101E+0
364 +999999999999:+999:+1001001001E+0
365 +999999999999:+9999:+100010001E+0
366 +999999999999999:+99999:+10000100001E+0
367 +1000000000:+9:+1111111111111111111111111111111111111111E-31
368 +2000000000:+9:+2222222222222222222222222222222222222222E-31
369 +3000000000:+9:+3333333333333333333333333333333333333333E-31
370 +4000000000:+9:+4444444444444444444444444444444444444444E-31
371 +5000000000:+9:+5555555555555555555555555555555555555556E-31
372 +6000000000:+9:+6666666666666666666666666666666666666667E-31
373 +7000000000:+9:+7777777777777777777777777777777777777778E-31
374 +8000000000:+9:+8888888888888888888888888888888888888889E-31
375 +9000000000:+9:+1E+9
376 +35500000:+113:+3141592920353982300884955752212389380531E-34
377 +71000000:+226:+3141592920353982300884955752212389380531E-34
378 +106500000:+339:+3141592920353982300884955752212389380531E-34
379 +1000000000:+3:+3333333333333333333333333333333333333333E-31
380 $bigfloat::div_scale = 20
381 +1000000000:+9:+11111111111111111111E-11
382 +2000000000:+9:+22222222222222222222E-11
383 +3000000000:+9:+33333333333333333333E-11
384 +4000000000:+9:+44444444444444444444E-11
385 +5000000000:+9:+55555555555555555556E-11
386 +6000000000:+9:+66666666666666666667E-11
387 +7000000000:+9:+77777777777777777778E-11
388 +8000000000:+9:+88888888888888888889E-11
389 +9000000000:+9:+1E+9
390 +35500000:+113:+314159292035398230088E-15
391 +71000000:+226:+314159292035398230088E-15
392 +106500000:+339:+31415929203539823009E-14
393 +1000000000:+3:+33333333333333333333E-11
394 $bigfloat::div_scale = 40
395 &fsqrt
396 +0:+0E+0
397 -1:NaN
398 -2:NaN
399 -16:NaN
400 -123.456:NaN
401 +1:+1E+0
402 +1.44:+12E-1
403 +2:+141421356237309504880168872420969807857E-38
404 +4:+2E+0
405 +16:+4E+0
406 +100:+1E+1
407 +123.456:+1111107555549866648462149404118219234119E-38
408 +15241.383936:+123456E-3