Cleanup ext/B tests for -w and to run separately
[p5sagit/p5-mst-13.2.git] / ext / B / t / optree_sort.t
1 #!perl
2
3 BEGIN {
4     if ($ENV{PERL_CORE}){
5         chdir('t') if -d 't';
6         @INC = ('.', '../lib', '../ext/B/t');
7     } else {
8         unshift @INC, 't';
9         push @INC, "../../t";
10     }
11     require Config;
12     if (($Config::Config{'extensions'} !~ /\bB\b/) ){
13         print "1..0 # Skip -- Perl configured without B module\n";
14         exit 0;
15     }
16     if ($Config::Config{'extensions'} !~ /\bData\/Dumper\b/) {
17         print
18             "1..0 # Skip: Data::Dumper was not built, needed by OptreeCheck\n";
19         exit 0;
20     }
21     require 'test.pl';
22 }
23 use OptreeCheck;
24 use Config;
25 plan tests => 11;
26
27 SKIP: {
28 skip "no perlio in this build", 11 unless $Config::Config{useperlio};
29
30 pass("SORT OPTIMIZATION");
31
32 checkOptree ( name      => 'sub {sort @a}',
33               code      => sub {sort @a},
34               bcopts    => '-exec',
35               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
36 # 1  <;> nextstate(main 424 optree_sort.t:14) v
37 # 2  <0> pushmark s
38 # 3  <#> gv[*a] s
39 # 4  <1> rv2av[t2] lK/1
40 # 5  <@> sort K
41 # 6  <1> leavesub[1 ref] K/REFC,1
42 EOT_EOT
43 # 1  <;> nextstate(main 424 optree_sort.t:14) v
44 # 2  <0> pushmark s
45 # 3  <$> gv(*a) s
46 # 4  <1> rv2av[t1] lK/1
47 # 5  <@> sort K
48 # 6  <1> leavesub[1 ref] K/REFC,1
49 EONT_EONT
50
51 checkOptree ( name      => 'sort @a',
52               prog      => 'sort @a',
53               bcopts    => '-exec',
54               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
55 1  <0> enter 
56 2  <;> nextstate(main 1 -e:1) v
57 3  <0> pushmark s
58 4  <#> gv[*a] s
59 5  <1> rv2av[t2] lK/1
60 6  <@> sort vK
61 7  <@> leave[1 ref] vKP/REFC
62 EOT_EOT
63 # 1  <0> enter 
64 # 2  <;> nextstate(main 1 -e:1) v
65 # 3  <0> pushmark s
66 # 4  <$> gv(*a) s
67 # 5  <1> rv2av[t1] lK/1
68 # 6  <@> sort vK
69 # 7  <@> leave[1 ref] vKP/REFC
70 EONT_EONT
71
72 checkOptree ( name      => 'sub {@a = sort @a}',
73               code      => sub {@a = sort @a},
74               bcopts    => '-exec',
75               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
76 1  <;> nextstate(main -438 optree.t:244) v
77 2  <0> pushmark s
78 3  <0> pushmark s
79 4  <#> gv[*a] s
80 5  <1> rv2av[t4] lK/1
81 6  <@> sort lK
82 7  <0> pushmark s
83 8  <#> gv[*a] s
84 9  <1> rv2av[t2] lKRM*/1
85 a  <2> aassign[t\d+] KS/COMMON
86 b  <1> leavesub[1 ref] K/REFC,1
87 EOT_EOT
88 # 1  <;> nextstate(main 65 optree.t:311) v
89 # 2  <0> pushmark s
90 # 3  <0> pushmark s
91 # 4  <$> gv(*a) s
92 # 5  <1> rv2av[t2] lK/1
93 # 6  <@> sort lK
94 # 7  <0> pushmark s
95 # 8  <$> gv(*a) s
96 # 9  <1> rv2av[t1] lKRM*/1
97 # a  <2> aassign[t3] KS/COMMON
98 # b  <1> leavesub[1 ref] K/REFC,1
99 EONT_EONT
100
101 checkOptree ( name      => '@a = sort @a',
102               prog      => '@a = sort @a',
103               bcopts    => '-exec',
104               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
105 1  <0> enter 
106 2  <;> nextstate(main 1 -e:1) v
107 3  <0> pushmark s
108 4  <0> pushmark s
109 5  <#> gv[*a] s
110 6  <1> rv2av[t4] lKRM*/1
111 7  <@> sort lK/INPLACE
112 8  <@> leave[1 ref] vKP/REFC
113 EOT_EOT
114 # 1  <0> enter 
115 # 2  <;> nextstate(main 1 -e:1) v
116 # 3  <0> pushmark s
117 # 4  <0> pushmark s
118 # 5  <$> gv(*a) s
119 # 6  <1> rv2av[t2] lKRM*/1
120 # 7  <@> sort lK/INPLACE
121 # 8  <@> leave[1 ref] vKP/REFC
122 EONT_EONT
123
124 checkOptree ( name      => 'sub {@a = sort @a; reverse @a}',
125               code      => sub {@a = sort @a; reverse @a},
126               bcopts    => '-exec',
127               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
128 1  <;> nextstate(main -438 optree.t:286) v
129 2  <0> pushmark s
130 3  <0> pushmark s
131 4  <#> gv[*a] s
132 5  <1> rv2av[t4] lKRM*/1
133 6  <@> sort lK/INPLACE
134 7  <;> nextstate(main -438 optree.t:288) v
135 8  <0> pushmark s
136 9  <#> gv[*a] s
137 a  <1> rv2av[t7] lK/1
138 b  <@> reverse[t8] K/1
139 c  <1> leavesub[1 ref] K/REFC,1
140 EOT_EOT
141 # 1  <;> nextstate(main 66 optree.t:345) v
142 # 2  <0> pushmark s
143 # 3  <0> pushmark s
144 # 4  <$> gv(*a) s
145 # 5  <1> rv2av[t2] lKRM*/1
146 # 6  <@> sort lK/INPLACE
147 # 7  <;> nextstate(main 66 optree.t:346) v
148 # 8  <0> pushmark s
149 # 9  <$> gv(*a) s
150 # a  <1> rv2av[t4] lK/1
151 # b  <@> reverse[t5] K/1
152 # c  <1> leavesub[1 ref] K/REFC,1
153 EONT_EONT
154
155 checkOptree ( name      => '@a = sort @a; reverse @a',
156               prog      => '@a = sort @a; reverse @a',
157               bcopts    => '-exec',
158               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
159 1  <0> enter 
160 2  <;> nextstate(main 1 -e:1) v
161 3  <0> pushmark s
162 4  <0> pushmark s
163 5  <#> gv[*a] s
164 6  <1> rv2av[t4] lKRM*/1
165 7  <@> sort lK/INPLACE
166 8  <;> nextstate(main 1 -e:1) v
167 9  <0> pushmark s
168 a  <#> gv[*a] s
169 b  <1> rv2av[t7] lK/1
170 c  <@> reverse[t8] vK/1
171 d  <@> leave[1 ref] vKP/REFC
172 EOT_EOT
173 # 1  <0> enter 
174 # 2  <;> nextstate(main 1 -e:1) v
175 # 3  <0> pushmark s
176 # 4  <0> pushmark s
177 # 5  <$> gv(*a) s
178 # 6  <1> rv2av[t2] lKRM*/1
179 # 7  <@> sort lK/INPLACE
180 # 8  <;> nextstate(main 1 -e:1) v
181 # 9  <0> pushmark s
182 # a  <$> gv(*a) s
183 # b  <1> rv2av[t4] lK/1
184 # c  <@> reverse[t5] vK/1
185 # d  <@> leave[1 ref] vKP/REFC
186 EONT_EONT
187
188 checkOptree ( name      => 'sub {my @a; @a = sort @a}',
189               code      => sub {my @a; @a = sort @a},
190               bcopts    => '-exec',
191               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
192 1  <;> nextstate(main -437 optree.t:254) v
193 2  <0> padav[@a:-437,-436] vM/LVINTRO
194 3  <;> nextstate(main -436 optree.t:256) v
195 4  <0> pushmark s
196 5  <0> pushmark s
197 6  <0> padav[@a:-437,-436] l
198 7  <@> sort lK
199 8  <0> pushmark s
200 9  <0> padav[@a:-437,-436] lRM*
201 a  <2> aassign[t\d+] KS/COMMON
202 b  <1> leavesub[1 ref] K/REFC,1
203 EOT_EOT
204 # 1  <;> nextstate(main 427 optree_sort.t:172) v
205 # 2  <0> padav[@a:427,428] vM/LVINTRO
206 # 3  <;> nextstate(main 428 optree_sort.t:173) v
207 # 4  <0> pushmark s
208 # 5  <0> pushmark s
209 # 6  <0> padav[@a:427,428] l
210 # 7  <@> sort lK
211 # 8  <0> pushmark s
212 # 9  <0> padav[@a:427,428] lRM*
213 # a  <2> aassign[t2] KS/COMMON
214 # b  <1> leavesub[1 ref] K/REFC,1
215 EONT_EONT
216
217 checkOptree ( name      => 'my @a; @a = sort @a',
218               prog      => 'my @a; @a = sort @a',
219               bcopts    => '-exec',
220               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
221 1  <0> enter 
222 2  <;> nextstate(main 1 -e:1) v
223 3  <0> padav[@a:1,2] vM/LVINTRO
224 4  <;> nextstate(main 2 -e:1) v
225 5  <0> pushmark s
226 6  <0> pushmark s
227 7  <0> padav[@a:1,2] lRM*
228 8  <@> sort lK/INPLACE
229 9  <@> leave[1 ref] vKP/REFC
230 EOT_EOT
231 # 1  <0> enter 
232 # 2  <;> nextstate(main 1 -e:1) v
233 # 3  <0> padav[@a:1,2] vM/LVINTRO
234 # 4  <;> nextstate(main 2 -e:1) v
235 # 5  <0> pushmark s
236 # 6  <0> pushmark s
237 # 7  <0> padav[@a:1,2] lRM*
238 # 8  <@> sort lK/INPLACE
239 # 9  <@> leave[1 ref] vKP/REFC
240 EONT_EONT
241
242 checkOptree ( name      => 'sub {my @a; @a = sort @a; push @a, 1}',
243               code      => sub {my @a; @a = sort @a; push @a, 1},
244               bcopts    => '-exec',
245               debug     => 0,
246               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
247 1  <;> nextstate(main -437 optree.t:325) v
248 2  <0> padav[@a:-437,-436] vM/LVINTRO
249 3  <;> nextstate(main -436 optree.t:325) v
250 4  <0> pushmark s
251 5  <0> pushmark s
252 6  <0> padav[@a:-437,-436] lRM*
253 7  <@> sort lK/INPLACE
254 8  <;> nextstate(main -436 optree.t:325) v
255 9  <0> pushmark s
256 a  <0> padav[@a:-437,-436] lRM
257 b  <$> const[IV 1] s
258 c  <@> push[t3] sK/2
259 d  <1> leavesub[1 ref] K/REFC,1
260 EOT_EOT
261 # 1  <;> nextstate(main 429 optree_sort.t:219) v
262 # 2  <0> padav[@a:429,430] vM/LVINTRO
263 # 3  <;> nextstate(main 430 optree_sort.t:220) v
264 # 4  <0> pushmark s
265 # 5  <0> pushmark s
266 # 6  <0> padav[@a:429,430] lRM*
267 # 7  <@> sort lK/INPLACE
268 # 8  <;> nextstate(main 430 optree_sort.t:220) v
269 # 9  <0> pushmark s
270 # a  <0> padav[@a:429,430] lRM
271 # b  <$> const(IV 1) s
272 # c  <@> push[t3] sK/2
273 # d  <1> leavesub[1 ref] K/REFC,1
274 EONT_EONT
275
276 checkOptree ( name      => 'sub {my @a; @a = sort @a; 1}',
277               code      => sub {my @a; @a = sort @a; 1},
278               bcopts    => '-exec',
279               debug     => 0,
280               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
281 1  <;> nextstate(main -437 optree.t:325) v
282 2  <0> padav[@a:-437,-436] vM/LVINTRO
283 3  <;> nextstate(main -436 optree.t:325) v
284 4  <0> pushmark s
285 5  <0> pushmark s
286 6  <0> padav[@a:-437,-436] lRM*
287 7  <@> sort lK/INPLACE
288 8  <;> nextstate(main -436 optree.t:346) v
289 9  <$> const[IV 1] s
290 a  <1> leavesub[1 ref] K/REFC,1
291 EOT_EOT
292 # 1  <;> nextstate(main 431 optree_sort.t:250) v
293 # 2  <0> padav[@a:431,432] vM/LVINTRO
294 # 3  <;> nextstate(main 432 optree_sort.t:251) v
295 # 4  <0> pushmark s
296 # 5  <0> pushmark s
297 # 6  <0> padav[@a:431,432] lRM*
298 # 7  <@> sort lK/INPLACE
299 # 8  <;> nextstate(main 432 optree_sort.t:251) v
300 # 9  <$> const(IV 1) s
301 # a  <1> leavesub[1 ref] K/REFC,1
302 EONT_EONT
303
304 } #skip
305
306 __END__
307