File: 26-digits.t

package info (click to toggle)
libmath-prime-util-perl 0.73-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 2,796 kB
  • sloc: perl: 24,676; ansic: 11,471; makefile: 26; python: 24
file content (78 lines) | stat: -rw-r--r-- 3,621 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env perl
use strict;
use warnings;

use Test::More;
use Math::Prime::Util
   qw/todigits fromdigits todigitstring sumdigits vecsum factorial/;

my $extra = defined $ENV{EXTENDED_TESTING} && $ENV{EXTENDED_TESTING};
#my $use64 = Math::Prime::Util::prime_get_config->{'maxbits'} > 32;
#my $usexs = Math::Prime::Util::prime_get_config->{'xs'};
#my $usegmp= Math::Prime::Util::prime_get_config->{'gmp'};
#$use64 = 0 if $use64 && 18446744073709550592 == ~0;

plan tests => 0 + 6 + 3 + 2 + 1  # fromdigits
                + 6 + 4 + 1      # todigits
                + 4 + 2*$extra   # sumdigits
                + 12;

###### fromdigits
is(fromdigits([0,1,1,0,1],2), 13, "fromdigits binary with leading 0");
is(fromdigits([1,1,0,1],2), 13, "fromdigits binary");
is(fromdigits([0,1,1,0,1]), 1101, "fromdigits decimal");
is(fromdigits([0,1,1,0,1],3), 37, "fromdigits base 3");
is(fromdigits([0,1,1,0,1],16), 4353, "fromdigits base 16");
is(fromdigits([0,1,1,0,2216],16), 6568, "fromdigits base 16 with overflow");

is(fromdigits([7,999,44],5), 7*5**2 + 999*5 + 44*1, "fromdigits base 5 with carry");
is(fromdigits([7,999,44],3), 7*3**2 + 999*3 + 44*1, "fromdigits base 3 with carry");
is(fromdigits([7,999,44],2), 7*2**2 + 999*2 + 44*1, "fromdigits base 2 with carry");

is(fromdigits("1f",16), 31, "fromdigits hex string");
is(fromdigits("24"), 24, "fromdigits decimal");

is(fromdigits("zzzyzzzyzzzyzzzy",36), "7958656371562241451187966", "fromdigits with Large base 36 number");

###### todigits
is_deeply([todigits(0)], [], "todigits 0");
is_deeply([todigits(1)], [1], "todigits 1");
is_deeply([todigits(77)], [7,7], "todigits 77");
is_deeply([todigits(77,2)], [1,0,0,1,1,0,1], "todigits 77 base 2");
is_deeply([todigits(77,3)], [2,2,1,2], "todigits 77 base 3");
is_deeply([todigits(77,21)], [3,14], "todigits 77 base 21");

is_deeply([todigits(900,2)], [1,1,1,0,0,0,0,1,0,0], "todigits 900 base 2");
is_deeply([todigits(900,2,0)], [], "todigits 900 base 2 len 0");
is_deeply([todigits(900,2,3)], [1,0,0], "todigits 900 base 2 len 3");
is_deeply([todigits(900,2,32)], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0], "todigits 900 base 2 len 32");

is(vecsum(todigits("293852387239761276234029385230912847923872323")), 201, "vecsum of todigits of bigint");

###### sumdigits
is(sumdigits("-45.36"), 4+5+3+6, "sumdigits(-45.36)");
{
  my @sumd   = map { sumdigits($_) } 0 .. 1000;
  my @splitd = map { vecsum(split(//,$_)) } 0 .. 1000;
  is_deeply( \@sumd, \@splitd, "sumdigits 0 to 1000");
}
is(sumdigits("0x3290f8E"), 51, "sumdigits hex");
is(sumdigits("293852387239761276234029385230912847923872323"), 201, "sumdigits bigint");
if ($extra) {
  is(sumdigits(factorial(1000)), 10539, "sumdigits 1000!");
  is(sumdigits(factorial(10000)), 149346, "sumdigits 10000!");
}

###### examples from Wolfram docs
is_deeply([todigits(1234135634,16)], [4,9,8,15,6,10,5,2], "todigits 1234135634 base 16");
is_deeply([todigits(56,2,8)], [0,0,1,1,1,0,0,0], "todigits 56 base 2 len 8");
is(fromdigits([todigits(56,2,8)],2), 56, "fromdigits of previous");
is(todigitstring(56,2), "111000", "56 as binary string");
is(fromdigits(todigitstring(56,2),2), 56, "fromdigits of previous");
is(todigitstring(37,2), "100101", "todigitstring 37");
is(fromdigits([5,1,2,8]), 5128, "fromdigits 5128 base 10");
is(fromdigits([1,0,1,1,0,1,1],2), 91, "fromdigits 91 base 2");
is(fromdigits("1923"), 1923, "fromdigits 1923 base 10");
is(fromdigits("1011011",2), 91, "fromdigits 91 base 2");
is(fromdigits([7,11,0,0,0,122]), 810122, "fromdigits with carry");
is_deeply([todigits(6345354, 10, 4)], [5,3,5,4], "only last 4 digits");