Windows issues with select() are already documented in perlport.
[p5sagit/p5-mst-13.2.git] / ext / B / t / optree_sort.t
CommitLineData
724aa791 1#!perl
2
3BEGIN {
4 chdir 't';
5 @INC = ('../lib', '../ext/B/t');
6 require './test.pl';
7}
8use OptreeCheck;
9
10plan tests => 11;
11
12pass("SORT OPTIMIZATION");
13
14checkOptree ( 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
24EOT_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
31EONT_EONT
32
33checkOptree ( name => 'sort @a',
34 prog => 'sort @a',
35 bcopts => '-exec',
36 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
371 <0> enter
382 <;> nextstate(main 1 -e:1) v
393 <0> pushmark s
404 <#> gv[*a] s
415 <1> rv2av[t2] lK/1
426 <@> sort vK
437 <@> leave[1 ref] vKP/REFC
44EOT_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
52EONT_EONT
53
54checkOptree ( name => 'sub {@a = sort @a}',
55 code => sub {@a = sort @a},
56 bcopts => '-exec',
57 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
58 goto -
591 <;> nextstate(main -438 optree.t:244) v
602 <0> pushmark s
613 <0> pushmark s
624 <#> gv[*a] s
635 <1> rv2av[t2] lK/1
646 <@> sort lK
657 <0> pushmark s
668 <#> gv[*a] s
679 <1> rv2av[t2] lKRM*/1
68a <2> aassign[t\d+] KS/COMMON
69b <1> leavesub[1 ref] K/REFC,1
70EOT_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
82EONT_EONT
83
84checkOptree ( name => '@a = sort @a',
85 prog => '@a = sort @a',
86 bcopts => '-exec',
87 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
881 <0> enter
892 <;> nextstate(main 1 -e:1) v
903 <0> pushmark s
914 <0> pushmark s
925 <#> gv[*a] s
936 <1> rv2av[t4] lKRM*/1
947 <@> sort lK/INPLACE
958 <@> leave[1 ref] vKP/REFC
96EOT_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
105EONT_EONT
106
107checkOptree ( 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 -
1121 <;> nextstate(main -438 optree.t:286) v
1132 <0> pushmark s
1143 <0> pushmark s
1154 <#> gv[*a] s
1165 <1> rv2av[t4] lKRM*/1
1176 <@> sort lK/INPLACE
1187 <;> nextstate(main -438 optree.t:288) v
1198 <0> pushmark s
1209 <#> gv[*a] s
121a <1> rv2av[t7] lK/1
122b <@> reverse[t8] K/1
123c <1> leavesub[1 ref] K/REFC,1
124EOT_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
137EONT_EONT
138
139checkOptree ( name => '@a = sort @a; reverse @a',
140 prog => '@a = sort @a; reverse @a',
141 bcopts => '-exec',
142 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1431 <0> enter
1442 <;> nextstate(main 1 -e:1) v
1453 <0> pushmark s
1464 <0> pushmark s
1475 <#> gv[*a] s
1486 <1> rv2av[t4] lKRM*/1
1497 <@> sort lK/INPLACE
1508 <;> nextstate(main 1 -e:1) v
1519 <0> pushmark s
152a <#> gv[*a] s
153b <1> rv2av[t7] lK/1
154c <@> reverse[t8] vK/1
155d <@> leave[1 ref] vKP/REFC
156EOT_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
170EONT_EONT
171
172checkOptree ( 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 -
1771 <;> nextstate(main -437 optree.t:254) v
1782 <0> padav[@a:-437,-436] vM/LVINTRO
1793 <;> nextstate(main -436 optree.t:256) v
1804 <0> pushmark s
1815 <0> pushmark s
1826 <0> padav[@a:-437,-436] l
1837 <@> sort lK
1848 <0> pushmark s
1859 <0> padav[@a:-437,-436] lRM*
186a <2> aassign[t\d+] KS/COMMON
187b <1> leavesub[1 ref] K/REFC,1
188EOT_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
200EONT_EONT
201
202checkOptree ( name => 'my @a; @a = sort @a',
203 prog => 'my @a; @a = sort @a',
204 bcopts => '-exec',
205 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2061 <0> enter
2072 <;> nextstate(main 1 -e:1) v
2083 <0> padav[@a:1,2] vM/LVINTRO
2094 <;> nextstate(main 2 -e:1) v
2105 <0> pushmark s
2116 <0> pushmark s
2127 <0> padav[@a:1,2] lRM*
2138 <@> sort lK/INPLACE
2149 <@> leave[1 ref] vKP/REFC
215EOT_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
225EONT_EONT
226
227checkOptree ( 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 -
2331 <;> nextstate(main -437 optree.t:325) v
2342 <0> padav[@a:-437,-436] vM/LVINTRO
2353 <;> nextstate(main -436 optree.t:325) v
2364 <0> pushmark s
2375 <0> pushmark s
2386 <0> padav[@a:-437,-436] lRM*
2397 <@> sort lK/INPLACE
2408 <;> nextstate(main -436 optree.t:325) v
2419 <0> pushmark s
242a <0> padav[@a:-437,-436] lRM
243b <$> const[IV 1] s
244c <@> push[t3] sK/2
245d <1> leavesub[1 ref] K/REFC,1
246EOT_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
260EONT_EONT
261
262checkOptree ( 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 -
2681 <;> nextstate(main -437 optree.t:325) v
2692 <0> padav[@a:-437,-436] vM/LVINTRO
2703 <;> nextstate(main -436 optree.t:325) v
2714 <0> pushmark s
2725 <0> pushmark s
2736 <0> padav[@a:-437,-436] lRM*
2747 <@> sort lK/INPLACE
2758 <;> nextstate(main -436 optree.t:346) v
2769 <$> const[IV 1] s
277a <1> leavesub[1 ref] K/REFC,1
278EOT_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
289EONT_EONT
290
291
292__END__
293