This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add cautionary comment to .t
[perl5.git] / lib / integer.t
1 #!./perl
2
3 BEGIN {
4     chdir 't' if -d 't';
5     @INC = '../lib';
6 }
7
8 use integer;
9
10 use Test::More tests => 15;
11 use Config;
12
13 my $x = 4.5;
14 my $y = 5.6;
15 my $z;
16
17 $z = $x + $y;
18 is($z, 9, "plus");
19
20 $z = $x - $y;
21 is($z, -1, "minus");
22
23 $z = $x * $y;
24 is($z, 20, "times");
25
26 $z = $x / $y;
27 is($z, 0, "divide");
28
29 $z = $x / $y;
30 is($z, 0, "modulo");
31
32 is($x, 4.5, "scalar still floating point");
33  
34 isnt(sqrt($x), 2, "functions still floating point");
35  
36 isnt($x ** .5, 2, "power still floating point");
37
38 is(++$x, 5.5, "++ still floating point");
39  
40 SKIP: {
41     my $ivsize = $Config{ivsize};
42     skip "ivsize == $ivsize", 2 unless $ivsize == 4 || $ivsize == 8;
43
44     if ($ivsize == 4) {
45         $z = 2**31 - 1;
46         is($z + 1, -2147483648, "left shift");
47     } elsif ($ivsize == 8) {
48         $z = 2**63 - 1;
49         is($z + 1, -9223372036854775808, "left shift");
50     }
51 }
52
53 is(~0, -1, "signed instead of unsigned");
54
55 # [perl #38485] use integer; 0x80000000/-1;
56 SKIP: {
57     my $ivsize = $Config{ivsize};
58     skip "ivsize == $ivsize", 4 unless $ivsize == 4 || $ivsize == 8;
59
60     my $iv_min = $ivsize == 4 ? -2147483648 : -9223372036854775808;
61     my $biff;
62     eval { $biff = $iv_min / -1 };
63     is($@, '', 'IV_MIN / -1 succeeds');
64     is($biff, -$iv_min, 'IV_MIN / -1 == -IV_MIN');
65
66     eval { $biff = $iv_min % -1 };
67     is($@, '', 'IV_MIN % -1 succeeds');
68     is($biff, 0, 'IV_MIN % -1 == 0');
69 }