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