This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Adjust unit tests to cope with new sockaddr_in6 functions in Socket (pulled in via...
[perl5.git] / ext / B / t / optree_sort.t
CommitLineData
724aa791
JC
1#!perl
2
3BEGIN {
74517a3a 4 unshift @INC, 't';
9cd8f857
NC
5 require Config;
6 if (($Config::Config{'extensions'} !~ /\bB\b/) ){
7 print "1..0 # Skip -- Perl configured without B module\n";
8 exit 0;
9 }
19e169bf 10 # require 'test.pl'; # now done by OptreeCheck
724aa791
JC
11}
12use OptreeCheck;
2ce64696 13use Config;
724aa791
JC
14plan tests => 11;
15
2ce64696
JC
16SKIP: {
17skip "no perlio in this build", 11 unless $Config::Config{useperlio};
18
724aa791
JC
19pass("SORT OPTIMIZATION");
20
21checkOptree ( name => 'sub {sort @a}',
22 code => sub {sort @a},
23 bcopts => '-exec',
be2b1c74 24 strip_open_hints => 1,
724aa791 25 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 26# 1 <;> nextstate(main 424 optree_sort.t:14) v:>,<,%
724aa791 27# 2 <0> pushmark s
cc02ea56
JC
28# 3 <#> gv[*a] s
29# 4 <1> rv2av[t2] lK/1
724aa791
JC
30# 5 <@> sort K
31# 6 <1> leavesub[1 ref] K/REFC,1
32EOT_EOT
be2b1c74 33# 1 <;> nextstate(main 424 optree_sort.t:14) v:>,<,%
724aa791
JC
34# 2 <0> pushmark s
35# 3 <$> gv(*a) s
36# 4 <1> rv2av[t1] lK/1
37# 5 <@> sort K
38# 6 <1> leavesub[1 ref] K/REFC,1
39EONT_EONT
40
19e169bf
JC
41checkOptree ( name => 'sort @a',
42 prog => 'sort @a',
43 errs => [ 'Useless use of sort in void context at -e line 1.',
44 'Name "main::a" used only once: possible typo at -e line 1.',
45 ],
46 bcopts => '-exec',
be2b1c74 47 strip_open_hints => 1,
19e169bf 48 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 491 <0> enter
be2b1c74 502 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
513 <0> pushmark s
524 <#> gv[*a] s
535 <1> rv2av[t2] lK/1
546 <@> sort vK
557 <@> leave[1 ref] vKP/REFC
56EOT_EOT
57# 1 <0> enter
be2b1c74 58# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
59# 3 <0> pushmark s
60# 4 <$> gv(*a) s
61# 5 <1> rv2av[t1] lK/1
62# 6 <@> sort vK
63# 7 <@> leave[1 ref] vKP/REFC
64EONT_EONT
65
66checkOptree ( name => 'sub {@a = sort @a}',
67 code => sub {@a = sort @a},
68 bcopts => '-exec',
be2b1c74 69 strip_open_hints => 1,
724aa791 70 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 711 <;> nextstate(main -438 optree.t:244) v:>,<,%
724aa791
JC
722 <0> pushmark s
733 <0> pushmark s
744 <#> gv[*a] s
cc02ea56 755 <1> rv2av[t4] lK/1
724aa791
JC
766 <@> sort lK
777 <0> pushmark s
788 <#> gv[*a] s
799 <1> rv2av[t2] lKRM*/1
19e169bf 80a <2> aassign[t5] KS/COMMON
724aa791
JC
81b <1> leavesub[1 ref] K/REFC,1
82EOT_EOT
be2b1c74 83# 1 <;> nextstate(main 65 optree.t:311) v:>,<,%
724aa791
JC
84# 2 <0> pushmark s
85# 3 <0> pushmark s
86# 4 <$> gv(*a) s
87# 5 <1> rv2av[t2] lK/1
88# 6 <@> sort lK
89# 7 <0> pushmark s
90# 8 <$> gv(*a) s
91# 9 <1> rv2av[t1] lKRM*/1
92# a <2> aassign[t3] KS/COMMON
93# b <1> leavesub[1 ref] K/REFC,1
94EONT_EONT
95
96checkOptree ( name => '@a = sort @a',
97 prog => '@a = sort @a',
98 bcopts => '-exec',
be2b1c74 99 strip_open_hints => 1,
724aa791
JC
100 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1011 <0> enter
be2b1c74 1022 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
1033 <0> pushmark s
1044 <0> pushmark s
1055 <#> gv[*a] s
1066 <1> rv2av[t4] lKRM*/1
1077 <@> sort lK/INPLACE
1088 <@> leave[1 ref] vKP/REFC
109EOT_EOT
110# 1 <0> enter
be2b1c74 111# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
112# 3 <0> pushmark s
113# 4 <0> pushmark s
114# 5 <$> gv(*a) s
115# 6 <1> rv2av[t2] lKRM*/1
116# 7 <@> sort lK/INPLACE
117# 8 <@> leave[1 ref] vKP/REFC
118EONT_EONT
119
120checkOptree ( name => 'sub {@a = sort @a; reverse @a}',
121 code => sub {@a = sort @a; reverse @a},
122 bcopts => '-exec',
be2b1c74 123 strip_open_hints => 1,
724aa791 124 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 1251 <;> nextstate(main -438 optree.t:286) v:>,<,%
724aa791
JC
1262 <0> pushmark s
1273 <0> pushmark s
1284 <#> gv[*a] s
1295 <1> rv2av[t4] lKRM*/1
1306 <@> sort lK/INPLACE
be2b1c74 1317 <;> nextstate(main -438 optree.t:288) v:>,<,%
724aa791
JC
1328 <0> pushmark s
1339 <#> gv[*a] s
134a <1> rv2av[t7] lK/1
135b <@> reverse[t8] K/1
136c <1> leavesub[1 ref] K/REFC,1
137EOT_EOT
be2b1c74 138# 1 <;> nextstate(main 66 optree.t:345) v:>,<,%
724aa791
JC
139# 2 <0> pushmark s
140# 3 <0> pushmark s
141# 4 <$> gv(*a) s
142# 5 <1> rv2av[t2] lKRM*/1
143# 6 <@> sort lK/INPLACE
be2b1c74 144# 7 <;> nextstate(main 66 optree.t:346) v:>,<,%
724aa791
JC
145# 8 <0> pushmark s
146# 9 <$> gv(*a) s
147# a <1> rv2av[t4] lK/1
148# b <@> reverse[t5] K/1
149# c <1> leavesub[1 ref] K/REFC,1
150EONT_EONT
151
152checkOptree ( name => '@a = sort @a; reverse @a',
153 prog => '@a = sort @a; reverse @a',
19e169bf 154 errs => ['Useless use of reverse in void context at -e line 1.'],
724aa791 155 bcopts => '-exec',
be2b1c74 156 strip_open_hints => 1,
724aa791
JC
157 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1581 <0> enter
be2b1c74 1592 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
1603 <0> pushmark s
1614 <0> pushmark s
1625 <#> gv[*a] s
1636 <1> rv2av[t4] lKRM*/1
1647 <@> sort lK/INPLACE
be2b1c74 1658 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
1669 <0> pushmark s
167a <#> gv[*a] s
168b <1> rv2av[t7] lK/1
169c <@> reverse[t8] vK/1
170d <@> leave[1 ref] vKP/REFC
171EOT_EOT
172# 1 <0> enter
be2b1c74 173# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
174# 3 <0> pushmark s
175# 4 <0> pushmark s
176# 5 <$> gv(*a) s
177# 6 <1> rv2av[t2] lKRM*/1
178# 7 <@> sort lK/INPLACE
be2b1c74 179# 8 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
180# 9 <0> pushmark s
181# a <$> gv(*a) s
182# b <1> rv2av[t4] lK/1
183# c <@> reverse[t5] vK/1
184# d <@> leave[1 ref] vKP/REFC
185EONT_EONT
186
187checkOptree ( name => 'sub {my @a; @a = sort @a}',
188 code => sub {my @a; @a = sort @a},
189 bcopts => '-exec',
be2b1c74 190 strip_open_hints => 1,
724aa791 191 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 1921 <;> nextstate(main -437 optree.t:254) v:>,<,%
724aa791 1932 <0> padav[@a:-437,-436] vM/LVINTRO
be2b1c74 1943 <;> nextstate(main -436 optree.t:256) v:>,<,%
724aa791
JC
1954 <0> pushmark s
1965 <0> pushmark s
1976 <0> padav[@a:-437,-436] l
1987 <@> sort lK
1998 <0> pushmark s
2009 <0> padav[@a:-437,-436] lRM*
19e169bf 201a <2> aassign[t2] KS/COMMON
724aa791
JC
202b <1> leavesub[1 ref] K/REFC,1
203EOT_EOT
be2b1c74 204# 1 <;> nextstate(main 427 optree_sort.t:172) v:>,<,%
724aa791 205# 2 <0> padav[@a:427,428] vM/LVINTRO
be2b1c74 206# 3 <;> nextstate(main 428 optree_sort.t:173) v:>,<,%
724aa791
JC
207# 4 <0> pushmark s
208# 5 <0> pushmark s
209# 6 <0> padav[@a:427,428] l
210# 7 <@> sort lK
211# 8 <0> pushmark s
212# 9 <0> padav[@a:427,428] lRM*
213# a <2> aassign[t2] KS/COMMON
214# b <1> leavesub[1 ref] K/REFC,1
215EONT_EONT
216
217checkOptree ( name => 'my @a; @a = sort @a',
218 prog => 'my @a; @a = sort @a',
219 bcopts => '-exec',
be2b1c74 220 strip_open_hints => 1,
724aa791
JC
221 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2221 <0> enter
be2b1c74 2232 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791 2243 <0> padav[@a:1,2] vM/LVINTRO
be2b1c74 2254 <;> nextstate(main 2 -e:1) v:>,<,%,{
724aa791
JC
2265 <0> pushmark s
2276 <0> pushmark s
2287 <0> padav[@a:1,2] lRM*
2298 <@> sort lK/INPLACE
2309 <@> leave[1 ref] vKP/REFC
231EOT_EOT
232# 1 <0> enter
be2b1c74 233# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791 234# 3 <0> padav[@a:1,2] vM/LVINTRO
be2b1c74 235# 4 <;> nextstate(main 2 -e:1) v:>,<,%,{
724aa791
JC
236# 5 <0> pushmark s
237# 6 <0> pushmark s
238# 7 <0> padav[@a:1,2] lRM*
239# 8 <@> sort lK/INPLACE
240# 9 <@> leave[1 ref] vKP/REFC
241EONT_EONT
242
243checkOptree ( name => 'sub {my @a; @a = sort @a; push @a, 1}',
244 code => sub {my @a; @a = sort @a; push @a, 1},
245 bcopts => '-exec',
246 debug => 0,
be2b1c74 247 strip_open_hints => 1,
724aa791 248 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 2491 <;> nextstate(main -437 optree.t:325) v:>,<,%
724aa791 2502 <0> padav[@a:-437,-436] vM/LVINTRO
be2b1c74 2513 <;> nextstate(main -436 optree.t:325) v:>,<,%
724aa791
JC
2524 <0> pushmark s
2535 <0> pushmark s
2546 <0> padav[@a:-437,-436] lRM*
2557 <@> sort lK/INPLACE
be2b1c74 2568 <;> nextstate(main -436 optree.t:325) v:>,<,%,{
724aa791
JC
2579 <0> pushmark s
258a <0> padav[@a:-437,-436] lRM
259b <$> const[IV 1] s
260c <@> push[t3] sK/2
261d <1> leavesub[1 ref] K/REFC,1
262EOT_EOT
be2b1c74 263# 1 <;> nextstate(main 429 optree_sort.t:219) v:>,<,%
724aa791 264# 2 <0> padav[@a:429,430] vM/LVINTRO
be2b1c74 265# 3 <;> nextstate(main 430 optree_sort.t:220) v:>,<,%
724aa791
JC
266# 4 <0> pushmark s
267# 5 <0> pushmark s
268# 6 <0> padav[@a:429,430] lRM*
269# 7 <@> sort lK/INPLACE
be2b1c74 270# 8 <;> nextstate(main 430 optree_sort.t:220) v:>,<,%,{
724aa791
JC
271# 9 <0> pushmark s
272# a <0> padav[@a:429,430] lRM
273# b <$> const(IV 1) s
274# c <@> push[t3] sK/2
275# d <1> leavesub[1 ref] K/REFC,1
276EONT_EONT
277
278checkOptree ( name => 'sub {my @a; @a = sort @a; 1}',
279 code => sub {my @a; @a = sort @a; 1},
280 bcopts => '-exec',
281 debug => 0,
be2b1c74 282 strip_open_hints => 1,
724aa791 283 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 2841 <;> nextstate(main -437 optree.t:325) v:>,<,%
724aa791 2852 <0> padav[@a:-437,-436] vM/LVINTRO
be2b1c74 2863 <;> nextstate(main -436 optree.t:325) v:>,<,%
724aa791
JC
2874 <0> pushmark s
2885 <0> pushmark s
2896 <0> padav[@a:-437,-436] lRM*
2907 <@> sort lK/INPLACE
be2b1c74 2918 <;> nextstate(main -436 optree.t:346) v:>,<,%,{
724aa791
JC
2929 <$> const[IV 1] s
293a <1> leavesub[1 ref] K/REFC,1
294EOT_EOT
be2b1c74 295# 1 <;> nextstate(main 431 optree_sort.t:250) v:>,<,%
724aa791 296# 2 <0> padav[@a:431,432] vM/LVINTRO
be2b1c74 297# 3 <;> nextstate(main 432 optree_sort.t:251) v:>,<,%
724aa791
JC
298# 4 <0> pushmark s
299# 5 <0> pushmark s
300# 6 <0> padav[@a:431,432] lRM*
301# 7 <@> sort lK/INPLACE
be2b1c74 302# 8 <;> nextstate(main 432 optree_sort.t:251) v:>,<,%,{
724aa791
JC
303# 9 <$> const(IV 1) s
304# a <1> leavesub[1 ref] K/REFC,1
305EONT_EONT
306
2ce64696 307} #skip
724aa791
JC
308
309__END__
310