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 1.140 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )