Data-Hopen
view release on metacpan or search on metacpan
t/125-dag-links.t view on Meta::CPAN
#!perl
# t/124-dag-merge.t: test Data::Hopen::G::DAG's warnings on _run()
use rlib 'lib';
use HopenTest;
use Test::Fatal;
use Data::Hopen;
use Data::Hopen::Scope::Hash;
use Data::Hopen::Scope::Environment;
use Data::Hopen::G::Link;
$Data::Hopen::VERBOSE = 10; # for coverage
run();
done_testing();
sub make_dag { # See t/121-dag-single-goal.t for the explanation of this
my ($link) = @_;
my $dag = hnew DAG => 'dag';
my $goal = $dag->goal('all');
isa_ok($goal, 'Data::Hopen::G::Goal');
# Make a first op
my $op1 = hnew CollectOp => 'op1', levels => 3;
isa_ok($op1,'Data::Hopen::G::CollectOp');
$dag->connect($op1, $link, $goal);
return wantarray ? ($dag, $op1, $goal) : $dag;
} #make_dag()
{ # Link with fixed output
package FixedLink;
use Data::Hopen;
use parent 'Data::Hopen::G::Link';
sub _run {
my ($self, %args) = getparameters('self', [qw(; visitor)], @_);
return { xyzzy => 'plugh' };
}
}
{ # Link that adds to its inputs
package AdditiveLink;
use Data::Hopen;
use parent 'Data::Hopen::G::Link';
use Class::Tiny {to_add => sub { +{ xyzzy => 'plugh' } } };
sub _run {
my ($self, %args) = getparameters('self', [qw(; visitor)], @_);
my $inputs = $self->scope->as_hashref(-levels => 3);
return +{ %$inputs, %{$self->to_add} };
}
}
{ # Link that modifies its inputs
package MutantLink;
use Data::Hopen;
use parent 'Data::Hopen::G::Link';
sub _run {
my ($self, %args) = getparameters('self', [qw(; visitor)], @_);
my $inputs = $self->scope->as_hashref;
my $multiplier = $inputs->{multiplier} // 2;
$inputs->{foo} *= $multiplier if exists $inputs->{foo};
return $inputs;
}
( run in 0.772 second using v1.01-cache-2.11-cpan-54e63673c56 )