| 13 | | for @inttypes -> $type { |
| 14 | | unless eval("my $type \$var; 1") { |
| 15 | | skip 7, "low-level data type $type not supported on this platform"; |
| 16 | | } |
| 17 | | |
| 18 | | my $maxval; my $minval; |
| 19 | | my $len = +$type; # get the numeric value |
| 20 | | if $type ~~ /^uint/ { |
| 21 | | $maxval = 2**$len - 1; |
| 22 | | $minval = 0; |
| 23 | | } else { # /^int/ |
| 24 | | $maxval = 2**($len - 1) - 1; |
| 25 | | $minval = -(2**($len - 1)); |
| 26 | | } |
| 27 | | |
| 28 | | is(eval("my $type \$var = $maxval"), $maxval, "$type can be $maxval"); |
| 29 | | is(eval("my $type \$var = $minval"), $minval, "$type can be $minval"); |
| 30 | | eval_dies_ok("my $type \$var = {$maxval+1}", "$type cannot be {$maxval+1}"); |
| 31 | | eval_dies_ok("my $type \$var = {$minval-1}", "$type cannot be {$minval-1}"); |
| 32 | | eval_dies_ok("my $type \$var = 'foo'", "$type cannot be a string"); |
| 33 | | eval_dies_ok("my $type \$var = 42.1", "$type cannot be non-integer"); |
| 34 | | eval_dies_ok("my $type \$var = NaN", "$type cannot be NaN"); |
| | 24 | is(eval("my $type \$var = $maxval"), $maxval, "$type can be $maxval"); |
| | 25 | is(eval("my $type \$var = $minval"), $minval, "$type can be $minval"); |
| | 26 | eval_dies_ok("my $type \$var = {$maxval+1}", "$type cannot be {$maxval+1}"); |
| | 27 | eval_dies_ok("my $type \$var = {$minval-1}", "$type cannot be {$minval-1}"); |
| | 28 | eval_dies_ok("my $type \$var = 'foo'", "$type cannot be a string"); |
| | 29 | eval_dies_ok("my $type \$var = 42.1", "$type cannot be non-integer"); |
| | 30 | eval_dies_ok("my $type \$var = NaN", "$type cannot be NaN"); |