diff options
author | Steve Bennett <steveb@workware.net.au> | 2020-06-11 09:02:00 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2023-02-13 10:44:09 +1000 |
commit | 3d159dad2b93ab3033224edf2d29f7602a955e3e (patch) | |
tree | e5e57ea34e3973bf36977c3465cae48a9f75d89c | |
parent | d8f305d19fd51e5e8b668819116f513d47608d7e (diff) | |
download | jimtcl-3d159dad2b93ab3033224edf2d29f7602a955e3e.zip jimtcl-3d159dad2b93ab3033224edf2d29f7602a955e3e.tar.gz jimtcl-3d159dad2b93ab3033224edf2d29f7602a955e3e.tar.bz2 |
improvements to tools/benchtable.tcl
Handles decimal times
Better formatting.
Still need to avoid duplication with bench.tcl
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r-- | tools/benchtable.tcl | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/tools/benchtable.tcl b/tools/benchtable.tcl index 1ac9583..0f686d7 100644 --- a/tools/benchtable.tcl +++ b/tools/benchtable.tcl @@ -5,6 +5,40 @@ # Copyright (C) 2005 Pat Thoyts <patthoyts@users.sourceforge.net> # +proc changed_amount {firstvalue v} { + set x [expr {($v + 0.0) / $firstvalue}] + if {$x >= 0.99 && $x <= 1.01} { + set val . + } elseif {$v > $firstvalue} { + set p [expr {(($v - $firstvalue) * 100.0) / $firstvalue}] + set val [format "%+3.0f" $p]% + } else { + set p [expr {(($firstvalue - $v) * 100.0) / $firstvalue}] + set val [format "%+3.0f" -$p]% + } + return $val +} + +proc format_us_time {us} { + set units {2 ps 1 ns 0 us -1 ms -2 s} + + if {$us >= 1e8} { + # >= 100 seconds + return [format "%.0fs" [expr {$us / 1e6}]] + } + + # How many digits to the left of the decimal place + set leftdigits [expr {int(floor(log10($us)) + 1)}] + # Work out how much to shift by, in increments of 10^3 + set shift3 [expr {(-$leftdigits / 3) + 1}] + set shift [expr {$shift3 * 3}] + # Always show 3 significant digits + set decimals [expr {3 - ($leftdigits + $shift)}] + set name [dict get $units $shift3] + set value $($us * pow(10.0,$shift)) + return [format "%.${decimals}f%s" $value $name] +} + proc main {filename} { set versions {} array set bench {} @@ -26,13 +60,20 @@ proc main {filename} { puts "" foreach test [lsort [array names bench]] { + set col 0 puts -nonewline "[format {% 20s} $test] " foreach v $bench($test) { if {$v eq "F"} { - puts -nonewline " F " + set val "F" } else { - puts -nonewline [format "% 6d " $v] + if {$col == 0} { + set val [format_us_time $v] + } else { + set val [changed_amount [lindex $bench($test) 0] $v] + } } + puts -nonewline [format "%6s " $val] + incr col } puts "" } |