##=== 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],
 [],
 ["SC Time",        'CBE-RUN-TIME-SAFECODE: 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'],
 []
);

