The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 19;

use Data::Pipeline::Iterator;
use Data::Pipeline::Iterator::Source;

my @things = (1..10);
my $source = Data::Pipeline::Iterator::Source -> new(
    has_next => sub { scalar(@things) > 0 },
    get_next => sub { shift @things }
);

my $it1 = Data::Pipeline::Iterator -> new(
     source => $source
);

my $it2 = Data::Pipeline::Iterator -> new(
     source => $source
);

is($it1 -> next, 1);
is($it1 -> next, 2);
is($it1 -> next, 3);
is($it1 -> next, 4);

is( scalar( @things ), 6 );

is($it2 -> next, 1);
is($it2 -> next, 2);
is($it2 -> next, 3);
is($it2 -> next, 4);

is( scalar( @things ), 6 );


is($it1 -> next, 5);
is($it1 -> next, 6);
is($it1 -> next, 7);
is($it1 -> next, 8);
is($it1 -> next, 9);
is($it1 -> next, 10);

is( scalar( @things ), 0 );

ok( $it1 -> finished );

ok( !$it2 -> finished );