#!/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"; my @results; my ($n,$last,$g, $size); my @counts = ( qw/5 10 50 100 200 500 1000/ ); for my $count (@counts) { print "Creating graph with ", $count * 3, " nodes and edges...\n"; my $rc = [ ]; push @$rc, time_it ( \&create, $count); print "Creating txt...\n"; print $g->as_ascii() if $count == 5; if ($Graph::Easy::VERSION < 0.25 && ($count > 500)) { push @$rc, 0; } else { push @$rc, time_it ( \&as_txt ); } push @$rc, $size; push @results, $rc; } print "Results\n"; for my $r (@results) { print join (" ", @$r),"\n"; } print " \n Graph::Easy v$Graph::Easy::VERSION\n " . join ("\n ", @counts) . "\n \n"; my $text = [ 'Creation', 'as_txt', 'Memory' ]; for my $i (0..2) { print " \n $text->[$i]\n"; for my $r (@results) { print " $r->[$i]\n"; } print " \n"; } 1; ############################################################################# sub time_it { my $time = time; my $r = shift; &$r(@_); my $took = sprintf ("%0.4f", time - $time); print "Took ${took}s\n"; $took; } 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+1) { 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"; $size = total_size($g); print "Graph objects takes $size bytes.\n"; }