##=== TEST.full.report - Report description for SAFECode -----*- perl -*---===##
#
# This file defines a report to be generated for the debugging tool version of
# SAFECode.
#
##===----------------------------------------------------------------------===##

# 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: program\s*([.0-9m:]+)', \&FormatTime],
 ["LLVM",        'LLVM-RUN-TIME: program\s*([.0-9m:]+)', \&FormatTime],
 ["SC",          'SC-RUN-TIME: program\s*([.0-9m:]+)', \&FormatTime],
 ["SC + OOB",    'OOB-RUN-TIME: program\s*([.0-9m:]+)', \&FormatTime],
 ["SC + PA",     'SCPA-RUN-TIME: program\s*([.0-9m:]+)', \&FormatTime],
 ["SC + DEBUG",  'SCDEBUG-RUN-TIME: program\s*([.0-9m:]+)', \&FormatTime],
 ["SC + DP",     'SCDP-RUN-TIME: program\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'],
 []
);

