Module: BenchmarkDriver::Repeater

Defined in:
lib/benchmark_driver/repeater.rb

Overview

Repeat calling block and return desired result: “best”, “worst” or “average”.

Constant Summary collapse

VALID_TYPES =
%w[best worst average median]
RepeatResult =
::BenchmarkDriver::Struct.new(
  :value, # the value desired by --repeat-result
  :all_values, # all benchmark results. Used by --output=all.
)

Class Method Summary collapse

Class Method Details

.with_repeat(config:, larger_better:, rest_on_average: :first, &block) ⇒ Object

‘block.call` can return multiple objects, but the first one is used for sort. When `config.repeat_result == ’average’‘, how to deal with rest objects is decided by `:rest_on_average` option.

Parameters:

  • block (Proc)
    • returns Float or [Float, …]



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/benchmark_driver/repeater.rb', line 19

def with_repeat(config:, larger_better:, rest_on_average: :first, &block)
  values = config.repeat_count.times.map { block.call }

  desired_value =
    case config.repeat_result
    when 'best'
      best_result(values, larger_better)
    when 'worst'
      best_result(values, !larger_better)
    when 'average'
      average_result(values, rest_on_average)
    when 'median'
      median_result(values, rest_on_average)
    else
      raise "unexpected repeat_result #{config.repeat_result.inspect}"
    end
  RepeatResult.new(value: desired_value, all_values: extract_values(values))
end