This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Stop string eval from leaking ops
[perl5.git] / t / op / reverse.t
1 #!./perl
2
3 BEGIN {
4     chdir 't' if -d 't';
5     @INC = '../lib';
6     require './test.pl';
7 }
8
9 plan tests => 26;
10
11 is(reverse("abc"), "cba");
12
13 $_ = "foobar";
14 is(reverse(), "raboof");
15
16 {
17     my @a = ("foo", "bar");
18     my @b = reverse @a;
19
20     is($b[0], $a[1]);
21     is($b[1], $a[0]);
22 }
23
24 {
25     my @a = (1, 2, 3, 4);
26     @a = reverse @a;
27     is("@a", "4 3 2 1");
28
29     delete $a[1];
30     @a = reverse @a;
31     ok(!exists $a[2]);
32     is($a[0] . $a[1] . $a[3], '124');
33
34     @a = (5, 6, 7, 8, 9);
35     @a = reverse @a;
36     is("@a", "9 8 7 6 5");
37
38     delete $a[3];
39     @a = reverse @a;
40     ok(!exists $a[1]);
41     is($a[0] . $a[2] . $a[3] . $a[4], '5789');
42
43     delete $a[2];
44     @a = reverse @a;
45     ok(!exists $a[2] && !exists $a[3]);
46     is($a[0] . $a[1] . $a[4], '985');
47
48     my @empty;
49     @empty = reverse @empty;
50     is("@empty", "");
51 }
52
53 use Tie::Array;
54
55 {
56     tie my @a, 'Tie::StdArray';
57
58     @a = (1, 2, 3, 4);
59     @a = reverse @a;
60     is("@a", "4 3 2 1");
61
62     delete $a[1];
63     @a = reverse @a;
64     ok(!exists $a[2]);
65     is($a[0] . $a[1] . $a[3], '124');
66
67     @a = (5, 6, 7, 8, 9);
68     @a = reverse @a;
69     is("@a", "9 8 7 6 5");
70
71     delete $a[3];
72     @a = reverse @a;
73     ok(!exists $a[1]);
74     is($a[0] . $a[2] . $a[3] . $a[4], '5789');
75
76     delete $a[2];
77     @a = reverse @a;
78     ok(!exists $a[2] && !exists $a[3]);
79     is($a[0] . $a[1] . $a[4], '985');
80
81     tie my @empty, "Tie::StdArray";
82     @empty = reverse @empty;
83     is(scalar(@empty), 0);
84 }
85
86 {
87     # Unicode.
88
89     my $a = "\x{263A}\x{263A}x\x{263A}y\x{263A}";
90     my $b = scalar reverse($a);
91     my $c = scalar reverse($b);
92     is($a, $c);
93 }
94
95 {
96     # Lexical $_.
97     sub blurp { my $_ = shift; reverse }
98
99     is(blurp("foo"), "oof");
100     is(sub { my $_ = shift; reverse }->("bar"), "rab");
101     {
102         local $_ = "XXX";
103         is(blurp("paz"), "zap");
104     }
105 }