List-Gen
view release on metacpan or search on metacpan
t/listgen.t view on Meta::CPAN
}
{
my $fac; $fac = cache gen {$_ < 2 or $_ * $$fac[$_ - 1]};
t 'generators: factorial',
is => "@$fac[0 .. 10]", '1 1 2 6 24 120 720 5040 40320 362880 3628800';
}
{
my $zipgen = zipgen [range(0, 100)->filter(sub{$_ % 2})->all], range(-100, 9**9**9);
t 'zipgen',
is => "@$zipgen[5 .. 15]", '-98 7 -97 9 -96 11 -95 13 -94 15 -93',
is => $zipgen->size, 100;
}
{
my $zipgen = zipgen range(0, 100)->filter(sub{$_ % 2}), range(-100, 9**9**9);
t 'zipgen mutable',
is => "@$zipgen[5 .. 15]", '-98 7 -97 9 -96 11 -95 13 -94 15 -93',
is => $zipgen->size, 202;
$zipgen->apply;
t 'zipgen mutable apply',
is => $zipgen->size, 100;
}
{
my $zipgen = zipgen range(0, 10)->filter(sub{$_ % 2}), range(-100, 9**9**9);
my @got;
local $_;
push @got, $_ while <$zipgen>;
t 'zipgen mutable 2 - ',
is => "@got", '1 -100 3 -99 5 -98 7 -97 9 -96';
}
{
my $zipgen = zipgenmax [range(0, 100)->filter(sub{$_ % 2})->all], range(-100, 9**9**9);
t 'zipgenmax',
is => "@$zipgen[5 .. 15]", '-98 7 -97 9 -96 11 -95 13 -94 15 -93',
is => $zipgen->size, 9**9**9;
}
{
my $triples = zipwith {\@_} <1..>, <20..>, <300..>;
t zipwith =>
is => "@{$$triples[0]}", '1 20 300',
is => "@{$$triples[1]}", '2 21 301',
is => "@{$$triples[2]}", '3 22 302',
is => "@{$$triples[3]}", '4 23 303';
}
{
my $zip = zipwithab {$a . $b} <1..>, <20..>;
t zipwithab =>
is => $$zip[0], '120',
is => $$zip[1], '221',
is => $$zip[2], '322';
}
{
my $overlay = overlay gen {$_ ** 2};
t 'overlay',
is => "@$overlay[1 .. 4]", '1 4 9 16',
ok => eval {$$overlay[2] = 1},
is => "@$overlay[1 .. 4]", '1 1 9 16';
}
{
my $ofib; $ofib = overlay cache gen {$$ofib[$_ - 1] + $$ofib[$_ - 2]};
@$ofib[0, 1] = (0, 1);
t 'overlay: fibonacci 1',
is => "@$ofib[0 .. 15]", '0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610';
}
{
my $ofib; $ofib = gen {$$ofib[$_ - 1] + $$ofib[$_ - 2]}
->cache
->overlay( 0 => 0, 1 => 1 );
t 'overlay: fibonacci 2',
is => "@$ofib[0 .. 15]", '0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610';
}
t 'recursive',
is => join(' ', gen {self($_ - 1) + self($_ - 2)}
->overlay( 0 => 0, 1 => 1 )
->cache
->recursive
->slice(0 .. 15)
), '0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610';
eval {
my $cube = While {$_ < 30} gen {$_**3};
t 'while',
is_deeply => [$cube->all], [qw/0 1 8 27/];
my $gen = do {
my ($a, $b) = (0, 1);
gather {
($a, $b) = ($b, take($a) + $b)
}
}->while(sub {$_ < 700});
t 'while, iterative',
is_deeply => do {
my @fib;
push @fib, $_ for @$gen;
\@fib
}, [qw/0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610/];
my $while = While {$_ < 10} gen {$_};
t 'while, initial over',
is => $$while[20], undef;
t 'while, second over',
ok => !eval {my $x = $$while[20]; 1};
t 'while, second over msg',
like => $@, qr/past end/;
t 'while, under after over',
is => $$while[7], 7;
t 'while, over-- after over',
is => $$while[19], undef;
my $deref = While {$_ < 10} <0..99>;
t 'while, array deref outside foreach',
ok => !eval {my $x = join ' ' => @$deref; 1};
t 'while, array deref outside foreach msg',
like => $@, qr/past end/;
t 'while, second array deref',
is => "@$deref", '0 1 2 3 4 5 6 7 8 9';
1;
} or diag $@;
{
my $pow = Until {$_ > 20 } gen {$_**2};
t 'until',
( run in 1.577 second using v1.01-cache-2.11-cpan-5735350b133 )