packages feed

containers-benchmark-1.0: scripts/collect.pl

#!/usr/bin/perl
use strict;
use warnings;

-d $ARGV[0] or die "Missing name of directory to collect!";

sub read_csv($) {
  chomp(my $line = $_[0]);
  $line =~ /^"?([^,"]*)"?,([^,]*)(,|$)/ or die "Bad line $line!";
  return ($1, $2);
}

my %tests;
my %variants;

# Read individual results
foreach my $csv (glob "$ARGV[0]/*[!m].csv") {
  # Read time
  $csv =~ m#/([^/]*)_[0-9]*m?.csv$# or die "Bad csv filename $csv!";
  my $variant = $1;
  $variants{$variant} = 1;
  open(my $f,"<", $csv) or die "Cannot open file $csv!";
  my $_header = <$f>;
  foreach my $line (<$f>) {
    my ($name, $res) = read_csv($line);
    $tests{$name} = {} unless exists $tests{$name};
    exists $tests{$name}->{$variant} and die "Repeated data $name-$variant!";
    $tests{$name}->{$variant} = [$res];
  }
  close($f);

  # Read memory
  $csv =~ s#\.csv$#m.csv# or die "Bad csv filenaem $csv!";
  open($f,"<", $csv) or die "Cannot open file $csv!";
  $_header = <$f>;
  foreach my $line (<$f>) {
    my ($name, $res) = read_csv($line);
    length @{$tests{$name}->{$variant}} == 1 or die "Repeated data $name-$variant!";
    push @{$tests{$name}->{$variant}}, $res;
  }
  close($f);
}

# Write merged csv
open (my $f, ">", "$ARGV[0].csv") or die "Cannot open $ARGV[0].csv!";
print $f ";";
foreach my $v (sort keys %variants) {
  print $f "$v;;";
}
print $f "\n";

foreach my $test (sort keys %tests) {
  print $f "$test;";
  foreach my $v (sort keys %variants) {
    if (exists $tests{$test}->{$v}) {
      print $f "$tests{$test}->{$v}->[0];$tests{$test}->{$v}->[1];";
    } else {
      print $f ";;";
    }
  }
  print $f "\n";
}

# Write sizes of benchmark and modules.
print $f "\nFile;Size\n";
foreach my $n ("../dist/build/benchmark/benchmark",
               "../dist/build/benchmark/benchmark-tmp/Container/Map.o",
               "../dist/build/benchmark/benchmark-tmp/Container/Set.o",
               "../dist/build/benchmark/benchmark-tmp/Container/IntMap.o",
               "../dist/build/benchmark/benchmark-tmp/Container/IntSet.o") {
  $n =~ m#/([^/]*)$#;
  print $f "$1;" . (-s $n) . "\n";
}

close($f);