145 lines
3.2 KiB
Perl
145 lines
3.2 KiB
Perl
use strict;
|
|
use Test::More tests => 29;
|
|
use Iterator::Util;
|
|
|
|
# Check that ihead works as promised.
|
|
|
|
sub begins_with
|
|
{
|
|
my ($actual, $expected, $test_name) = @_;
|
|
|
|
$actual = substr($actual, 0, length $expected);
|
|
@_ = ($actual, $expected, $test_name);
|
|
goto &is;
|
|
}
|
|
|
|
my ($iter, $x, $next, @vals);
|
|
|
|
# ihead (3)
|
|
eval
|
|
{
|
|
$iter = ihead 5, imap { $_ * $_ } irange 4;
|
|
};
|
|
|
|
$x = $@;
|
|
is $x, q{}, q{Created ihead iterator, no errors};
|
|
|
|
@vals = ();
|
|
eval
|
|
{
|
|
push @vals, $iter->value while $iter->isnt_exhausted;
|
|
};
|
|
is $x, q{}, q{Executed ihead iterator, no errors};
|
|
is_deeply (\@vals, [16, 25, 36, 49, 64], q{ihead returned expected values});
|
|
|
|
|
|
# ihead, zero (3)
|
|
eval
|
|
{
|
|
$iter = ihead 0, imap { $_ * $_ } irange 4;
|
|
};
|
|
|
|
$x = $@;
|
|
is $x, q{}, q{Created ihead iterator, no errors};
|
|
|
|
@vals = ();
|
|
eval
|
|
{
|
|
push @vals, $iter->value while $iter->isnt_exhausted;
|
|
};
|
|
is $x, q{}, q{Executed ihead iterator, no errors};
|
|
is_deeply (\@vals, [], q{ihead returned expected values});
|
|
|
|
|
|
# ihead, negative (3)
|
|
eval
|
|
{
|
|
$iter = ihead -77, imap { $_ * $_ } irange 4;
|
|
};
|
|
|
|
$x = $@;
|
|
is $x, q{}, q{Created ihead iterator, no errors};
|
|
|
|
@vals = ();
|
|
eval
|
|
{
|
|
push @vals, $iter->value while $iter->isnt_exhausted;
|
|
};
|
|
is $x, q{}, q{Executed ihead iterator, no errors};
|
|
is_deeply (\@vals, [], q{ihead returned expected values});
|
|
|
|
|
|
# ihead, parameter error (4)
|
|
eval
|
|
{
|
|
$iter = ihead -77, 4;
|
|
};
|
|
|
|
$x = $@;
|
|
isnt $x, q{}, q{Created ihead iterator, no errors};
|
|
ok (Iterator::X->caught(), q{ihead exception: proper base class});
|
|
ok (Iterator::X::Parameter_Error->caught(), q{ihead exception: proper specific class});
|
|
begins_with ($x, q{Second parameter for ihead must be an Iterator},
|
|
q{ihead exception formatted properly.});
|
|
|
|
|
|
# ihead (3)
|
|
eval
|
|
{
|
|
$iter = imap { $_ * $_ } irange 4;
|
|
@vals = ihead 5, $iter;
|
|
$next = $iter->value;
|
|
};
|
|
|
|
is $@, q{}, q{Called ihead, no errors};
|
|
is_deeply (\@vals, [16, 25, 36, 49, 64], q{ihead returned expected values});
|
|
cmp_ok ($next, '==', 81, q{Iterator advanced correctly});
|
|
|
|
# ihead, zero (3)
|
|
eval
|
|
{
|
|
$iter = imap { $_ * $_ } irange 4;
|
|
@vals = ihead 0, $iter;
|
|
$next = $iter->value;
|
|
};
|
|
|
|
is $@, q{}, q{Created ihead iterator, no errors};
|
|
is_deeply (\@vals, [], q{ihead returned expected values});
|
|
cmp_ok ($next, '==', 16, q{Iterator advanced correctly});
|
|
|
|
# ihead, negative (3)
|
|
eval
|
|
{
|
|
$iter = imap { $_ * $_ } irange 4;
|
|
@vals = ihead -64, $iter;
|
|
$next = $iter->value;
|
|
};
|
|
|
|
is $@, q{}, q{Created ihead iterator, no errors};
|
|
is_deeply (\@vals, [], q{ihead returned expected values});
|
|
cmp_ok ($next, '==', 16, q{Iterator advanced correctly});
|
|
|
|
# ihead, undef (3)
|
|
eval
|
|
{
|
|
$iter = imap { $_ * $_ } irange 4, 6;
|
|
@vals = ihead undef, $iter;
|
|
};
|
|
|
|
is $@, q{}, q{Created ihead iterator, no errors};
|
|
is_deeply (\@vals, [16, 25, 36], q{ihead returned expected values});
|
|
ok ($iter->is_exhausted, q{ihead exhausted the iterator});
|
|
|
|
# ihead, parameter error (4)
|
|
eval
|
|
{
|
|
$iter = ihead -77, 4;
|
|
};
|
|
|
|
$x = $@;
|
|
isnt $x, q{}, q{Created ihead iterator, no errors};
|
|
ok (Iterator::X->caught(), q{ihead exception: proper base class});
|
|
ok (Iterator::X::Parameter_Error->caught(), q{ihead exception: proper specific class});
|
|
begins_with ($x, q{Second parameter for ihead must be an Iterator},
|
|
q{ihead exception formatted properly.});
|