first commit
This commit is contained in:
96
perl/lib/Graph-Easy-0.76/bench/bench.pl
Normal file
96
perl/lib/Graph-Easy-0.76/bench/bench.pl
Normal file
@@ -0,0 +1,96 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
use Benchmark;
|
||||
use Graph::Easy;
|
||||
use Time::HiRes qw/time/;
|
||||
use strict;
|
||||
use Devel::Size qw/total_size/;
|
||||
|
||||
print "# Graph::Easy v", $Graph::Easy::VERSION,"\n";
|
||||
|
||||
print "Creating graph...\n";
|
||||
|
||||
my ($g,$n,$last);
|
||||
time_it ( \&create, shift);
|
||||
|
||||
print "Creating txt...\n";
|
||||
time_it ( \&as_txt );
|
||||
|
||||
# dump the text for later
|
||||
#print STDERR $g->as_txt(); exit;
|
||||
#print STDERR $g->as_graphviz(); exit;
|
||||
|
||||
# $g->timeout(20) if $g->can('timeout');
|
||||
print $g->as_ascii() if $g->nodes() < 40;
|
||||
|
||||
# for profile with -d:DProf
|
||||
#for (0..5) { $g->layout(); } exit;
|
||||
|
||||
print "\n";
|
||||
|
||||
exit if shift;
|
||||
|
||||
print "Benchmarking...\n";
|
||||
|
||||
$n = $g->node('1');
|
||||
|
||||
timethese (-5,
|
||||
{
|
||||
'node cnt' => sub { scalar $g->nodes(); },
|
||||
'edge cnt' => sub { scalar $g->edges(); },
|
||||
|
||||
'nodes' => sub { my @O = $g->nodes(); },
|
||||
'edges' => sub { my @O = $g->edges(); },
|
||||
|
||||
"conn's" => sub { $n->connections(); },
|
||||
|
||||
"succ's" => sub { scalar $n->successors(); },
|
||||
"succ' cnt" => sub { my @O = $n->successors(); },
|
||||
"edges_to" => sub { my @O = $n->edges_to($last) },
|
||||
# "layout" => sub { $g->layout(); },
|
||||
# "as_txt" => sub { $g->as_txt(); },
|
||||
|
||||
} );
|
||||
|
||||
sub time_it
|
||||
{
|
||||
my $time = time;
|
||||
|
||||
my $r = shift;
|
||||
|
||||
&$r(@_);
|
||||
|
||||
printf ("Took %0.4fs\n", time - $time);
|
||||
}
|
||||
|
||||
sub as_txt
|
||||
{
|
||||
my $t = $g->as_txt();
|
||||
}
|
||||
|
||||
sub create
|
||||
{
|
||||
my $cnt = abs(shift || 1000);
|
||||
|
||||
$g = Graph::Easy->new();
|
||||
|
||||
$n = Graph::Easy::Node->new('0');
|
||||
$last = Graph::Easy::Node->new('1');
|
||||
|
||||
for (2..$cnt)
|
||||
{
|
||||
my $node = Graph::Easy::Node->new($_);
|
||||
$g->add_edge($last, $node);
|
||||
my $n2 = Graph::Easy::Node->new($_.'A');
|
||||
$g->add_edge($last, $n2);
|
||||
my $n3 = Graph::Easy::Node->new($_.'B');
|
||||
$g->add_edge($last, $n3);
|
||||
$last = $node;
|
||||
}
|
||||
# prior to 0.25, the two calls to nodes() and edges() will take O(N) time, further
|
||||
# slowing down this routine by about 10-20%.
|
||||
print "Have now ", scalar $g->nodes(), " nodes and ", scalar $g->edges()," edges.\n";
|
||||
|
||||
print "Graph objects takes ", total_size($g), " bytes.\n";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user