Upgrade to CPAN 1.87_63
[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
09337566 27my @open_todo;
28sub open_todo {
29 if (((caller 0)[10]||{})->{open}) {
30 @open_todo = (skip => "\$^OPEN is set");
31 }
32}
33open_todo;
34
724aa791 35checkOptree ( name => 'sub {sort @a}',
36 code => sub {sort @a},
37 bcopts => '-exec',
09337566 38 @open_todo,
724aa791 39 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
40# 1 <;> nextstate(main 424 optree_sort.t:14) v
41# 2 <0> pushmark s
cc02ea56 42# 3 <#> gv[*a] s
43# 4 <1> rv2av[t2] lK/1
724aa791 44# 5 <@> sort K
45# 6 <1> leavesub[1 ref] K/REFC,1
46EOT_EOT
47# 1 <;> nextstate(main 424 optree_sort.t:14) v
48# 2 <0> pushmark s
49# 3 <$> gv(*a) s
50# 4 <1> rv2av[t1] lK/1
51# 5 <@> sort K
52# 6 <1> leavesub[1 ref] K/REFC,1
53EONT_EONT
54
19e169bf 55checkOptree ( name => 'sort @a',
56 prog => 'sort @a',
57 errs => [ 'Useless use of sort in void context at -e line 1.',
58 'Name "main::a" used only once: possible typo at -e line 1.',
59 ],
60 bcopts => '-exec',
09337566 61 @open_todo,
19e169bf 62 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 631 <0> enter
d5ec2987 642 <;> nextstate(main 1 -e:1) v:{
724aa791 653 <0> pushmark s
664 <#> gv[*a] s
675 <1> rv2av[t2] lK/1
686 <@> sort vK
697 <@> leave[1 ref] vKP/REFC
70EOT_EOT
71# 1 <0> enter
d5ec2987 72# 2 <;> nextstate(main 1 -e:1) v:{
724aa791 73# 3 <0> pushmark s
74# 4 <$> gv(*a) s
75# 5 <1> rv2av[t1] lK/1
76# 6 <@> sort vK
77# 7 <@> leave[1 ref] vKP/REFC
78EONT_EONT
79
80checkOptree ( name => 'sub {@a = sort @a}',
81 code => sub {@a = sort @a},
82 bcopts => '-exec',
09337566 83 @open_todo,
724aa791 84 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 851 <;> nextstate(main -438 optree.t:244) v
862 <0> pushmark s
873 <0> pushmark s
884 <#> gv[*a] s
cc02ea56 895 <1> rv2av[t4] lK/1
724aa791 906 <@> sort lK
917 <0> pushmark s
928 <#> gv[*a] s
939 <1> rv2av[t2] lKRM*/1
19e169bf 94a <2> aassign[t5] KS/COMMON
724aa791 95b <1> leavesub[1 ref] K/REFC,1
96EOT_EOT
97# 1 <;> nextstate(main 65 optree.t:311) v
98# 2 <0> pushmark s
99# 3 <0> pushmark s
100# 4 <$> gv(*a) s
101# 5 <1> rv2av[t2] lK/1
102# 6 <@> sort lK
103# 7 <0> pushmark s
104# 8 <$> gv(*a) s
105# 9 <1> rv2av[t1] lKRM*/1
106# a <2> aassign[t3] KS/COMMON
107# b <1> leavesub[1 ref] K/REFC,1
108EONT_EONT
109
110checkOptree ( name => '@a = sort @a',
111 prog => '@a = sort @a',
112 bcopts => '-exec',
09337566 113 @open_todo,
724aa791 114 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1151 <0> enter
d5ec2987 1162 <;> nextstate(main 1 -e:1) v:{
724aa791 1173 <0> pushmark s
1184 <0> pushmark s
1195 <#> gv[*a] s
1206 <1> rv2av[t4] lKRM*/1
1217 <@> sort lK/INPLACE
1228 <@> leave[1 ref] vKP/REFC
123EOT_EOT
124# 1 <0> enter
d5ec2987 125# 2 <;> nextstate(main 1 -e:1) v:{
724aa791 126# 3 <0> pushmark s
127# 4 <0> pushmark s
128# 5 <$> gv(*a) s
129# 6 <1> rv2av[t2] lKRM*/1
130# 7 <@> sort lK/INPLACE
131# 8 <@> leave[1 ref] vKP/REFC
132EONT_EONT
133
134checkOptree ( name => 'sub {@a = sort @a; reverse @a}',
135 code => sub {@a = sort @a; reverse @a},
136 bcopts => '-exec',
09337566 137 @open_todo,
724aa791 138 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 1391 <;> nextstate(main -438 optree.t:286) v
1402 <0> pushmark s
1413 <0> pushmark s
1424 <#> gv[*a] s
1435 <1> rv2av[t4] lKRM*/1
1446 <@> sort lK/INPLACE
1457 <;> nextstate(main -438 optree.t:288) v
1468 <0> pushmark s
1479 <#> gv[*a] s
148a <1> rv2av[t7] lK/1
149b <@> reverse[t8] K/1
150c <1> leavesub[1 ref] K/REFC,1
151EOT_EOT
152# 1 <;> nextstate(main 66 optree.t:345) v
153# 2 <0> pushmark s
154# 3 <0> pushmark s
155# 4 <$> gv(*a) s
156# 5 <1> rv2av[t2] lKRM*/1
157# 6 <@> sort lK/INPLACE
158# 7 <;> nextstate(main 66 optree.t:346) v
159# 8 <0> pushmark s
160# 9 <$> gv(*a) s
161# a <1> rv2av[t4] lK/1
162# b <@> reverse[t5] K/1
163# c <1> leavesub[1 ref] K/REFC,1
164EONT_EONT
165
166checkOptree ( name => '@a = sort @a; reverse @a',
167 prog => '@a = sort @a; reverse @a',
19e169bf 168 errs => ['Useless use of reverse in void context at -e line 1.'],
724aa791 169 bcopts => '-exec',
09337566 170 @open_todo,
724aa791 171 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1721 <0> enter
d5ec2987 1732 <;> nextstate(main 1 -e:1) v:{
724aa791 1743 <0> pushmark s
1754 <0> pushmark s
1765 <#> gv[*a] s
1776 <1> rv2av[t4] lKRM*/1
1787 <@> sort lK/INPLACE
d5ec2987 1798 <;> nextstate(main 1 -e:1) v:{
724aa791 1809 <0> pushmark s
181a <#> gv[*a] s
182b <1> rv2av[t7] lK/1
183c <@> reverse[t8] vK/1
184d <@> leave[1 ref] vKP/REFC
185EOT_EOT
186# 1 <0> enter
d5ec2987 187# 2 <;> nextstate(main 1 -e:1) v:{
724aa791 188# 3 <0> pushmark s
189# 4 <0> pushmark s
190# 5 <$> gv(*a) s
191# 6 <1> rv2av[t2] lKRM*/1
192# 7 <@> sort lK/INPLACE
d5ec2987 193# 8 <;> nextstate(main 1 -e:1) v:{
724aa791 194# 9 <0> pushmark s
195# a <$> gv(*a) s
196# b <1> rv2av[t4] lK/1
197# c <@> reverse[t5] vK/1
198# d <@> leave[1 ref] vKP/REFC
199EONT_EONT
200
201checkOptree ( name => 'sub {my @a; @a = sort @a}',
202 code => sub {my @a; @a = sort @a},
203 bcopts => '-exec',
09337566 204 @open_todo,
724aa791 205 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 2061 <;> nextstate(main -437 optree.t:254) v
2072 <0> padav[@a:-437,-436] vM/LVINTRO
2083 <;> nextstate(main -436 optree.t:256) v
2094 <0> pushmark s
2105 <0> pushmark s
2116 <0> padav[@a:-437,-436] l
2127 <@> sort lK
2138 <0> pushmark s
2149 <0> padav[@a:-437,-436] lRM*
19e169bf 215a <2> aassign[t2] KS/COMMON
724aa791 216b <1> leavesub[1 ref] K/REFC,1
217EOT_EOT
218# 1 <;> nextstate(main 427 optree_sort.t:172) v
219# 2 <0> padav[@a:427,428] vM/LVINTRO
220# 3 <;> nextstate(main 428 optree_sort.t:173) v
221# 4 <0> pushmark s
222# 5 <0> pushmark s
223# 6 <0> padav[@a:427,428] l
224# 7 <@> sort lK
225# 8 <0> pushmark s
226# 9 <0> padav[@a:427,428] lRM*
227# a <2> aassign[t2] KS/COMMON
228# b <1> leavesub[1 ref] K/REFC,1
229EONT_EONT
230
231checkOptree ( name => 'my @a; @a = sort @a',
232 prog => 'my @a; @a = sort @a',
233 bcopts => '-exec',
09337566 234 @open_todo,
724aa791 235 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2361 <0> enter
d5ec2987 2372 <;> nextstate(main 1 -e:1) v:{
724aa791 2383 <0> padav[@a:1,2] vM/LVINTRO
d5ec2987 2394 <;> nextstate(main 2 -e:1) v:{
724aa791 2405 <0> pushmark s
2416 <0> pushmark s
2427 <0> padav[@a:1,2] lRM*
2438 <@> sort lK/INPLACE
2449 <@> leave[1 ref] vKP/REFC
245EOT_EOT
246# 1 <0> enter
d5ec2987 247# 2 <;> nextstate(main 1 -e:1) v:{
724aa791 248# 3 <0> padav[@a:1,2] vM/LVINTRO
d5ec2987 249# 4 <;> nextstate(main 2 -e:1) v:{
724aa791 250# 5 <0> pushmark s
251# 6 <0> pushmark s
252# 7 <0> padav[@a:1,2] lRM*
253# 8 <@> sort lK/INPLACE
254# 9 <@> leave[1 ref] vKP/REFC
255EONT_EONT
256
257checkOptree ( name => 'sub {my @a; @a = sort @a; push @a, 1}',
258 code => sub {my @a; @a = sort @a; push @a, 1},
259 bcopts => '-exec',
260 debug => 0,
09337566 261 @open_todo,
724aa791 262 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 2631 <;> nextstate(main -437 optree.t:325) v
2642 <0> padav[@a:-437,-436] vM/LVINTRO
2653 <;> nextstate(main -436 optree.t:325) v
2664 <0> pushmark s
2675 <0> pushmark s
2686 <0> padav[@a:-437,-436] lRM*
2697 <@> sort lK/INPLACE
d5ec2987 2708 <;> nextstate(main -436 optree.t:325) v:{
724aa791 2719 <0> pushmark s
272a <0> padav[@a:-437,-436] lRM
273b <$> const[IV 1] s
274c <@> push[t3] sK/2
275d <1> leavesub[1 ref] K/REFC,1
276EOT_EOT
277# 1 <;> nextstate(main 429 optree_sort.t:219) v
278# 2 <0> padav[@a:429,430] vM/LVINTRO
279# 3 <;> nextstate(main 430 optree_sort.t:220) v
280# 4 <0> pushmark s
281# 5 <0> pushmark s
282# 6 <0> padav[@a:429,430] lRM*
283# 7 <@> sort lK/INPLACE
d5ec2987 284# 8 <;> nextstate(main 430 optree_sort.t:220) v:{
724aa791 285# 9 <0> pushmark s
286# a <0> padav[@a:429,430] lRM
287# b <$> const(IV 1) s
288# c <@> push[t3] sK/2
289# d <1> leavesub[1 ref] K/REFC,1
290EONT_EONT
291
292checkOptree ( name => 'sub {my @a; @a = sort @a; 1}',
293 code => sub {my @a; @a = sort @a; 1},
294 bcopts => '-exec',
295 debug => 0,
09337566 296 @open_todo,
724aa791 297 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 2981 <;> nextstate(main -437 optree.t:325) v
2992 <0> padav[@a:-437,-436] vM/LVINTRO
3003 <;> nextstate(main -436 optree.t:325) v
3014 <0> pushmark s
3025 <0> pushmark s
3036 <0> padav[@a:-437,-436] lRM*
3047 <@> sort lK/INPLACE
d5ec2987 3058 <;> nextstate(main -436 optree.t:346) v:{
724aa791 3069 <$> const[IV 1] s
307a <1> leavesub[1 ref] K/REFC,1
308EOT_EOT
309# 1 <;> nextstate(main 431 optree_sort.t:250) v
310# 2 <0> padav[@a:431,432] vM/LVINTRO
311# 3 <;> nextstate(main 432 optree_sort.t:251) v
312# 4 <0> pushmark s
313# 5 <0> pushmark s
314# 6 <0> padav[@a:431,432] lRM*
315# 7 <@> sort lK/INPLACE
d5ec2987 316# 8 <;> nextstate(main 432 optree_sort.t:251) v:{
724aa791 317# 9 <$> const(IV 1) s
318# a <1> leavesub[1 ref] K/REFC,1
319EONT_EONT
320
2ce64696 321} #skip
724aa791 322
323__END__
324