File Coverage

blib/lib/RPerl/DataType/GMPInteger.pm
Criterion Covered Total %
statement 92 187 49.2
branch 19 48 39.5
condition n/a
subroutine 21 31 67.7
pod n/a
total 132 266 49.6


line stmt bran cond sub pod time code
1             # [[[ HEADER ]]]
2             package RPerl::DataType::GMPInteger;
3 1     1   4860 use strict;
  1         2  
  1         25  
4 1     1   4 use warnings;
  1         2  
  1         20  
5 1     1   5 use RPerl::AfterSubclass;
  1         2  
  1         120  
6             our $VERSION = 0.004_000;
7              
8             # [[[ OO INHERITANCE ]]]
9             #use parent qw(Math::BigInt RPerl::DataType::Scalar); # NEED UPGRADE, CORRELATION #rp023: Inline::CPP support for multiple inheritance
10 1     1   6 use parent qw(Math::BigInt);
  1         2  
  1         5  
11 1     1   19398 use Math::BigInt lib => 'GMP'; # we still actually use GMP in PERLOPS_PERLTYPES mode, albeit indirectly via Math::BigInt::GMP
  1         2  
  1         6  
12 1     1   18599 use RPerl::DataType::Scalar;
  1         3  
  1         40  
13              
14             # [[[ CRITICS ]]]
15             ## no critic qw(ProhibitUselessNoCritic ProhibitMagicNumbers RequireCheckedSyscalls) # USER DEFAULT 1: allow numeric values & print operator
16             ## no critic qw(RequireInterpolationOfMetachars) # USER DEFAULT 2: allow single-quoted control characters & sigils
17             ## no critic qw(Capitalization ProhibitMultiplePackages ProhibitReusedNames) # SYSTEM DEFAULT 3: allow multiple & lower case package names
18              
19             # [[[ SUB-TYPES ]]]
20             # a gmp_integer is multi-precision integer using the GMP library
21             package # hide from PAUSE indexing
22             gmp_integer;
23 1     1   6 use strict;
  1         2  
  1         22  
24 1     1   5 use warnings;
  1         2  
  1         34  
25 1     1   5 use parent qw(RPerl::DataType::GMPInteger);
  1         2  
  1         8  
26              
27             # [[[ PRE-DECLARED TYPES ]]]
28             package # hide from PAUSE indexing
29             boolean;
30             package # hide from PAUSE indexing
31             unsigned_integer;
32             package # hide from PAUSE indexing
33             integer;
34             package # hide from PAUSE indexing
35             number;
36             package # hide from PAUSE indexing
37             character;
38             package # hide from PAUSE indexing
39             string;
40              
41             # [[[ SWITCH CONTEXT BACK TO PRIMARY PACKAGE ]]]
42             package RPerl::DataType::GMPInteger;
43 1     1   85 use strict;
  1         2  
  1         16  
44 1     1   4 use warnings;
  1         2  
  1         22  
45              
46             # [[[ INCLUDES ]]]
47             # for type-checking via RPerl_SvHROKp(); inside INIT to delay until after 'use MyConfig';
48             # NEED ADDRESS: INIT disabled due to warning "too late to run INIT block", do we need it any more?
49             #INIT {
50 1     1   6 use RPerl::HelperFunctions_cpp;
  1         2  
  1         29  
51             RPerl::HelperFunctions_cpp::cpp_load();
52              
53             #}
54 1     1   437 use RPerl::Operation::Expression::Operator::GMPFunctions;
  1         3  
  1         8  
55              
56             # [[[ EXPORTS ]]]
57 1     1   6 use RPerl::Exporter 'import';
  1         2  
  1         3  
58             our @EXPORT = qw(
59             gmp_integer_CHECK gmp_integer_CHECKTRACE
60             gmp_integer_to_boolean gmp_integer_to_unsigned_integer gmp_integer_to_integer gmp_integer_to_number gmp_integer_to_character gmp_integer_to_string
61             boolean_to_gmp_integer integer_to_gmp_integer unsigned_integer_to_gmp_integer number_to_gmp_integer character_to_gmp_integer string_to_gmp_integer
62             );
63             our @EXPORT_OK = qw(gmp_integer__typetest0 gmp_integer__typetest1);
64              
65             # DEV NOTE: never call Math::BigInt->new() without arg, to avoid 'Use of uninitialized value in new' introduced in M::BI v1.999712
66             sub new {
67 62     62   101 { my gmp_integer $RETURN_TYPE };
  62         81  
68 62         112 ( my string $class, my number $input ) = @ARG;
69 62 100       118 if ( defined $input ) { return Math::BigInt::new( 'gmp_integer', $input ); }
  26         53  
70 36         96 else { return Math::BigInt::new( 'gmp_integer', 0 ); }
71 0         0 return;
72             }
73              
74             # [[[ TYPE-CHECKING ]]]
75             sub gmp_integer_CHECK {
76 0     0   0 { my void $RETURN_TYPE };
  0         0  
77 0         0 ( my $possible_gmp_integer ) = @ARG;
78              
79             # RPerl::diag("in PERLOPS_PERLTYPES gmp_integer_CHECK(), top of subroutine\n");
80 0 0       0 if ( not( defined $possible_gmp_integer ) ) {
81             # croak( "\nERROR EMPV00, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but undefined/null value found,\ncroaking" );
82 0         0 die( "\nERROR EMPV00, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but undefined/null value found,\ndying\n" );
83             }
84 0 0       0 if ( not( main::RPerl_SvHROKp($possible_gmp_integer) ) ) {
85             # croak("\nERROR EMPV01, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but non-hashref value found,\ncroaking");
86 0         0 die("\nERROR EMPV01, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but non-hashref value found,\ndying\n");
87             }
88 0         0 my string $classname = main::class($possible_gmp_integer);
89 0 0       0 if ( not defined $classname ) {
90             # croak( "\nERROR EMPV02, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but non-object (blessed hashref) value found,\ncroaking" );
91 0         0 die( "\nERROR EMPV02, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but non-object (blessed hashref) value found,\ndying\n" );
92             }
93 0 0       0 if ( not( UNIVERSAL::isa( $possible_gmp_integer, 'Math::BigInt' ) ) ) {
94             # croak( "\nERROR EMPV03, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but non-Math::BigInt-derived object value found,\ncroaking" );
95 0         0 die( "\nERROR EMPV03, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but non-Math::BigInt-derived object value found,\ndying\n" );
96             }
97 0 0       0 if ( $classname ne 'gmp_integer' ) {
98             # croak( "\nERROR EMPV04, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but non-gmp_integer object value found,\ncroaking" );
99 0         0 die( "\nERROR EMPV04, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but non-gmp_integer object value found,\ndying" );
100             }
101 0 0       0 if ( not exists $possible_gmp_integer->{value} ) {
102             # croak( "\nERROR EMPV05, MISSING HASH ENTRY, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped object in hash entry expected at key 'value' but no hash entry exists,\ncroaking" );
103 0         0 die( "\nERROR EMPV05, MISSING HASH ENTRY, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped object in hash entry expected at key 'value' but no hash entry exists,\ndying\n" );
104             }
105 0 0       0 if ( not defined $possible_gmp_integer->{value} ) {
106             # croak( "\nERROR EMPV06, MISSING HASH ENTRY, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped object in hash entry expected at key 'value' but no hash entry defined;\nOR\nERROR EMPV07, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped value expected but undefined/null value found,\ncroaking" );
107 0         0 die( "\nERROR EMPV06, MISSING HASH ENTRY, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped object in hash entry expected at key 'value' but no hash entry defined;\nOR\nERROR EMPV07, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped value expected but undefined/null value found,\ndying\n" );
108             }
109 0 0       0 if ( not defined main::class( $possible_gmp_integer->{value} ) ) {
110             # croak( "\nERROR EMPV08, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped value expected but non-object (blessed hashref) value found,\ncroaking" );
111 0         0 die( "\nERROR EMPV08, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped value expected but non-object (blessed hashref) value found,\ndying\n" );
112             }
113 0 0       0 if ( not( UNIVERSAL::isa( $possible_gmp_integer->{value}, 'Math::BigInt::GMP' ) ) ) {
114             # croak( "\nERROR EMPV09, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped value expected but non-Math::BigInt::GMP object value found,\ncroaking" );
115 0         0 die( "\nERROR EMPV09, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped value expected but non-Math::BigInt::GMP object value found,\ndying\n" );
116             }
117              
118             # RPerl::diag("in PERLOPS_PERLTYPES gmp_integer_CHECK(), bottom of subroutine\n");
119 0         0 return;
120             }
121              
122             sub gmp_integer_CHECKTRACE {
123 60     60   95 { my void $RETURN_TYPE };
  60         77  
124 60         117 ( my $possible_gmp_integer, my $variable_name, my $subroutine_name ) = @ARG;
125              
126             # RPerl::diag("in PERLOPS_PERLTYPES gmp_integer_CHECKTRACE(), top of subroutine\n");
127 60 100       141 if ( not( defined $possible_gmp_integer ) ) {
128             # croak( "\nERROR EMPV00, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but undefined/null value found,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ncroaking" );
129 4         29 die( "\nERROR EMPV00, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but undefined/null value found,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ndying\n" );
130             }
131 56 100       150 if ( not( main::RPerl_SvHROKp($possible_gmp_integer) ) ) {
132             # croak( "\nERROR EMPV01, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but non-hashref value found,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ncroaking" );
133 10         64 die( "\nERROR EMPV01, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but non-hashref value found,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ndying\n" );
134             }
135 46         125 my string $classname = main::class($possible_gmp_integer);
136 46 100       96 if ( not defined $classname ) {
137             # croak( "\nERROR EMPV02, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but non-object (blessed hashref) value found,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ncroaking" );
138 4         26 die( "\nERROR EMPV02, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but non-object (blessed hashref) value found,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ndying\n" );
139             }
140 42 100       135 if ( not( UNIVERSAL::isa( $possible_gmp_integer, 'Math::BigInt' ) ) ) {
141             # croak( "\nERROR EMPV03, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but non-Math::BigInt-derived object value found,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ncroaking" );
142 2         19 die( "\nERROR EMPV03, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but non-Math::BigInt-derived object value found,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ndying\n" );
143             }
144 40 100       75 if ( $classname ne 'gmp_integer' ) {
145             # croak( "\nERROR EMPV04, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but non-gmp_integer object value found,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ncroaking" );
146 2         17 die( "\nERROR EMPV04, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer external wrapper value expected but non-gmp_integer object value found,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ndying\n" );
147             }
148 38 100       74 if ( not exists $possible_gmp_integer->{value} ) {
149             # croak( "\nERROR EMPV05, MISSING HASH ENTRY, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped object in hash entry expected at key 'value' but no hash entry exists,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ncroaking" );
150 2         24 die( "\nERROR EMPV05, MISSING HASH ENTRY, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped object in hash entry expected at key 'value' but no hash entry exists,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ndying\n" );
151             }
152 36 100       72 if ( not defined $possible_gmp_integer->{value} ) {
153             # croak( "\nERROR EMPV06, MISSING HASH ENTRY, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped object in hash entry expected at key 'value' but no hash entry defined;\nOR\nERROR EMPV07, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped value expected but undefined/null value found,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ncroaking" );
154 2         17 die( "\nERROR EMPV06, MISSING HASH ENTRY, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped object in hash entry expected at key 'value' but no hash entry defined;\nOR\nERROR EMPV07, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped value expected but undefined/null value found,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ndying\n" );
155             }
156 34 100       66 if ( not defined main::class( $possible_gmp_integer->{value} ) ) {
157             # croak( "\nERROR EMPV08, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped value expected but non-object (blessed hashref) value found,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ncroaking" );
158 8         60 die( "\nERROR EMPV08, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped value expected but non-object (blessed hashref) value found,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ndying\n" );
159             }
160 26 50       119 if ( not( UNIVERSAL::isa( $possible_gmp_integer->{value}, 'Math::BigInt::GMP' ) ) ) {
161             # croak( "\nERROR EMPV09, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped value expected but non-Math::BigInt::GMP object value found,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ncroaking" );
162 26         189 die( "\nERROR EMPV09, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\ngmp_integer internal wrapped value expected but non-Math::BigInt::GMP object value found,\nin variable " . $variable_name . " from subroutine " . $subroutine_name . ",\ndying\n" );
163             }
164              
165             # RPerl::diag("in PERLOPS_PERLTYPES gmp_integer_CHECKTRACE(), bottom of subroutine\n");
166 0         0 return;
167             }
168              
169             # [[[ BOOLEANIFY ]]]
170             sub gmp_integer_to_boolean {
171 46     46   9796554 { my boolean $RETURN_TYPE };
  46         78  
172 46         70 ( my gmp_integer $input_gmp_integer ) = @ARG;
173              
174             # gmp_integer_CHECK($input_gmp_integer);
175 46         1051 gmp_integer_CHECKTRACE( $input_gmp_integer, '$input_gmp_integer', 'gmp_integer_to_boolean()' );
176 0 0       0 if ( gmp_get_signed_integer($input_gmp_integer) == 0 ) { return 0; } # DEV NOTE: this one matches the C++ code more closely
  0         0  
177              
178             # if ( $input_gmp_integer->is_zero() ) { return 0; } # but this one may be faster?
179 0         0 else { return 1; }
180 0         0 return;
181             }
182              
183             # [[[ UNSIGNED INTEGERIFY ]]]
184             sub gmp_integer_to_unsigned_integer {
185 6     6   27 { my unsigned_integer $RETURN_TYPE };
  6         11  
186 6         12 ( my gmp_integer $input_gmp_integer ) = @ARG;
187              
188             # gmp_integer_CHECK($input_gmp_integer);
189 6         138 gmp_integer_CHECKTRACE( $input_gmp_integer, '$input_gmp_integer', 'gmp_integer_to_unsigned_integer()' );
190 0         0 return abs $input_gmp_integer->numify();
191             }
192              
193             # [[[ INTEGERIFY ]]]
194             sub gmp_integer_to_integer {
195 8     8   29 { my integer $RETURN_TYPE };
  8         12  
196 8         15 ( my gmp_integer $input_gmp_integer ) = @ARG;
197              
198             # gmp_integer_CHECK($input_gmp_integer);
199 8         160 gmp_integer_CHECKTRACE( $input_gmp_integer, '$input_gmp_integer', 'gmp_integer_to_integer()' );
200 0         0 return $input_gmp_integer->numify();
201             }
202              
203             # [[[ NUMBERIFY ]]]
204             sub gmp_integer_to_number {
205 0     0   0 { my number $RETURN_TYPE };
  0         0  
206 0         0 ( my gmp_integer $input_gmp_integer ) = @ARG;
207              
208             # gmp_integer_CHECK($input_gmp_integer);
209 0         0 gmp_integer_CHECKTRACE( $input_gmp_integer, '$input_gmp_integer', 'gmp_integer_to_number()' );
210 0         0 return $input_gmp_integer->numify() * 1.0;
211             }
212              
213             # [[[ CHARACTERIFY ]]]
214             sub gmp_integer_to_character {
215 0     0   0 { my character $RETURN_TYPE };
  0         0  
216 0         0 ( my gmp_integer $input_gmp_integer ) = @ARG;
217              
218             # gmp_integer_CHECK($input_gmp_integer);
219 0         0 gmp_integer_CHECKTRACE( $input_gmp_integer, '$input_gmp_integer', 'gmp_integer_to_character()' );
220 0         0 my string $tmp_string = gmp_integer_to_string($input_gmp_integer);
221 0 0       0 if ( $tmp_string eq q{} ) { return q{}; }
  0         0  
222 0         0 else { return substr $tmp_string, 0, 1; }
223 0         0 return;
224             }
225              
226             # [[[ STRINGIFY ]]]
227             sub gmp_integer_to_string {
228 0     0   0 { my string $RETURN_TYPE };
  0         0  
229 0         0 ( my gmp_integer $input_gmp_integer ) = @ARG;
230              
231             # gmp_integer_CHECK($input_gmp_integer);
232 0         0 gmp_integer_CHECKTRACE( $input_gmp_integer, '$input_gmp_integer', 'gmp_integer_to_string()' );
233              
234             # RPerl::diag("in PERLOPS_PERLTYPES gmp_integer_to_string(), received \$input_gmp_integer = $input_gmp_integer\n");
235              
236 0         0 my integer $is_negative = $input_gmp_integer->is_neg();
237 0         0 my string $retval = reverse $input_gmp_integer->bstr();
238 0 0       0 if ($is_negative) { chop $retval; } # remove negative sign
  0         0  
239 0         0 $retval =~ s/(\d{3})/$1_/gxms;
240 0 0       0 if ( ( substr $retval, -1, 1 ) eq '_' ) { chop $retval; }
  0         0  
241 0         0 $retval = reverse $retval;
242              
243 0 0       0 if ($is_negative) { $retval = q{-} . $retval; }
  0         0  
244              
245             # RPerl::diag('in PERLOPS_PERLTYPES gmp_integer_to_string(), have $retval = ' . q{'} . $retval . q{'} . "\n");
246 0         0 return $retval;
247             }
248              
249             # [[[ GMP INTEGERIFY ]]]
250             # DEV NOTE: keep all these *_to_gmp_integer() conversion subroutines here instead of spread throughout the other RPerl/DataType/*.pm files,
251             # so that loading will all be controlled by the 'use rperlgmp;' directive
252              
253             sub boolean_to_gmp_integer {
254 0     0   0 { my gmp_integer $RETURN_TYPE };
  0         0  
255 0         0 ( my boolean $input_boolean ) = @ARG;
256              
257             # ::boolean_CHECK($input_boolean);
258 0         0 ::boolean_CHECKTRACE( $input_boolean, '$input_boolean', 'boolean_to_gmp_integer()' );
259 0         0 my gmp_integer $output_gmp_integer = gmp_integer->new($input_boolean);
260 0         0 return $output_gmp_integer;
261             }
262              
263             sub integer_to_gmp_integer {
264 4     4   5271 { my gmp_integer $RETURN_TYPE };
  4         10  
265 4         9 ( my integer $input_integer ) = @ARG;
266              
267             # ::integer_CHECK($input_integer);
268 4         21 ::integer_CHECKTRACE( $input_integer, '$input_integer', 'integer_to_gmp_integer()' );
269 4         101 my gmp_integer $output_gmp_integer = gmp_integer->new($input_integer);
270 4         196 return $output_gmp_integer;
271             }
272              
273             sub unsigned_integer_to_gmp_integer {
274 0     0   0 { my gmp_integer $RETURN_TYPE };
  0         0  
275 0         0 ( my unsigned_integer $input_unsigned_integer ) = @ARG;
276              
277             # ::unsigned_integer_CHECK($input_unsigned_integer);
278 0         0 ::unsigned_integer_CHECKTRACE( $input_unsigned_integer, '$input_unsigned_integer', 'unsigned_integer_to_gmp_integer()' );
279 0         0 my gmp_integer $output_gmp_integer = gmp_integer->new($input_unsigned_integer);
280 0         0 return $output_gmp_integer;
281             }
282              
283             sub number_to_gmp_integer {
284 0     0   0 { my gmp_integer $RETURN_TYPE };
  0         0  
285 0         0 ( my number $input_number ) = @ARG;
286              
287             # ::number_CHECK($input_number);
288 0         0 ::number_CHECKTRACE( $input_number, '$input_number', 'number_to_gmp_integer()' );
289 0         0 my gmp_integer $output_gmp_integer = gmp_integer->new( number_to_integer($input_number) );
290 0         0 return $output_gmp_integer;
291             }
292              
293             sub character_to_gmp_integer {
294 0     0   0 { my gmp_integer $RETURN_TYPE };
  0         0  
295 0         0 ( my character $input_character ) = @ARG;
296              
297             # ::character_CHECK($input_character);
298 0         0 ::character_CHECKTRACE( $input_character, '$input_character', 'character_to_gmp_integer()' );
299 0         0 my gmp_integer $output_gmp_integer = gmp_integer->new( character_to_integer($input_character) );
300 0         0 return $output_gmp_integer;
301             }
302              
303             sub string_to_gmp_integer {
304 0     0   0 { my gmp_integer $RETURN_TYPE };
  0         0  
305 0         0 ( my string $input_string ) = @ARG;
306              
307             # ::string_CHECK($input_string);
308 0         0 ::string_CHECKTRACE( $input_string, '$input_string', 'string_to_gmp_integer()' );
309 0         0 my gmp_integer $output_gmp_integer = gmp_integer->new( string_to_integer($input_string) );
310 0         0 return $output_gmp_integer;
311             }
312              
313             # [[[ TYPE TESTING ]]]
314             sub gmp_integer__typetest0 {
315 2     2   4 { my gmp_integer $RETURN_TYPE };
  2         5  
316 2         56 my gmp_integer $retval = ( 21 / 7 ) + main::RPerl__DataType__Integer__MODE_ID(); # return gmp_integer (not number) value, don't do (22 / 7) etc.
317              
318             # RPerl::diag("in PERLOPS_PERLTYPES gmp_integer__typetest0(), have \$retval = $retval\n");
319 2         10 return ($retval);
320             }
321             sub gmp_integer__typetest1 {
322 0     0     { my gmp_integer $RETURN_TYPE };
  0            
323 0           ( my gmp_integer $lucky_gmp_integer ) = @ARG;
324              
325             # ::gmp_integer_CHECK($lucky_gmp_integer);
326 0           ::gmp_integer_CHECKTRACE( $lucky_gmp_integer, '$lucky_gmp_integer', 'gmp_integer__typetest1()' );
327              
328             # RPerl::diag('in PERLOPS_PERLTYPES gmp_integer__typetest1(), received $lucky_gmp_integer = ' . gmp_integer_to_string($lucky_gmp_integer) . "\n");
329 0           return ( ( $lucky_gmp_integer * 2 ) + main::RPerl__DataType__Integer__MODE_ID() );
330             }
331              
332             1; # end of class