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 |
bd05a461 |
22 | my $x = $C->_new(\"123"); my $y = $C->_new(\"321"); |
23 | ok (ref($x),'ARRAY'); ok (${$C->_str($x)},123); ok (${$C->_str($y)},321); |
0716bf9b |
24 | |
25 | # _add, _sub, _mul, _div |
26 | |
bd05a461 |
27 | ok (${$C->_str($C->_add($x,$y))},444); |
28 | ok (${$C->_str($C->_sub($x,$y))},123); |
29 | ok (${$C->_str($C->_mul($x,$y))},39483); |
30 | ok (${$C->_str($C->_div($x,$y))},123); |
0716bf9b |
31 | |
bd05a461 |
32 | ok (${$C->_str($C->_mul($x,$y))},39483); |
33 | ok (${$C->_str($x)},39483); |
34 | ok (${$C->_str($y)},321); |
35 | my $z = $C->_new(\"2"); |
36 | ok (${$C->_str($C->_add($x,$z))},39485); |
37 | my ($re,$rr) = $C->_div($x,$y); |
0716bf9b |
38 | |
bd05a461 |
39 | ok (${$C->_str($re)},123); ok (${$C->_str($rr)},2); |
0716bf9b |
40 | |
41 | # is_zero, _is_one, _one, _zero |
bd05a461 |
42 | ok ($C->_is_zero($x),0); |
43 | ok ($C->_is_one($x),0); |
0716bf9b |
44 | |
bd05a461 |
45 | ok ($C->_is_one($C->_one()),1); ok ($C->_is_one($C->_zero()),0); |
46 | ok ($C->_is_zero($C->_zero()),1); ok ($C->_is_zero($C->_one()),0); |
574bacfe |
47 | |
48 | # is_odd, is_even |
bd05a461 |
49 | ok ($C->_is_odd($C->_one()),1); ok ($C->_is_odd($C->_zero()),0); |
50 | ok ($C->_is_even($C->_one()),0); ok ($C->_is_even($C->_zero()),1); |
0716bf9b |
51 | |
574bacfe |
52 | # _digit |
bd05a461 |
53 | $x = $C->_new(\"123456789"); |
54 | ok ($C->_digit($x,0),9); |
55 | ok ($C->_digit($x,1),8); |
56 | ok ($C->_digit($x,2),7); |
57 | ok ($C->_digit($x,-1),1); |
58 | ok ($C->_digit($x,-2),2); |
59 | ok ($C->_digit($x,-3),3); |
574bacfe |
60 | |
61 | # _copy |
bd05a461 |
62 | $x = $C->_new(\"12356"); |
63 | ok (${$C->_str($C->_copy($x))},12356); |
574bacfe |
64 | |
65 | # _zeros |
bd05a461 |
66 | $x = $C->_new(\"1256000000"); ok ($C->_zeros($x),6); |
67 | $x = $C->_new(\"152"); ok ($C->_zeros($x),0); |
68 | $x = $C->_new(\"123000"); ok ($C->_zeros($x),3); |
574bacfe |
69 | |
70 | # _lsft, _rsft |
bd05a461 |
71 | $x = $C->_new(\"10"); $y = $C->_new(\"3"); |
72 | ok (${$C->_str($C->_lsft($x,$y,10))},10000); |
73 | $x = $C->_new(\"20"); $y = $C->_new(\"3"); |
74 | ok (${$C->_str($C->_lsft($x,$y,10))},20000); |
75 | $x = $C->_new(\"128"); $y = $C->_new(\"4"); |
76 | if (!defined $C->_lsft($x,$y,2)) |
574bacfe |
77 | { |
78 | ok (1,1) |
79 | } |
80 | else |
81 | { |
82 | ok ('_lsft','undef'); |
83 | } |
bd05a461 |
84 | $x = $C->_new(\"1000"); $y = $C->_new(\"3"); |
85 | ok (${$C->_str($C->_rsft($x,$y,10))},1); |
86 | $x = $C->_new(\"20000"); $y = $C->_new(\"3"); |
87 | ok (${$C->_str($C->_rsft($x,$y,10))},20); |
88 | $x = $C->_new(\"256"); $y = $C->_new(\"4"); |
89 | if (!defined $C->_rsft($x,$y,2)) |
574bacfe |
90 | { |
91 | ok (1,1) |
92 | } |
93 | else |
94 | { |
95 | ok ('_rsft','undef'); |
96 | } |
0716bf9b |
97 | |
574bacfe |
98 | # _acmp |
bd05a461 |
99 | $x = $C->_new(\"123456789"); |
100 | $y = $C->_new(\"987654321"); |
101 | ok ($C->_acmp($x,$y),-1); |
102 | ok ($C->_acmp($y,$x),1); |
103 | ok ($C->_acmp($x,$x),0); |
104 | ok ($C->_acmp($y,$y),0); |
574bacfe |
105 | |
106 | # _div |
bd05a461 |
107 | $x = $C->_new(\"3333"); $y = $C->_new(\"1111"); |
108 | ok (${$C->_str(scalar $C->_div($x,$y))},3); |
109 | $x = $C->_new(\"33333"); $y = $C->_new(\"1111"); ($x,$y) = $C->_div($x,$y); |
110 | ok (${$C->_str($x)},30); ok (${$C->_str($y)},3); |
111 | $x = $C->_new(\"123"); $y = $C->_new(\"1111"); |
112 | ($x,$y) = $C->_div($x,$y); ok (${$C->_str($x)},0); ok (${$C->_str($y)},123); |
574bacfe |
113 | |
114 | # _num |
bd05a461 |
115 | $x = $C->_new(\"12345"); $x = $C->_num($x); ok (ref($x)||'',''); ok ($x,12345); |
574bacfe |
116 | |
117 | # should not happen: |
bd05a461 |
118 | # $x = $C->_new(\"-2"); $y = $C->_new(\"4"); ok ($C->_acmp($x,$y),-1); |
574bacfe |
119 | |
120 | # _check |
bd05a461 |
121 | $x = $C->_new(\"123456789"); |
122 | ok ($C->_check($x),0); |
123 | ok ($C->_check(123),'123 is not a reference'); |
0716bf9b |
124 | |
125 | # done |
126 | |
127 | 1; |
574bacfe |
128 | |