use Test::More tests => 12;
use Graph;
my $g = Graph->new;
$g->add_edge(qw(e a));
$g->add_edge(qw(a r));
$g->add_edge(qw(r t));
$g->add_edge(qw(t h));
$g->add_edge(qw(h f));
$g->add_edge(qw(f r));
$g->add_edge(qw(r o));
$g->add_edge(qw(o m));
$g->add_edge(qw(m a));
$g->add_edge(qw(a b));
$g->add_edge(qw(b o));
$g->add_edge(qw(o v));
$g->add_edge(qw(v e));
is($g->graph_diameter, 7);
is($g->longest_path, 7);
my @p = $g->longest_path;
my $min = 0;
for my $i (0..$#p) {
$min = $i if $p[$i] lt $p[$min];
}
if ($min) {
push @p, splice @p, 0, $min;
}
print "# p = @p\n";
ok("@p" eq "a b t h f r o m" ||
"@p" eq "a r t h f b o m");
is($g->average_path_length(), 293 / 90);
# a-b: a-b : 1
# a-e: a-r-o-v-e : 4
# a-f: a-r-t-h-f : 4
# a-h: a-r-t-h : 3
# a-m: a-r-o-m : 3
# a-o: a-r-o : 2
# a-r: a-r : 1
# a-t: a-r-t : 2
# a-v: a-r-o-v : 3
# 23 / 9 = 2.56
is($g->average_path_length('a'), 23 / 9);
is($g->average_path_length('b'), 33 / 9);
is($g->average_path_length('c'), undef );
is($g->average_path_length('a', undef), 23 / 9);
is($g->average_path_length('b', undef), 33 / 9);
is($g->average_path_length(undef, 'a'), 27 / 9);
is($g->average_path_length(undef, 'b'), 33 / 9);
my $h = Graph->new;
$h->add_weighted_edge(qw(a b 2.3));
$h->add_weighted_edge(qw(a c 1.7));
is($h->shortest_path, 1.7);