File Coverage

blib/lib/Math/NumberBase/XS.pm
Criterion Covered Total %
statement 36 36 100.0
branch 10 10 100.0
condition 5 5 100.0
subroutine 11 11 100.0
pod 8 8 100.0
total 70 70 100.0


line stmt bran cond sub pod time code
1             package Math::NumberBase::XS;
2            
3 2     2   399863 use 5.008;
  2         8  
4 2     2   8 use strict;
  2         3  
  2         68  
5 2     2   9 use warnings;
  2         3  
  2         1012  
6            
7             require XSLoader;
8             our $VERSION = '0.0202';
9            
10             XSLoader::load('Math::NumberBase::XS', $VERSION);
11            
12             sub new {
13 15     15 1 4573 my ($class, $base, $symbols) = @_;
14            
15 15   100     34 $base //= 10;
16 15 100 100     97 die '$base must be an integer >= 2' if $base < 2 || int($base) != $base;
17            
18             my @symbols_array = defined $symbols
19             ? split //, $symbols
20 13 100       43 : do {
21 3 100       12 die 'Cannot auto determine symbols for base > 36' if $base > 36;
22 2         13 my @numalpha = (0 .. 9, 'a' .. 'z');
23 2         8 splice @numalpha, 0, $base;
24             };
25            
26 12         28 my %symbol_value_map = map { $symbols_array[$_] => $_ } 0 .. $#symbols_array;
  95         162  
27            
28 12 100       33 die 'Symbols length must match base' if @symbols_array != $base;
29 11 100       27 die 'Symbols contain duplicates' if keys(%symbol_value_map) != @symbols_array;
30            
31 10         18 my $self = bless {}, $class;
32 10         30 $self->_init($base, \@symbols_array, \%symbol_value_map);
33            
34 10         21 return $self;
35             }
36            
37             sub get_base {
38 2     2 1 296 my ($self) = @_;
39 2         10 return $self->_get_base();
40             }
41            
42             sub get_symbols {
43 2     2 1 6 my ($self) = @_;
44 2         27 return $self->_get_symbols();
45             }
46            
47             sub get_symbol_value_map {
48 1     1 1 2 my ($self) = @_;
49 1         9 return $self->_get_symbol_value_map();
50             }
51            
52             sub to_decimal {
53 16     16 1 29 my ($self, $string) = @_;
54 16         74 return $self->_to_decimal($string);
55             }
56            
57             sub from_decimal {
58 12     12 1 17 my ($self, $in_decimal) = @_;
59 12         69 return $self->_from_decimal($in_decimal);
60             }
61            
62             sub convert_to {
63 4     4 1 15 my ($self, $string, $number_base) = @_;
64 4         7 return $number_base->from_decimal($self->to_decimal($string));
65             }
66            
67             sub convert_from {
68 4     4 1 8 my ($self, $string, $number_base) = @_;
69 4         9 return $self->from_decimal($number_base->to_decimal($string));
70             }
71            
72             1;
73            
74             __END__