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 "bnan") {
51 $try .= "\$x->bnan();";
52 } elsif ($f eq "numify") {
53 $try .= "\$x->numify();";
54 } elsif ($f eq "bone") {
55 $try .= "\$x->bone('$args[1]');";
56 } elsif ($f eq "bstr") {
57 $try .= "\$x->accuracy($args[1]); \$x->precision($args[2]);";
58 $try .= '$x->bstr();';
59 } elsif ($f eq "bsstr") {
60 $try .= '$x->bsstr();';
61 } elsif ($f eq "parts") {
62 $try .= '($a,$b) = $x->parts(); "$a $b";';
63 } elsif ($f eq "fneg") {
64 $try .= '$x->bneg();';
65 } elsif ($f eq "bfloor") {
66 $try .= "\$x->bfloor();";
67 } elsif ($f eq "bceil") {
68 $try .= "\$x->bceil();";
69 } elsif ($f eq "is_zero") {
70 $try .= "\$x->is_zero()+0;";
71 } elsif ($f eq "is_one") {
72 $try .= "\$x->is_one()+0;";
73 } elsif ($f eq "is_positive") {
74 $try .= "\$x->is_positive()+0;";
75 } elsif ($f eq "is_negative") {
76 $try .= "\$x->is_negative()+0;";
77 } elsif ($f eq "is_odd") {
78 $try .= "\$x->is_odd()+0;";
79 } elsif ($f eq "is_even") {
80 $try .= "\$x->is_even()+0;";
81 } elsif ($f eq "as_number") {
82 $try .= "\$x->as_number();";
83 } elsif ($f eq "fabs") {
84 $try .= '$x->babs();';
85 } elsif ($f eq "finc") {
87 } elsif ($f eq "fdec") {
89 }elsif ($f eq "fround") {
90 $try .= "$setup; \$x->fround($args[1]);";
91 } elsif ($f eq "ffround") {
92 $try .= "$setup; \$x->ffround($args[1]);";
93 } elsif ($f eq "fsqrt") {
94 $try .= "$setup; \$x->fsqrt();";
98 $try .= "\$y = new Math::BigFloat \"$args[1]\";";
100 $try .= "\$x <=> \$y;";
101 } elsif ($f eq "fpow") {
102 $try .= "\$x ** \$y;";
103 } elsif ($f eq "fadd") {
104 $try .= "\$x + \$y;";
105 } elsif ($f eq "fsub") {
106 $try .= "\$x - \$y;";
107 } elsif ($f eq "fmul") {
108 $try .= "\$x * \$y;";
109 } elsif ($f eq "fdiv") {
110 $try .= "$setup; \$x / \$y;";
111 } elsif ($f eq "fmod") {
112 $try .= "\$x % \$y;";
113 } else { warn "Unknown op '$f'"; }
116 if ($ans =~ m|^/(.*)$|)
125 print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);
136 print "# Tried: '$try'\n" if !ok ($ans1, $ans);
137 if (ref($ans1) eq 'Math::BigFloat')
139 #print $ans1->_trailing_zeros(),"\n";
140 print "# Has trailing zeros after '$try'\n"
141 if !ok ($ans1->{_m}->_trailing_zeros(), 0);
144 } # end pattern or string
148 # check whether new() for BigInts destroys them ($y == 12 in this case)
149 $x = Math::BigInt->new(1200); $y = Math::BigFloat->new($x);
150 ok ($y,1200); ok ($x,1200);
154 ###############################################################################
155 # Perl 5.005 does not like ok ($x,undef)
161 ok (1,1) and return if !defined $x;
208 1234.567:9::1234.56700
209 1234.567::-6:1234.567000
211 0.001234:6::0.00123400
212 0.001234::-8:0.00123400
230 000000_0000000_00000:0
241 -123456789:-123456789
249 -.0000000004:-0.0000000004
264 -3e111:-3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
265 -4e-1111:-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
272 123.456:2:15241.383936
275 128:-2:0.00006103515625
289 +123456789:-123456789
291 +123.456789:-123.456789
292 -123456.789:123456.789
302 +123.456789:123.456789
303 -123456.789:123456.789
310 +10123456789:5:10123000000
311 -10123456789:5:-10123000000
312 +10123456789.123:5:10123000000
313 -10123456789.123:5:-10123000000
314 +10123456789:9:10123456700
315 -10123456789:9:-10123456700
316 +101234500:6:101234000
317 -101234500:6:-101234000
319 +20123456789:5:20123000000
320 -20123456789:5:-20123000000
321 +20123456789.123:5:20123000000
322 -20123456789.123:5:-20123000000
323 +20123456789:9:20123456800
324 -20123456789:9:-20123456800
325 +201234500:6:201234000
326 -201234500:6:-201234000
328 +30123456789:5:30123000000
329 -30123456789:5:-30123000000
330 +30123456789.123:5:30123000000
331 -30123456789.123:5:-30123000000
332 +30123456789:9:30123456800
333 -30123456789:9:-30123456800
334 +301234500:6:301235000
335 -301234500:6:-301234000
337 +40123456789:5:40123000000
338 -40123456789:5:-40123000000
339 +40123456789.123:5:40123000000
340 -40123456789.123:5:-40123000000
341 +40123456789:9:40123456800
342 -40123456789:9:-40123456800
343 +401234500:6:401234000
344 -401234500:6:-401235000
346 +50123456789:5:50123000000
347 -50123456789:5:-50123000000
348 +50123456789.123:5:50123000000
349 -50123456789.123:5:-50123000000
350 +50123456789:9:50123456800
351 -50123456789:9:-50123456800
352 +501234500:6:501235000
353 -501234500:6:-501235000
355 +60123456789:5:60123000000
356 -60123456789:5:-60123000000
357 +60123456789:9:60123456800
358 -60123456789:9:-60123456800
359 +601234500:6:601234000
360 -601234500:6:-601234000
361 +60123456789.0123:5:60123000000
362 -60123456789.0123:5:-60123000000
385 -0.0061234567890:-1:0
393 -0.0065:-3:/-0\.006|-6e-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 +2.23:-1:/2.2(?:0{5}\d+)?
402 -2.23:-1:/-2.2(?:0{5}\d+)?
403 +2.27:-1:/2.(?:3|29{5}\d+)
404 -2.27:-1:/-2.(?:3|29{5}\d+)
405 +2.25:-1:/2.2(?:0{5}\d+)?
406 -2.25:-1:/-2.2(?:0{5}\d+)?
407 +2.35:-1:/2.(?:3|29{5}\d+)
408 -2.35:-1:/-2.(?:3|29{5}\d+)
410 -0.0065:-2:/-0\.01|-1e-02
411 -0.0065:-3:/-0\.006|-6e-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
419 +3.23:-1:/3.2(?:0{5}\d+)?
420 -3.23:-1:/-3.2(?:0{5}\d+)?
421 +3.27:-1:/3.(?:3|29{5}\d+)
422 -3.27:-1:/-3.(?:3|29{5}\d+)
423 +3.25:-1:/3.(?:3|29{5}\d+)
424 -3.25:-1:/-3.2(?:0{5}\d+)?
425 +3.35:-1:/3.(?:4|39{5}\d+)
426 -3.35:-1:/-3.(?:3|29{5}\d+)
428 -0.0065:-2:/-0\.01|-1e-02
429 -0.0065:-3:/-0\.006|-6e-03
430 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
431 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
437 +4.23:-1:/4.2(?:0{5}\d+)?
438 -4.23:-1:/-4.2(?:0{5}\d+)?
439 +4.27:-1:/4.(?:3|29{5}\d+)
440 -4.27:-1:/-4.(?:3|29{5}\d+)
441 +4.25:-1:/4.2(?:0{5}\d+)?
442 -4.25:-1:/-4.(?:3|29{5}\d+)
443 +4.35:-1:/4.(?:3|29{5}\d+)
444 -4.35:-1:/-4.(?:4|39{5}\d+)
446 -0.0065:-2:/-0\.01|-1e-02
447 -0.0065:-3:/-0\.007|-7e-03
448 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
449 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
455 +5.23:-1:/5.2(?:0{5}\d+)?
456 -5.23:-1:/-5.2(?:0{5}\d+)?
457 +5.27:-1:/5.(?:3|29{5}\d+)
458 -5.27:-1:/-5.(?:3|29{5}\d+)
459 +5.25:-1:/5.(?:3|29{5}\d+)
460 -5.25:-1:/-5.(?:3|29{5}\d+)
461 +5.35:-1:/5.(?:3|29{5}\d+)
462 -5.35:-1:/-5.(?:3|29{5}\d+)
464 -0.0065:-2:/-0\.01|-1e-02
465 -0.0065:-3:/-0\.007|-7e-03
466 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
467 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
473 +6.23:-1:/6.2(?:0{5}\d+)?
474 -6.23:-1:/-6.2(?:0{5}\d+)?
475 +6.27:-1:/6.(?:3|29{5}\d+)
476 -6.27:-1:/-6.(?:3|29{5}\d+)
477 +6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+)
478 -6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+)
479 +6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+)
480 -6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+)
482 -0.0065:-2:/-0\.01|-1e-02
483 -0.0065:-3:/-0\.006|-7e-03
484 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
485 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
492 0.01234567:-5:0.01235
493 0.01234567:-6:0.012346
494 0.01234567:-7:0.0123457
495 0.01234567:-8:0.01234567
496 0.01234567:-9:0.01234567
497 0.01234567:-12:0.01234567
541 0.000001:0.0005:-2 # <0, but can't test this
542 0.00000123:0.0005:-2 # <0, but can't test this
610 +99999999:+1:100000000
611 +999999999:+1:1000000000
612 +9999999999:+1:10000000000
613 +99999999999:+1:100000000000
621 +100000000:-1:99999999
622 +1000000000:-1:999999999
623 +10000000000:-1:9999999999
624 +123456789:+987654321:1111111110
625 -123456789:+987654321:864197532
626 -123456789:-987654321:-1111111110
627 +123456789:-987654321:-864197532
628 0.001234:0.0001234:0.0013574
657 +99999999:+1:99999998
658 +999999999:+1:999999998
659 +9999999999:+1:9999999998
660 +99999999999:+1:99999999998
667 +10000000:-1:10000001
668 +100000000:-1:100000001
669 +1000000000:-1:1000000001
670 +10000000000:-1:10000000001
671 +123456789:+987654321:-864197532
672 -123456789:+987654321:-1111111110
673 -123456789:-987654321:864197532
674 +123456789:-987654321:1111111110
700 +123456789123456789:+0:0
701 +0:+123456789123456789:0
711 +10101:+10101:102030201
712 +1001001:+1001001:1002003002001
713 +100010001:+100010001:10002000300020001
714 +10000100001:+10000100001:100002000030000200001
715 +11111111111:+9:99999999999
716 +22222222222:+9:199999999998
717 +33333333333:+9:299999999997
718 +44444444444:+9:399999999996
719 +55555555555:+9:499999999995
720 +66666666666:+9:599999999994
721 +77777777777:+9:699999999993
722 +88888888888:+9:799999999992
723 +99999999999:+9:899999999991
727 $div_scale = 40; $Math::BigFloat::rnd_mode = 'even'
753 +999999999999:+9:111111111111
754 +999999999999:+99:10101010101
755 +999999999999:+999:1001001001
756 +999999999999:+9999:100010001
757 +999999999999999:+99999:10000100001
758 +1000000000:+9:111111111.1111111111111111111111111111111
759 +2000000000:+9:222222222.2222222222222222222222222222222
760 +3000000000:+9:333333333.3333333333333333333333333333333
761 +4000000000:+9:444444444.4444444444444444444444444444444
762 +5000000000:+9:555555555.5555555555555555555555555555556
763 +6000000000:+9:666666666.6666666666666666666666666666667
764 +7000000000:+9:777777777.7777777777777777777777777777778
765 +8000000000:+9:888888888.8888888888888888888888888888889
766 +9000000000:+9:1000000000
767 +35500000:+113:314159.2920353982300884955752212389380531
768 +71000000:+226:314159.2920353982300884955752212389380531
769 +106500000:+339:314159.2920353982300884955752212389380531
770 +1000000000:+3:333333333.3333333333333333333333333333333
771 2:25.024996000799840031993601279744051189762:0.07992009269196593320152084692285869265447
773 +1000000000:+9:111111111.11111111111
774 +2000000000:+9:222222222.22222222222
775 +3000000000:+9:333333333.33333333333
776 +4000000000:+9:444444444.44444444444
777 +5000000000:+9:555555555.55555555556
778 +6000000000:+9:666666666.66666666667
779 +7000000000:+9:777777777.77777777778
780 +8000000000:+9:888888888.88888888889
781 +9000000000:+9:1000000000
786 1:504:0.001984126984126984127
787 2:1.987654321:1.0062111801179738436
788 # the next two cases are the "old" behaviour, but are now (>v0.01) different
789 #+35500000:+113:314159.292035398230088
790 #+71000000:+226:314159.292035398230088
791 +35500000:+113:314159.29203539823009
792 +71000000:+226:314159.29203539823009
793 +106500000:+339:314159.29203539823009
794 +1000000000:+3:333333333.33333333333
796 # round to accuracy 1 after bdiv
798 # reset scale for further tests
819 +2:1.41421356237309504880168872420969807857
823 +123.456:11.11107555549866648462149404118219234119
824 +15241.38393:123.4559999756998444766131352122991626468