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