#!/bin/sh # -*- tcl -*- \ exec tclsh "$0" ${1+"$@"} # Arguments: stack.usage files. # Read them all. package require struct package require report struct::matrix stat stat add columns 11 stat add row {Case Tests Min Max Avg Sum d/Tests d/Min d/Max d/Avg d/Sum} set prec 3 set pf %.${prec}f ::report::defstyle simpletable {} { data set [split "[string repeat "| " [columns]]|"] top set [split "[string repeat "+ - " [columns]]+"] bottom set [top get] top enable bottom enable } ::report::defstyle captionedtable {{n 1}} { simpletable topdata set [data get] topcapsep set [top get] topcapsep enable tcaption $n set c [columns] for {set col 0} {$col < $c} {incr col} { pad $col left " " pad $col right " " } return } ::report::defstyle latex {} { set c [columns] set cl $c ; incr cl -1 data set "{} [split [string repeat "&" $cl] ""] \\\\\\\\\\\\hline" for {set col 0} {$col < $c} {incr col} { pad $col left " " pad $col right " " } return } proc getfile f { return [read [set fh [open $f r]]][close $fh] } array set db {} array set t {} set basefile [lindex $argv 0] set base 1 foreach f $argv { set min 1000 set max 0 set n 0 set dn 0 set sum 0 set dsum 0 set dmin 1000 set dmax 0 foreach line [split [getfile $f] \n] { foreach {test stack} [split $line] break set t($test) . set db($f,$test) $stack if {$stack > $max} {set max $stack} if {$stack < $min} {set min $stack} incr n incr sum $stack if {!$base} { if {![catch {set baseval $db($basefile,$test)}]} { set delta [expr {$baseval - $stack}] if {$delta > $dmax} {set dmax $delta} if {$delta < $dmin} {set dmin $delta} incr dn incr dsum $delta } } } set db(avg,$f) [set avg [expr {double($sum)/double($n)}]] if {$base} { set dmin "" set dmax "" set dn "" set dsum "" set db(dav,$f) [set davg ""] stat add row [list $f $n $min $max [format $pf $avg] $sum "" "" "" "" ""] } else { set db(dav,$f) [set davg [expr {double($dsum)/double($dn)}]] stat add row [list $f $n $min $max [format $pf $avg] $sum $dn $dmin $dmax [format $pf $davg] $dsum] } set db(dmi,$f) $dmin set db(dma,$f) $dmax set db(min,$f) $min set db(max,$f) $max set db(num,$f) $n set db(dnu,$f) $dn set db(tot,$f) $sum set base 0 } report::report ra [stat columns] style captionedtable 1 report::report rl [stat columns] style latex ra printmatrix2channel stat stdout puts "" #rl printmatrix2channel stat stdout exit