1use lib 'lib';
2use Graph;
3use Devel::Size qw(size total_size);
4
5my $N = 16384;
6
7my $fmt = "%5s %8s %9s\n";
8my $fmr = "%5d %8d %9.1f\n";
9
10printf $fmt, "V", "S", "S/N";
11my $g0 = Graph->new;
12my $s0 = total_size($g0);
13printf $fmr, 0, $s0, 0;
14
15my $vr;
16for (my $n = 1; $n <= $N; $n *= 2) {
17    my $g0 = Graph->new;
18    $g0->add_vertex($_) for 1..$n;
19    my $s = total_size($g0);
20    $vr = ($s - $s0) / $n;
21    printf $fmr, $n, $s, $vr;
22}
23
24printf $fmt, "E", "S", "S/N";
25my $g1 = Graph->new;
26printf $fmr, 0, $s0, 0;
27
28my $er;
29for (my $n = 1; $n <= $N; $n *= 2) {
30    my $g1 = Graph->new;
31    $g1->add_edge(0, $_) for 1..$n;
32    my $s = total_size($g1);
33    $er = ($s - $s0 - $n * $vr) / $n;
34    printf $fmr, $n, $s, $er;
35}
36
37printf "Vertices / MB = %8.1f\n", 1048576/$vr;
38printf "Edges    / MB = %8.1f\n", 1048576/$er;
39