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 )