Upgrade to Win32API-File 0.1101
[p5sagit/p5-mst-13.2.git] / ext / B / t / optree_sort.t
CommitLineData
724aa791 1#!perl
2
3BEGIN {
5638aaac 4 if ($ENV{PERL_CORE}){
5 chdir('t') if -d 't';
6 @INC = ('.', '../lib', '../ext/B/t');
7 } else {
8 unshift @INC, 't';
9 push @INC, "../../t";
10 }
9cd8f857 11 require Config;
12 if (($Config::Config{'extensions'} !~ /\bB\b/) ){
13 print "1..0 # Skip -- Perl configured without B module\n";
14 exit 0;
15 }
19e169bf 16 # require 'test.pl'; # now done by OptreeCheck
724aa791 17}
18use OptreeCheck;
2ce64696 19use Config;
724aa791 20plan tests => 11;
21
2ce64696 22SKIP: {
23skip "no perlio in this build", 11 unless $Config::Config{useperlio};
24
724aa791 25pass("SORT OPTIMIZATION");
26
27checkOptree ( name => 'sub {sort @a}',
28 code => sub {sort @a},
29 bcopts => '-exec',
be2b1c74 30 strip_open_hints => 1,
724aa791 31 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 32# 1 <;> nextstate(main 424 optree_sort.t:14) v:>,<,%
724aa791 33# 2 <0> pushmark s
cc02ea56 34# 3 <#> gv[*a] s
35# 4 <1> rv2av[t2] lK/1
724aa791 36# 5 <@> sort K
37# 6 <1> leavesub[1 ref] K/REFC,1
38EOT_EOT
be2b1c74 39# 1 <;> nextstate(main 424 optree_sort.t:14) v:>,<,%
724aa791 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
45EONT_EONT
46
19e169bf 47checkOptree ( name => 'sort @a',
48 prog => 'sort @a',
49 errs => [ 'Useless use of sort in void context at -e line 1.',
50 'Name "main::a" used only once: possible typo at -e line 1.',
51 ],
52 bcopts => '-exec',
be2b1c74 53 strip_open_hints => 1,
19e169bf 54 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 551 <0> enter
be2b1c74 562 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791 573 <0> pushmark s
584 <#> gv[*a] s
595 <1> rv2av[t2] lK/1
606 <@> sort vK
617 <@> leave[1 ref] vKP/REFC
62EOT_EOT
63# 1 <0> enter
be2b1c74 64# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791 65# 3 <0> pushmark s
66# 4 <$> gv(*a) s
67# 5 <1> rv2av[t1] lK/1
68# 6 <@> sort vK
69# 7 <@> leave[1 ref] vKP/REFC
70EONT_EONT
71
72checkOptree ( name => 'sub {@a = sort @a}',
73 code => sub {@a = sort @a},
74 bcopts => '-exec',
be2b1c74 75 strip_open_hints => 1,
724aa791 76 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 771 <;> nextstate(main -438 optree.t:244) v:>,<,%
724aa791 782 <0> pushmark s
793 <0> pushmark s
804 <#> gv[*a] s
cc02ea56 815 <1> rv2av[t4] lK/1
724aa791 826 <@> sort lK
837 <0> pushmark s
848 <#> gv[*a] s
859 <1> rv2av[t2] lKRM*/1
19e169bf 86a <2> aassign[t5] KS/COMMON
724aa791 87b <1> leavesub[1 ref] K/REFC,1
88EOT_EOT
be2b1c74 89# 1 <;> nextstate(main 65 optree.t:311) v:>,<,%
724aa791 90# 2 <0> pushmark s
91# 3 <0> pushmark s
92# 4 <$> gv(*a) s
93# 5 <1> rv2av[t2] lK/1
94# 6 <@> sort lK
95# 7 <0> pushmark s
96# 8 <$> gv(*a) s
97# 9 <1> rv2av[t1] lKRM*/1
98# a <2> aassign[t3] KS/COMMON
99# b <1> leavesub[1 ref] K/REFC,1
100EONT_EONT
101
102checkOptree ( name => '@a = sort @a',
103 prog => '@a = sort @a',
104 bcopts => '-exec',
be2b1c74 105 strip_open_hints => 1,
724aa791 106 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1071 <0> enter
be2b1c74 1082 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791 1093 <0> pushmark s
1104 <0> pushmark s
1115 <#> gv[*a] s
1126 <1> rv2av[t4] lKRM*/1
1137 <@> sort lK/INPLACE
1148 <@> leave[1 ref] vKP/REFC
115EOT_EOT
116# 1 <0> enter
be2b1c74 117# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791 118# 3 <0> pushmark s
119# 4 <0> pushmark s
120# 5 <$> gv(*a) s
121# 6 <1> rv2av[t2] lKRM*/1
122# 7 <@> sort lK/INPLACE
123# 8 <@> leave[1 ref] vKP/REFC
124EONT_EONT
125
126checkOptree ( name => 'sub {@a = sort @a; reverse @a}',
127 code => sub {@a = sort @a; reverse @a},
128 bcopts => '-exec',
be2b1c74 129 strip_open_hints => 1,
724aa791 130 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 1311 <;> nextstate(main -438 optree.t:286) v:>,<,%
724aa791 1322 <0> pushmark s
1333 <0> pushmark s
1344 <#> gv[*a] s
1355 <1> rv2av[t4] lKRM*/1
1366 <@> sort lK/INPLACE
be2b1c74 1377 <;> nextstate(main -438 optree.t:288) v:>,<,%
724aa791 1388 <0> pushmark s
1399 <#> gv[*a] s
140a <1> rv2av[t7] lK/1
141b <@> reverse[t8] K/1
142c <1> leavesub[1 ref] K/REFC,1
143EOT_EOT
be2b1c74 144# 1 <;> nextstate(main 66 optree.t:345) v:>,<,%
724aa791 145# 2 <0> pushmark s
146# 3 <0> pushmark s
147# 4 <$> gv(*a) s
148# 5 <1> rv2av[t2] lKRM*/1
149# 6 <@> sort lK/INPLACE
be2b1c74 150# 7 <;> nextstate(main 66 optree.t:346) v:>,<,%
724aa791 151# 8 <0> pushmark s
152# 9 <$> gv(*a) s
153# a <1> rv2av[t4] lK/1
154# b <@> reverse[t5] K/1
155# c <1> leavesub[1 ref] K/REFC,1
156EONT_EONT
157
158checkOptree ( name => '@a = sort @a; reverse @a',
159 prog => '@a = sort @a; reverse @a',
19e169bf 160 errs => ['Useless use of reverse in void context at -e line 1.'],
724aa791 161 bcopts => '-exec',
be2b1c74 162 strip_open_hints => 1,
724aa791 163 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1641 <0> enter
be2b1c74 1652 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791 1663 <0> pushmark s
1674 <0> pushmark s
1685 <#> gv[*a] s
1696 <1> rv2av[t4] lKRM*/1
1707 <@> sort lK/INPLACE
be2b1c74 1718 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791 1729 <0> pushmark s
173a <#> gv[*a] s
174b <1> rv2av[t7] lK/1
175c <@> reverse[t8] vK/1
176d <@> leave[1 ref] vKP/REFC
177EOT_EOT
178# 1 <0> enter
be2b1c74 179# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791 180# 3 <0> pushmark s
181# 4 <0> pushmark s
182# 5 <$> gv(*a) s
183# 6 <1> rv2av[t2] lKRM*/1
184# 7 <@> sort lK/INPLACE
be2b1c74 185# 8 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791 186# 9 <0> pushmark s
187# a <$> gv(*a) s
188# b <1> rv2av[t4] lK/1
189# c <@> reverse[t5] vK/1
190# d <@> leave[1 ref] vKP/REFC
191EONT_EONT
192
193checkOptree ( name => 'sub {my @a; @a = sort @a}',
194 code => sub {my @a; @a = sort @a},
195 bcopts => '-exec',
be2b1c74 196 strip_open_hints => 1,
724aa791 197 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 1981 <;> nextstate(main -437 optree.t:254) v:>,<,%
724aa791 1992 <0> padav[@a:-437,-436] vM/LVINTRO
be2b1c74 2003 <;> nextstate(main -436 optree.t:256) v:>,<,%
724aa791 2014 <0> pushmark s
2025 <0> pushmark s
2036 <0> padav[@a:-437,-436] l
2047 <@> sort lK
2058 <0> pushmark s
2069 <0> padav[@a:-437,-436] lRM*
19e169bf 207a <2> aassign[t2] KS/COMMON
724aa791 208b <1> leavesub[1 ref] K/REFC,1
209EOT_EOT
be2b1c74 210# 1 <;> nextstate(main 427 optree_sort.t:172) v:>,<,%
724aa791 211# 2 <0> padav[@a:427,428] vM/LVINTRO
be2b1c74 212# 3 <;> nextstate(main 428 optree_sort.t:173) v:>,<,%
724aa791 213# 4 <0> pushmark s
214# 5 <0> pushmark s
215# 6 <0> padav[@a:427,428] l
216# 7 <@> sort lK
217# 8 <0> pushmark s
218# 9 <0> padav[@a:427,428] lRM*
219# a <2> aassign[t2] KS/COMMON
220# b <1> leavesub[1 ref] K/REFC,1
221EONT_EONT
222
223checkOptree ( name => 'my @a; @a = sort @a',
224 prog => 'my @a; @a = sort @a',
225 bcopts => '-exec',
be2b1c74 226 strip_open_hints => 1,
724aa791 227 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2281 <0> enter
be2b1c74 2292 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791 2303 <0> padav[@a:1,2] vM/LVINTRO
be2b1c74 2314 <;> nextstate(main 2 -e:1) v:>,<,%,{
724aa791 2325 <0> pushmark s
2336 <0> pushmark s
2347 <0> padav[@a:1,2] lRM*
2358 <@> sort lK/INPLACE
2369 <@> leave[1 ref] vKP/REFC
237EOT_EOT
238# 1 <0> enter
be2b1c74 239# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791 240# 3 <0> padav[@a:1,2] vM/LVINTRO
be2b1c74 241# 4 <;> nextstate(main 2 -e:1) v:>,<,%,{
724aa791 242# 5 <0> pushmark s
243# 6 <0> pushmark s
244# 7 <0> padav[@a:1,2] lRM*
245# 8 <@> sort lK/INPLACE
246# 9 <@> leave[1 ref] vKP/REFC
247EONT_EONT
248
249checkOptree ( name => 'sub {my @a; @a = sort @a; push @a, 1}',
250 code => sub {my @a; @a = sort @a; push @a, 1},
251 bcopts => '-exec',
252 debug => 0,
be2b1c74 253 strip_open_hints => 1,
724aa791 254 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 2551 <;> nextstate(main -437 optree.t:325) v:>,<,%
724aa791 2562 <0> padav[@a:-437,-436] vM/LVINTRO
be2b1c74 2573 <;> nextstate(main -436 optree.t:325) v:>,<,%
724aa791 2584 <0> pushmark s
2595 <0> pushmark s
2606 <0> padav[@a:-437,-436] lRM*
2617 <@> sort lK/INPLACE
be2b1c74 2628 <;> nextstate(main -436 optree.t:325) v:>,<,%,{
724aa791 2639 <0> pushmark s
264a <0> padav[@a:-437,-436] lRM
265b <$> const[IV 1] s
266c <@> push[t3] sK/2
267d <1> leavesub[1 ref] K/REFC,1
268EOT_EOT
be2b1c74 269# 1 <;> nextstate(main 429 optree_sort.t:219) v:>,<,%
724aa791 270# 2 <0> padav[@a:429,430] vM/LVINTRO
be2b1c74 271# 3 <;> nextstate(main 430 optree_sort.t:220) v:>,<,%
724aa791 272# 4 <0> pushmark s
273# 5 <0> pushmark s
274# 6 <0> padav[@a:429,430] lRM*
275# 7 <@> sort lK/INPLACE
be2b1c74 276# 8 <;> nextstate(main 430 optree_sort.t:220) v:>,<,%,{
724aa791 277# 9 <0> pushmark s
278# a <0> padav[@a:429,430] lRM
279# b <$> const(IV 1) s
280# c <@> push[t3] sK/2
281# d <1> leavesub[1 ref] K/REFC,1
282EONT_EONT
283
284checkOptree ( name => 'sub {my @a; @a = sort @a; 1}',
285 code => sub {my @a; @a = sort @a; 1},
286 bcopts => '-exec',
287 debug => 0,
be2b1c74 288 strip_open_hints => 1,
724aa791 289 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 2901 <;> nextstate(main -437 optree.t:325) v:>,<,%
724aa791 2912 <0> padav[@a:-437,-436] vM/LVINTRO
be2b1c74 2923 <;> nextstate(main -436 optree.t:325) v:>,<,%
724aa791 2934 <0> pushmark s
2945 <0> pushmark s
2956 <0> padav[@a:-437,-436] lRM*
2967 <@> sort lK/INPLACE
be2b1c74 2978 <;> nextstate(main -436 optree.t:346) v:>,<,%,{
724aa791 2989 <$> const[IV 1] s
299a <1> leavesub[1 ref] K/REFC,1
300EOT_EOT
be2b1c74 301# 1 <;> nextstate(main 431 optree_sort.t:250) v:>,<,%
724aa791 302# 2 <0> padav[@a:431,432] vM/LVINTRO
be2b1c74 303# 3 <;> nextstate(main 432 optree_sort.t:251) v:>,<,%
724aa791 304# 4 <0> pushmark s
305# 5 <0> pushmark s
306# 6 <0> padav[@a:431,432] lRM*
307# 7 <@> sort lK/INPLACE
be2b1c74 308# 8 <;> nextstate(main 432 optree_sort.t:251) v:>,<,%,{
724aa791 309# 9 <$> const(IV 1) s
310# a <1> leavesub[1 ref] K/REFC,1
311EONT_EONT
312
2ce64696 313} #skip
724aa791 314
315__END__
316