9 unshift @INC, '../lib'; # for running manually
10 # chdir 't' if -d 't';
17 my ($x,$y,$f,@args,$ans,$try,$ans1,$ans1_str,$setup);
21 $_ =~ s/#.*$//; # remove comments
22 $_ =~ s/\s+$//; # trailing spaces
23 next if /^$/; # skip empty lines & comments
30 $setup = $_; $setup =~ s/^\$/\$Math::BigFloat::/; # rnd_mode, div_scale
38 @args = split(/:/,$1,99);
42 @args = split(/:/,$_,99); $ans = pop(@args);
44 $try = "\$x = new Math::BigFloat \"$args[0]\";";
48 } elsif ($f eq "binf") {
49 $try .= "\$x->binf('$args[1]');";
50 } elsif ($f eq "bsstr") {
51 $try .= "\$x->bsstr();";
52 } elsif ($f eq "fneg") {
54 } elsif ($f eq "bfloor") {
55 $try .= "\$x->bfloor();";
56 } elsif ($f eq "bceil") {
57 $try .= "\$x->bceil();";
58 } elsif ($f eq "is_zero") {
59 $try .= "\$x->is_zero()+0;";
60 } elsif ($f eq "is_one") {
61 $try .= "\$x->is_one()+0;";
62 } elsif ($f eq "is_odd") {
63 $try .= "\$x->is_odd()+0;";
64 } elsif ($f eq "is_even") {
65 $try .= "\$x->is_even()+0;";
66 } elsif ($f eq "as_number") {
67 $try .= "\$x->as_number();";
68 } elsif ($f eq "fabs") {
70 }elsif ($f eq "fround") {
71 $try .= "$setup; \$x->fround($args[1]);";
72 } elsif ($f eq "ffround") {
73 $try .= "$setup; \$x->ffround($args[1]);";
74 } elsif ($f eq "fsqrt") {
75 $try .= "$setup; \$x->fsqrt();";
79 $try .= "\$y = new Math::BigFloat \"$args[1]\";";
81 $try .= "\$x <=> \$y;";
82 } elsif ($f eq "fpow") {
83 $try .= "\$x ** \$y;";
84 } elsif ($f eq "fadd") {
86 } elsif ($f eq "fsub") {
88 } elsif ($f eq "fmul") {
90 } elsif ($f eq "fdiv") {
91 $try .= "$setup; \$x / \$y;";
92 } elsif ($f eq "fmod") {
94 } else { warn "Unknown op '$f'"; }
97 if ($ans =~ m|^/(.*)$|)
106 print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);
117 print "# Tried: '$try'\n" if !ok ($ans1, $ans);
118 if (ref($ans1) eq 'Math::BigFloat')
120 #print $ans1->_trailing_zeros(),"\n";
121 print "# Has trailing zeros after '$try'\n"
122 if !ok ($ans1->{_m}->_trailing_zeros(), 0);
125 } # end pattern or string
129 # check whether new() for BigInts destroys them ($y == 12 in this case)
130 $x = Math::BigInt->new(1200); $y = Math::BigFloat->new($x);
131 ok ($y,1200); ok ($x,1200);
135 ###############################################################################
136 # Perl 5.005 does not like ok ($x,undef)
142 ok (1,1) and return if !defined $x;
178 000000_0000000_00000:0
189 -123456789:-123456789
197 -.0000000004:-0.0000000004
204 -3e111:-3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
205 -4e-1111:-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
212 123.456:2:15241.383936
215 128:-2:0.00006103515625
227 +123456789:-123456789
229 +123.456789:-123.456789
230 -123456.789:123456.789
238 +123.456789:123.456789
239 -123456.789:123456.789
242 +10123456789:5:10123000000
243 -10123456789:5:-10123000000
244 +10123456789.123:5:10123000000
245 -10123456789.123:5:-10123000000
246 +10123456789:9:10123456700
247 -10123456789:9:-10123456700
248 +101234500:6:101234000
249 -101234500:6:-101234000
251 +20123456789:5:20123000000
252 -20123456789:5:-20123000000
253 +20123456789.123:5:20123000000
254 -20123456789.123:5:-20123000000
255 +20123456789:9:20123456800
256 -20123456789:9:-20123456800
257 +201234500:6:201234000
258 -201234500:6:-201234000
260 +30123456789:5:30123000000
261 -30123456789:5:-30123000000
262 +30123456789.123:5:30123000000
263 -30123456789.123:5:-30123000000
264 +30123456789:9:30123456800
265 -30123456789:9:-30123456800
266 +301234500:6:301235000
267 -301234500:6:-301234000
269 +40123456789:5:40123000000
270 -40123456789:5:-40123000000
271 +40123456789.123:5:40123000000
272 -40123456789.123:5:-40123000000
273 +40123456789:9:40123456800
274 -40123456789:9:-40123456800
275 +401234500:6:401234000
276 -401234500:6:-401235000
278 +50123456789:5:50123000000
279 -50123456789:5:-50123000000
280 +50123456789.123:5:50123000000
281 -50123456789.123:5:-50123000000
282 +50123456789:9:50123456800
283 -50123456789:9:-50123456800
284 +501234500:6:501235000
285 -501234500:6:-501235000
287 +60123456789:5:60123000000
288 -60123456789:5:-60123000000
289 +60123456789:9:60123456800
290 -60123456789:9:-60123456800
291 +601234500:6:601234000
292 -601234500:6:-601234000
293 +60123456789.0123:5:60123000000
294 -60123456789.0123:5:-60123000000
313 -0.0061234567890:-1:0
321 -0.0065:-3:/-0\.006|-6e-03
322 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
323 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
329 +2.23:-1:/2.2(?:0{5}\d+)?
330 -2.23:-1:/-2.2(?:0{5}\d+)?
331 +2.27:-1:/2.(?:3|29{5}\d+)
332 -2.27:-1:/-2.(?:3|29{5}\d+)
333 +2.25:-1:/2.2(?:0{5}\d+)?
334 -2.25:-1:/-2.2(?:0{5}\d+)?
335 +2.35:-1:/2.(?:3|29{5}\d+)
336 -2.35:-1:/-2.(?:3|29{5}\d+)
338 -0.0065:-2:/-0\.01|-1e-02
339 -0.0065:-3:/-0\.006|-6e-03
340 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
341 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
347 +3.23:-1:/3.2(?:0{5}\d+)?
348 -3.23:-1:/-3.2(?:0{5}\d+)?
349 +3.27:-1:/3.(?:3|29{5}\d+)
350 -3.27:-1:/-3.(?:3|29{5}\d+)
351 +3.25:-1:/3.(?:3|29{5}\d+)
352 -3.25:-1:/-3.2(?:0{5}\d+)?
353 +3.35:-1:/3.(?:4|39{5}\d+)
354 -3.35:-1:/-3.(?:3|29{5}\d+)
356 -0.0065:-2:/-0\.01|-1e-02
357 -0.0065:-3:/-0\.006|-6e-03
358 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
359 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
365 +4.23:-1:/4.2(?:0{5}\d+)?
366 -4.23:-1:/-4.2(?:0{5}\d+)?
367 +4.27:-1:/4.(?:3|29{5}\d+)
368 -4.27:-1:/-4.(?:3|29{5}\d+)
369 +4.25:-1:/4.2(?:0{5}\d+)?
370 -4.25:-1:/-4.(?:3|29{5}\d+)
371 +4.35:-1:/4.(?:3|29{5}\d+)
372 -4.35:-1:/-4.(?:4|39{5}\d+)
374 -0.0065:-2:/-0\.01|-1e-02
375 -0.0065:-3:/-0\.007|-7e-03
376 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
377 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
383 +5.23:-1:/5.2(?:0{5}\d+)?
384 -5.23:-1:/-5.2(?:0{5}\d+)?
385 +5.27:-1:/5.(?:3|29{5}\d+)
386 -5.27:-1:/-5.(?:3|29{5}\d+)
387 +5.25:-1:/5.(?:3|29{5}\d+)
388 -5.25:-1:/-5.(?:3|29{5}\d+)
389 +5.35:-1:/5.(?:3|29{5}\d+)
390 -5.35:-1:/-5.(?:3|29{5}\d+)
392 -0.0065:-2:/-0\.01|-1e-02
393 -0.0065:-3:/-0\.007|-7e-03
394 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
395 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
401 +6.23:-1:/6.2(?:0{5}\d+)?
402 -6.23:-1:/-6.2(?:0{5}\d+)?
403 +6.27:-1:/6.(?:3|29{5}\d+)
404 -6.27:-1:/-6.(?:3|29{5}\d+)
405 +6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+)
406 -6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+)
407 +6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+)
408 -6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+)
410 -0.0065:-2:/-0\.01|-1e-02
411 -0.0065:-3:/-0\.006|-7e-03
412 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
413 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
420 0.01234567:-5:0.01235
421 0.01234567:-6:0.012346
422 0.01234567:-7:0.0123457
423 0.01234567:-8:0.01234567
424 0.01234567:-9:0.01234567
425 0.01234567:-12:0.01234567
469 0.000001:0.0005:-2 # <0, but can't test this
470 0.00000123:0.0005:-2 # <0, but can't test this
510 +99999999:+1:100000000
511 +999999999:+1:1000000000
512 +9999999999:+1:10000000000
513 +99999999999:+1:100000000000
521 +100000000:-1:99999999
522 +1000000000:-1:999999999
523 +10000000000:-1:9999999999
524 +123456789:+987654321:1111111110
525 -123456789:+987654321:864197532
526 -123456789:-987654321:-1111111110
527 +123456789:-987654321:-864197532
528 0.001234:0.0001234:0.0013574
549 +99999999:+1:99999998
550 +999999999:+1:999999998
551 +9999999999:+1:9999999998
552 +99999999999:+1:99999999998
559 +10000000:-1:10000001
560 +100000000:-1:100000001
561 +1000000000:-1:1000000001
562 +10000000000:-1:10000000001
563 +123456789:+987654321:-864197532
564 -123456789:+987654321:-1111111110
565 -123456789:-987654321:864197532
566 +123456789:-987654321:1111111110
576 +123456789123456789:+0:0
577 +0:+123456789123456789:0
587 +10101:+10101:102030201
588 +1001001:+1001001:1002003002001
589 +100010001:+100010001:10002000300020001
590 +10000100001:+10000100001:100002000030000200001
591 +11111111111:+9:99999999999
592 +22222222222:+9:199999999998
593 +33333333333:+9:299999999997
594 +44444444444:+9:399999999996
595 +55555555555:+9:499999999995
596 +66666666666:+9:599999999994
597 +77777777777:+9:699999999993
598 +88888888888:+9:799999999992
599 +99999999999:+9:899999999991
603 $div_scale = 40; $Math::BigFloat::rnd_mode = 'even'
623 +999999999999:+9:111111111111
624 +999999999999:+99:10101010101
625 +999999999999:+999:1001001001
626 +999999999999:+9999:100010001
627 +999999999999999:+99999:10000100001
628 +1000000000:+9:111111111.1111111111111111111111111111111
629 +2000000000:+9:222222222.2222222222222222222222222222222
630 +3000000000:+9:333333333.3333333333333333333333333333333
631 +4000000000:+9:444444444.4444444444444444444444444444444
632 +5000000000:+9:555555555.5555555555555555555555555555556
633 +6000000000:+9:666666666.6666666666666666666666666666667
634 +7000000000:+9:777777777.7777777777777777777777777777778
635 +8000000000:+9:888888888.8888888888888888888888888888889
636 +9000000000:+9:1000000000
637 +35500000:+113:314159.2920353982300884955752212389380531
638 +71000000:+226:314159.2920353982300884955752212389380531
639 +106500000:+339:314159.2920353982300884955752212389380531
640 +1000000000:+3:333333333.3333333333333333333333333333333
641 2:25.024996000799840031993601279744051189762:0.07992009269196593320152084692285869265447
643 +1000000000:+9:111111111.11111111111
644 +2000000000:+9:222222222.22222222222
645 +3000000000:+9:333333333.33333333333
646 +4000000000:+9:444444444.44444444444
647 +5000000000:+9:555555555.55555555556
648 +6000000000:+9:666666666.66666666667
649 +7000000000:+9:777777777.77777777778
650 +8000000000:+9:888888888.88888888889
651 +9000000000:+9:1000000000
656 1:504:0.001984126984126984127
657 2:1.987654321:1.0062111801179738436
658 # the next two cases are the "old" behaviour, but are now (>v0.01) different
659 #+35500000:+113:314159.292035398230088
660 #+71000000:+226:314159.292035398230088
661 +35500000:+113:314159.29203539823009
662 +71000000:+226:314159.29203539823009
663 +106500000:+339:314159.29203539823009
664 +1000000000:+3:333333333.33333333333
666 # round to accuracy 1 after bdiv
668 # reset scale for further tests
689 +2:1.41421356237309504880168872420969807857
693 +123.456:11.11107555549866648462149404118219234119
694 +15241.38393:123.4559999756998444766131352122991626468