class CompareTime

Attributes

benchmarks[R]

Public Class Methods

new(repetitions = 1, silence_output: true) click to toggle source
# File lib/compare_time.rb, line 8
def initialize(repetitions = 1, silence_output: true)
  @silence_output = silence_output
  @repetitions = repetitions
  @benchmarks = {}
end

Public Instance Methods

compare(symbol, &block) click to toggle source
# File lib/compare_time.rb, line 14
def compare(symbol, &block)
  if @silence_output
    silence_stdout { execute_and_save(symbol, block) }
  else
    execute_and_save(symbol, block)
  end and self
end
Also aliased as: with
print_results() click to toggle source
sort_results() click to toggle source
# File lib/compare_time.rb, line 22
def sort_results
  @benchmarks.sort_by(&:last)
end
with(symbol, &block)
Alias for: compare

Private Instance Methods

execute_and_save(symbol, block) click to toggle source
# File lib/compare_time.rb, line 43
def execute_and_save(symbol, block)
  if @repetitions == 1
    @benchmarks[symbol] = single_repetition(block)
  else
    @benchmarks[symbol] = multiple_repetitions(block)
  end
end
multiple_repetitions(block) click to toggle source
# File lib/compare_time.rb, line 55
def multiple_repetitions(block)
  arr = []
  @repetitions.times do
    arr << single_repetition(block)
  end
  arr.inject(0.0) { |sum, el| sum + el } / arr.size
end
serialize_result(arr) click to toggle source
# File lib/compare_time.rb, line 39
def serialize_result(arr)
  "#{arr[0]}: #{'%.10f' % arr[1]}"
end
silence_stdout(&block) click to toggle source
# File lib/compare_time.rb, line 63
def silence_stdout(&block)
  original_stdout = $stdout
  $stdout = StringIO.new
  block.call
ensure
  $stdout = original_stdout
end
single_repetition(block) click to toggle source
# File lib/compare_time.rb, line 51
def single_repetition(block)
  Benchmark.realtime(&block)
end