1N/A#include this file into another test for subclass testing... 1N/Aok ($class->config()->{lib},$CL); 1N/A #
print "\$setup== $setup\n";
1N/A if (m|^(.*?):(/.+)$|)
1N/A $
try =
"\$x = new $class \"$args[0]\";";
1N/A $
try .=
"\$x->is_inf('$args[1]');";
1N/A $
try .=
"\$x->bone('$args[1]');";
1N/A $
try .=
"\$x->accuracy($args[1]); \$x->precision($args[2]);";
1N/A $
try .=
'($a,$b) = $x->parts(); $a = $a->bstr(); $b = $b->bstr();';
1N/A $
try .=
'$x->numerator()->bstr();';
1N/A $
try .=
'$x->denominator()->bstr();';
1N/A #
some unary ops (
can't test the fxxx form, since no AUTOLOAD in BigRat) 1N/A } elsif ($f =~ /^f(nan|sstr|neg|floor|ceil|abs)$/) { 1N/A $try .= "\$x->b$1();"; 1N/A # some is_xxx test function 1N/A } elsif ($f =~ /^is_(zero|one|negative|positive|odd|even|nan|int)$/) { 1N/A $try .= "\$x->$f();"; 1N/A } elsif ($f eq "as_number") { 1N/A } elsif ($f eq "finc") { 1N/A } elsif ($f eq "fdec") { 1N/A }elsif ($f eq "fround") { 1N/A $try .= "$setup; \$x->bround($args[1]);"; 1N/A } elsif ($f eq "ffround") { 1N/A $try .= "$setup; \$x->bfround($args[1]);"; 1N/A } elsif ($f eq "fsqrt") { 1N/A $try .= "$setup; \$x->bsqrt();"; 1N/A } elsif ($f eq "flog") { 1N/A $try .= "$setup; \$x->blog();"; 1N/A } elsif ($f eq "ffac") { 1N/A $try .= "$setup; \$x->bfac();"; 1N/A $try .= "\$y = new $class \"$args[1]\";"; 1N/A $try .= '$x <=> $y;
'; 1N/A } elsif ($f eq "bacmp") { 1N/A } elsif ($f eq "bpow") { 1N/A $try .= '$x ** $y;
'; 1N/A } elsif ($f eq "fpow") { 1N/A } elsif ($f eq "badd") { 1N/A } elsif ($f eq "bsub") { 1N/A } elsif ($f eq "bmul") { 1N/A } elsif ($f eq "bdiv") { 1N/A $try .= "$setup; \$x / \$y;"; 1N/A } elsif ($f eq "fdiv-list") { 1N/A $try .= "$setup; join(',
',\$x->bdiv(\$y));"; 1N/A } elsif ($f eq "brsft") { 1N/A $try .= '$x >> $y;
'; 1N/A } elsif ($f eq "blsft") { 1N/A $try .= '$x << $y;
'; 1N/A } elsif ($f eq "bmod") { 1N/A } elsif( $f eq "bmodinv") { 1N/A $try .= "\$x->bmodinv(\$y);"; 1N/A } elsif( $f eq "blog") { 1N/A $try .= "\$x->blog(\$y);"; 1N/A $try .= "\$z = $class->new(\"$args[2]\");"; 1N/A # Functions with three arguments 1N/A if( $f eq "bmodpow") { 1N/A $try .= "\$x->bmodpow(\$y,\$z);"; 1N/A } else { warn "Unknown op '$f
'"; } 1N/A if ($ans =~ m|^/(.*)$|) 1N/A if ($ans1 =~ /$pat/) 1N/A print "# '$
try' expected: /$pat/ got: '$
ans1'\n" if !ok(1,0); 1N/A print "# Tried: '$
try'\n" if !ok ($ans1, $ans); 1N/A# if (ref($ans1) eq "$class") 1N/A# # float numbers are normalized (for now), so mantissa shouldn't
have 1N/A# #print $ans1->_trailing_zeros(),"\n"; 1N/A# print "# Has trailing zeros after '$try'\n" 1N/A# if !ok ($ans1->{_m}->_trailing_zeros(), 0); 1N/A# check whether $class->new( Math::BigInt->new()) destroys it 1N/A# ($y == 12 in this case) 1N/A$x = Math::BigInt->new(1200); $y = $class->new($x); 1N/Aok ($y,1200); ok ($x,1200); 1N/A############################################################################### 1N/A$x = $class->new(2); $x->bzero(); ok_undef ($x->{_a}); ok_undef ($x->{_p}); 1N/A$x = $class->new(2); $x->binf(); ok_undef ($x->{_a}); ok_undef ($x->{_p}); 1N/A$x = $class->new(2); $x->bone(); ok_undef ($x->{_a}); ok_undef ($x->{_p}); 1N/A$x = $class->new(2); $x->bnan(); ok_undef ($x->{_a}); ok_undef ($x->{_p}); 1N/A############################################################################### 1N/A# Perl 5.005 does not like ok ($x,undef) 1N/A ok (
1,
1)
and return if !defined $x; 1N/A# format: number:modulus:result 1N/A# bmodinv Data errors 1N/A# bmodinv Expected Results from normal use 1N/A324958749843759385732954874325984357439658735983745:2348249874968739:1741662881064902 1N/A## bmodinv Error cases / useless use of function 1N/A# format: number:exponent:modulus:result 1N/A# bmodpow Data errors 1N/A# bmodpow Expected results 1N/A98436739867439843769485798542749827593285729587325:43698764986460981048259837659386739857456983759328457:6943857329857295827698367:3104744730915914415259518 1N/A# bmodpow Error cases 1N/A# sqrt(144) / sqrt(4) = 12/2 = 6/1 1N/A-123.4567:-1234567/10000 1N/A000000_0000000_00000:0 1N/A-123456789:-123456789 1N/A-.0000000004:-1/2500000000 1N/A+123456789:-123456789 1N/A+123.456789:-123456789/1000000 1N/A-123456.789:123456789/1000 1N/A+123.456789:123456789/1000000 1N/A-123456.789:123456789/1000 1N/A+99999999:+1:100000000 1N/A+999999999:+1:1000000000 1N/A+9999999999:+1:10000000000 1N/A+99999999999:+1:100000000000 1N/A+100000000:-1:99999999 1N/A+1000000000:-1:999999999 1N/A+10000000000:-1:9999999999 1N/A+123456789:+987654321:1111111110 1N/A-123456789:+987654321:864197532 1N/A-123456789:-987654321:-1111111110 1N/A+123456789:-987654321:-864197532 1N/A+99999999:+1:99999998 1N/A+999999999:+1:999999998 1N/A+9999999999:+1:9999999998 1N/A+99999999999:+1:99999999998 1N/A+10000000:-1:10000001 1N/A+100000000:-1:100000001 1N/A+1000000000:-1:1000000001 1N/A+10000000000:-1:10000000001 1N/A+123456789:+987654321:-864197532 1N/A-123456789:+987654321:-1111111110 1N/A-123456789:-987654321:864197532 1N/A+123456789:-987654321:1111111110 1N/A+123456789123456789:+0:0 1N/A+0:+123456789123456789:0 1N/A+10101:+10101:102030201 1N/A+1001001:+1001001:1002003002001 1N/A+100010001:+100010001:10002000300020001 1N/A+10000100001:+10000100001:100002000030000200001 1N/A+11111111111:+9:99999999999 1N/A+22222222222:+9:199999999998 1N/A+33333333333:+9:299999999997 1N/A+44444444444:+9:399999999996 1N/A+55555555555:+9:499999999995 1N/A+66666666666:+9:599999999994 1N/A+77777777777:+9:699999999993 1N/A+88888888888:+9:799999999992 1N/A+99999999999:+9:899999999991 1N/A$div_scale = 40; $round_mode = 'even' 1N/A+999999999999:+9:111111111111 1N/A+999999999999:+99:10101010101 1N/A+999999999999:+999:1001001001 1N/A+999999999999:+9999:100010001 1N/A+999999999999999:+99999:10000100001 1N/A+1000000000:+9:1000000000/9 1N/A+2000000000:+9:2000000000/9 1N/A+3000000000:+9:1000000000/3 1N/A+4000000000:+9:4000000000/9 1N/A+5000000000:+9:5000000000/9 1N/A+6000000000:+9:2000000000/3 1N/A+7000000000:+9:7000000000/9 1N/A+8000000000:+9:8000000000/9 1N/A+9000000000:+9:1000000000 1N/A+35500000:+113:35500000/113 1N/A+71000000:+226:35500000/113 1N/A+106500000:+339:35500000/113 1N/A+1000000000:+3:1000000000/3 1N/A2:25.024996000799840031993601279744051189762:1000000000000000000000000000000000000000/12512498000399920015996800639872025594881 1N/A# reset scale for further tests 1N/A# it must be exactly /^[+-]inf$/ 1N/A#12345678901234567890:20 1N/A# bpow test for overload of ** 1N/A-123456789:+987654321:-1 1N/A+123456789:-987654321:-1 1N/A+987654321:+123456789:1 1N/A-987654321:+123456789:1