- Moved unused argc, temp variable into small scope.
[dragonfly.git] / contrib / perl5 / t / pragma / constant.t
1 #!./perl
2
3 BEGIN {
4     chdir 't' if -d 't';
5     @INC = '../lib' if -d '../lib';
6 }
7
8 BEGIN {$^W |= 1}                # Insist upon warnings
9 use vars qw{ @warnings };
10 BEGIN {                         # ...and save 'em for later
11     $SIG{'__WARN__'} = sub { push @warnings, @_ }
12 }
13 END { print @warnings }
14
15 ######################### We start with some black magic to print on failure.
16
17 BEGIN { $| = 1; print "1..46\n"; }
18 END {print "not ok 1\n" unless $loaded;}
19 use constant;
20 $loaded = 1;
21 #print "# Version: $constant::VERSION\n";
22 print "ok 1\n";
23
24 ######################### End of black magic.
25
26 use strict;
27
28 sub test ($$;$) {
29     my($num, $bool, $diag) = @_;
30     if ($bool) {
31         print "ok $num\n";
32         return;
33     }
34     print "not ok $num\n";
35     return unless defined $diag;
36     $diag =~ s/\Z\n?/\n/;                       # unchomp
37     print map "# $num : $_", split m/^/m, $diag;
38 }
39
40 use constant PI         => 4 * atan2 1, 1;
41
42 test 2, substr(PI, 0, 7) eq '3.14159';
43 test 3, defined PI;
44
45 sub deg2rad { PI * $_[0] / 180 }
46
47 my $ninety = deg2rad 90;
48
49 test 4, $ninety > 1.5707;
50 test 5, $ninety < 1.5708;
51
52 use constant UNDEF1     => undef;       # the right way
53 use constant UNDEF2     =>      ;       # the weird way
54 use constant 'UNDEF3'           ;       # the 'short' way
55 use constant EMPTY      => ( )  ;       # the right way for lists
56
57 test 6, not defined UNDEF1;
58 test 7, not defined UNDEF2;
59 test 8, not defined UNDEF3;
60 my @undef = UNDEF1;
61 test 9, @undef == 1;
62 test 10, not defined $undef[0];
63 @undef = UNDEF2;
64 test 11, @undef == 0;
65 @undef = UNDEF3;
66 test 12, @undef == 0;
67 @undef = EMPTY;
68 test 13, @undef == 0;
69
70 use constant COUNTDOWN  => scalar reverse 1, 2, 3, 4, 5;
71 use constant COUNTLIST  => reverse 1, 2, 3, 4, 5;
72 use constant COUNTLAST  => (COUNTLIST)[-1];
73
74 test 14, COUNTDOWN eq '54321';
75 my @cl = COUNTLIST;
76 test 15, @cl == 5;
77 test 16, COUNTDOWN eq join '', @cl;
78 test 17, COUNTLAST == 1;
79 test 18, (COUNTLIST)[1] == 4;
80
81 use constant ABC        => 'ABC';
82 test 19, "abc${\( ABC )}abc" eq "abcABCabc";
83
84 use constant DEF        => 'D', 'E', chr ord 'F';
85 test 20, "d e f @{[ DEF ]} d e f" eq "d e f D E F d e f";
86
87 use constant SINGLE     => "'";
88 use constant DOUBLE     => '"';
89 use constant BACK       => '\\';
90 my $tt = BACK . SINGLE . DOUBLE ;
91 test 21, $tt eq q(\\'");
92
93 use constant MESS       => q('"'\\"'"\\);
94 test 22, MESS eq q('"'\\"'"\\);
95 test 23, length(MESS) == 8;
96
97 use constant TRAILING   => '12 cats';
98 {
99     my $save_warn;
100     local $^W;
101     BEGIN { $save_warn = $^W; $^W = 0 }
102     test 24, TRAILING == 12;
103     BEGIN { $^W = $save_warn }
104 }
105 test 25, TRAILING eq '12 cats';
106
107 use constant LEADING    => " \t1234";
108 test 26, LEADING == 1234;
109 test 27, LEADING eq " \t1234";
110
111 use constant ZERO1      => 0;
112 use constant ZERO2      => 0.0;
113 use constant ZERO3      => '0.0';
114 test 28, ZERO1 eq '0';
115 test 29, ZERO2 eq '0';
116 test 30, ZERO3 eq '0.0';
117
118 {
119     package Other;
120     use constant PI     => 3.141;
121 }
122
123 test 31, (PI > 3.1415 and PI < 3.1416);
124 test 32, Other::PI == 3.141;
125
126 use constant E2BIG => $! = 7;
127 test 33, E2BIG == 7;
128 # This is something like "Arg list too long", but the actual message
129 # text may vary, so we can't test much better than this.
130 test 34, length(E2BIG) > 6;
131 test 35, index(E2BIG, " ") > 0;
132
133 test 36, @warnings == 0, join "\n", "unexpected warning", @warnings;
134 @warnings = ();         # just in case
135 undef &PI;
136 test 37, @warnings &&
137     ($warnings[0] =~ /Constant sub.* undefined/),
138     shift @warnings;
139
140 test 38, @warnings == 0, "unexpected warning";
141 test 39, $^W & 1, "Who disabled the warnings?";
142
143 use constant CSCALAR    => \"ok 40\n";
144 use constant CHASH      => { foo => "ok 41\n" };
145 use constant CARRAY     => [ undef, "ok 42\n" ];
146 use constant CPHASH     => [ { foo => 1 }, "ok 43\n" ];
147 use constant CCODE      => sub { "ok $_[0]\n" };
148
149 print ${+CSCALAR};
150 print CHASH->{foo};
151 print CARRAY->[1];
152 print CPHASH->{foo};
153 eval q{ CPHASH->{bar} };
154 test 44, scalar($@ =~ /^No such array/);
155 print CCODE->(45);
156 eval q{ CCODE->{foo} };
157 test 46, scalar($@ =~ /^Constant is not a HASH/);