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