Module: Minitest::PerformanceRegression

Defined in:
lib/minitest/perf_regression.rb,
lib/minitest/perf_regression/version.rb

Constant Summary collapse

VERSION =
"0.0.1"

Instance Method Summary collapse

Instance Method Details

#check_performance_regression_on(name) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/minitest/perf_regression.rb', line 8

def check_performance_regression_on(name)
  define_method("test_performance_regression_on_#{name}") do
    nbr_of_samples = 20
    timestamp = Time.now
    prefix_filename = "perfregr_#{name}_"

    perfregr_files = Dir.entries('.').grep(/^#{prefix_filename}/).sort
    result_jsons = []
    result = Benchmark.observe_and_summarize(nbr_of_samples) do |x|
      x.report("name #{timestamp}") { send name }
    end
    result_jsons << JSON.parse(result)

    File.open("#{prefix_filename}#{timestamp.to_i}.json", 'w') do |file|
      file.write(result)
    end

    if perfregr_files.empty?
      assert true
    else
      previous_result_json = nil
      File.open(perfregr_files.last, 'r') do |file|
        result_jsons << JSON.load(file)
      end
      best, is_h0_rejected = Benchmark.aggregate_and_rank(result_jsons)
      refute is_h0_rejected, "Performance Regression for #{name} run at #{timestamp}"
    end
  end
end