Algorithm-DependencySolver
view release on metacpan or search on metacpan
t/03-traversal.t view on Meta::CPAN
'prerequisites' => [ ],
},
],
'output' => [ qw(a b c) ],
'extra_tests' => sub {
my ($solver, $traversal) = @_;
my $graph = $solver->get_Graph();
ok(
!$graph->has_edge('a', 'c'),
"did not get a redundant edge from a -> c"
);
},
},
#
# example of an invalid graph
#
{
'message' => 'invalid graph - cycle',
'input' => [
{
'id' => 'a',
'depends' => [ 'x' ],
'affects' => [ 'y' ],
'prerequisites' => [ ],
},
{
'id' => 'b',
'depends' => [ 'y' ],
'affects' => [ 'x' ],
'prerequisites' => [ ],
},
],
'output' => 'EXCEPTION',
},
);
###########################################################
TEST:
for my $test (@tests) {
my @operations;
for my $opp (@{ $test->{'input'} }) {
push @operations, Algorithm::DependencySolver::Operation->new(
%$opp
);
}
my $solver = Algorithm::DependencySolver::Solver->new(
'nodes' => \@operations
);
my $traversal = Algorithm::DependencySolver::Traversal->new(
'Solver' => $solver,
);
my $expected = $test->{'output'};
if ($expected eq 'EXCEPTION') {
throws_ok {
$traversal->dryrun();
} qr/Not a valid graph!/, $test->{'message'};
note($solver->to_s);
next TEST;
}
elsif (ref($expected) eq ref({})) {
$expected = any(@{ $expected->{'one_of'} });
}
my $got = [ map { $_->[0]{'id'} } @{ $traversal->dryrun() } ];
my $msg = $test->{'message'};
my $ok = cmp_deeply($got, $expected, $msg);
if (!$ok) {
diag("Got:\n", $solver->to_s);
}
else {
note($solver->to_s);
}
if ($test->{extra_tests}) {
$test->{extra_tests}->($solver, $traversal);
}
}
done_testing();
( run in 0.730 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )