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