class DerailedBenchmarks::StatsForFile

A class for reading in benchmark results and converting them to numbers for comparison

Example:

puts `cat muhfile.bench.txt`

  9.590142   0.831269  10.457801 ( 10.0)
  9.836019   0.837319  10.728024 ( 11.0)

x = StatsForFile.new(name: "muhcommit", file: "muhfile.bench.txt", desc: "I made it faster", time: Time.now)
x.values  #=> [11.437769, 11.792425]
x.average # => 10.5
x.name    # => "muhfile"

Attributes

desc[R]
name[R]
time[R]
values[R]

Public Class Methods

new(file:, name:, desc: "", time: ) click to toggle source
# File lib/derailed_benchmarks/stats_in_file.rb, line 21
def initialize(file:, name:, desc: "", time: )
  @file = Pathname.new(file)
  FileUtils.touch(@file)

  @name = name
  @desc = desc
  @time = time
end

Public Instance Methods

average() click to toggle source
# File lib/derailed_benchmarks/stats_in_file.rb, line 41
def average
  @average.to_f
end
call() click to toggle source
# File lib/derailed_benchmarks/stats_in_file.rb, line 30
def call
  load_file!

  @median = (values[(values.length - 1) / 2] + values[values.length/ 2]) / 2.0
  @average = values.inject(:+) / values.length
end
median() click to toggle source
# File lib/derailed_benchmarks/stats_in_file.rb, line 37
def median
  @median.to_f
end

Private Instance Methods

load_file!() click to toggle source
# File lib/derailed_benchmarks/stats_in_file.rb, line 45
        def load_file!
  @values = []
  @file.each_line do |line|
    line.match(/\( +(\d+\.\d+)\)/)
    begin
      values << BigDecimal($1)
    rescue => e
      raise e, "Problem with file #{@file.inspect}:\n#{@file.read}\n#{e.message}"
    end
  end

  values.sort!
  values.freeze
end