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 )