Upgrade to Math::BigInt 1.40.
[p5sagit/p5-mst-13.2.git] / lib / Math / BigInt / t / bigintc.t
1 #!/usr/bin/perl -w
2
3 use strict;
4 use Test;
5
6 BEGIN 
7   {
8   $| = 1;
9   # chdir 't' if -d 't';
10   unshift @INC, '../lib'; # for running manually
11   plan tests => 52;
12   }
13
14 # testing of Math::BigInt::BitVect, primarily for interface/api and not for the
15 # math functionality
16
17 use Math::BigInt::Calc;
18
19 my $C = 'Math::BigInt::Calc';   # pass classname to sub's
20
21 # _new and _str
22 my $x = _new($C,\"123"); my $y = _new($C,\"321");
23 ok (ref($x),'ARRAY'); ok (${_str($C,$x)},123); ok (${_str($C,$y)},321);
24
25 # _add, _sub, _mul, _div
26
27 ok (${_str($C,_add($C,$x,$y))},444);
28 ok (${_str($C,_sub($C,$x,$y))},123);
29 ok (${_str($C,_mul($C,$x,$y))},39483);
30 ok (${_str($C,_div($C,$x,$y))},123);
31
32 ok (${_str($C,_mul($C,$x,$y))},39483);
33 ok (${_str($C,$x)},39483);
34 ok (${_str($C,$y)},321);
35 my $z = _new($C,\"2");
36 ok (${_str($C,_add($C,$x,$z))},39485);
37 my ($re,$rr) = _div($C,$x,$y);
38
39 ok (${_str($C,$re)},123); ok (${_str($C,$rr)},2);
40
41 # is_zero, _is_one, _one, _zero
42 ok (_is_zero($C,$x),0);
43 ok (_is_one($C,$x),0);
44
45 ok (_is_one($C,_one()),1); ok (_is_one($C,_zero()),0);
46 ok (_is_zero($C,_zero()),1); ok (_is_zero($C,_one()),0);
47
48 # is_odd, is_even
49 ok (_is_odd($C,_one()),1); ok (_is_odd($C,_zero()),0);
50 ok (_is_even($C,_one()),0); ok (_is_even($C,_zero()),1);
51
52 # _digit
53 $x = _new($C,\"123456789");
54 ok (_digit($C,$x,0),9);
55 ok (_digit($C,$x,1),8);
56 ok (_digit($C,$x,2),7);
57 ok (_digit($C,$x,-1),1);
58 ok (_digit($C,$x,-2),2);
59 ok (_digit($C,$x,-3),3);
60
61 # _copy
62 $x = _new($C,\"12356");
63 ok (${_str($C,_copy($C,$x))},12356);
64
65 # _zeros
66 $x = _new($C,\"1256000000"); ok (_zeros($C,$x),6);
67 $x = _new($C,\"152"); ok (_zeros($C,$x),0);
68 $x = _new($C,\"123000"); ok (_zeros($C,$x),3); 
69
70 # _lsft, _rsft
71 $x = _new($C,\"10"); $y = _new($C,\"3"); 
72 ok (${_str($C,_lsft($C,$x,$y,10))},10000);
73 $x = _new($C,\"20"); $y = _new($C,\"3"); 
74 ok (${_str($C,_lsft($C,$x,$y,10))},20000);
75 $x = _new($C,\"128"); $y = _new($C,\"4");
76 if (!defined _lsft($C,$x,$y,2)) 
77   {
78   ok (1,1) 
79   }
80 else
81   {
82   ok ('_lsft','undef');
83   }
84 $x = _new($C,\"1000"); $y = _new($C,\"3"); 
85 ok (${_str($C,_rsft($C,$x,$y,10))},1);
86 $x = _new($C,\"20000"); $y = _new($C,\"3"); 
87 ok (${_str($C,_rsft($C,$x,$y,10))},20);
88 $x = _new($C,\"256"); $y = _new($C,\"4");
89 if (!defined _rsft($C,$x,$y,2)) 
90   {
91   ok (1,1) 
92   }
93 else
94   {
95   ok ('_rsft','undef');
96   }
97
98 # _acmp
99 $x = _new($C,\"123456789");
100 $y = _new($C,\"987654321");
101 ok (_acmp($C,$x,$y),-1);
102 ok (_acmp($C,$y,$x),1);
103 ok (_acmp($C,$x,$x),0);
104 ok (_acmp($C,$y,$y),0);
105
106 # _div
107 $x = _new($C,\"3333"); $y = _new($C,\"1111");
108 ok (${_str($C, scalar _div($C,$x,$y))},3);
109 $x = _new($C,\"33333"); $y = _new($C,\"1111"); ($x,$y) = _div($C,$x,$y);
110 ok (${_str($C,$x)},30); ok (${_str($C,$y)},3);
111 $x = _new($C,\"123"); $y = _new($C,\"1111"); 
112 ($x,$y) = _div($C,$x,$y); ok (${_str($C,$x)},0); ok (${_str($C,$y)},123);
113
114 # _num
115 $x = _new($C,\"12345"); $x = _num($C,$x); ok (ref($x)||'',''); ok ($x,12345);
116
117 # should not happen:
118 # $x = _new($C,\"-2"); $y = _new($C,\"4"); ok (_acmp($C,$x,$y),-1);
119
120 # _check
121 $x = _new($C,\"123456789");
122 ok (_check($C,$x),0);
123 ok (_check($C,123),'123 is not a reference');
124
125 # done
126
127 1;
128