use Test::More tests => 75; use strict; use Graph; sub Foo::new { bless { foo => $_[1] }, $_[0]; } sub Foo::xyz { 1; } sub Bar::new { bless { bar => $_[1] }, $_[0]; } sub Bar::xyz { 1; } { package Bar; use overload '""' => \&str, eq => \&eq, ne => \≠ sub str { "" } sub eq { my $d0 = defined $_[0]->{bar}; my $d1 = defined $_[1]->{bar}; $d0 && $d1 ? $_[0]->{bar} eq $_[1]->{bar} : $d0 || $d0 ? 0 : 1; } sub ne { my $d0 = defined $_[0]->{bar}; my $d1 = defined $_[1]->{bar}; $d0 && $d1 ? $_[0]->{bar} ne $_[1]->{bar} : $d0 || $d0 ? 1 : 0; } } sub rt_17159 { my $g = Graph::Undirected->new; my ($v1, $v2, $v3, $v4) = @_; $g->add_vertices($v1, $v2, $v3, $v4); $g->add_edges([$v1,$v2],[$v3,$v4],[$v3,$v2]); for my $v ($v1, $v2, $v3, $v4) { rt_17159_check($v); } my @ap = $g->articulation_points; for my $ap (@ap) { rt_17159_check($ap); } sub rt_17159_check { my $z = shift; ok($z->xyz()); } } rt_17159(Foo->new(), Foo->new(), Foo->new(), Foo->new()); rt_17159(Bar->new(1), Bar->new(2), Bar->new(3), Bar->new(4)); rt_17159(Bar->new(), Bar->new(), Bar->new(), Bar->new()); sub rt_17160 { my $g = Graph::Undirected->new; my ($v1, $v2, $v3, $v4) = @_; $g->add_vertices($v1, $v2, $v3, $v4); $g->add_edges([$v1,$v2],[$v3,$v4],[$v3,$v2]); for my $v ($v1, $v2, $v3, $v4) { rt_17160_check($v); } my @cc = $g->connected_components; for my $ref (@cc) { for (@$ref) { rt_17160_check($_); } } sub rt_17160_check { my $z = shift; ok($z->xyz()); } } rt_17160(Foo->new(), Foo->new(), Foo->new(), Foo->new()); rt_17160(Bar->new(1), Bar->new(2), Bar->new(3), Bar->new(4)); rt_17160(Bar->new(), Bar->new(), Bar->new(), Bar->new()); sub rt_17161 { my $g = Graph::Undirected->new; my ($v1, $v2, $v3, $v4) = @_; $g->add_vertices($v1, $v2, $v3, $v4); $g->add_edges([$v1,$v2],[$v3,$v4],[$v3,$v2]); for my $v ($v1, $v2, $v3, $v4) { rt_17161_check($v); } my @b = $g->bridges; for my $ref (@b) { for (@$ref) { rt_17161_check($_); } } sub rt_17161_check { my $z = shift; ok($z->xyz()); } } rt_17160(Foo->new(), Foo->new(), Foo->new(), Foo->new()); rt_17160(Bar->new(1), Bar->new(2), Bar->new(3), Bar->new(4)); rt_17160(Bar->new(), Bar->new(), Bar->new(), Bar->new()); sub rt_17162 { my $g = Graph::Undirected->new; my ($v1, $v2, $v3, $v4) = @_; $g->add_vertices($v1, $v2, $v3, $v4); $g->add_edges([$v1,$v2],[$v3,$v4],[$v3,$v2]); for my $v ($v1, $v2, $v3, $v4) { rt_17162_check($v); } my $cl = ref $v1; my $cg = $g->connected_graph(super_component => sub { $cl->new(); }); my @cv = $cg->vertices; for my $ref (@cv) { rt_17162_check($ref); } sub rt_17162_check { my $z = shift; ok($z->xyz()); } } rt_17162(Foo->new(), Foo->new(), Foo->new(), Foo->new()); rt_17162(Bar->new(1), Bar->new(2), Bar->new(3), Bar->new(4)); rt_17162(Bar->new(), Bar->new(), Bar->new(), Bar->new()); sub rt_17163 { my $g = Graph::Undirected->new; my ($v1, $v2, $v3, $v4) = @_; $g->add_vertices($v1,$v2,$v3,$v4); $g->add_edges([$v1,$v2],[$v3,$v4],[$v3,$v2]); my @spd = $g->SP_Dijkstra($v1,$v4); ok(@spd >= 2); } rt_17163(Foo->new(), Foo->new(), Foo->new(), Foo->new()); rt_17163(Bar->new(1), Bar->new(2), Bar->new(3), Bar->new(4)); rt_17163(Bar->new(), Bar->new(), Bar->new(), Bar->new()); sub rt_17164 { my $g = Graph::Undirected->new; my ($v1, $v2, $v3, $v4) = @_; $g->add_vertices($v1,$v2,$v3,$v4); $g->add_edges([$v1,$v2],[$v3,$v4],[$v3,$v2]); my @spbf = $g->SP_Bellman_Ford($v1,$v4); ok(@spbf >= 2); } rt_17164(Foo->new(), Foo->new(), Foo->new(), Foo->new()); rt_17164(Bar->new(1), Bar->new(2), Bar->new(3), Bar->new(4)); rt_17164(Bar->new(), Bar->new(), Bar->new(), Bar->new()); { # rt.cpan.org: 17592: articulation_points doesn't find all vertices my $g = Graph::Undirected->new; my $v1 = Foo->new(); my $v2 = Foo->new(); my $v3 = Foo->new(); my $v4 = Foo->new(); my $v5 = Foo->new(); my $v6 = Foo->new(); my $v7 = Foo->new(); $g->add_vertices($v1,$v2,$v3,$v4,$v5,$v6,$v7); $g->add_edges([$v1,$v2],[$v2,$v3],[$v3,$v4], [$v5,$v6],[$v6,$v7]); my @rts = $g->articulation_points; my %rts; @rts{@rts} = @rts; is(@rts, 3); ok($rts{$v2}); ok($rts{$v3}); ok($rts{$v6}); }