author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Sat, 19 Jan 2013 23:54:47 +0000 | |
branch | refactoring-vmdata |
changeset 1986 | 9e63ab553922 |
parent 1818 | 2e5ed72e7dfd |
child 2015 | fbbdc7baf6f9 |
permissions | -rw-r--r-- |
1770 | 1 |
#require 'pry' |
2 |
||
3 |
require 'yaml' |
|
4 |
||
1806 | 5 |
|
6 |
# DO NOT EDIT following list to temporarily run one benchmark for testing. |
|
7 |
# You can run it by: |
|
8 |
# |
|
9 |
# rake <bench> |
|
10 |
# |
|
11 |
# for instance: |
|
12 |
# |
|
13 |
# rake Jasper |
|
14 |
# |
|
15 |
# alternatively, to run just stx:libjava version, run it by: |
|
16 |
# |
|
17 |
# ./benchmark-runner.st -b Jasper -n 1 |
|
18 |
# |
|
1770 | 19 |
TESTS = [ |
1809
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
20 |
# Order matters! |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
21 |
# Micro... |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
22 |
[ "Ackerman" , 8 ] , |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
23 |
[ "Ary" , 100000 ] , |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
24 |
[ "Hash" , 10000 ] , |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
25 |
[ "Strcat" , 5000000 ] , |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
26 |
|
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
27 |
# Macro... |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
28 |
[ "Groovy" , 5 ] , |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
29 |
[ "Saxon" , 10 ] , |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
30 |
# [ "Jasper" , 1 ] , |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
31 |
|
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
32 |
# Interop... |
1806 | 33 |
[ "MethodInvocation" , 500000000 ] , |
1809
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
34 |
|
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
35 |
[ "PrimitiveArguments" , 100000000 ] , |
1806 | 36 |
[ "ObjectArguments" , 100000000 ] , |
1809
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
37 |
[ "WrappedArguments" , 100000000 ] , |
1781 | 38 |
|
1809
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
39 |
[ "OverloadedMethods2" , 100000000 ] , |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
40 |
[ "OverloadedMethods" , 100000000 ] , |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
41 |
|
1781 | 42 |
# Broken |
43 |
# [ "CrossLanguageInvocation" , 500000000 ] , |
|
1770 | 44 |
# [ "Threadring" , 100000 ] , |
1785 | 45 |
|
1770 | 46 |
|
47 |
[] # terminator, to make commenting tests easy!!! |
|
48 |
] |
|
49 |
||
1785 | 50 |
RESULTS_LAST="result.txt" |
1809
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
51 |
RESULTS_LAST_CSV="result.csv" |
1785 | 52 |
RESULTS_LOG="results-log.txt" |
53 |
||
1809
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
54 |
# Defines how many times given benchmark is run. The minimal value |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
55 |
# is then taken. |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
56 |
BENCHMARK_RUNS=5 |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
57 |
|
1770 | 58 |
task :default => [:all] |
59 |
||
60 |
task :all => [:compile, :run] |
|
61 |
||
62 |
task :build => [ :compile ] |
|
63 |
||
64 |
task :compile do |
|
65 |
Dir.chdir 'java' do |
|
66 |
system 'ant' |
|
67 |
end |
|
68 |
end |
|
69 |
||
1798 | 70 |
task 'echo-classpath' do |
71 |
puts "export CLASSPATH=#{classpath()}" |
|
72 |
end |
|
1770 | 73 |
|
74 |
task :clean do |
|
75 |
Dir.chdir 'java' do |
|
76 |
system 'ant clean' |
|
77 |
end |
|
1785 | 78 |
rm_f RESULTS_LAST |
1770 | 79 |
end |
80 |
||
81 |
task :run do |
|
82 |
results = Hash.new |
|
83 |
TESTS.each do | spec | |
|
84 |
if spec.size == 2 |
|
1809
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
85 |
benchmark(spec[0], spec[1], results, BENCHMARK_RUNS) |
1770 | 86 |
end |
87 |
end |
|
88 |
||
89 |
results = Hash[results.sort] |
|
1785 | 90 |
|
91 |
write_results_txt(STDOUT, results) |
|
92 |
||
93 |
if File.exist? RESULTS_LAST |
|
94 |
File.delete(RESULTS_LAST) |
|
95 |
end |
|
1809
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
96 |
if File.exist? RESULTS_LAST_CSV |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
97 |
File.delete(RESULTS_LAST_CSV) |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
98 |
end |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
99 |
|
1785 | 100 |
write_results_txt_to_file(RESULTS_LAST, results) |
1809
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
101 |
write_results_csv_to_file(RESULTS_LAST_CSV, results) |
1785 | 102 |
write_results_txt_to_file(RESULTS_LOG, results) |
103 |
end |
|
104 |
||
105 |
# Generate tasks to run individual benchmarks |
|
106 |
TESTS.each do | spec | |
|
107 |
if (spec.size == 2) |
|
108 |
task spec[0] do |
|
109 |
results = Hash.new |
|
1809
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
110 |
benchmark(spec[0], spec[1], results, BENCHMARK_RUNS) |
1785 | 111 |
write_results_txt(STDOUT, results) |
1770 | 112 |
end |
1785 | 113 |
end |
114 |
end |
|
115 |
||
116 |
||
117 |
# Run given benchmark |
|
1809
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
118 |
def benchmark(test, passes, results, runs) |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
119 |
puts "Benchmarking #{test} (#{runs} passes)" |
1785 | 120 |
times = Hash.new |
1790
7415875de93d
More results + fix for running Smalltalk benchmarks (JIT enabled)
vranyj1
parents:
1789
diff
changeset
|
121 |
puts "export CLASSPATH=#{classpath()}" |
7415875de93d
More results + fix for running Smalltalk benchmarks (JIT enabled)
vranyj1
parents:
1789
diff
changeset
|
122 |
ENV['CLASSPATH'] = classpath() |
1809
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
123 |
|
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
124 |
[:jvm, :stx, :libjava, :stx2libjava].each do | platform | |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
125 |
times[platform] = measure(test, passes, platform, runs) |
1770 | 126 |
end |
1785 | 127 |
|
128 |
results[test] = times |
|
1770 | 129 |
end |
130 |
||
131 |
# Return a class path arguments to be passed to java/javac |
|
132 |
# (including '-cp') or an empty string |
|
133 |
def classpath() |
|
1800 | 134 |
return '/usr/share/java/groovy-all.jar:../libs/libs/saxon-9.1.0.8.jar:/usr/share/java/saxonb-9.1.0.8.jar:/usr/share/java/itext-2.1.7.jar:/usr/share/java/jasperreports.jar:/usr/share/java/commons-digester.jar:/usr/share/java/commons-logging.jar:/usr/share/java/commons-collections3.jar:/usr/share/java/commons-beanutils.jar:java/bin:.' |
1770 | 135 |
end |
136 |
||
137 |
||
1809
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
138 |
def measure(test, passes, platform, runs) |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
139 |
min = 999999999 |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
140 |
i = 1; |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
141 |
while (i <= runs) |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
142 |
puts "Pass #{i}" |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
143 |
t = measure_single(test, passes, platform) |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
144 |
if (t == 'N/A') |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
145 |
min = t |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
146 |
break; |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
147 |
end |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
148 |
if (min > t) |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
149 |
min = t |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
150 |
end |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
151 |
i = i + 1 |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
152 |
end |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
153 |
return min |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
154 |
end |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
155 |
|
1770 | 156 |
# Runs a given bench on given platform and return the time. |
157 |
# If bench fails (non-zero status value), raise an exception. |
|
1809
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
158 |
def measure_single(test, passes, platform) |
1770 | 159 |
if (platform == :'jvm') |
1790
7415875de93d
More results + fix for running Smalltalk benchmarks (JIT enabled)
vranyj1
parents:
1789
diff
changeset
|
160 |
command = "java stx.libjava.benchmarks.#{test} #{passes}" |
1770 | 161 |
elsif (platform == :'stx') |
162 |
command = "./benchmark-runner.sh --smalltalk -b #{test} -n #{passes} 2>&1" |
|
163 |
elsif (platform == :'libjava') |
|
164 |
command = "./benchmark-runner.sh --java -b #{test} -n #{passes} 2>&1" |
|
1781 | 165 |
elsif (platform == :'stx2libjava') |
166 |
command = "./benchmark-runner.sh --smalltalk2java -b #{test} -n #{passes} 2>&1" |
|
1770 | 167 |
else |
168 |
raise Exception.new("Unssuported platform: #{platform}") |
|
169 |
end |
|
1790
7415875de93d
More results + fix for running Smalltalk benchmarks (JIT enabled)
vranyj1
parents:
1789
diff
changeset
|
170 |
|
1770 | 171 |
puts " running: #{command}" |
172 |
output = `#{command}` |
|
173 |
if ($? != 0) |
|
174 |
puts output |
|
175 |
raise Exception.new("Command failed!") |
|
176 |
end |
|
177 |
execution_time = (output.scan /^EXECUTION TIME: N\/A/).last() |
|
178 |
if execution_time |
|
1785 | 179 |
puts " => N/A" |
1770 | 180 |
return "N/A" |
181 |
end |
|
182 |
||
183 |
execution_time = (output.scan /^EXECUTION TIME: \d*[\.\d]\d*$/).last() |
|
184 |
execution_time = execution_time.gsub /^EXECUTION TIME: /, '' |
|
1785 | 185 |
puts " => #{execution_time}" |
1809
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
186 |
return execution_time.to_i |
1781 | 187 |
end |
1785 | 188 |
|
189 |
||
190 |
def write_results_txt_to_file(filename, results) |
|
1789 | 191 |
File.open(filename, "a+") do |file| |
1785 | 192 |
write_results_txt(file, results) |
193 |
end |
|
194 |
end |
|
195 |
||
196 |
||
197 |
def write_results_txt(file, results) |
|
198 |
file.write("\n") |
|
199 |
file.write(Time.now.to_s) |
|
200 |
file.write("\n") |
|
201 |
values = [[ "Test", "JVM", "STX-S", "STX-J" , "STX-J2S" ]] |
|
1809
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
202 |
TESTS.each do | pair | |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
203 |
if (pair.size == 2) |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
204 |
key = pair[0] |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
205 |
if (results.has_key? key) |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
206 |
values << [ key, results[key][:jvm], results[key][:stx], results[key][:libjava], results[key][:stx2libjava] ] |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
207 |
end |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
208 |
end |
1785 | 209 |
end |
210 |
max_lengths = values[0].map { |val| val.length } |
|
211 |
values.each do |row| |
|
212 |
row.each_with_index do |elem, index| |
|
213 |
elem_size = elem.size |
|
214 |
max_lengths[index] = elem_size if elem_size > max_lengths[index] |
|
215 |
end |
|
216 |
end |
|
217 |
values.each do |val| |
|
218 |
format = max_lengths.map { |length| "%#{length}s" }.join(" " * 3) |
|
219 |
file.write(format % val) |
|
220 |
file.write("\n") |
|
221 |
end |
|
222 |
file.write("--\n") |
|
223 |
||
1798 | 224 |
end |
1809
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
225 |
|
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
226 |
def write_results_csv_to_file(filename, results) |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
227 |
File.open(filename, "a+") do |file| |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
228 |
write_results_csv(file, results) |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
229 |
end |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
230 |
end |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
231 |
|
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
232 |
|
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
233 |
def write_results_csv(file, results) |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
234 |
values = [[ "Test", "JVM", "STX-S", "STX-J" , "STX-J2S" ]] |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
235 |
TESTS.each do | pair | |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
236 |
if (pair.size == 2) |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
237 |
key = pair[0] |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
238 |
if (results.has_key? key) |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
239 |
values << [ key, results[key][:jvm], results[key][:stx], results[key][:libjava], results[key][:stx2libjava] ] |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
240 |
end |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
241 |
end |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
242 |
end |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
243 |
max_lengths = values[0].map { |val| val.length } |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
244 |
values.each do |row| |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
245 |
row.each_with_index do |elem, index| |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
246 |
elem_size = elem.size |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
247 |
max_lengths[index] = elem_size if elem_size > max_lengths[index] |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
248 |
end |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
249 |
end |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
250 |
values.each do |val| |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
251 |
format = max_lengths.map { |length| "%#{length}s , " }.join(" " * 3) |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
252 |
file.write(format % val) |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
253 |
file.write("\n") |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
254 |
end |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
255 |
end |
bfce0e9f497f
New results. rake now produces also .csv for easy copy-paste to result.ods
vranyj1
parents:
1806
diff
changeset
|
256 |