Ancient
view release on metacpan or search on metacpan
t/2050-doubly-custom-ops.t view on Meta::CPAN
# Overwrite
$list->data('string');
is($list->data, 'string', 'overwrite data');
};
subtest 'next op' => sub {
my $list = doubly->new(1);
$list->add(2)->add(3)->add(4);
my $cursor = $list->start;
is($cursor->data, 1, 'start at first');
$cursor = $cursor->next;
is($cursor->data, 2, 'next to second');
$cursor = $cursor->next;
is($cursor->data, 3, 'next to third');
$cursor = $cursor->next;
is($cursor->data, 4, 'next to fourth');
$cursor = $cursor->next;
is($cursor, undef, 'next at end returns undef');
};
subtest 'prev op' => sub {
my $list = doubly->new(1);
$list->add(2)->add(3)->add(4);
my $cursor = $list->end;
is($cursor->data, 4, 'end at last');
$cursor = $cursor->prev;
is($cursor->data, 3, 'prev to third');
$cursor = $cursor->prev;
is($cursor->data, 2, 'prev to second');
$cursor = $cursor->prev;
is($cursor->data, 1, 'prev to first');
$cursor = $cursor->prev;
is($cursor, undef, 'prev at start returns undef');
};
subtest 'start op' => sub {
my $list = doubly->new(1);
$list->add(2)->add(3);
# Navigate away then back
my $cursor = $list->end;
is($cursor->data, 3, 'at end');
$cursor = $cursor->start;
is($cursor->data, 1, 'back to start');
# Multiple start calls
my $s1 = $list->start;
my $s2 = $list->start;
is($s1->data, $s2->data, 'consistent start');
};
subtest 'end op' => sub {
my $list = doubly->new(1);
$list->add(2)->add(3);
my $cursor = $list->start;
is($cursor->data, 1, 'at start');
$cursor = $cursor->end;
is($cursor->data, 3, 'to end');
# Multiple end calls
my $e1 = $list->end;
my $e2 = $list->end;
is($e1->data, $e2->data, 'consistent end');
};
subtest 'is_start op' => sub {
my $list = doubly->new(1);
$list->add(2)->add(3);
my $cursor = $list->start;
ok($cursor->is_start, 'is_start at head');
ok(!$cursor->is_end, 'not is_end at head');
$cursor = $cursor->next;
ok(!$cursor->is_start, 'not is_start in middle');
ok(!$cursor->is_end, 'not is_end in middle');
$cursor = $list->end;
ok(!$cursor->is_start, 'not is_start at tail');
ok($cursor->is_end, 'is_end at tail');
};
subtest 'is_end op' => sub {
my $list = doubly->new(1);
$list->add(2)->add(3);
my $cursor = $list->end;
ok($cursor->is_end, 'is_end at tail');
ok(!$cursor->is_start, 'not is_start at tail');
$cursor = $cursor->prev;
ok(!$cursor->is_end, 'not is_end in middle');
ok(!$cursor->is_start, 'not is_start in middle');
};
subtest 'single element list' => sub {
my $list = doubly->new('only');
is($list->length, 1, 'single element length');
is($list->data, 'only', 'single element data');
ok($list->is_start, 'single element is_start');
ok($list->is_end, 'single element is_end');
is($list->next, undef, 'single element next is undef');
t/2052-doubly-loop-patterns.t view on Meta::CPAN
#!/usr/bin/perl
use strict;
use warnings;
use Test::More;
use doubly;
# Test doubly linked list with various loop variable patterns
# Note: doubly uses cursor pattern - add() returns cursor to new node
subtest 'for with $item' => sub {
my $list = doubly->new(1); # doubly requires initial data
for my $item (2, 3, 4, 5) {
$list = $list->add($item);
}
is($list->length(), 5, 'doubly add with $item');
};
subtest 'for with $val' => sub {
( run in 0.865 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )