xref: /openbsd-src/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigints.t (revision eac174f2741a08d8deb8aae59a7f778ef9b5d770)
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