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
# File lib/compare_time.rb, line 26 def print_results serialized_results = sort_results.map { |res| serialize_result(res) } puts serialized_results[0].colorize(:green) serialized_results.drop(1).each do |res| puts res end end
sort_results()
click to toggle source
# File lib/compare_time.rb, line 22 def sort_results @benchmarks.sort_by(&:last) end
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