The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More 0.88;

use Sub::Sequence;

can_ok 'Sub::Sequence', qw/seq/;

#--- 1 step
{
    my $result = seq [qw/1 2 3/], 1, sub {
        my @list = @{ shift; };
        \@list;
    };
    is_deeply $result, [ [1], [2], [3] ], '1: first arg';
}
{
    my $result = seq [qw/1 2 3/], 1, sub { $_[1]; };
    is_deeply $result, [1, 2, 3], '1: second arg';
}
{
    my $result = seq [qw/1 2 3/], 1, sub { $_[2]; };
    is_deeply $result, [0, 1, 2], '1: third arg';
}

#--- 2 step
{
    my $result = seq [qw/1 2 3 4 5/], 2, sub {
        my @list = @{ shift; };
        \@list;
    };
    is_deeply $result, [ [1, 2], [3, 4], [5] ], '2: first arg';
}
{
    my $result = seq [qw/1 2 3 4 5/], 2, sub { $_[1]; };
    is_deeply $result, [1, 2, 3], '2: second arg';
}
{
    my $result = seq [qw/1 2 3 4 5/], 2, sub { $_[2]; };
    is_deeply $result, [0, 2, 4], '2: third arg';
}

#--- 3 step
{
    my $result = seq [qw/1 2 3 4 5/], 3, sub {
        my @list = @{ shift; };
        \@list;
    };
    is_deeply $result, [ [1, 2, 3], [4, 5] ], '3: first arg';
}
{
    my $result = seq [qw/1 2 3 4 5/], 3, sub { $_[1]; };
    is_deeply $result, [1, 2], '3: second arg';
}
{
    my $result = seq [qw/1 2 3 4 5/], 3, sub { $_[2]; };
    is_deeply $result, [0, 3], '3: third arg';
}

#--- over step
{
    my $result = seq [qw/1 2 3/], 5, sub {
        my @list = @{ shift; };
        \@list;
    };
    is_deeply $result, [ [1, 2, 3] ], 'over: first arg';
}
{
    my $result = seq [qw/1 2 3/], 5, sub { $_[1]; };
    is_deeply $result, [1], 'over: second arg';
}
{
    my $result = seq [qw/1 2 3/], 5, sub { $_[2]; };
    is_deeply $result, [0], 'over: third arg';
}

#--- wantarray result
{
    my @result = seq [qw/1 2 3 4 5/], 3, sub {
        my @list = @{ shift; };
        \@list;
    };
    is_deeply \@result, [ 1, 2, 3, 4, 5 ], 'wantarray';
}

done_testing;