This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
In taint.t, add violates_taint(), to replace a repeated is()/like() pair.
[perl5.git] / t / op / reverse.t
index 7afaac7..916724c 100644 (file)
@@ -6,7 +6,7 @@ BEGIN {
     require './test.pl';
 }
 
-plan tests => 5;
+plan tests => 26;
 
 is(reverse("abc"), "cba");
 
@@ -22,6 +22,68 @@ is(reverse(), "raboof");
 }
 
 {
+    my @a = (1, 2, 3, 4);
+    @a = reverse @a;
+    is("@a", "4 3 2 1");
+
+    delete $a[1];
+    @a = reverse @a;
+    ok(!exists $a[2]);
+    is($a[0] . $a[1] . $a[3], '124');
+
+    @a = (5, 6, 7, 8, 9);
+    @a = reverse @a;
+    is("@a", "9 8 7 6 5");
+
+    delete $a[3];
+    @a = reverse @a;
+    ok(!exists $a[1]);
+    is($a[0] . $a[2] . $a[3] . $a[4], '5789');
+
+    delete $a[2];
+    @a = reverse @a;
+    ok(!exists $a[2] && !exists $a[3]);
+    is($a[0] . $a[1] . $a[4], '985');
+
+    my @empty;
+    @empty = reverse @empty;
+    is("@empty", "");
+}
+
+use Tie::Array;
+
+{
+    tie my @a, 'Tie::StdArray';
+
+    @a = (1, 2, 3, 4);
+    @a = reverse @a;
+    is("@a", "4 3 2 1");
+
+    delete $a[1];
+    @a = reverse @a;
+    ok(!exists $a[2]);
+    is($a[0] . $a[1] . $a[3], '124');
+
+    @a = (5, 6, 7, 8, 9);
+    @a = reverse @a;
+    is("@a", "9 8 7 6 5");
+
+    delete $a[3];
+    @a = reverse @a;
+    ok(!exists $a[1]);
+    is($a[0] . $a[2] . $a[3] . $a[4], '5789');
+
+    delete $a[2];
+    @a = reverse @a;
+    ok(!exists $a[2] && !exists $a[3]);
+    is($a[0] . $a[1] . $a[4], '985');
+
+    tie my @empty, "Tie::StdArray";
+    @empty = reverse @empty;
+    is(scalar(@empty), 0);
+}
+
+{
     # Unicode.
 
     my $a = "\x{263A}\x{263A}x\x{263A}y\x{263A}";
@@ -29,3 +91,15 @@ is(reverse(), "raboof");
     my $c = scalar reverse($b);
     is($a, $c);
 }
+
+{
+    # Lexical $_.
+    sub blurp { my $_ = shift; reverse }
+
+    is(blurp("foo"), "oof");
+    is(sub { my $_ = shift; reverse }->("bar"), "rab");
+    {
+        local $_ = "XXX";
+        is(blurp("paz"), "zap");
+    }
+}