File Coverage

blib/lib/RPerl/DataType/Integer.pm
Criterion Covered Total %
statement 78 113 69.0
branch 12 20 60.0
condition n/a
subroutine 18 23 78.2
pod n/a
total 108 156 69.2


line stmt bran cond sub pod time code
1             # [[[ HEADER ]]]
2             package RPerl::DataType::Integer;
3 7     7   41 use strict;
  7         12  
  7         174  
4 7     7   29 use warnings;
  7         13  
  7         170  
5 7     7   30 use RPerl::AfterSubclass;
  7         11  
  7         952  
6             our $VERSION = 0.012_000;
7              
8             # [[[ OO INHERITANCE ]]]
9 7     7   40 use parent qw(RPerl::DataType::Scalar);
  7         12  
  7         33  
10 7     7   381 use RPerl::DataType::Scalar;
  7         16  
  7         197  
11              
12             # [[[ CRITICS ]]]
13             ## no critic qw(ProhibitUselessNoCritic ProhibitMagicNumbers RequireCheckedSyscalls) # USER DEFAULT 1: allow numeric values & print operator
14             ## no critic qw(RequireInterpolationOfMetachars) # USER DEFAULT 2: allow single-quoted control characters & sigils
15             ## no critic qw(Capitalization ProhibitMultiplePackages ProhibitReusedNames) # SYSTEM DEFAULT 3: allow multiple & lower case package names
16              
17             # [[[ SUB-TYPES ]]]
18             # an integer is a whole number, it has no floating-pointer (fractional/decimal) component
19             package # hide from PAUSE indexing
20             integer;
21 7     7   30 use strict;
  7         15  
  7         113  
22 7     7   28 use warnings;
  7         10  
  7         167  
23 7     7   31 use parent qw(RPerl::DataType::Integer);
  7         9  
  7         24  
24              
25             package # hide from PAUSE indexing
26             constant_integer;
27 7     7   426 use strict;
  7         14  
  7         124  
28 7     7   31 use warnings;
  7         13  
  7         171  
29 7     7   30 use parent qw(RPerl::DataType::Integer);
  7         11  
  7         21  
30              
31             # [[[ PRE-DECLARED TYPES ]]]
32             package # hide from PAUSE indexing
33             boolean;
34             package # hide from PAUSE indexing
35             unsigned_integer;
36             package # hide from PAUSE indexing
37             number;
38             package # hide from PAUSE indexing
39             character;
40             package # hide from PAUSE indexing
41             string;
42              
43             # [[[ SWITCH CONTEXT BACK TO PRIMARY PACKAGE ]]]
44             package RPerl::DataType::Integer;
45 7     7   424 use strict;
  7         17  
  7         130  
46 7     7   32 use warnings;
  7         20  
  7         242  
47              
48             # [[[ EXPORTS ]]]
49 7     7   39 use RPerl::Exporter 'import';
  7         14  
  7         48  
50             our @EXPORT = qw(integer_CHECK integer_CHECKTRACE integer_to_boolean integer_to_unsigned_integer integer_to_number integer_to_character integer_to_string);
51             our @EXPORT_OK = qw(integer__typetest0 integer__typetest1);
52              
53             # [[[ TYPE-CHECKING ]]]
54             sub integer_CHECK {
55 0     0   0 { my void $RETURN_TYPE };
  0         0  
56 0         0 ( my $possible_integer ) = @ARG;
57 0 0       0 if ( not( defined $possible_integer ) ) {
58             # croak("\nERROR EIV00, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ninteger value expected but undefined/null value found,\ncroaking");
59 0         0 die("\nERROR EIV00, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ninteger value expected but undefined/null value found,\ndying\n");
60             }
61 0 0       0 if ( not( main::RPerl_SvIOKp($possible_integer) ) ) {
62             # croak("\nERROR EIV01, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ninteger value expected but non-integer value found,\ncroaking");
63 0         0 die("\nERROR EIV01, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ninteger value expected but non-integer value found,\ndying\n");
64             }
65 0         0 return;
66             }
67              
68              
69             sub integer_CHECKTRACE {
70 67     67   98 { my void $RETURN_TYPE };
  67         85  
71 67         146 ( my $possible_integer, my $variable_name, my $subroutine_name ) = @ARG;
72             # RPerl::diag('in RPerl::DataType::Integer::integer_CHECKTRACE(), received $possible_integer = ' . $possible_integer . "\n");
73             # RPerl::diag('in RPerl::DataType::Integer::integer_CHECKTRACE(), received $variable_name = ' . $variable_name . "\n");
74             # RPerl::diag('in RPerl::DataType::Integer::integer_CHECKTRACE(), received $subroutine_name = ' . $subroutine_name . "\n");
75              
76 67 100       146 if ( not( defined $possible_integer ) ) {
77             # RPerl::diag('in RPerl::DataType::Integer::integer_CHECKTRACE(), about to croak due to undefined input' . "\n");
78             # croak( "\nERROR EIV00, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ninteger value expected but undefined/null value found,\nin variable $variable_name from subroutine $subroutine_name,\ncroaking" );
79 4         33 die( "\nERROR EIV00, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ninteger value expected but undefined/null value found,\nin variable $variable_name from subroutine $subroutine_name,\ndying\n" );
80             }
81 63 100       186 if ( not( main::RPerl_SvIOKp($possible_integer) ) ) {
82             # RPerl::diag('in RPerl::DataType::Integer::integer_CHECKTRACE(), about to croak due to non-integer input' . "\n");
83             # croak( "\nERROR EIV01, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ninteger value expected but non-integer value found,\nin variable $variable_name from subroutine $subroutine_name,\ncroaking" );
84 10         77 die( "\nERROR EIV01, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ninteger value expected but non-integer value found,\nin variable $variable_name from subroutine $subroutine_name,\ndying\n" );
85             }
86 53         86 return;
87             }
88              
89             # [[[ BOOLEANIFY ]]]
90             sub integer_to_boolean {
91 0     0   0 { my boolean $RETURN_TYPE };
  0         0  
92 0         0 ( my integer $input_integer ) = @ARG;
93             # integer_CHECK($input_integer);
94 0         0 integer_CHECKTRACE( $input_integer, '$input_integer', 'integer_to_boolean()' );
95 0 0       0 if ( $input_integer == 0 ) { return 0; }
  0         0  
96 0         0 else { return 1; }
97 0         0 return;
98             }
99              
100             # [[[ UNSIGNED INTEGERIFY ]]]
101             sub integer_to_unsigned_integer {
102 0     0   0 { my unsigned_integer $RETURN_TYPE };
  0         0  
103 0         0 ( my integer $input_integer ) = @ARG;
104             # integer_CHECK($input_integer);
105 0         0 integer_CHECKTRACE( $input_integer, '$input_integer', 'integer_to_unsigned_integer()' );
106 0         0 return abs $input_integer;
107             }
108              
109             # [[[ NUMBERIFY ]]]
110             sub integer_to_number {
111 0     0   0 { my number $RETURN_TYPE };
  0         0  
112 0         0 ( my integer $input_integer ) = @ARG;
113             # integer_CHECK($input_integer);
114 0         0 integer_CHECKTRACE( $input_integer, '$input_integer', 'integer_to_number()' );
115 0         0 return $input_integer * 1.0;
116             }
117              
118             # [[[ CHARACTERIFY ]]]
119             sub integer_to_character {
120 0     0   0 { my character $RETURN_TYPE };
  0         0  
121 0         0 ( my integer $input_integer ) = @ARG;
122             # integer_CHECK($input_integer);
123 0         0 integer_CHECKTRACE( $input_integer, '$input_integer', 'integer_to_character()' );
124 0         0 my string $tmp_string = integer_to_string($input_integer);
125 0 0       0 if ( $tmp_string eq q{} ) { return q{}; }
  0         0  
126 0         0 else { return substr $tmp_string, 0, 1; }
127 0         0 return;
128             }
129              
130             # [[[ STRINGIFY ]]]
131             sub integer_to_string {
132 47     47   8135 { my string $RETURN_TYPE };
  47         70  
133 47         56 { my string $RETURN_TYPE };
  47         57  
134 47         77 ( my integer $input_integer ) = @ARG;
135             # integer_CHECK($input_integer);
136 47         1063 integer_CHECKTRACE( $input_integer, '$input_integer', 'integer_to_string()' );
137              
138             # RPerl::diag("in PERLOPS_PERLTYPES integer_to_string(), received \$input_integer = $input_integer\n");
139             # RPerl::diag("in PERLOPS_PERLTYPES integer_to_string()...\n");
140              
141             # DEV NOTE: disable old stringify w/out underscores
142             # return "$input_integer";
143              
144 40         52 my integer $is_negative = 0;
145 40 100       74 if ( $input_integer < 0 ) { $is_negative = 1; }
  12         22  
146 40         76 my string $retval = reverse "$input_integer";
147 40 100       67 if ($is_negative) { chop $retval; } # remove negative sign
  12         20  
148 40         157 $retval =~ s/(\d{3})/$1_/gxms;
149 40 100       107 if ( ( substr $retval, -1, 1 ) eq '_' ) { chop $retval; }
  6         12  
150 40         66 $retval = reverse $retval;
151              
152 40 100       68 if ($is_negative) { $retval = q{-} . $retval; }
  12         21  
153              
154             # RPerl::diag('in PERLOPS_PERLTYPES integer_to_string(), have $retval = ' . q{'} . $retval . q{'} . "\n");
155 40         133 return $retval;
156             }
157              
158             # [[[ TYPE TESTING ]]]
159             sub integer__typetest0 {
160 1     1   3 { my integer $RETURN_TYPE };
  1         2  
161 1         21 my integer $retval = ( 21 / 7 ) + main::RPerl__DataType__Integer__MODE_ID(); # return integer (not number) value, don't do (22 / 7) etc.
162              
163             # RPerl::diag("in PERLOPS_PERLTYPES integer__typetest0(), have \$retval = $retval\n");
164 1         6 return ($retval);
165             }
166             sub integer__typetest1 {
167 10     10   13 { my integer $RETURN_TYPE };
  10         15  
168 10         16 ( my integer $lucky_integer ) = @ARG;
169             # integer_CHECK($lucky_integer);
170 10         183 integer_CHECKTRACE( $lucky_integer, '$lucky_integer', 'integer__typetest1()' );
171              
172             # RPerl::diag('in PERLOPS_PERLTYPES integer__typetest1(), received $lucky_integer = ' . integer_to_string($lucky_integer) . "\n");
173 3         51 return ( ( $lucky_integer * 2 ) + main::RPerl__DataType__Integer__MODE_ID() );
174             }
175              
176             1; # end of class