#!perl use strict; use warnings; use lib 't'; use Test::More tests => 50; # testing of Math::BigInt:Scalar (used by the testsuite), # primarily for interface/api and not for the math functionality use Math::BigInt::Scalar; my $class = 'Math::BigInt::Scalar'; # pass classname to sub's # _new and _str my $x = $class->_new("123"); my $y = $class->_new("321"); is(ref($x), 'SCALAR', 'ref($x)'); is($class->_str($x), 123, "$class->_str(\$x)"); is($class->_str($y), 321, "$class->_str(\$y)"); # _add, _sub, _mul, _div is($class->_str($class->_add($x, $y)), 444, "$class->_str($class->_add(\$x, \$y)"); is($class->_str($class->_sub($x, $y)), 123, "$class->_str($class->_sub(\$x, \$y)"); is($class->_str($class->_mul($x, $y)), 39483, "$class->_str($class->_mul(\$x, \$y))"); is($class->_str($class->_div($x, $y)), 123, "$class->_str($class->_div(\$x, \$y)"); $class->_mul($x, $y); is($class->_str($x), 39483, "$class->_str(\$x)"); is($class->_str($y), 321, "$class->_str(\$y)"); my $z = $class->_new("2"); is($class->_str($class->_add($x, $z)), 39485, "$class->_str($class->_add(\$x, \$z)"); my ($re, $rr) = $class->_div($x, $y); is($class->_str($re), 123, "$class->_str(\$re)"); is($class->_str($rr), 2, "$class->_str(\$rr)"); # is_zero, _is_one, _one, _zero is($class->_is_zero($x), 0, "$class->_is_zero($x)"); is($class->_is_one($x), 0, "$class->_is_one($x)"); is($class->_is_one($class->_one()), 1, "$class->_is_one($class->_one())"); is($class->_is_one($class->_zero()), 0, "$class->_is_one($class->_zero())"); is($class->_is_zero($class->_zero()), 1, "$class->_is_zero($class->_zero())"); is($class->_is_zero($class->_one()), 0, "$class->_is_zero($class->_one())"); # is_odd, is_even is($class->_is_odd($class->_one()), 1, "$class->_is_odd($class->_one())"); is($class->_is_odd($class->_zero()), 0, "$class->_is_odd($class->_zero())"); is($class->_is_even($class->_one()), 0, "$class->_is_even($class->_one())"); is($class->_is_even($class->_zero()), 1, "$class->_is_even($class->_zero())"); # _digit $x = $class->_new("123456789"); is($class->_digit($x, 0), 9, "$class->_digit(\$x, 0)"); is($class->_digit($x, 1), 8, "$class->_digit(\$x, 1)"); is($class->_digit($x, 2), 7, "$class->_digit(\$x, 2)"); is($class->_digit($x, -1), 1, "$class->_digit(\$x, -1)"); is($class->_digit($x, -2), 2, "$class->_digit(\$x, -2)"); is($class->_digit($x, -3), 3, "$class->_digit(\$x, -3)"); # _copy $x = $class->_new("12356"); is($class->_str($class->_copy($x)), 12356, "$class->_str($class->_copy(\$x))"); # _acmp $x = $class->_new("123456789"); $y = $class->_new("987654321"); is($class->_acmp($x, $y), -1, "$class->_acmp(\$x, \$y)"); is($class->_acmp($y, $x), 1, "$class->_acmp(\$y, \$x)"); is($class->_acmp($x, $x), 0, "$class->_acmp(\$x, \$x)"); is($class->_acmp($y, $y), 0, "$class->_acmp(\$y, \$y)"); # _div $x = $class->_new("3333"); $y = $class->_new("1111"); is($class->_str(scalar $class->_div($x, $y)), 3, "$class->_str(scalar $class->_div(\$x, \$y))"); $x = $class->_new("33333"); $y = $class->_new("1111"); ($x, $y) = $class->_div($x, $y); is($class->_str($x), 30, "$class->_str(\$x)"); is($class->_str($y), 3, "$class->_str(\$y)"); $x = $class->_new("123"); $y = $class->_new("1111"); ($x, $y) = $class->_div($x, $y); is($class->_str($x), 0, "$class->_str(\$x)"); is($class->_str($y), 123, "$class->_str(\$y)"); # _num $x = $class->_new("12345"); $x = $class->_num($x); is(ref($x) || '', '', 'ref($x) || ""'); is($x, 12345, '$x'); # _len $x = $class->_new("12345"); $x = $class->_len($x); is(ref($x) || '', '', 'ref($x) || ""'); is($x, 5, '$x'); # _and, _or, _xor $x = $class->_new("3"); $y = $class->_new("4"); is($class->_str($class->_or($x, $y)), 7, "$class->_str($class->_or($x, $y))"); $x = $class->_new("1"); $y = $class->_new("4"); is($class->_str($class->_xor($x, $y)), 5, "$class->_str($class->_xor($x, $y))"); $x = $class->_new("7"); $y = $class->_new("3"); is($class->_str($class->_and($x, $y)), 3, "$class->_str($class->_and($x, $y))"); # _pow $x = $class->_new("2"); $y = $class->_new("4"); is($class->_str($class->_pow($x, $y)), 16, "$class->_str($class->_pow($x, $y))"); $x = $class->_new("2"); $y = $class->_new("5"); is($class->_str($class->_pow($x, $y)), 32, "$class->_str($class->_pow($x, $y))"); $x = $class->_new("3"); $y = $class->_new("3"); is($class->_str($class->_pow($x, $y)), 27, "$class->_str($class->_pow($x, $y))"); # _check $x = $class->_new("123456789"); is($class->_check($x), 0, "$class->_check(\$x)"); is($class->_check(123), '123 is not a reference', "$class->_check(123)");