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