-
Graham Ritchie authored634cae25
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
iterator.t 2.82 KiB
use strict;
use warnings;
use Test::More;
use Data::Dumper;
BEGIN {
use_ok('Bio::EnsEMBL::Utils::Iterator');
}
my ($it, $num, $i);
# check that a coderef works as an argument to the constructor
$it = Bio::EnsEMBL::Utils::Iterator->new(sub {return 3});
is($it->next, 3, "got expected value from iterator created from coderef");
# from now on we create an iterator from an arrayref because it's simpler
$it = Bio::EnsEMBL::Utils::Iterator->new([1,2,3]);
ok($it->has_next, 'iterator still has elements');
$i = 0;
while ($num = $it->next) {
is($num, ++$i, "$num is next element");
}
is($i, 3, 'got right number of elements');
# test empty iterator
my $empty_it = Bio::EnsEMBL::Utils::Iterator->new;
ok((not $empty_it->has_next), 'empty iterator has no elements');
# test grepping and mapping
$it = Bio::EnsEMBL::Utils::Iterator->new([1,2,3,4]);
my $even_it = $it->grep(sub {$_ % 2 == 0});
$i = 0;
while ($num = $even_it->next) {
$i++;
ok($num % 2 == 0, "$num is even");
}
is($i, 2, 'got right number of grepped elements back');
$it = Bio::EnsEMBL::Utils::Iterator->new([1,2,3]);
my $doubled_it = $it->map(sub {$_ * 2});
$i = 0;
while ($num = $doubled_it->next) {
is($num, ++$i * 2, "$num = $i * 2");
}
is($i, 3, 'got right number of mapped elements back');
$it = Bio::EnsEMBL::Utils::Iterator->new([1,2,3]);
my $filtered_mapped_it = $it->map(sub {$_ * 3})->grep(sub {$_ % 2 == 0});
is($filtered_mapped_it->next, 6, "filtering and mapping together work");