Data-Hopen

 view release on metacpan or  search on metacpan

t/120-dag.t  view on Meta::CPAN

#!perl
# 120-dag.t: basic tests of Data::Hopen::G::DAG
use rlib 'lib';
use HopenTest;
use Test::Deep::NoTest;     # NoTest since I am using eq_deeply directly
use Test::Fatal;

use Data::Hopen qw(:v);
use Data::Hopen::G::DAG;
use Data::Hopen::G::Op;
use Data::Hopen::G::NoOp;

diag "Testing Data::Hopen::G::DAG from $INC{'Data/Hopen/G/DAG.pm'}";

my $dag = Data::Hopen::G::DAG->new(name=>'foo');
isa_ok($dag, 'Data::Hopen::G::DAG');
is($dag->name, 'foo', 'Name was set by constructor');
$dag->name('bar');
is($dag->name, 'bar', 'Name was set by accessor');

ok($dag->_graph, 'DAG has a _graph');
ok($dag->_final, 'DAG has a _final');
ok($dag->empty, 'DAG is initially empty');
cmp_ok($dag->_graph->vertices, '==', 1, 'DAG initially has 1 vertex');

my @goals;
foreach my $goalname (qw(all clean)) {
    my $g1 = $dag->goal($goalname);
    push @goals, $g1;
    isa_ok($g1, 'Data::Hopen::G::Goal', 'DAG::goal()');
    is($g1->name, $goalname, 'DAG::goal() sets goal name');
    ok($dag->_graph->has_edge($g1, $dag->_final), 'DAG::goal() adds goal->final edge');
}

ok(!$dag->empty, 'DAG is not empty after adding goals');
cmp_ok($dag->_graph->vertices, '>', 1, 'DAG has >1 vertex after adding goals');
ok($dag->default_goal, 'DAG::goal() sets default_goal');
is($dag->default_goal->name, 'all', 'First call to DAG::goal() sets default goal name');

# add()
my $op = Data::Hopen::G::NoOp->new(name => 'some operation');
{
    local $VERBOSE = 3;     # for coverage of the hlog
    $dag->add($op);
}
ok($dag->_graph->has_vertex($op), 'add() adds node');
cmp_ok($dag->_graph->get_vertex_count($op), '==', 1, 'add() initial count 1');
$dag->add($op);
cmp_ok($dag->_graph->get_vertex_count($op), '==', 1, 'add() count still 1');

# init()

our @results;   # lexical visible in the following package
package MY::AppendOp {
    use parent 'Data::Hopen::G::Op';
    use Class::Tiny;
    sub _run {
        push @results, (shift)->name;
        return {};  # Must return a hashref
    }
} #MY::AppendOp

# Make a dummy DAG so it will run - what we care about is the init graph
$dag = Data::Hopen::G::DAG->new(name=>'dag_with_init');
my $goal = $dag->goal('some goal');
{



( run in 1.260 second using v1.01-cache-2.11-cpan-54e63673c56 )