diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2002-06-05 00:27:47 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2002-06-05 00:27:47 +0000 |
commit | a4e2b1c6aa0a5ea1df5718aa74e08e58648748a4 (patch) | |
tree | 2d2e91dc7735784c820658c24a947000fd3d244f /lib/Math/BigRat | |
parent | 32fe6e436de3706d37743be4dcc30367137249b7 (diff) | |
download | perl-a4e2b1c6aa0a5ea1df5718aa74e08e58648748a4.tar.gz |
Upgrade to Math::BigRat 0.07.
p4raw-id: //depot/perl@16994
Diffstat (limited to 'lib/Math/BigRat')
-rw-r--r-- | lib/Math/BigRat/t/bigfltpm.inc | 10 | ||||
-rwxr-xr-x | lib/Math/BigRat/t/bigfltrt.t | 2 | ||||
-rwxr-xr-x | lib/Math/BigRat/t/bigrat.t | 130 | ||||
-rw-r--r-- | lib/Math/BigRat/t/bigratpm.inc | 99 | ||||
-rwxr-xr-x | lib/Math/BigRat/t/bigratpm.t | 2 |
5 files changed, 187 insertions, 56 deletions
diff --git a/lib/Math/BigRat/t/bigfltpm.inc b/lib/Math/BigRat/t/bigfltpm.inc index 5b3f4f16cf..36bb35d718 100644 --- a/lib/Math/BigRat/t/bigfltpm.inc +++ b/lib/Math/BigRat/t/bigfltpm.inc @@ -4,7 +4,7 @@ ok ($class->config()->{lib},$CL); while (<DATA>) { - chop; + chomp; $_ =~ s/#.*$//; # remove comments $_ =~ s/\s+$//; # trailing spaces next if /^$/; # skip empty lines & comments @@ -1054,10 +1054,10 @@ abc:1:abc:NaN 152403346:12345:4321 87654321:87654321:0 # now some floating point tests -123:2.5:0.5 -1230:2.5:0 -123.4:2.5:0.9 -123e1:25:5 +#123:2.5:0.5 +#1230:2.5:0 +#123.4:2.5:0.9 +#123e1:25:5 &ffac Nanfac:NaN -1:NaN diff --git a/lib/Math/BigRat/t/bigfltrt.t b/lib/Math/BigRat/t/bigfltrt.t index a456320e0c..d408b23071 100755 --- a/lib/Math/BigRat/t/bigfltrt.t +++ b/lib/Math/BigRat/t/bigfltrt.t @@ -41,4 +41,4 @@ $CL = "Math::BigInt::Calc"; ok (1,1); # does not fully work yet -# require 'bigfltpm.inc'; # all tests here for sharing +#require 'bigfltpm.inc'; # all tests here for sharing diff --git a/lib/Math/BigRat/t/bigrat.t b/lib/Math/BigRat/t/bigrat.t index f1aba64e83..b59d9f0aa7 100755 --- a/lib/Math/BigRat/t/bigrat.t +++ b/lib/Math/BigRat/t/bigrat.t @@ -8,7 +8,7 @@ BEGIN $| = 1; chdir 't' if -d 't'; unshift @INC, '../lib'; # for running manually - plan tests => 83; + plan tests => 136; } # testing of Math::BigRat @@ -45,99 +45,151 @@ foreach my $func (qw/new bnorm/) $x = $cr->$func('0.1/0.1'); ok ($x,'1'); $x = $cr->$func('1e2/10'); ok ($x,10); $x = $cr->$func('1e2/1e1'); ok ($x,10); - $x = $cr->$func('1 / 3'); ok ($x,'1/3'); + $x = $cr->$func('1 / 3'); ok ($x,'1/3'); $x = $cr->$func('-1 / 3'); ok ($x,'-1/3'); - $x = $cr->$func('NaN'); ok ($x,'NaN'); - $x = $cr->$func('inf'); ok ($x,'inf'); - $x = $cr->$func('-inf'); ok ($x,'-inf'); - $x = $cr->$func('1/'); ok ($x,'NaN'); + $x = $cr->$func('NaN'); ok ($x,'NaN'); + $x = $cr->$func('inf'); ok ($x,'inf'); + $x = $cr->$func('-inf'); ok ($x,'-inf'); + $x = $cr->$func('1/'); ok ($x,'NaN'); # input ala '1+1/3' isn't parsed ok yet - $x = $cr->$func('1+1/3'); ok ($x,'NaN'); + $x = $cr->$func('1+1/3'); ok ($x,'NaN'); ############################################################################ # other classes as input - $x = $cr->$func($mbi->new(1231)); ok ($x,'1231'); - $x = $cr->$func($mbf->new(1232)); ok ($x,'1232'); + $x = $cr->$func($mbi->new(1231)); ok ($x,'1231'); + $x = $cr->$func($mbf->new(1232)); ok ($x,'1232'); $x = $cr->$func($mbf->new(1232.3)); ok ($x,'12323/10'); } + +$x = $cr->new('-0'); ok ($x,'0'); ok ($x->{_n}, '0'); ok ($x->{_d},'1'); +$x = $cr->new('NaN'); ok ($x,'NaN'); ok ($x->{_n}, '0'); ok ($x->{_d},'0'); +$x = $cr->new('-NaN'); ok ($x,'NaN'); ok ($x->{_n}, '0'); ok ($x->{_d},'0'); +$x = $cr->new('-1r4'); ok ($x,'NaN'); ok ($x->{_n}, '0'); ok ($x->{_d},'0'); + +$x = $cr->new('+inf'); ok ($x,'inf'); ok ($x->{_n}, '0'); ok ($x->{_d},'0'); +$x = $cr->new('-inf'); ok ($x,'-inf'); ok ($x->{_n}, '0'); ok ($x->{_d},'0'); +$x = $cr->new('123a4'); ok ($x,'NaN'); ok ($x->{_n}, '0'); ok ($x->{_d},'0'); + +# wrong inputs +$x = $cr->new('1e2e2'); ok ($x,'NaN'); ok ($x->{_n}, '0'); ok ($x->{_d},'0'); +$x = $cr->new('1+2+2'); ok ($x,'NaN'); ok ($x->{_n}, '0'); ok ($x->{_d},'0'); +# failed due to BigFlaot bug +$x = $cr->new('1.2.2'); ok ($x,'NaN'); ok ($x->{_n}, '0'); ok ($x->{_d},'0'); + +ok ($cr->new('123a4'),'NaN'); +ok ($cr->new('123e4'),'1230000'); +ok ($cr->new('-NaN'),'NaN'); +ok ($cr->new('NaN'),'NaN'); +ok ($cr->new('+inf'),'inf'); +ok ($cr->new('-inf'),'-inf'); ############################################################################## # mixed arguments -ok (Math::BigRat->new('3/7')->badd(1),'10/7'); -ok (Math::BigRat->new('3/10')->badd(1.1),'7/5'); -ok (Math::BigRat->new('3/7')->badd(Math::BigInt->new(1)),'10/7'); -ok (Math::BigRat->new('3/10')->badd(Math::BigFloat->new('1.1')),'7/5'); +ok ($cr->new('3/7')->badd(1),'10/7'); +ok ($cr->new('3/10')->badd(1.1),'7/5'); +ok ($cr->new('3/7')->badd($mbi->new(1)),'10/7'); +ok ($cr->new('3/10')->badd($mbf->new('1.1')),'7/5'); -ok (Math::BigRat->new('3/7')->bsub(1),'-4/7'); -ok (Math::BigRat->new('3/10')->bsub(1.1),'-4/5'); -ok (Math::BigRat->new('3/7')->bsub(Math::BigInt->new(1)),'-4/7'); -ok (Math::BigRat->new('3/10')->bsub(Math::BigFloat->new('1.1')),'-4/5'); +ok ($cr->new('3/7')->bsub(1),'-4/7'); +ok ($cr->new('3/10')->bsub(1.1),'-4/5'); +ok ($cr->new('3/7')->bsub($mbi->new(1)),'-4/7'); +ok ($cr->new('3/10')->bsub($mbf->new('1.1')),'-4/5'); -ok (Math::BigRat->new('3/7')->bmul(1),'3/7'); -ok (Math::BigRat->new('3/10')->bmul(1.1),'33/100'); -ok (Math::BigRat->new('3/7')->bmul(Math::BigInt->new(1)),'3/7'); -ok (Math::BigRat->new('3/10')->bmul(Math::BigFloat->new('1.1')),'33/100'); +ok ($cr->new('3/7')->bmul(1),'3/7'); +ok ($cr->new('3/10')->bmul(1.1),'33/100'); +ok ($cr->new('3/7')->bmul($mbi->new(1)),'3/7'); +ok ($cr->new('3/10')->bmul($mbf->new('1.1')),'33/100'); -ok (Math::BigRat->new('3/7')->bdiv(1),'3/7'); -ok (Math::BigRat->new('3/10')->bdiv(1.1),'3/11'); -ok (Math::BigRat->new('3/7')->bdiv(Math::BigInt->new(1)),'3/7'); -ok (Math::BigRat->new('3/10')->bdiv(Math::BigFloat->new('1.1')),'3/11'); +ok ($cr->new('3/7')->bdiv(1),'3/7'); +ok ($cr->new('3/10')->bdiv(1.1),'3/11'); +ok ($cr->new('3/7')->bdiv($mbi->new(1)),'3/7'); +ok ($cr->new('3/10')->bdiv($mbf->new('1.1')),'3/11'); ############################################################################## -$x = Math::BigRat->new('1/4'); $y = Math::BigRat->new('1/3'); +$x = $cr->new('1/4'); $y = $cr->new('1/3'); ok ($x + $y, '7/12'); ok ($x * $y, '1/12'); ok ($x / $y, '3/4'); -$x = Math::BigRat->new('7/5'); $x *= '3/2'; +$x = $cr->new('7/5'); $x *= '3/2'; ok ($x,'21/10'); $x -= '0.1'; ok ($x,'2'); # not 21/10 -$x = Math::BigRat->new('2/3'); $y = Math::BigRat->new('3/2'); +$x = $cr->new('2/3'); $y = $cr->new('3/2'); ok ($x > $y,''); ok ($x < $y,1); ok ($x == $y,''); -$x = Math::BigRat->new('-2/3'); $y = Math::BigRat->new('3/2'); +$x = $cr->new('-2/3'); $y = $cr->new('3/2'); ok ($x > $y,''); ok ($x < $y,'1'); ok ($x == $y,''); -$x = Math::BigRat->new('-2/3'); $y = Math::BigRat->new('-2/3'); +$x = $cr->new('-2/3'); $y = $cr->new('-2/3'); ok ($x > $y,''); ok ($x < $y,''); ok ($x == $y,'1'); -$x = Math::BigRat->new('-2/3'); $y = Math::BigRat->new('-1/3'); +$x = $cr->new('-2/3'); $y = $cr->new('-1/3'); ok ($x > $y,''); ok ($x < $y,'1'); ok ($x == $y,''); -$x = Math::BigRat->new('-124'); $y = Math::BigRat->new('-122'); +$x = $cr->new('-124'); $y = $cr->new('-122'); ok ($x->bacmp($y),1); -$x = Math::BigRat->new('-124'); $y = Math::BigRat->new('-122'); +$x = $cr->new('-124'); $y = $cr->new('-122'); ok ($x->bcmp($y),-1); -$x = Math::BigRat->new('3/7'); $y = Math::BigRat->new('5/7'); +$x = $cr->new('3/7'); $y = $cr->new('5/7'); ok ($x+$y,'8/7'); -$x = Math::BigRat->new('3/7'); $y = Math::BigRat->new('5/7'); +$x = $cr->new('3/7'); $y = $cr->new('5/7'); ok ($x*$y,'15/49'); -$x = Math::BigRat->new('3/5'); $y = Math::BigRat->new('5/7'); +$x = $cr->new('3/5'); $y = $cr->new('5/7'); ok ($x*$y,'3/7'); -$x = Math::BigRat->new('3/5'); $y = Math::BigRat->new('5/7'); +$x = $cr->new('3/5'); $y = $cr->new('5/7'); ok ($x/$y,'21/25'); -$x = Math::BigRat->new('-144/9'); $x->bsqrt(); ok ($x,'NaN'); -$x = Math::BigRat->new('144/9'); $x->bsqrt(); ok ($x,'4'); +$x = $cr->new('-144/9')->bsqrt(); ok ($x,'NaN'); +$x = $cr->new('144/9')->bsqrt(); ok ($x,'4'); +############################################################################## +# bpow + +$x = $cr->new('2/1'); $z = $x->bpow('3/1'); ok ($x,'8'); + +############################################################################## +# bfac + +$x = $cr->new('1'); $x->bfac(); ok ($x,'1'); +for (my $i = 0; $i < 8; $i++) + { + $x = $cr->new("$i/1")->bfac(); ok ($x,$mbi->new($i)->bfac()); + } + +# test for $self->bnan() vs. $x->bnan(); +$x = $cr->new('-1'); $x->bfac(); ok ($x,'NaN'); + +############################################################################## +# binc/bdec + +$x = $cr->new('3/2'); ok ($x->binc(),'5/2'); +$x = $cr->new('15/6'); ok ($x->bdec(),'3/2'); + +############################################################################## +# bfloor/bceil + +$x = $cr->new('-7/7'); ok ($x->{_n}, '1'); ok ($x->{_d}, '1'); +$x = $cr->new('-7/7')->bfloor(); ok ($x->{_n}, '1'); ok ($x->{_d}, '1'); + +############################################################################## # done 1; diff --git a/lib/Math/BigRat/t/bigratpm.inc b/lib/Math/BigRat/t/bigratpm.inc index bbec697706..0f77c33add 100644 --- a/lib/Math/BigRat/t/bigratpm.inc +++ b/lib/Math/BigRat/t/bigratpm.inc @@ -4,7 +4,7 @@ ok ($class->config()->{lib},$CL); while (<DATA>) { - chop; + chomp; $_ =~ s/#.*$//; # remove comments $_ =~ s/\s+$//; # trailing spaces next if /^$/; # skip empty lines & comments @@ -87,6 +87,8 @@ while (<DATA>) $try .= '$x->bacmp($y);'; } elsif ($f eq "bpow") { $try .= '$x ** $y;'; + } elsif ($f eq "fpow") { + $try .= '$x->bpow($y);'; } elsif ($f eq "badd") { $try .= '$x + $y;'; } elsif ($f eq "bsub") { @@ -568,15 +570,17 @@ NaN:0 NaN:0 -inf:1 +inf:0 -#&parts -#0:0 1 -#1:1 0 -#123:123 0 -#-123:-123 0 -#-1200:-12 2 -#NaNparts:NaN NaN -#+inf:inf inf -#-inf:-inf inf +&parts +0:0 1 +1:1 1 +123:123 1 +-123:-123 1 +-1200:-1200 1 +5/7:5 7 +-5/7:-5 7 +NaNparts:NaN NaN ++inf:inf inf +-inf:-inf inf #&exponent #0:1 #1:0 @@ -631,6 +635,20 @@ abc:NaN -51:-51 -51.2:-52 12.2:12 +3/7:0 +6/7:0 +7/7:1 +8/7:1 +13/7:1 +14/7:2 +15/7:2 +-3/7:-1 +-6/7:-1 +-7/1:-7 +-8/7:-2 +-13/7:-2 +-14/7:-2 +-15/7:-3 &fceil 0:0 abc:NaN @@ -640,3 +658,64 @@ abc:NaN -51:-51 -51.2:-51 12.2:13 +3/7:1 +6/7:1 +8/7:2 +13/7:2 +14/7:2 +15/7:3 +-3/7:0 +-6/7:0 +-8/7:-1 +-13/7:-1 +-14/7:-2 +-15/7:-2 +&ffac +NaN:NaN +1:1 +-1:NaN +&bpow +# bpow test for overload of ** +2:2:4 +3:3:27 +&fpow +2/1:3/1:8 +3/1:3/1:27 +5/2:3/1:125/8 +-2/1:3/1:-8 +-3/1:3/1:-27 +-5/2:3/1:-125/8 +-2/1:4/1:16 +-3/1:4/1:81 +-5/2:4/1:625/16 +-5/2:-4/1:16/625 +1/5:-3:125 +-1/5:-3:-125 +&numerator +NaN:NaN +inf:inf +-inf:-inf +3/7:3 +-3/7:-3 +0:0 +1:1 +&denominator +NaN:NaN +inf:inf +-inf:-inf +3/7:7 +0:1 +1/1:1 +-3/7:7 +&finc +3/2:5/2 +-15/6:-3/2 +NaN:NaN +-1/3:2/3 +-2/7:5/7 +&fdec +15/6:3/2 +-3/2:-5/2 +1/3:-2/3 +2/7:-5/7 +NaN:NaN diff --git a/lib/Math/BigRat/t/bigratpm.t b/lib/Math/BigRat/t/bigratpm.t index 37c431caa8..1ef0a88387 100755 --- a/lib/Math/BigRat/t/bigratpm.t +++ b/lib/Math/BigRat/t/bigratpm.t @@ -26,7 +26,7 @@ BEGIN } print "# INC = @INC\n"; - plan tests => 414; + plan tests => 491; } use Math::BigRat; |