oct and hex in glorious 64 bit (with less bugs) (was Re: hex and oct again (was Re...
[p5sagit/p5-mst-13.2.git] / t / op / runlevel.t
CommitLineData
1e422769 1#!./perl
2
3##
e336de0d 4## Many of these tests are originally from Michael Schroeder
1e422769 5## <Michael.Schroeder@informatik.uni-erlangen.de>
6e238990 6## Adapted and expanded by Gurusamy Sarathy <gsar@activestate.com>
1e422769 7##
8
9chdir 't' if -d 't';
20822f61 10@INC = '../lib';
9607fc9c 11$Is_VMS = $^O eq 'VMS';
3fe9a6f1 12$Is_MSWin32 = $^O eq 'MSWin32';
2986a63f 13$Is_NetWare = $^O eq 'NetWare';
9607fc9c 14$ENV{PERL5LIB} = "../lib" unless $Is_VMS;
1e422769 15
16$|=1;
17
18undef $/;
19@prgs = split "\n########\n", <DATA>;
20print "1..", scalar @prgs, "\n";
21
22$tmpfile = "runltmp000";
231 while -f ++$tmpfile;
9607fc9c 24END { if ($tmpfile) { 1 while unlink $tmpfile; } }
1e422769 25
26for (@prgs){
2c375eb9 27 my $switch = "";
9607fc9c 28 if (s/^\s*(-\w+)//){
29 $switch = $1;
1e422769 30 }
31 my($prog,$expected) = split(/\nEXPECT\n/, $_);
9607fc9c 32 open TEST, ">$tmpfile";
33 print TEST "$prog\n";
1e422769 34 close TEST;
9607fc9c 35 my $results = $Is_VMS ?
f0963acb 36 `MCR $^X "-I[-.lib]" $switch $tmpfile 2>&1` :
3fe9a6f1 37 $Is_MSWin32 ?
38 `.\\perl -I../lib $switch $tmpfile 2>&1` :
2986a63f 39 $Is_NetWare ?
40 `perl -I../lib $switch $tmpfile 2>&1` :
648cac19 41 `./perl $switch $tmpfile 2>&1`;
9607fc9c 42 my $status = $?;
1e422769 43 $results =~ s/\n+$//;
9607fc9c 44 # allow expected output to be written as if $prog is on STDIN
45 $results =~ s/runltmp\d+/-/g;
46 $results =~ s/\n%[A-Z]+-[SIWEF]-.*$// if $Is_VMS; # clip off DCL status msg
1e422769 47 $expected =~ s/\n+$//;
9607fc9c 48 if ($results ne $expected) {
1e422769 49 print STDERR "PROG: $switch\n$prog\n";
50 print STDERR "EXPECTED:\n$expected\n";
51 print STDERR "GOT:\n$results\n";
52 print "not ";
53 }
54 print "ok ", ++$i, "\n";
55}
56
1e422769 57__END__
58@a = (1, 2, 3);
59{
60 @a = sort { last ; } @a;
61}
62EXPECT
a651a37d 63Can't "last" outside a loop block at - line 3.
1e422769 64########
65package TEST;
66
67sub TIESCALAR {
68 my $foo;
69 return bless \$foo;
70}
71sub FETCH {
72 eval 'die("test")';
73 print "still in fetch\n";
74 return ">$@<";
75}
76package main;
77
78tie $bar, TEST;
79print "- $bar\n";
80EXPECT
81still in fetch
82- >test at (eval 1) line 1.
83<
84########
85package TEST;
86
87sub TIESCALAR {
88 my $foo;
89 eval('die("foo\n")');
90 print "after eval\n";
91 return bless \$foo;
92}
93sub FETCH {
94 return "ZZZ";
95}
96
97package main;
98
99tie $bar, TEST;
100print "- $bar\n";
101print "OK\n";
102EXPECT
103after eval
104- ZZZ
105OK
106########
107package TEST;
108
109sub TIEHANDLE {
110 my $foo;
111 return bless \$foo;
112}
113sub PRINT {
114print STDERR "PRINT CALLED\n";
115(split(/./, 'x'x10000))[0];
116eval('die("test\n")');
117}
118
119package main;
120
121open FH, ">&STDOUT";
122tie *FH, TEST;
123print FH "OK\n";
5aabfad6 124print STDERR "DONE\n";
1e422769 125EXPECT
126PRINT CALLED
127DONE
128########
129sub warnhook {
130 print "WARNHOOK\n";
131 eval('die("foooo\n")');
132}
133$SIG{'__WARN__'} = 'warnhook';
134warn("dfsds\n");
135print "END\n";
136EXPECT
137WARNHOOK
138END
139########
140package TEST;
141
142use overload
143 "\"\"" => \&str
144;
145
146sub str {
147 eval('die("test\n")');
148 return "STR";
149}
150
151package main;
152
153$bar = bless {}, TEST;
154print "$bar\n";
155print "OK\n";
156EXPECT
157STR
158OK
159########
160sub foo {
161 $a <=> $b unless eval('$a == 0 ? bless undef : ($a <=> $b)');
162}
163@a = (3, 2, 0, 1);
164@a = sort foo @a;
165print join(', ', @a)."\n";
166EXPECT
1670, 1, 2, 3
168########
169sub foo {
ca0b63a5 170 goto bar if $a == 0 || $b == 0;
1e422769 171 $a <=> $b;
172}
173@a = (3, 2, 0, 1);
174@a = sort foo @a;
175print join(', ', @a)."\n";
176exit;
177bar:
178print "bar reached\n";
179EXPECT
a651a37d 180Can't "goto" out of a pseudo block at - line 2.
e336de0d 181########
be7ddd5d 182%seen = ();
e336de0d 183sub sortfn {
184 (split(/./, 'x'x10000))[0];
185 my (@y) = ( 4, 6, 5);
186 @y = sort { $a <=> $b } @y;
be7ddd5d 187 my $t = "sortfn ".join(', ', @y)."\n";
188 print $t if ($seen{$t}++ == 0);
e336de0d 189 return $_[0] <=> $_[1];
190}
191@x = ( 3, 2, 1 );
192@x = sort { &sortfn($a, $b) } @x;
193print "---- ".join(', ', @x)."\n";
194EXPECT
195sortfn 4, 5, 6
196---- 1, 2, 3
197########
198@a = (3, 2, 1);
199@a = sort { eval('die("no way")') , $a <=> $b} @a;
200print join(", ", @a)."\n";
201EXPECT
2021, 2, 3
203########
204@a = (1, 2, 3);
205foo:
206{
207 @a = sort { last foo; } @a;
208}
209EXPECT
210Label not found for "last foo" at - line 2.
211########
212package TEST;
213
214sub TIESCALAR {
215 my $foo;
216 return bless \$foo;
217}
218sub FETCH {
219 next;
220 return "ZZZ";
221}
222sub STORE {
223}
224
225package main;
226
227tie $bar, TEST;
228{
229 print "- $bar\n";
230}
231print "OK\n";
232EXPECT
a651a37d 233Can't "next" outside a loop block at - line 8.
e336de0d 234########
235package TEST;
236
237sub TIESCALAR {
238 my $foo;
239 return bless \$foo;
240}
241sub FETCH {
242 goto bbb;
243 return "ZZZ";
244}
245
246package main;
247
248tie $bar, TEST;
249print "- $bar\n";
250exit;
251bbb:
252print "bbb\n";
253EXPECT
254Can't find label bbb at - line 8.
255########
256sub foo {
257 $a <=> $b unless eval('$a == 0 ? die("foo\n") : ($a <=> $b)');
258}
259@a = (3, 2, 0, 1);
260@a = sort foo @a;
261print join(', ', @a)."\n";
262EXPECT
2630, 1, 2, 3
264########
265package TEST;
266sub TIESCALAR {
267 my $foo;
268 return bless \$foo;
269}
270sub FETCH {
271 return "fetch";
272}
273sub STORE {
274(split(/./, 'x'x10000))[0];
275}
276package main;
277tie $bar, TEST;
278$bar = "x";
279########
280package TEST;
281sub TIESCALAR {
282 my $foo;
283 next;
284 return bless \$foo;
285}
286package main;
287{
288tie $bar, TEST;
289}
290EXPECT
a651a37d 291Can't "next" outside a loop block at - line 4.
e336de0d 292########
293@a = (1, 2, 3);
294foo:
295{
296 @a = sort { exit(0) } @a;
297}
298END { print "foobar\n" }
299EXPECT
300foobar
2c375eb9 301########
302$SIG{__DIE__} = sub {
303 print "In DIE\n";
304 $i = 0;
305 while (($p,$f,$l,$s) = caller(++$i)) {
306 print "$p|$f|$l|$s\n";
307 }
308};
309eval { die };
310&{sub { eval 'die' }}();
311sub foo { eval { die } } foo();
312EXPECT
313In DIE
314main|-|8|(eval)
315In DIE
316main|-|9|(eval)
317main|-|9|main::__ANON__
318In DIE
319main|-|10|(eval)
320main|-|10|main::foo
be4f712a 321########
322package TEST;
323
324sub TIEARRAY {
325 return bless [qw(foo fee fie foe)], $_[0];
326}
327sub FETCH {
328 my ($s,$i) = @_;
329 if ($i) {
330 goto bbb;
331 }
332bbb:
333 return $s->[$i];
334}
335
336package main;
337tie my @bar, 'TEST';
338print join('|', @bar[0..3]), "\n";
339EXPECT
340foo|fee|fie|foe
0cdb2077 341########
342package TH;
343sub TIEHASH { bless {}, TH }
344sub STORE { eval { print "@_[1,2]\n" }; die "bar\n" }
345tie %h, TH;
346eval { $h{A} = 1; print "never\n"; };
347print $@;
348eval { $h{B} = 2; };
349print $@;
350EXPECT
351A 1
352bar
353B 2
354bar
ecf8e9dd 355########
356sub n { 0 }
357sub f { my $x = shift; d(); }
358f(n());
359f();
360
361sub d {
362 my $i = 0; my @a;
363 while (do { { package DB; @a = caller($i++) } } ) {
364 @a = @DB::args;
365 for (@a) { print "$_\n"; $_ = '' }
366 }
367}
368EXPECT
3690