File Coverage

lib/String/Numeric/PP.pm
Criterion Covered Total %
statement 55 55 100.0
branch 28 28 100.0
condition 32 42 76.1
subroutine 18 18 100.0
pod 0 14 0.0
total 133 157 84.7


line stmt bran cond sub pod time code
1             package String::Numeric::PP;
2 6     6   36 use strict;
  6         15  
  6         272  
3 6     6   33 use warnings;
  6         12  
  6         198  
4              
5 6     6   35 use Carp qw[croak];
  6         10  
  6         1025  
6              
7             BEGIN {
8 6     6   14 our $VERSION = 0.9;
9 6         26 our @EXPORT_OK = qw(
10             is_numeric
11             is_float
12             is_decimal
13             is_integer
14             is_int
15             is_int8
16             is_int16
17             is_int32
18             is_int64
19             is_int128
20             is_uint
21             is_uint8
22             is_uint16
23             is_uint32
24             is_uint64
25             is_uint128
26             );
27              
28 6         34 require Exporter;
29 6         11429 *import = \&Exporter::import;
30             }
31              
32             sub INT8_MIN () { '128' }
33             sub INT16_MIN () { '32768' }
34             sub INT32_MIN () { '2147483648' }
35             sub INT64_MIN () { '9223372036854775808' }
36             sub INT128_MIN () { '170141183460469231731687303715884105728' }
37              
38             sub INT8_MAX () { '127' }
39             sub INT16_MAX () { '32767' }
40             sub INT32_MAX () { '2147483647' }
41             sub INT64_MAX () { '9223372036854775807' }
42             sub INT128_MAX () { '170141183460469231731687303715884105727' }
43              
44             sub UINT8_MAX () { '255' }
45             sub UINT16_MAX () { '65535' }
46             sub UINT32_MAX () { '4294967295' }
47             sub UINT64_MAX () { '18446744073709551615' }
48             sub UINT128_MAX () { '340282366920938463463374607431768211455' }
49              
50             *is_numeric = \&is_float;
51             *is_integer = \&is_int;
52              
53             sub is_float {
54 154 100   154 0 279699 @_ == 1 || croak(q/Usage: is_float(string)/);
55 152         342 local $_ = $_[0];
56 152   100     7040 return ( defined && /\A-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\z/ );
57             }
58              
59             sub is_decimal {
60 153 100   153 0 252583 @_ == 1 || croak(q/Usage: is_decimal(string)/);
61 152         323 local $_ = $_[0];
62 152   100     3345 return ( defined && /\A-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?\z/ );
63             }
64              
65             sub is_int {
66 29 100   29 0 24142 @_ == 1 || croak(q/Usage: is_int(string)/);
67 27         56 local $_ = $_[0];
68 27   100     283 return ( defined && /\A-?(?:0|[1-9][0-9]*)\z/ );
69             }
70              
71             sub is_int8 {
72 29 100   29 0 30773 @_ == 1 || croak(q/Usage: is_int8(string)/);
73 28         64 local $_ = $_[0];
74             return ( defined
75 28   66     396 && /\A(-?)(0|[1-9][0-9]{0,2})\z/
76             && ( length $2 < 3 || ( $1 ? $2 le INT8_MIN : $2 le INT8_MAX ) ) );
77             }
78              
79             sub is_int16 {
80 29 100   29 0 84492 @_ == 1 || croak(q/Usage: is_int16(string)/);
81 28         70 local $_ = $_[0];
82             return ( defined
83 28   66     439 && /\A(-?)(0|[1-9][0-9]{0,4})\z/
84             && ( length $2 < 5 || ( $1 ? $2 le INT16_MIN : $2 le INT16_MAX ) ) );
85             }
86              
87             sub is_int32 {
88 29 100   29 0 70322 @_ == 1 || croak(q/Usage: is_int32(string)/);
89 28         66 local $_ = $_[0];
90             return ( defined
91 28   66     2357 && /\A(-?)(0|[1-9][0-9]{0,9})\z/
92             && ( length $2 < 10 || ( $1 ? $2 le INT32_MIN : $2 le INT32_MAX ) ) );
93             }
94              
95             sub is_int64 {
96 29 100   29 0 26674 @_ == 1 || croak(q/Usage: is_int64(string)/);
97 28         64 local $_ = $_[0];
98             return ( defined
99 28   66     389 && /\A(-?)(0|[1-9][0-9]{0,18})\z/
100             && ( length $2 < 19 || ( $1 ? $2 le INT64_MIN : $2 le INT64_MAX ) ) );
101             }
102              
103             sub is_int128 {
104 31 100   31 0 37263 @_ == 1 || croak(q/Usage: is_int128(string)/);
105 30         2660 local $_ = $_[0];
106             return ( defined
107 30   66     5857 && /\A(-?)(0|[1-9][0-9]{0,38})\z/
108             && ( length $2 < 39 || ( $1 ? $2 le INT128_MIN : $2 le INT128_MAX ) ) );
109             }
110              
111             sub is_uint {
112 28 100   28 0 51235 @_ == 1 || croak(q/Usage: is_uint(string)/);
113 27         56 local $_ = $_[0];
114 27   100     261 return ( defined && /\A(?:0|[1-9][0-9]*)\z/ );
115             }
116              
117             sub is_uint8 {
118 29 100   29 0 38572 @_ == 1 || croak(q/Usage: is_uint8(string)/);
119 28         61 local $_ = $_[0];
120             return ( defined
121 28   66     341 && /\A(0|[1-9][0-9]{0,2})\z/
122             && ( length $1 < 3 || $1 le UINT8_MAX ) );
123             }
124              
125             sub is_uint16 {
126 29 100   29 0 34649 @_ == 1 || croak(q/Usage: is_uint16(string)/);
127 28         69 local $_ = $_[0];
128             return ( defined
129 28   66     352 && /\A(0|[1-9][0-9]{0,4})\z/
130             && ( length $1 < 5 || $1 le UINT16_MAX ) );
131             }
132              
133             sub is_uint32 {
134 29 100   29 0 69015 @_ == 1 || croak(q/Usage: is_uint32(string)/);
135 28         61 local $_ = $_[0];
136             return ( defined
137 28   66     353 && /\A(0|[1-9][0-9]{0,9})\z/
138             && ( length $1 < 10 || $1 le UINT32_MAX ) );
139             }
140              
141             sub is_uint64 {
142 29 100   29 0 22778 @_ == 1 || croak(q/Usage: is_uint64(string)/);
143 28         57 local $_ = $_[0];
144             return ( defined
145 28   66     347 && /\A(0|[1-9][0-9]{0,19})\z/
146             && ( length $1 < 20 || $1 le UINT64_MAX ) );
147             }
148              
149             sub is_uint128 {
150 30 100   30 0 75176 @_ == 1 || croak(q/Usage: is_uint128(string)/);
151 29         62 local $_ = $_[0];
152             return ( defined
153 29   66     429 && /\A(0|[1-9][0-9]{0,38})\z/
154             && ( length $1 < 39 || $1 le UINT128_MAX ) );
155             }
156              
157             1;
158