use Test::More tests => 57;
use Graph;
my $g = Graph->new(multiedged => 1);
is( $g->get_edge_count('a', 'b'), 0 );
ok( $g->add_edge_by_id('a', 'b', 'red') );
is( $g->get_edge_count('a', 'b'), 1 );
ok( $g->has_edge('a', 'b') );
ok(!$g->has_edge('b', 'c') );
ok( $g->has_edge('a', 'b') );
ok(!$g->has_edge('b', 'c') );
ok( $g->has_edge_by_id('a', 'b', 'red') );
ok(!$g->has_edge_by_id('a', 'b', 'blue') );
ok( $g->has_edge_by_id('a', 'b', 'red') );
ok(!$g->has_edge_by_id('a', 'b', 'blue') );
$g->add_edge_by_id('a', 'b', 'blue');
is( $g->get_edge_count('a', 'b'), 2 );
ok( $g->has_edge_by_id('a', 'b', 'blue') );
ok( $g->has_edge_by_id('a', 'b', 'red') );
$g->add_edge('a', 'b');
ok( $g->has_edge('a', 'b') );
ok(!$g->has_edge('b', 'c') );
is( $g->get_edge_count('a', 'b'), 3 );
is( $g->add_edge_get_id('a', 'b'), 1);
is( $g->add_edge_get_id('a', 'b'), 2);
is( $g->add_edge_get_id('a', 'b'), 3);
is( $g->get_edge_count('a', 'b'), 6 );
ok( $g->delete_edge_by_id('a', 'b', 'blue') );
ok(!$g->has_edge_by_id('a', 'b', 'blue') );
ok( $g->has_edge_by_id('a', 'b', 'red') );
ok(!$g->delete_edge_by_id('a', 'b', 'green') );
ok(!$g->has_edge_by_id('a', 'b', 'blue') );
ok( $g->has_edge_by_id('a', 'b', 'red') );
ok(!$g->has_edge_by_id('a', 'b', 'green') );
ok( $g->delete_edge_by_id('a', 'b', 'red') );
my @i = sort $g->get_multiedge_ids('a', 'b');
is("@i", "0 1 2 3");
ok( $g->has_edge_by_id('a', 'b', '0') );
ok( $g->has_edge_by_id('a', 'b', '1') );
ok( $g->has_edge_by_id('a', 'b', '2') );
ok( $g->has_edge_by_id('a', 'b', '3') );
is( $g->get_edge_count('a', 'b'), 4 );
is( $g->delete_edge('a', 'b'), 'a,b' );
ok(!$g->has_edge_by_id('a', 'b', '0') );
ok(!$g->has_edge_by_id('a', 'b', '1') );
ok(!$g->has_edge_by_id('a', 'b', '2') );
ok(!$g->has_edge_by_id('a', 'b', '3') );
is( $g->get_multiedge_ids('a', 'b'), undef );
my $h = Graph->new;
eval '$h->add_edge_by_id("b", "c", "black")';
like($@, qr/add_edge_by_id: expected multiedged/);
eval '$h->has_edge_by_id("b", "c", "black")';
like($@, qr/has_edge_by_id: expected multiedged/);
eval '$h->get_multiedge_ids()';
like($@, qr/get_multiedge_ids: expected multiedged/);
eval '$h->delete_edge_by_id("b", "c", "black")';
like($@, qr/delete_edge_by_id: expected multiedged/);
$h = Graph->new(multiedged => 1, hyperedged => 1);
ok( $h->add_edge_by_id('u', 'v', 'w', 'genghis') );
ok( $h->add_edge_by_id('u', 'khan') );
ok( $h->has_edge('u' ,'v', 'w') );
ok(!$h->has_edge('u' ,'v') );
ok( $h->has_edge('u') );
ok(!$h->has_edge('v') );
ok(!$h->has_edge() );
ok( $h->has_edge_by_id('u', 'v', 'w', 'genghis') );
ok( $h->has_edge_by_id('u', 'khan') );
my $g1 = Graph->new;
ok ( !$g1->multiedged );
my $g2 = Graph->new( multiedged => 1 );
ok ( $g2->multiedged );
eval 'my $g3 = Graph->new( multiedged => 1, countedged => 1 )';
like ( $@, qr/both countedged and multiedged/ );