1# -*- mode: perl; -*- 2 3use strict; 4use warnings; 5use lib 't'; 6 7use Test::More tests => 50; 8 9# testing of Math::BigInt:Scalar (used by the testsuite), 10# primarily for interface/api and not for the math functionality 11 12use Math::BigInt::Scalar; 13 14my $class = 'Math::BigInt::Scalar'; # pass classname to sub's 15 16# _new and _str 17 18my $x = $class->_new("123"); 19my $y = $class->_new("321"); 20is(ref($x), 'SCALAR', 'ref($x)'); 21is($class->_str($x), 123, "$class->_str(\$x)"); 22is($class->_str($y), 321, "$class->_str(\$y)"); 23 24# _add, _sub, _mul, _div 25 26is($class->_str($class->_add($x, $y)), 444, 27 "$class->_str($class->_add(\$x, \$y)"); 28is($class->_str($class->_sub($x, $y)), 123, 29 "$class->_str($class->_sub(\$x, \$y)"); 30is($class->_str($class->_mul($x, $y)), 39483, 31 "$class->_str($class->_mul(\$x, \$y))"); 32is($class->_str($class->_div($x, $y)), 123, 33 "$class->_str($class->_div(\$x, \$y)"); 34 35$class->_mul($x, $y); 36is($class->_str($x), 39483, "$class->_str(\$x)"); 37is($class->_str($y), 321, "$class->_str(\$y)"); 38 39my $z = $class->_new("2"); 40is($class->_str($class->_add($x, $z)), 39485, 41 "$class->_str($class->_add(\$x, \$z)"); 42 43my ($re, $rr) = $class->_div($x, $y); 44is($class->_str($re), 123, "$class->_str(\$re)"); 45is($class->_str($rr), 2, "$class->_str(\$rr)"); 46 47# is_zero, _is_one, _one, _zero 48 49is($class->_is_zero($x), 0, "$class->_is_zero($x)"); 50is($class->_is_one($x), 0, "$class->_is_one($x)"); 51 52is($class->_is_one($class->_one()), 1, 53 "$class->_is_one($class->_one())"); 54is($class->_is_one($class->_zero()), 0, 55 "$class->_is_one($class->_zero())"); 56is($class->_is_zero($class->_zero()), 1, 57 "$class->_is_zero($class->_zero())"); 58is($class->_is_zero($class->_one()), 0, 59 "$class->_is_zero($class->_one())"); 60 61# is_odd, is_even 62 63is($class->_is_odd($class->_one()), 1, 64 "$class->_is_odd($class->_one())"); 65is($class->_is_odd($class->_zero()), 0, 66 "$class->_is_odd($class->_zero())"); 67is($class->_is_even($class->_one()), 0, 68 "$class->_is_even($class->_one())"); 69is($class->_is_even($class->_zero()), 1, 70 "$class->_is_even($class->_zero())"); 71 72# _digit 73 74$x = $class->_new("123456789"); 75is($class->_digit($x, 0), 9, "$class->_digit(\$x, 0)"); 76is($class->_digit($x, 1), 8, "$class->_digit(\$x, 1)"); 77is($class->_digit($x, 2), 7, "$class->_digit(\$x, 2)"); 78is($class->_digit($x, -1), 1, "$class->_digit(\$x, -1)"); 79is($class->_digit($x, -2), 2, "$class->_digit(\$x, -2)"); 80is($class->_digit($x, -3), 3, "$class->_digit(\$x, -3)"); 81 82# _copy 83 84$x = $class->_new("12356"); 85is($class->_str($class->_copy($x)), 12356, 86 "$class->_str($class->_copy(\$x))"); 87 88# _acmp 89 90$x = $class->_new("123456789"); 91$y = $class->_new("987654321"); 92is($class->_acmp($x, $y), -1, "$class->_acmp(\$x, \$y)"); 93is($class->_acmp($y, $x), 1, "$class->_acmp(\$y, \$x)"); 94is($class->_acmp($x, $x), 0, "$class->_acmp(\$x, \$x)"); 95is($class->_acmp($y, $y), 0, "$class->_acmp(\$y, \$y)"); 96 97# _div 98 99$x = $class->_new("3333"); 100$y = $class->_new("1111"); 101is($class->_str(scalar $class->_div($x, $y)), 3, 102 "$class->_str(scalar $class->_div(\$x, \$y))"); 103 104$x = $class->_new("33333"); 105$y = $class->_new("1111"); 106($x, $y) = $class->_div($x, $y); 107is($class->_str($x), 30, "$class->_str(\$x)"); 108is($class->_str($y), 3, "$class->_str(\$y)"); 109 110$x = $class->_new("123"); 111$y = $class->_new("1111"); 112($x, $y) = $class->_div($x, $y); 113is($class->_str($x), 0, "$class->_str(\$x)"); 114is($class->_str($y), 123, "$class->_str(\$y)"); 115 116# _num 117 118$x = $class->_new("12345"); 119$x = $class->_num($x); 120is(ref($x) || '', '', 'ref($x) || ""'); 121is($x, 12345, '$x'); 122 123# _len 124 125$x = $class->_new("12345"); 126$x = $class->_len($x); 127is(ref($x) || '', '', 'ref($x) || ""'); 128is($x, 5, '$x'); 129 130# _and, _or, _xor 131 132$x = $class->_new("3"); 133$y = $class->_new("4"); 134is($class->_str($class->_or($x, $y)), 7, 135 "$class->_str($class->_or($x, $y))"); 136 137$x = $class->_new("1"); 138$y = $class->_new("4"); 139is($class->_str($class->_xor($x, $y)), 5, 140 "$class->_str($class->_xor($x, $y))"); 141 142$x = $class->_new("7"); 143$y = $class->_new("3"); 144is($class->_str($class->_and($x, $y)), 3, 145 "$class->_str($class->_and($x, $y))"); 146 147# _pow 148 149$x = $class->_new("2"); 150$y = $class->_new("4"); 151is($class->_str($class->_pow($x, $y)), 16, 152 "$class->_str($class->_pow($x, $y))"); 153 154$x = $class->_new("2"); 155$y = $class->_new("5"); 156is($class->_str($class->_pow($x, $y)), 32, 157 "$class->_str($class->_pow($x, $y))"); 158 159$x = $class->_new("3"); 160$y = $class->_new("3"); 161is($class->_str($class->_pow($x, $y)), 27, 162 "$class->_str($class->_pow($x, $y))"); 163 164# _check 165 166$x = $class->_new("123456789"); 167is($class->_check($x), 0, 168 "$class->_check(\$x)"); 169is($class->_check(123), '123 is not a reference', 170 "$class->_check(123)"); 171