Class: Benchmark::Comparer
- Inherits:
-
Object
- Object
- Benchmark::Comparer
- Defined in:
- lib/better-benchmark/comparer.rb
Instance Method Summary collapse
-
#initialize(argv) ⇒ Comparer
constructor
Expected column layout of the CSV files is: <identifier of thing tested>,<time in fractional seconds>.
- #print_usage ⇒ Object
- #run ⇒ Object
Constructor Details
#initialize(argv) ⇒ Comparer
Expected column layout of the CSV files is: <identifier of thing tested>,<time in fractional seconds>
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 |
# File 'lib/better-benchmark/comparer.rb', line 13 def initialize( argv ) @iterations = 10 @executable = 'ruby' while argv.any? arg = argv.shift case arg when '-p' @max_p = argv.shift else if @file1.nil? @file1 = arg elsif @file2.nil? @file2 = arg end end end if @file1.nil? || @file2.nil? print_usage exit 2 end @timings_before = Hash.new { |h,k| h[k] = Array.new } @timings_after = Hash.new { |h,k| h[k] = Array.new } end |
Instance Method Details
#print_usage ⇒ Object
5 6 7 |
# File 'lib/better-benchmark/comparer.rb', line 5 def print_usage puts "bbench-compare [-p <max p-value>] <timings1.csv> <timings2.csv>" end |
#run ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/better-benchmark/comparer.rb', line 40 def run CSV.foreach(@file1) do |row| @timings_before[ row[0] ] << row[1].to_f end CSV.foreach(@file2) do |row| @timings_after[ row[0] ] << row[1].to_f end run_results = Hash.new @timings_before.each_key do |thing_tested| results = Benchmark.compare_times( @timings_before[thing_tested], @timings_after[thing_tested], @max_p ) improvement = ( results[:results2][:mean] - results[:results1][:mean] ) / results[:results1][:mean] run_results[thing_tested] = { improvement: improvement, significant: results[:significant] } puts( "%s\t%+.1f%%\t%s" % [thing_tested, improvement * 100.0, results[:significant] ? '' : '*' ] ) end run_results end |