use Test::More tests => 152; use Graph; my $g = Graph->new; is($g->random_vertex, undef); is($g->random_edge, undef); is($g->random_successor('a'), undef); is($g->random_predecessor('a'), undef); for my $v (0..9) { $g->add_edge($v, 2 * $v); } # print "g = $g\n"; my $N = 30; for (1..$N) { my $v = $g->random_vertex(); ok($v >= 0 && $v <= 18); } for (1..$N) { my $e = $g->random_edge(); my ($u, $v) = @$e; is($v, 2 * $u); } for (1..$N) { my ($u, $v); do { $u = $g->random_vertex(); $v = $g->random_successor($u); } until (defined $v); is($v, 2 * $u); } for (1..$N) { my ($u, $v); do { $v = $g->random_vertex(); $u = $g->random_predecessor($v); } until (defined $u); is($v, 2 * $u); } my $g0 = Graph->random_graph(vertices => 30, directed => 0); my $g1 = Graph->random_graph(vertices => 30, directed => 1); my $g2 = Graph->random_graph(vertices => 30, edges => 100); my $g3 = Graph->random_graph(vertices => 30, edges_fill => 0.1); is($g0->vertices, 30); is($g0->edges, 218); ok($g0->undirected); is($g1->vertices, 30); is($g1->edges, 435); ok($g1->directed); is($g2->vertices, 30); is($g2->edges, 100); is($g3->vertices, 30); is($g3->edges, 44); # int(30*29/2*0.1+0.5) my $g4a = Graph->random_graph(vertices => 10, random_seed => 1234); my $g4b = Graph->random_graph(vertices => 10, random_seed => 1234); my $g4c = Graph->random_graph(vertices => 10, random_seed => 1235); my $g4d = Graph->random_graph(vertices => 10, random_seed => 1235); my $g4e = Graph->random_graph(vertices => 10); is ($g4a, $g4b); is ($g4c, $g4d); isnt($g4a, $g4c); isnt($g4a, $g4d); isnt($g4a, $g4e); isnt($g4c, $g4e); my $g5 = Graph->random_graph(vertices => 10, edges => 10, random_edge => sub { my ($g, $u, $v, $p) = @_; # Create two "boxes" so that vertices 0..4 # only have edges between each other, ditto # for vertices 5..9. my $a = $u < 5; my $b = $v < 5; return $a == $b ? $p : 0; }); for my $e ($g5->edges) { my ($u, $v) = @$e; my $a = $u < 5; my $b = $v < 5; is($a, $b, "u = $u, v = $v"); } my $g6 = Graph::random_graph(vertices => 10); isa_ok($g6, 'Graph'); is($g6->vertices, 10);