Re: PERFORCE change 12943 for review
[p5sagit/p5-mst-13.2.git] / lib / Math / BigInt / t / bigintc.t
CommitLineData
0716bf9b 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
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
17use Math::BigInt::Calc;
18
574bacfe 19my $C = 'Math::BigInt::Calc'; # pass classname to sub's
20
0716bf9b 21# _new and _str
bd05a461 22my $x = $C->_new(\"123"); my $y = $C->_new(\"321");
23ok (ref($x),'ARRAY'); ok (${$C->_str($x)},123); ok (${$C->_str($y)},321);
0716bf9b 24
25# _add, _sub, _mul, _div
26
bd05a461 27ok (${$C->_str($C->_add($x,$y))},444);
28ok (${$C->_str($C->_sub($x,$y))},123);
29ok (${$C->_str($C->_mul($x,$y))},39483);
30ok (${$C->_str($C->_div($x,$y))},123);
0716bf9b 31
bd05a461 32ok (${$C->_str($C->_mul($x,$y))},39483);
33ok (${$C->_str($x)},39483);
34ok (${$C->_str($y)},321);
35my $z = $C->_new(\"2");
36ok (${$C->_str($C->_add($x,$z))},39485);
37my ($re,$rr) = $C->_div($x,$y);
0716bf9b 38
bd05a461 39ok (${$C->_str($re)},123); ok (${$C->_str($rr)},2);
0716bf9b 40
41# is_zero, _is_one, _one, _zero
bd05a461 42ok ($C->_is_zero($x),0);
43ok ($C->_is_one($x),0);
0716bf9b 44
bd05a461 45ok ($C->_is_one($C->_one()),1); ok ($C->_is_one($C->_zero()),0);
46ok ($C->_is_zero($C->_zero()),1); ok ($C->_is_zero($C->_one()),0);
574bacfe 47
48# is_odd, is_even
bd05a461 49ok ($C->_is_odd($C->_one()),1); ok ($C->_is_odd($C->_zero()),0);
50ok ($C->_is_even($C->_one()),0); ok ($C->_is_even($C->_zero()),1);
0716bf9b 51
574bacfe 52# _digit
bd05a461 53$x = $C->_new(\"123456789");
54ok ($C->_digit($x,0),9);
55ok ($C->_digit($x,1),8);
56ok ($C->_digit($x,2),7);
57ok ($C->_digit($x,-1),1);
58ok ($C->_digit($x,-2),2);
59ok ($C->_digit($x,-3),3);
574bacfe 60
61# _copy
bd05a461 62$x = $C->_new(\"12356");
63ok (${$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");
72ok (${$C->_str($C->_lsft($x,$y,10))},10000);
73$x = $C->_new(\"20"); $y = $C->_new(\"3");
74ok (${$C->_str($C->_lsft($x,$y,10))},20000);
75$x = $C->_new(\"128"); $y = $C->_new(\"4");
76if (!defined $C->_lsft($x,$y,2))
574bacfe 77 {
78 ok (1,1)
79 }
80else
81 {
82 ok ('_lsft','undef');
83 }
bd05a461 84$x = $C->_new(\"1000"); $y = $C->_new(\"3");
85ok (${$C->_str($C->_rsft($x,$y,10))},1);
86$x = $C->_new(\"20000"); $y = $C->_new(\"3");
87ok (${$C->_str($C->_rsft($x,$y,10))},20);
88$x = $C->_new(\"256"); $y = $C->_new(\"4");
89if (!defined $C->_rsft($x,$y,2))
574bacfe 90 {
91 ok (1,1)
92 }
93else
94 {
95 ok ('_rsft','undef');
96 }
0716bf9b 97
574bacfe 98# _acmp
bd05a461 99$x = $C->_new(\"123456789");
100$y = $C->_new(\"987654321");
101ok ($C->_acmp($x,$y),-1);
102ok ($C->_acmp($y,$x),1);
103ok ($C->_acmp($x,$x),0);
104ok ($C->_acmp($y,$y),0);
574bacfe 105
106# _div
bd05a461 107$x = $C->_new(\"3333"); $y = $C->_new(\"1111");
108ok (${$C->_str(scalar $C->_div($x,$y))},3);
109$x = $C->_new(\"33333"); $y = $C->_new(\"1111"); ($x,$y) = $C->_div($x,$y);
110ok (${$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");
122ok ($C->_check($x),0);
123ok ($C->_check(123),'123 is not a reference');
0716bf9b 124
125# done
126
1271;
574bacfe 128