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
|
use warnings;
use strict;
use Test::More tests => 18;
BEGIN { use_ok "Data::Integer", qw(
natint_bits
min_nint max_nint min_natint max_natint
min_sint max_sint min_signed_natint max_signed_natint
min_uint max_uint min_unsigned_natint max_unsigned_natint
); }
sub nint_is($$) {
my($tval, $cval) = @_;
my $tval0 = $tval;
ok defined($tval) && ref(\$tval) eq "SCALAR" &&
int($tval0) == $tval0 && "$tval" eq "$cval" &&
((my $tval1 = $tval) <=> 0) == ((my $cval1 = $cval) <=> 0) &&
do { use integer; $tval == $cval },
"$tval match $cval";
}
ok int(natint_bits) == natint_bits;
ok natint_bits >= 16;
use integer;
my $min_sint = -1;
for(my $i = natint_bits-1; $i--; ) { $min_sint += $min_sint; }
ok $min_sint < 0;
nint_is min_sint, $min_sint;
nint_is min_signed_natint, $min_sint;
nint_is min_nint, $min_sint;
nint_is min_natint, $min_sint;
nint_is min_sint + max_sint, -1;
nint_is min_uint, 0;
nint_is min_unsigned_natint, 0;
my $max_sint = min_sint - 1;
ok $max_sint > 0;
nint_is max_sint, $max_sint;
nint_is max_signed_natint, $max_sint;
no integer;
my $max_uint = $min_sint | $max_sint;
nint_is max_uint, $max_uint;
nint_is max_unsigned_natint, $max_uint;
nint_is max_nint, $max_uint;
nint_is max_natint, $max_uint;
1;
|