115 lines
3.3 KiB
Perl
115 lines
3.3 KiB
Perl
#!/usr/bin/perl -w
|
|
|
|
use Test::More;
|
|
use strict;
|
|
|
|
BEGIN
|
|
{
|
|
plan tests => 44;
|
|
chdir 't' if -d 't';
|
|
use lib '../lib';
|
|
use_ok ("Graph::Easy::Layout::Chain") or die($@);
|
|
use_ok ("Graph::Easy") or die($@);
|
|
};
|
|
|
|
can_ok ("Graph::Easy::Layout::Chain", qw/
|
|
new error
|
|
length nodes add_node layout
|
|
/);
|
|
|
|
#############################################################################
|
|
# chain tests
|
|
|
|
my $c = 'Graph::Easy::Layout::Chain';
|
|
|
|
my $graph = Graph::Easy->new();
|
|
is (ref($graph), 'Graph::Easy');
|
|
is ($graph->error(), '', 'no error yet');
|
|
|
|
my ($node, $node2) = $graph->add_edge('A','B');
|
|
|
|
my $chain = Graph::Easy::Layout::Chain->new(
|
|
start => $node, graph => $graph );
|
|
|
|
is (ref($chain), $c, 'new() seemed to work');
|
|
is ($chain->error(), '', 'no error');
|
|
is ($chain->start(), $node, 'start node is $node');
|
|
is ($chain->end(), $node, 'end node is $node');
|
|
|
|
is ($node->{_chain}, $chain, 'chain stored at node');
|
|
is ($chain->length(), 1, 'length() is 1');
|
|
is ($chain->length($node), 1, 'length($node) is 1');
|
|
|
|
$chain->add_node($node2);
|
|
|
|
is ($node->{_chain}, $chain, 'chain stored at node');
|
|
is ($node2->{_chain}, $chain, 'chain stored at node2');
|
|
is ($chain->length(), 2, 'length() is now 2');
|
|
is ($chain->start(), $node, 'start node is $node');
|
|
is ($chain->end(), $node2, 'end node is $node2');
|
|
is ($chain->length($node), 2, 'length($node) is 2');
|
|
is ($chain->length($node2), 1, 'length($node2) is 1');
|
|
|
|
|
|
#############################################################################
|
|
# merging two chains
|
|
|
|
my ($node3, $node4) = $graph->add_edge('C','D');
|
|
|
|
my $other = $c->new ( start => $node3, graph => $graph );
|
|
|
|
is (ref($other), $c, 'new() seemed to work');
|
|
is ($other->error(), '', 'no error');
|
|
is ($other->length(), 1, 'length() is 1');
|
|
is ($other->start(), $node3, 'start node is $node3');
|
|
is ($other->end(), $node3, 'end node is $node3');
|
|
|
|
$other->add_node($node4);
|
|
is ($other->length(), 2, 'length() is now 2');
|
|
is ($other->start(), $node3, 'start node is $node3');
|
|
is ($other->end(), $node4, 'end node is $node4');
|
|
|
|
#diag ("merging chains\n");
|
|
|
|
$chain->merge($other);
|
|
|
|
is ($other->error(), '', 'no error');
|
|
is ($other->length(), 0, 'other length() is still 0');
|
|
is ($other->start(), undef, 'start node is $node3');
|
|
is ($other->end(), undef, 'end node is $node4');
|
|
|
|
is ($chain->error(), '', 'no error');
|
|
is ($chain->length(), 4, 'chain length() is now 4');
|
|
is ($chain->start(), $node, 'start node is $node3');
|
|
is ($chain->end(), $node4, 'end node is $node4');
|
|
|
|
my @nodes = $chain->nodes();
|
|
|
|
is_deeply (\@nodes, [ $node, $node2, $node3, $node4 ], 'nodes got merged');
|
|
|
|
#############################################################################
|
|
# merging two chains, with offset
|
|
|
|
my ($node5, $node6) = $graph->add_edge('E','F');
|
|
|
|
$other = $c->new ( start => $node5, graph => $graph );
|
|
$other->add_node($node6);
|
|
|
|
# merge $chain into $other, but keep the first 3 nodes of $chain
|
|
|
|
$other->merge($chain, $node3);
|
|
|
|
is ($chain->length(), 4, 'left all four nodes');
|
|
is ($other->length(), 4, 'consumed two nodes');
|
|
|
|
@nodes = $chain->nodes();
|
|
is_deeply (\@nodes, [ $node, $node2, $node3, $node4 ], 'nodes got merged');
|
|
@nodes = $other->nodes();
|
|
is_deeply (\@nodes, [ $node5, $node6, $node3, $node4 ], 'other got two nodes');
|
|
|
|
for my $node ( @nodes )
|
|
{
|
|
is ($node->{_chain}, $other, 'node got set to new chain');
|
|
}
|
|
|