1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
#!/usr/bin/env ruby
def usage()
STDERR.puts "Usage: #{$0} space|time <runfile>"
exit 1
end
def puthline
puts "\\\\\\hline"
end
def makehashkey(filename,parms)
return filename + ' ' + parms
end
def checkvalues(filename,parms)
if filename == ''
STDERR.puts "filename is undefined"
exit 1
end
if parms == ''
STDERR.puts "parms is undefined"
exit 1
end
end
def orderedkeys(ht)
return ht.keys.sort
end
def makebestlist(ftab,ptab,tab)
bestlist = Hash.new()
ftab.each_key do |filename|
tl = []
ptab.each_key do |parms|
t = tab[makehashkey(filename,parms)]
if t
tl.push t
end
end
bestlist[filename] = tl.min
end
return bestlist
end
def maketab(filenametab,parmstab,datestring,valuehash)
numoffiles=filenametab.length
puts "\\begin{sidewaystable}"
puts "\\begin{center}"
puts "\\begin{small}"
puts "\\begin{tabular}{|l|*{#{numoffiles}}{r|}}\\hline"
puts "parameter & \\multicolumn{#{numoffiles}}{c|}{files}"
puthline
orderedkeys(filenametab).each do |filename|
print "&#{filename}"
end
puthline
bestlist=makebestlist(filenametab,parmstab,valuehash)
orderedkeys(parmstab).each do |parms|
print "\\texttt{#{parms}}"
orderedkeys(filenametab).each do |filename|
print "&"
v = valuehash[makehashkey(filename,parms)]
if v
if v == bestlist[filename]
printf("\\textbf{%.2f}",v)
else
printf("%.2f",v)
end
end
end
puthline
end
print <<'TEXT'
\end{tabular}
\end{small}
\end{center}
TEXT
puts "\\caption{run at #{datestring}}"
puts "\\end{sidewaystable}"
end
if ARGV.length != 2
usage()
end
showtime=false
showspace=false
if ARGV[0] == 'time'
settime=true
elsif ARGV[0] == 'space'
setspace=true
elsif ARGV[0] == 'time+space'
settime=true
setspace=true
else
usage()
end
fname=ARGV[1]
begin
f = File.open(fname,"r")
rescue => err
STDERR.print "#{$0}: cannot open file \"#{fname}\": #{err}\n"
exit 1
end
filenametab = Hash.new()
parmstab = Hash.new()
runtimes = Hash.new()
spacereq = Hash.new()
datestring=''
parms=''
filename=''
f.each_line do |line|
m = line.match(/# RUN ([a-zA-Z0-9\.:]*) (.*)/)
if m
filename = m[1]
filenametab[filename] = true
parms = m[2]
if parms == ''
parms='nothing'
end
parmstab[parms] = true
else
t = line.match(/# TIME overall ([0-9\.]*)/)
if t
checkvalues(filename,parms)
timeresult=t[1].to_f
runtimes[makehashkey(filename,parms)] = timeresult
else
s = line.match(/# combined space peak in megabytes: ([0-9\.]*)/)
if s
checkvalues(filename,parms)
space=s[1]
spacereq[makehashkey(filename,parms)] = space.to_f
else
d = line.match(/# DATE ([0-9\-\:]*)/)
if d
datestring=d[1]
end
end
end
end
end
print <<'TEXT'
\documentclass[11pt]{article}
\usepackage{rotating}
\usepackage{a4wide}
\begin{document}
TEXT
if settime
maketab(filenametab,parmstab,datestring,runtimes)
end
if setspace
maketab(filenametab,parmstab,datestring,spacereq)
end
print <<'TEXT'
\end{document}
TEXT
|