summaryrefslogtreecommitdiff
path: root/lib/Math/BigRat
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2002-06-05 00:27:47 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2002-06-05 00:27:47 +0000
commita4e2b1c6aa0a5ea1df5718aa74e08e58648748a4 (patch)
tree2d2e91dc7735784c820658c24a947000fd3d244f /lib/Math/BigRat
parent32fe6e436de3706d37743be4dcc30367137249b7 (diff)
downloadperl-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.inc10
-rwxr-xr-xlib/Math/BigRat/t/bigfltrt.t2
-rwxr-xr-xlib/Math/BigRat/t/bigrat.t130
-rw-r--r--lib/Math/BigRat/t/bigratpm.inc99
-rwxr-xr-xlib/Math/BigRat/t/bigratpm.t2
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;