Iterator-Util
view release on metacpan or search on metacpan
use strict;
use Test::More tests => 42;
use Iterator::Util;
# Check that irange function works.
sub begins_with
{
my ($actual, $expected, $test_name) = @_;
$actual = substr($actual, 0, length $expected);
@_ = ($actual, $expected, $test_name);
goto &is;
}
my ($iter, $x, $worked, @vals);
## One-arg irange (infinite) (3)
eval
{
$iter = irange(52);
};
is $@, q{}, q{Created one-arg iterator; no exception};
# How do you test an infinite iterator?
# Well, let's run through a bunch of iterations, see if it pans out.
$worked = 1; # assume okay
eval
{
foreach my $test (52..151) # try a hundred values
{
if ($test != $iter->value || $iter->is_exhausted)
{
$worked = 0;
last;
}
}
};
is ($@, q{}, q{Looped over one-arg iterator; no exception});
ok ($worked, q{One-arg iterator gave expected values});
## Two-arg irange (start, end). (3)
eval
{
$iter = irange (4, 6);
};
is ($@, q{}, q{Created two-arg iterator; no exception});
@vals = ();
eval
{
push @vals, $iter->value while $iter->isnt_exhausted;
};
is ($@, q{}, q{Invoked two-arg iterator until exhausted});
is_deeply (\@vals, [4, 5, 6], q{Two-arg iterator returned expected results});
## Two-arg irange (start, end), end < start. (3)
eval
{
$iter = irange (6, 4);
};
is ($@, q{}, q{Created two-arg iterator; no exception});
@vals = ();
eval
{
push @vals, $iter->value while $iter->isnt_exhausted;
};
is ($@, q{}, q{Invoked two-arg iterator until exhausted});
is_deeply (\@vals, [], q{Two-arg iterator returned expected results});
## Two-arg irange (start, end), end == start. (3)
eval
{
$iter = irange (6, 6);
};
is ($@, q{}, q{Created two-arg iterator; no exception});
( run in 0.458 second using v1.01-cache-2.11-cpan-71847e10f99 )