##=== TEST.safecode.report - Report description for SAFECode -*- perl -*---===##
#
# This file defines a report to be generated for the pool allocator tests.
#
##===----------------------------------------------------------------------===##

# Sort by program name
$SortCol = 0;
$TrimRepeatedPrefix = 1;

# FormatTime - Convert a time from 1m23.45 into 83.45
sub FormatTime {
  my $Time = shift;
  if ($Time =~ m/([0-9]+)[m:]([0-9.]+)/) {
    return sprintf("%7.3f", $1*60.0+$2);
  }

  return sprintf("%6.2f", $Time);
}


sub RuntimePercent {
  my ($Cols, $Col) = @_;
  if ($Cols->[$Col-1] ne "*" and $Cols->[4] ne "*" and
      $Cols->[4] != "0") {
    return sprintf "%7.2f", 100*$Cols->[$Col-1]/$Cols->[4];
  } else {
    return "n/a";
  }
}

@LatexColumns = (1, 5, 8, 12, 9, 13, 14, 15, 2, 16);

my $FREEBENCH = 'MultiSource/Benchmarks/FreeBench';
my $PTRDIST   = 'MultiSource/Benchmarks/Ptrdist';

# These are the columns for the report.  The first entry is the header for the
# column, the second is the regex to use to match the value.  Empty list create
# seperators, and closures may be put in for custom processing.
(
# Name
 ["Name:" , '\'([^\']+)\' Program'],
 ["LOC"   , 'LOC:\s*([0-9]+)'],
 [],
# Times
 ["GCC",            'GCC-RUN-TIME: real\s*([.0-9m:]+)', \&FormatTime],
 [],
 ["NonSCTime",      'CBE-RUN-TIME-NORMAL: real\s*([.0-9m:]+)', \&FormatTime],
 [],
 ["SCTime",        'CBE-RUN-TIME-SAFECODE: real\s*([.0-9m:]+)', \&FormatTime],
 [],
 ["PARTime",        'CBE-RUN-TIME-PARALLEL: real\s*([.0-9m:]+)', \&FormatTime],
 [],
# ["NumPools",       '([0-9]+).*Number of pools allocated'],
# ["Typesafe",       '([0-9]+).*Number of typesafe pools'],
# ["BumpPtr",        '([0-9]+).*Number of bump pointer pools'],
# ["PFE",            '([0-9]+).*Number of poolfree.s elided'],
# ["NumArgs",        '([0-9]+).*Number of function arguments added'],
# ["MaxArgs",        '([0-9]+).*Maximum function arguments added'],
# ["Nonprofit",      '([0-9]+).*Number of DSNodes not profitable'],
 []
);

