This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Integrate mainline
[perl5.git] / t / lib / bigfloat.t
CommitLineData
5d7098d5
SK
1#!./perl
2
3BEGIN { @INC = '../lib' }
4require "bigfloat.pl";
5
6$test = 0;
7$| = 1;
8print "1..355\n";
9while (<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
30abc:NaN
31 1 a:NaN
321bcd2:NaN
3311111b:NaN
34+1z:NaN
35-1z:NaN
360:+0E+0
37+0:+0E+0
38+00:+0E+0
39+0 0 0:+0E+0
40000000 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
47123456789:+123456789E+0
48-1:-1E+0
49-01:-1E+0
50-001:-1E+0
51-123456789:-123456789E+0
52-00000100000:-1E+5
53123.456a:NaN
54123.456:+123456E-3
550.01:+1E-2
56.002:+2E-3
57-0.0003:-3E-4
58-.0000000004:-4E-10
59123456E2:+123456E+2
60123456E-2:+123456E-2
61-123456E2:-123456E+2
62-123456E-2:-123456E-2
631e1:+1E+1
642e-11:+2E-11
65-3e111:-3E+111
66-4e-1111:-4E-1111
67&fneg
68abd: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
77abc: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
211abc:abc:
212abc:+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
234abc:abc:NaN
235abc:+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
272abc:abc:NaN
273abc:+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
310abc:abc:NaN
311abc:+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
343abc:abc:NaN
344abc:+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