Loading warnings.pm now loads attributes.pm that loads strict.pm.
[p5sagit/p5-mst-13.2.git] / ext / B / t / bytecode.t
1 #!./perl
2 my $keep_plc      = 0;  # set it to keep the bytecode files
3 my $keep_plc_fail = 1;  # set it to keep the bytecode files on failures
4
5 BEGIN {
6     if ($^O eq 'VMS') {
7        print "1..0 # skip - Bytecode/ByteLoader doesn't work on VMS\n";
8        exit 0;
9     }
10     chdir 't' if -d 't';
11     @INC = qw(../lib);
12     use Config;
13     if ($Config{ccflags} =~ /-DPERL_COPY_ON_WRITE/) {
14         print "1..0 # skip - no COW for now\n";
15         exit 0;
16     }
17     require './test.pl'; # for run_perl()
18 }
19 use strict;
20
21 undef $/;
22 my @tests = split /\n###+\n/, <DATA>;
23
24 print "1..".($#tests+1)."\n";
25
26 my $cnt = 1;
27 my $test;
28
29 for (@tests) {
30     my $got;
31     my ($script, $expect) = split />>>+\n/;
32     $expect =~ s/\n$//;
33     $test = "bytecode$cnt.pl";
34     open T, ">$test"; print T $script; close T;
35     $got = run_perl(switches => [ "-MO=Bytecode,-H,-o${test}c" ],
36                     verbose  => 0, # for debugging
37                     stderr   => 1, # to capture the "bytecode.pl syntax ok"
38                     progfile => $test);
39     unless ($?) {
40         $got = run_perl(progfile => "${test}c"); # run the .plc
41         unless ($?) {
42             if ($got =~ /^$expect$/) {
43                 print "ok $cnt\n";
44                 next;
45             } else {
46                 $keep_plc = $keep_plc_fail unless $keep_plc;
47                 print <<"EOT"; next;
48 not ok $cnt
49 --------- SCRIPT
50 $script
51 --------- GOT
52 $got
53 --------- EXPECT
54 $expect
55 ----------------
56
57 EOT
58             }
59         }
60     }
61     print <<"EOT";
62 --------- SCRIPT
63 $script
64 --------- $?
65 $got
66 EOT
67 } continue {
68     1 while unlink($test, $keep_plc ? () : "${test}c");
69     $cnt++;
70 }
71
72 __DATA__
73
74 print 'hi'
75 >>>>
76 hi
77 ############################################################
78 for (1,2,3) { print if /\d/ }
79 >>>>
80 123
81 ############################################################
82 $_ = "xyxyx"; %j=(1,2); s/x/$j{print('z')}/ge; print $_
83 >>>>
84 zzz2y2y2
85 ############################################################
86 $_ = "xyxyx"; %j=(1,2); s/x/$j{print('z')}/g; print $_
87 >>>>
88 z2y2y2
89 ############################################################
90 split /a/,"bananarama"; print @_
91 >>>>
92 bnnrm
93 ############################################################
94 { package P; sub x { print 'ya' } x }
95 >>>>
96 ya
97 ############################################################
98 @z = split /:/,"b:r:n:f:g"; print @z
99 >>>>
100 brnfg
101 ############################################################
102 sub AUTOLOAD { print 1 } &{"a"}()
103 >>>>
104 1
105 ############################################################
106 my $l = 3; $x = sub { print $l }; &$x
107 >>>>
108 3
109 ############################################################
110 my $i = 1;
111 my $foo = sub {$i = shift if @_};
112 &$foo(3);
113 ############################################################
114 $x="Cannot use"; print index $x, "Can"
115 >>>>
116 0
117 ############################################################
118 my $i=6; eval "print \$i\n"
119 >>>>
120 6
121 ############################################################
122 BEGIN { %h=(1=>2,3=>4) } print $h{3}
123 >>>>
124 4
125 ############################################################
126 open our $T,"a"
127 ############################################################
128 print <DATA>
129 __DATA__
130 a
131 b
132 >>>>
133 a
134 b
135 ############################################################
136 BEGIN { tie @a, __PACKAGE__; sub TIEARRAY { bless{} } sub FETCH { 1 } }
137 print $a[1]
138 >>>>
139 1
140 ############################################################
141 my $i=3; print 1 .. $i
142 >>>>
143 123
144 ############################################################
145 my $h = { a=>3, b=>1 }; print sort {$h->{$a} <=> $h->{$b}} keys %$h
146 >>>>
147 ba
148 ############################################################
149 print sort { my $p; $b <=> $a } 1,4,3
150 >>>>
151 431