Iterator-Util

 view release on metacpan or  search on metacpan

t/irange.t  view on Meta::CPAN

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 )