Array-Sticky

 view release on metacpan or  search on metacpan

t/sticky-array.t  view on Meta::CPAN

#!/usr/bin/env perl

use strict;
use warnings;

use Test::More tests => 10;
use lib grep { -d } qw(./lib ../lib ./t/lib);
use Test::Easy qw(deep_ok);

use Array::Sticky;

my @target;
tie @target, 'Array::Sticky', head => [2], body => [3..7], tail => [8..9];

# the head of the array is locked at [2]
unshift @target, 1;
deep_ok( \@target, [(2), (1, 3..7), (8..9)] ); # the parens are for visual grouping

# the tail is locked at [8, 9]
push @target, 10..12;
deep_ok( \@target, [(2), (1, 3..7, 10..12), (8..9)] );

# shifting leaves the head alone
my @shifted = map { shift(@target) } 0..2;
deep_ok( \@shifted, [1, 3, 4] );
deep_ok( \@target, [(2), (5..7, 10..12), (8..9)] );

# popping leaves the tail alone
my @popped = map { pop(@target) } 0..2;
deep_ok( \@popped, [12, 11, 10] );
deep_ok( \@target, [(2), (5..7), (8..9)] );

# splice acts only on the body too
splice @target, 0, 0, (3..4);
deep_ok( \@target, [(2), (3..7), (8..9)] );

# splice into the body
splice @target, 2, 0, 'a'..'f';
deep_ok( \@target, [(2), (3..4, 'a'..'f', 5..7), (8..9)] );

# splicing into the head actually goes into the body
splice @target, 0, 0, 'gallop-outlaying';
deep_ok( \@target, [(2), ('gallop-outlaying', 3..4, 'a'..'f', 5..7), (8..9)] );

# splicing into the tail goes into the body as well
splice @target, scalar @target, 0, 'MasterCard-pontificating';
deep_ok( \@target, [(2), ('gallop-outlaying', 3..4, 'a'..'f', 5..7, 'MasterCard-pontificating'), (8..9)] );



( run in 0.450 second using v1.01-cache-2.11-cpan-df04353d9ac )