Upgrade to Math::BigRat 0.06.
[p5sagit/p5-mst-13.2.git] / lib / Math / BigRat / t / bigrat.t
CommitLineData
184f15d5 1#!/usr/bin/perl -w
2
3use strict;
4use Test;
5
6BEGIN
7 {
8 $| = 1;
9 chdir 't' if -d 't';
10 unshift @INC, '../lib'; # for running manually
6de7f0cc 11 plan tests => 83;
184f15d5 12 }
13
14# testing of Math::BigRat
15
16use Math::BigRat;
6de7f0cc 17use Math::BigInt;
18use Math::BigFloat;
19
20# shortcuts
21my $cr = 'Math::BigRat';
22my $mbi = 'Math::BigInt';
23my $mbf = 'Math::BigFloat';
184f15d5 24
25my ($x,$y,$z);
26
27$x = Math::BigRat->new(1234); ok ($x,1234);
8f675a64 28ok ($x->isa('Math::BigRat'));
29ok (!$x->isa('Math::BigFloat'));
30ok (!$x->isa('Math::BigInt'));
31
32##############################################################################
6de7f0cc 33# new and bnorm()
8f675a64 34
6de7f0cc 35foreach my $func (qw/new bnorm/)
36 {
37 $x = $cr->$func(1234); ok ($x,1234);
38
39 $x = $cr->$func('1234/1'); ok ($x,1234);
40 $x = $cr->$func('1234/2'); ok ($x,617);
41
42 $x = $cr->$func('100/1.0'); ok ($x,100);
43 $x = $cr->$func('10.0/1.0'); ok ($x,10);
44 $x = $cr->$func('0.1/10'); ok ($x,'1/100');
45 $x = $cr->$func('0.1/0.1'); ok ($x,'1');
46 $x = $cr->$func('1e2/10'); ok ($x,10);
47 $x = $cr->$func('1e2/1e1'); ok ($x,10);
48 $x = $cr->$func('1 / 3'); ok ($x,'1/3');
49 $x = $cr->$func('-1 / 3'); ok ($x,'-1/3');
50 $x = $cr->$func('NaN'); ok ($x,'NaN');
51 $x = $cr->$func('inf'); ok ($x,'inf');
52 $x = $cr->$func('-inf'); ok ($x,'-inf');
53 $x = $cr->$func('1/'); ok ($x,'NaN');
54
55 # input ala '1+1/3' isn't parsed ok yet
56 $x = $cr->$func('1+1/3'); ok ($x,'NaN');
57
58 ############################################################################
59 # other classes as input
60
61 $x = $cr->$func($mbi->new(1231)); ok ($x,'1231');
62 $x = $cr->$func($mbf->new(1232)); ok ($x,'1232');
63 $x = $cr->$func($mbf->new(1232.3)); ok ($x,'12323/10');
64 }
8f675a64 65
66##############################################################################
67# mixed arguments
68
69ok (Math::BigRat->new('3/7')->badd(1),'10/7');
70ok (Math::BigRat->new('3/10')->badd(1.1),'7/5');
71ok (Math::BigRat->new('3/7')->badd(Math::BigInt->new(1)),'10/7');
72ok (Math::BigRat->new('3/10')->badd(Math::BigFloat->new('1.1')),'7/5');
73
74ok (Math::BigRat->new('3/7')->bsub(1),'-4/7');
75ok (Math::BigRat->new('3/10')->bsub(1.1),'-4/5');
76ok (Math::BigRat->new('3/7')->bsub(Math::BigInt->new(1)),'-4/7');
77ok (Math::BigRat->new('3/10')->bsub(Math::BigFloat->new('1.1')),'-4/5');
78
79ok (Math::BigRat->new('3/7')->bmul(1),'3/7');
80ok (Math::BigRat->new('3/10')->bmul(1.1),'33/100');
81ok (Math::BigRat->new('3/7')->bmul(Math::BigInt->new(1)),'3/7');
82ok (Math::BigRat->new('3/10')->bmul(Math::BigFloat->new('1.1')),'33/100');
83
84ok (Math::BigRat->new('3/7')->bdiv(1),'3/7');
85ok (Math::BigRat->new('3/10')->bdiv(1.1),'3/11');
86ok (Math::BigRat->new('3/7')->bdiv(Math::BigInt->new(1)),'3/7');
87ok (Math::BigRat->new('3/10')->bdiv(Math::BigFloat->new('1.1')),'3/11');
88
89##############################################################################
184f15d5 90$x = Math::BigRat->new('1/4'); $y = Math::BigRat->new('1/3');
91ok ($x + $y, '7/12');
92ok ($x * $y, '1/12');
93ok ($x / $y, '3/4');
94
95$x = Math::BigRat->new('7/5'); $x *= '3/2';
96ok ($x,'21/10');
97$x -= '0.1';
98ok ($x,'2'); # not 21/10
99
100$x = Math::BigRat->new('2/3'); $y = Math::BigRat->new('3/2');
101ok ($x > $y,'');
102ok ($x < $y,1);
103ok ($x == $y,'');
104
105$x = Math::BigRat->new('-2/3'); $y = Math::BigRat->new('3/2');
106ok ($x > $y,'');
107ok ($x < $y,'1');
108ok ($x == $y,'');
109
110$x = Math::BigRat->new('-2/3'); $y = Math::BigRat->new('-2/3');
111ok ($x > $y,'');
112ok ($x < $y,'');
113ok ($x == $y,'1');
114
115$x = Math::BigRat->new('-2/3'); $y = Math::BigRat->new('-1/3');
116ok ($x > $y,'');
117ok ($x < $y,'1');
118ok ($x == $y,'');
119
120$x = Math::BigRat->new('-124'); $y = Math::BigRat->new('-122');
121ok ($x->bacmp($y),1);
122
123$x = Math::BigRat->new('-124'); $y = Math::BigRat->new('-122');
124ok ($x->bcmp($y),-1);
125
8f675a64 126$x = Math::BigRat->new('3/7'); $y = Math::BigRat->new('5/7');
127ok ($x+$y,'8/7');
128
129$x = Math::BigRat->new('3/7'); $y = Math::BigRat->new('5/7');
130ok ($x*$y,'15/49');
131
132$x = Math::BigRat->new('3/5'); $y = Math::BigRat->new('5/7');
133ok ($x*$y,'3/7');
134
135$x = Math::BigRat->new('3/5'); $y = Math::BigRat->new('5/7');
136ok ($x/$y,'21/25');
137
184f15d5 138$x = Math::BigRat->new('-144/9'); $x->bsqrt(); ok ($x,'NaN');
139$x = Math::BigRat->new('144/9'); $x->bsqrt(); ok ($x,'4');
140
141# done
142
1431;
144