1N/A#include this file into another test for subclass testing...
1N/A
1N/Aok ($class->config()->{lib},$CL);
1N/A
1N/A$setup = '';
1N/A
1N/Awhile (<DATA>)
1N/A {
1N/A chomp;
1N/A $_ =~ s/#.*$//; # remove comments
1N/A $_ =~ s/\s+$//; # trailing spaces
1N/A next if /^$/; # skip empty lines & comments
1N/A if (s/^&//)
1N/A {
1N/A $f = $_;
1N/A }
1N/A elsif (/^\$/)
1N/A {
1N/A $setup = $_; $setup =~ s/\$/\$${class}::/g; # round_mode, div_scale
1N/A #print "\$setup== $setup\n";
1N/A }
1N/A else
1N/A {
1N/A if (m|^(.*?):(/.+)$|)
1N/A {
1N/A $ans = $2;
1N/A @args = split(/:/,$1,99);
1N/A }
1N/A else
1N/A {
1N/A @args = split(/:/,$_,99); $ans = pop(@args);
1N/A }
1N/A $try = "\$x = new $class \"$args[0]\";";
1N/A if ($f eq "bnorm")
1N/A {
1N/A $try .= "\$x;";
1N/A } elsif ($f eq "finf") {
1N/A my $a = $args[1] || '';
1N/A $try .= "\$x->binf('$a');";
1N/A } elsif ($f eq "is_inf") {
1N/A $try .= "\$x->is_inf('$args[1]');";
1N/A } elsif ($f eq "fone") {
1N/A $try .= "\$x->bone('$args[1]');";
1N/A } elsif ($f eq "fstr") {
1N/A $try .= "\$x->accuracy($args[1]); \$x->precision($args[2]);";
1N/A $try .= '$x->bstr();';
1N/A } elsif ($f eq "parts") {
1N/A # ->bstr() to see if an object is returned
1N/A $try .= '($a,$b) = $x->parts(); $a = $a->bstr(); $b = $b->bstr();';
1N/A $try .= '"$a $b";';
1N/A } elsif ($f eq "numerator") {
1N/A # ->bstr() to see if an object is returned
1N/A $try .= '$x->numerator()->bstr();';
1N/A } elsif ($f eq "denominator") {
1N/A # ->bstr() to see if an object is returned
1N/A $try .= '$x->denominator()->bstr();';
1N/A } elsif ($f =~ /^(length|numify)$/) {
1N/A $try .= "\$x->$f();";
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 $try .= '$x->as_number();';
1N/A } elsif ($f eq "finc") {
1N/A $try .= '++$x;';
1N/A } elsif ($f eq "fdec") {
1N/A $try .= '--$x;';
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 }
1N/A else
1N/A {
1N/A $try .= "\$y = new $class \"$args[1]\";";
1N/A if ($f eq "bcmp") {
1N/A $try .= '$x <=> $y;';
1N/A } elsif ($f eq "bacmp") {
1N/A $try .= '$x->bacmp($y);';
1N/A } elsif ($f eq "bpow") {
1N/A $try .= '$x ** $y;';
1N/A } elsif ($f eq "fpow") {
1N/A $try .= '$x->bpow($y);';
1N/A } elsif ($f eq "badd") {
1N/A $try .= '$x + $y;';
1N/A } elsif ($f eq "bsub") {
1N/A $try .= '$x - $y;';
1N/A } elsif ($f eq "bmul") {
1N/A $try .= '$x * $y;';
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 $try .= '$x % $y;';
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 } else {
1N/A $try .= "\$z = $class->new(\"$args[2]\");";
1N/A
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 }
1N/A }
1N/A # print "# Trying: '$try'\n";
1N/A $ans1 = eval $try;
1N/A if ($ans =~ m|^/(.*)$|)
1N/A {
1N/A my $pat = $1;
1N/A if ($ans1 =~ /$pat/)
1N/A {
1N/A ok (1,1);
1N/A }
1N/A else
1N/A {
1N/A print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);
1N/A }
1N/A }
1N/A else
1N/A {
1N/A if ($ans eq "")
1N/A {
1N/A ok_undef ($ans1);
1N/A }
1N/A else
1N/A {
1N/A print "# Tried: '$try'\n" if !ok ($ans1, $ans);
1N/A# if (ref($ans1) eq "$class")
1N/A# {
1N/A# # float numbers are normalized (for now), so mantissa shouldn't have
1N/A# # trailing zeros
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# }
1N/A }
1N/A } # end pattern or string
1N/A }
1N/A } # end while
1N/A
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###############################################################################
1N/A# zero,inf,one,nan
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/A1; # all done
1N/A
1N/A###############################################################################
1N/A# Perl 5.005 does not like ok ($x,undef)
1N/A
1N/Asub ok_undef
1N/A {
1N/A my $x = shift;
1N/A
1N/A ok (1,1) and return if !defined $x;
1N/A ok ($x,'undef');
1N/A }
1N/A
1N/A__DATA__
1N/A&bmodinv
1N/A# format: number:modulus:result
1N/A# bmodinv Data errors
1N/Aabc:abc:NaN
1N/Aabc:5:NaN
1N/A5:abc:NaN
1N/A# bmodinv Expected Results from normal use
1N/A1:5:1
1N/A3:5:2
1N/A-2:5:2
1N/A8:5033:4404
1N/A1234567891:13:6
1N/A-1234567891:13:7
1N/A324958749843759385732954874325984357439658735983745:2348249874968739:1741662881064902
1N/A## bmodinv Error cases / useless use of function
1N/A3:-5:NaN
1N/Ainf:5:NaN
1N/A5:inf:NaN
1N/A-inf:5:NaN
1N/A5:-inf:NaN
1N/A&as_number
1N/A144/7:20
1N/ANaN:NaN
1N/A+inf:inf
1N/A-inf:-inf
1N/A&bmodpow
1N/A# format: number:exponent:modulus:result
1N/A# bmodpow Data errors
1N/Aabc:abc:abc:NaN
1N/A5:abc:abc:NaN
1N/Aabc:5:abc:NaN
1N/Aabc:abc:5:NaN
1N/A5:5:abc:NaN
1N/A5:abc:5:NaN
1N/Aabc:5:5:NaN
1N/A# bmodpow Expected results
1N/A0:0:2:1
1N/A1:0:2:1
1N/A0:0:1:0
1N/A8:7:5032:3840
1N/A8:-1:5033:4404
1N/A98436739867439843769485798542749827593285729587325:43698764986460981048259837659386739857456983759328457:6943857329857295827698367:3104744730915914415259518
1N/A# bmodpow Error cases
1N/A8:8:-5:NaN
1N/A8:-1:16:NaN
1N/Ainf:5:13:NaN
1N/A5:inf:13:NaN
1N/A&bmod
1N/ANaN:1:NaN
1N/A1:NaN:NaN
1N/A1:1:0
1N/A2:2:0
1N/A12:6:0
1N/A7/4:4/14:1/28
1N/A7/4:4/16:0
1N/A-7/4:4/16:0
1N/A-7/4:-4/16:0
1N/A7/4:-4/16:0
1N/A7/4:4/32:0
1N/A-7/4:4/32:0
1N/A-7/4:-4/32:0
1N/A7/4:-4/32:0
1N/A7/4:4/28:1/28
1N/A-7/4:4/28:-1/28
1N/A7/4:-4/28:1/28
1N/A-7/4:-4/28:-1/28
1N/A&fsqrt
1N/A1:1
1N/A0:0
1N/ANaN:NaN
1N/A+inf:inf
1N/A-inf:NaN
1N/A144:12
1N/A# sqrt(144) / sqrt(4) = 12/2 = 6/1
1N/A144/4:6
1N/A25/16:5/4
1N/A-3:NaN
1N/A&flog
1N/ANaN:NaN
1N/A0:NaN
1N/A-2:NaN
1N/A&blog
1N/ANaN:NaN:NaN
1N/A0:NaN:NaN
1N/ANaN:0:NaN
1N/ANaN:1:NaN
1N/A1:NaN:NaN
1N/A0:2:NaN
1N/A0:-2:NaN
1N/A3:-2:NaN
1N/A&finf
1N/A1:+:inf
1N/A2:-:-inf
1N/A3:abc:inf
1N/A&numify
1N/A0:0
1N/A+1:1
1N/A1234:1234
1N/A3/4:0.75
1N/A5/2:2.5
1N/A3/2:1.5
1N/A5/4:1.25
1N/ANaN:NaN
1N/A+inf:inf
1N/A-inf:-inf
1N/A&fnan
1N/Aabc:NaN
1N/A2:NaN
1N/A-2:NaN
1N/A0:NaN
1N/A&fone
1N/A2:+:1
1N/A-2:-:-1
1N/A-2:+:1
1N/A2:-:-1
1N/A0::1
1N/A-2::1
1N/Aabc::1
1N/A2:abc:1
1N/A&fsstr
1N/A+inf:inf
1N/A-inf:-inf
1N/Aabcfsstr:NaN
1N/A1:1/1
1N/A3/1:3/1
1N/A0.1:1/10
1N/A&bnorm
1N/A1:1
1N/A-0:0
1N/AbnormNaN:NaN
1N/A+inf:inf
1N/A-inf:-inf
1N/Ainf/inf:NaN
1N/A5/inf:0
1N/A5/-inf:0
1N/Ainf/5:inf
1N/A-inf/5:-inf
1N/Ainf/-5:-inf
1N/A-inf/-5:inf
1N/A123:123
1N/A-123.4567:-1234567/10000
1N/A# invalid inputs
1N/A1__2:NaN
1N/A1E1__2:NaN
1N/A11__2E2:NaN
1N/A#1.E3:NaN
1N/A.2E-3.:NaN
1N/A#1e3e4:NaN
1N/A.2E2:20
1N/Ainf:inf
1N/A+inf:inf
1N/A-inf:-inf
1N/A+infinity:NaN
1N/A+-inf:NaN
1N/Aabc:NaN
1N/A 1 a:NaN
1N/A1bcd2:NaN
1N/A11111b:NaN
1N/A+1z:NaN
1N/A-1z:NaN
1N/A0:0
1N/A+0:0
1N/A+00:0
1N/A+0_0_0:0
1N/A000000_0000000_00000:0
1N/A-0:0
1N/A-0000:0
1N/A+1:1
1N/A+01:1
1N/A+001:1
1N/A+00000100000:100000
1N/A123456789:123456789
1N/A-1:-1
1N/A-01:-1
1N/A-001:-1
1N/A-123456789:-123456789
1N/A-00000100000:-100000
1N/A123.456a:NaN
1N/A123.456:15432/125
1N/A0.01:1/100
1N/A.002:1/500
1N/A+.2:1/5
1N/A-0.0003:-3/10000
1N/A-.0000000004:-1/2500000000
1N/A123456E2:12345600
1N/A123456E-2:30864/25
1N/A-123456E2:-12345600
1N/A-123456E-2:-30864/25
1N/A1e1:10
1N/A2e-11:1/50000000000
1N/A12/10:6/5
1N/A0.1/0.1:1
1N/A100/0.1:1000
1N/A0.1/10:1/100
1N/A1 / 3:1/3
1N/A1/ 3:1/3
1N/A1 /3:1/3
1N/A&fneg
1N/AfnegNaN:NaN
1N/A+inf:-inf
1N/A-inf:inf
1N/A+0:0
1N/A+1:-1
1N/A-1:1
1N/A+123456789:-123456789
1N/A-123456789:123456789
1N/A+123.456789:-123456789/1000000
1N/A-123456.789:123456789/1000
1N/A&fabs
1N/AfabsNaN:NaN
1N/A+inf:inf
1N/A-inf:inf
1N/A+0:0
1N/A+1:1
1N/A-1:1
1N/A+123456789:123456789
1N/A-123456789:123456789
1N/A+123.456789:123456789/1000000
1N/A-123456.789:123456789/1000
1N/A&badd
1N/Aabc:abc:NaN
1N/Aabc:+0:NaN
1N/A+0:abc:NaN
1N/A+inf:-inf:NaN
1N/A-inf:+inf:NaN
1N/A+inf:+inf:inf
1N/A-inf:-inf:-inf
1N/AbaddNaN:+inf:NaN
1N/AbaddNaN:+inf:NaN
1N/A+inf:baddNaN:NaN
1N/A-inf:baddNaN:NaN
1N/A+0:+0:0
1N/A+1:+0:1
1N/A+0:+1:1
1N/A+1:+1:2
1N/A-1:+0:-1
1N/A+0:-1:-1
1N/A-1:-1:-2
1N/A-1:+1:0
1N/A+1:-1:0
1N/A+9:+1:10
1N/A+99:+1:100
1N/A+999:+1:1000
1N/A+9999:+1:10000
1N/A+99999:+1:100000
1N/A+999999:+1:1000000
1N/A+9999999:+1:10000000
1N/A+99999999:+1:100000000
1N/A+999999999:+1:1000000000
1N/A+9999999999:+1:10000000000
1N/A+99999999999:+1:100000000000
1N/A+10:-1:9
1N/A+100:-1:99
1N/A+1000:-1:999
1N/A+10000:-1:9999
1N/A+100000:-1:99999
1N/A+1000000:-1:999999
1N/A+10000000:-1:9999999
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/A1/3:1/3:2/3
1N/A2/3:-1/3:1/3
1N/A&bsub
1N/Aabc:abc:NaN
1N/Aabc:+0:NaN
1N/A+0:abc:NaN
1N/A+inf:-inf:inf
1N/A-inf:+inf:-inf
1N/A+inf:+inf:NaN
1N/A-inf:-inf:NaN
1N/AbaddNaN:+inf:NaN
1N/AbaddNaN:+inf:NaN
1N/A+inf:baddNaN:NaN
1N/A-inf:baddNaN:NaN
1N/A+0:+0:0
1N/A+1:+0:1
1N/A+0:+1:-1
1N/A+1:+1:0
1N/A-1:+0:-1
1N/A+0:-1:1
1N/A-1:-1:0
1N/A-1:+1:-2
1N/A+1:-1:2
1N/A+9:+1:8
1N/A+99:+1:98
1N/A+999:+1:998
1N/A+9999:+1:9998
1N/A+99999:+1:99998
1N/A+999999:+1:999998
1N/A+9999999:+1:9999998
1N/A+99999999:+1:99999998
1N/A+999999999:+1:999999998
1N/A+9999999999:+1:9999999998
1N/A+99999999999:+1:99999999998
1N/A+10:-1:11
1N/A+100:-1:101
1N/A+1000:-1:1001
1N/A+10000:-1:10001
1N/A+100000:-1:100001
1N/A+1000000:-1:1000001
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/A2/3:1/3:1/3
1N/A7/27:3/54:11/54
1N/A-2/3:+2/3:-4/3
1N/A-2/3:-2/3:0
1N/A0:-123:123
1N/A0:123:-123
1N/A&bmul
1N/Aabc:abc:NaN
1N/Aabc:+0:NaN
1N/A+0:abc:NaN
1N/A+inf:NaNmul:NaN
1N/A+inf:NaNmul:NaN
1N/ANaNmul:+inf:NaN
1N/ANaNmul:-inf:NaN
1N/A+inf:+inf:inf
1N/A+inf:-inf:-inf
1N/A+inf:-inf:-inf
1N/A+inf:+inf:inf
1N/A+inf:123.34:inf
1N/A+inf:-123.34:-inf
1N/A-inf:123.34:-inf
1N/A-inf:-123.34:inf
1N/A123.34:+inf:inf
1N/A-123.34:+inf:-inf
1N/A123.34:-inf:-inf
1N/A-123.34:-inf:inf
1N/A+0:+0:0
1N/A+0:+1:0
1N/A+1:+0:0
1N/A+0:-1:0
1N/A-1:+0:0
1N/A+123456789123456789:+0:0
1N/A+0:+123456789123456789:0
1N/A-1:-1:1
1N/A-1:+1:-1
1N/A+1:-1:-1
1N/A+1:+1:1
1N/A+2:+3:6
1N/A-2:+3:-6
1N/A+2:-3:-6
1N/A-2:-3:6
1N/A+111:+111:12321
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/A6:120:720
1N/A10:10000:100000
1N/A1/4:1/3:1/12
1N/A&bdiv
1N/A$div_scale = 40; $round_mode = 'even'
1N/Aabc:abc:NaN
1N/Aabc:+1:abc:NaN
1N/A+1:abc:NaN
1N/A-1:abc:NaN
1N/A0:abc:NaN
1N/A+0:+0:NaN
1N/A+0:+1:0
1N/A+1:+0:inf
1N/A+3214:+0:inf
1N/A+0:-1:0
1N/A-1:+0:-inf
1N/A-3214:+0:-inf
1N/A+1:+1:1
1N/A-1:-1:1
1N/A+1:-1:-1
1N/A-1:+1:-1
1N/A+1:+2:1/2
1N/A+2:+1:2
1N/A123:+inf:0
1N/A123:-inf:0
1N/A+10:+5:2
1N/A+100:+4:25
1N/A+1000:+8:125
1N/A+10000:+16:625
1N/A+10000:-16:-625
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/A123456:1:123456
1N/A1/4:1/3:3/4
1N/A# reset scale for further tests
1N/A$div_scale = 40
1N/A&is_nan
1N/A123:0
1N/Aabc:1
1N/ANaN:1
1N/A-123:0
1N/A&is_inf
1N/A+inf::1
1N/A-inf::1
1N/Aabc::0
1N/A1::0
1N/ANaN::0
1N/A-1::0
1N/A+inf:-:0
1N/A+inf:+:1
1N/A-inf:-:1
1N/A-inf:+:0
1N/A# it must be exactly /^[+-]inf$/
1N/A+infinity::0
1N/A-infinity::0
1N/A&is_odd
1N/Aabc:0
1N/A0:0
1N/A-1:1
1N/A-3:1
1N/A1:1
1N/A3:1
1N/A1000001:1
1N/A1000002:0
1N/A+inf:0
1N/A-inf:0
1N/A123.45:0
1N/A-123.45:0
1N/A2:0
1N/A&is_int
1N/ANaNis_int:0
1N/A0:1
1N/A1:1
1N/A2:1
1N/A-2:1
1N/A-1:1
1N/A-inf:0
1N/A+inf:0
1N/A123.4567:0
1N/A-0.1:0
1N/A-0.002:0
1N/A1/3:0
1N/A3/1:1
1N/A&is_even
1N/Aabc:0
1N/A0:1
1N/A-1:0
1N/A-3:0
1N/A1:0
1N/A3:0
1N/A1000001:0
1N/A1000002:1
1N/A2:1
1N/A+inf:0
1N/A-inf:0
1N/A123.456:0
1N/A-123.456:0
1N/A0.01:0
1N/A-0.01:0
1N/A120:1
1N/A1200:1
1N/A-1200:1
1N/A&is_positive
1N/A0:1
1N/A1:1
1N/A-1:0
1N/A-123:0
1N/ANaN:0
1N/A-inf:0
1N/A+inf:1
1N/A&is_negative
1N/A0:0
1N/A1:0
1N/A-1:1
1N/A-123:1
1N/ANaN:0
1N/A-inf:1
1N/A+inf:0
1N/A&parts
1N/A0:0 1
1N/A1:1 1
1N/A123:123 1
1N/A-123:-123 1
1N/A-1200:-1200 1
1N/A5/7:5 7
1N/A-5/7:-5 7
1N/ANaNparts:NaN NaN
1N/A+inf:inf inf
1N/A-inf:-inf inf
1N/A#&exponent
1N/A#0:1
1N/A#1:0
1N/A#123:0
1N/A#-123:0
1N/A#-1200:2
1N/A#+inf:inf
1N/A#-inf:inf
1N/A#NaNexponent:NaN
1N/A#&mantissa
1N/A#0:0
1N/A#1:1
1N/A#123:123
1N/A#-123:-123
1N/A#-1200:-12
1N/A#+inf:inf
1N/A#-inf:-inf
1N/A#NaNmantissa:NaN
1N/A#&length
1N/A#123:3
1N/A#-123:3
1N/A#0:1
1N/A#1:1
1N/A#12345678901234567890:20
1N/A&is_zero
1N/ANaNzero:0
1N/A+inf:0
1N/A-inf:0
1N/A0:1
1N/A-1:0
1N/A1:0
1N/A0/3:1
1N/A1/3:0
1N/A-0/3:1
1N/A5/inf:1
1N/A&is_one
1N/ANaNone:0
1N/A+inf:0
1N/A-inf:0
1N/A0:0
1N/A2:0
1N/A1:1
1N/A-1:0
1N/A-2:0
1N/A1/3:0
1N/A100/100:1
1N/A0.1/0.1:1
1N/A5/inf:0
1N/A&ffloor
1N/A0:0
1N/Aabc:NaN
1N/A+inf:inf
1N/A-inf:-inf
1N/A1:1
1N/A-51:-51
1N/A-51.2:-52
1N/A12.2:12
1N/A3/7:0
1N/A6/7:0
1N/A7/7:1
1N/A8/7:1
1N/A13/7:1
1N/A14/7:2
1N/A15/7:2
1N/A-3/7:-1
1N/A-6/7:-1
1N/A-7/1:-7
1N/A-8/7:-2
1N/A-13/7:-2
1N/A-14/7:-2
1N/A-15/7:-3
1N/A&fceil
1N/A0:0
1N/Aabc:NaN
1N/A+inf:inf
1N/A-inf:-inf
1N/A1:1
1N/A-51:-51
1N/A-51.2:-51
1N/A12.2:13
1N/A3/7:1
1N/A6/7:1
1N/A8/7:2
1N/A13/7:2
1N/A14/7:2
1N/A15/7:3
1N/A-3/7:0
1N/A-6/7:0
1N/A-8/7:-1
1N/A-13/7:-1
1N/A-14/7:-2
1N/A-15/7:-2
1N/A&ffac
1N/ANaN:NaN
1N/A1:1
1N/A-1:NaN
1N/A&bpow
1N/A# bpow test for overload of **
1N/A2:2:4
1N/A3:3:27
1N/A&bacmp
1N/A+0:-0:0
1N/A+0:+1:-1
1N/A-1:+1:0
1N/A+1:-1:0
1N/A-1:+2:-1
1N/A+2:-1:1
1N/A-123456789:+987654321:-1
1N/A+123456789:-987654321:-1
1N/A+987654321:+123456789:1
1N/A-987654321:+123456789:1
1N/A-123:+4567889:-1
1N/A# NaNs
1N/AacmpNaN:123:
1N/A123:acmpNaN:
1N/AacmpNaN:acmpNaN:
1N/A# infinity
1N/A+inf:+inf:0
1N/A-inf:-inf:0
1N/A+inf:-inf:0
1N/A-inf:+inf:0
1N/A+inf:123:1
1N/A-inf:123:1
1N/A+inf:-123:1
1N/A-inf:-123:1
1N/A+inf:1/23:1
1N/A-inf:1/23:1
1N/A+inf:-1/23:1
1N/A-inf:-1/23:1
1N/A+inf:12/3:1
1N/A-inf:12/3:1
1N/A+inf:-12/3:1
1N/A-inf:-12/3:1
1N/A123:inf:-1
1N/A-123:inf:-1
1N/A123:-inf:-1
1N/A-123:-inf:-1
1N/A1/23:inf:-1
1N/A-1/23:inf:-1
1N/A1/23:-inf:-1
1N/A-1/23:-inf:-1
1N/A12/3:inf:-1
1N/A-12/3:inf:-1
1N/A12/3:-inf:-1
1N/A-12/3:-inf:-1
1N/A# return undef
1N/A+inf:NaN:
1N/ANaN:inf:
1N/A-inf:NaN:
1N/ANaN:-inf:
1N/A1/3:2/3:-1
1N/A2/3:1/3:1
1N/A2/3:2/3:0
1N/A&fpow
1N/A2/1:3/1:8
1N/A3/1:3/1:27
1N/A5/2:3/1:125/8
1N/A-2/1:3/1:-8
1N/A-3/1:3/1:-27
1N/A-5/2:3/1:-125/8
1N/A-2/1:4/1:16
1N/A-3/1:4/1:81
1N/A-5/2:4/1:625/16
1N/A-5/2:-4/1:16/625
1N/A1/5:-3:125
1N/A-1/5:-3:-125
1N/A&numerator
1N/ANaN:NaN
1N/Ainf:inf
1N/A-inf:-inf
1N/A3/7:3
1N/A-3/7:-3
1N/A0:0
1N/A1:1
1N/A&denominator
1N/ANaN:NaN
1N/Ainf:inf
1N/A-inf:-inf
1N/A3/7:7
1N/A0:1
1N/A1/1:1
1N/A-3/7:7
1N/A&finc
1N/A3/2:5/2
1N/A-15/6:-3/2
1N/ANaN:NaN
1N/A-1/3:2/3
1N/A-2/7:5/7
1N/A&fdec
1N/A15/6:3/2
1N/A-3/2:-5/2
1N/A1/3:-2/3
1N/A2/7:-5/7
1N/ANaN:NaN