The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 35;

use Graph;

{
    my $g = Graph->new;
    $g->add_weighted_vertex('a', 3);
    is($g, "a");
    is($g->get_vertex_weight('a'), 3);
}

{
    my $g = Graph->new;
    $g->add_vertex('x');
    $g->add_weighted_vertex('a', 3);
    is($g, "a,x");
    is($g->get_vertex_weight('a'), 3);
    is($g->get_vertex_weight('x'), undef);
    ok($g->has_vertex('a'));
    ok($g->has_vertex('x'));
}

{
    my $g = Graph->new;
    $g->add_edge('x', 'y');
    $g->add_weighted_edge('b', 'c', 4);
    is($g, "b-c,x-y");
    is($g->get_edge_weight('b', 'c'), 4);
    is($g->get_edge_weight('x', 'y'), undef);
    ok($g->has_vertex('b'));
    ok($g->has_vertex('c'));
    ok($g->has_edge('b', 'c'));
    ok($g->has_vertex('x'));
    ok($g->has_vertex('y'));
    ok($g->has_edge('x', 'y'));
}

{
    my $g = Graph->new;
    $g->add_weighted_edge('b', 'c', 4);
    is($g, "b-c");
    is($g->get_edge_weight('b', 'c'), 4);
    ok($g->has_vertex('b'));
    ok($g->has_vertex('c'));
    ok($g->has_edge('b', 'c'));
}

{
    my $g = Graph->new;
    $g->add_vertex('a');
    $g->add_vertex('b');
    $g->add_vertex('c');
    $g->add_weighted_vertex('x', 3);
    is($g, "a,b,c,x");
    is($g->get_vertex_weight('a'), undef);
    is($g->get_vertex_weight('b'), undef);
    is($g->get_vertex_weight('c'), undef);
    is($g->get_vertex_weight('x'), 3);
}

{
    my $g = Graph->new;
    $g->add_edge('a', 'b');
    $g->add_edge('b', 'c');
    $g->add_edge('c', 'a');
    $g->add_weighted_edge('c', 'b', 4);
    is($g, "a-b,b-c,c-a,c-b");
    ok($g->has_vertex('a'));
    ok($g->has_vertex('b'));
    ok($g->has_vertex('c'));
    ok($g->has_edge('a', 'b'));
    ok($g->has_edge('b', 'c'));
    ok($g->has_edge('c', 'a'));
    ok($g->has_edge('c', 'b'));
}

{
    my $g = Graph->new;
    $g->add_vertex('a');
    $g->add_vertex('b');
    $g->add_vertex('c');
    $g->add_edge('a', 'b');
    $g->add_edge('a', 'c');
    $g->add_edge('c', 'd');
    $g->delete_vertex('b');
    $g->add_edge('a', 'b');
    $g->add_weighted_vertex('e', 4);
    is($g, "a-b,a-c,c-d,e");
}