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