Commit | Line | Data |
0716bf9b |
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 |
574bacfe |
11 | plan tests => 52; |
0716bf9b |
12 | } |
13 | |
574bacfe |
14 | # testing of Math::BigInt::BitVect, primarily for interface/api and not for the |
0716bf9b |
15 | # math functionality |
16 | |
17 | use Math::BigInt::Calc; |
18 | |
574bacfe |
19 | my $C = 'Math::BigInt::Calc'; # pass classname to sub's |
20 | |
0716bf9b |
21 | # _new and _str |
574bacfe |
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); |
0716bf9b |
24 | |
25 | # _add, _sub, _mul, _div |
26 | |
574bacfe |
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); |
0716bf9b |
31 | |
574bacfe |
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); |
0716bf9b |
38 | |
574bacfe |
39 | ok (${_str($C,$re)},123); ok (${_str($C,$rr)},2); |
0716bf9b |
40 | |
41 | # is_zero, _is_one, _one, _zero |
574bacfe |
42 | ok (_is_zero($C,$x),0); |
43 | ok (_is_one($C,$x),0); |
0716bf9b |
44 | |
574bacfe |
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); |
0716bf9b |
51 | |
574bacfe |
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 | } |
0716bf9b |
97 | |
574bacfe |
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'); |
0716bf9b |
124 | |
125 | # done |
126 | |
127 | 1; |
574bacfe |
128 | |