derailed_benchmarks 1.4.2 → 1.4.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2ed7fac91722a804da9125b03501653c1e1d78993b9c7d874e5e597656cb3c12
4
- data.tar.gz: 5c36d946b6e0533d195f9b285d1d6541e4890a2f2eb37f2ca5d26b4c9434b655
3
+ metadata.gz: 348a836be042f2ebf7785075bc3f552c60ef9cefeb979d5dded1fcac5101111a
4
+ data.tar.gz: 6c25b2275a5c57ae9abfc6b6c55021869aa8cea9cfcfdda7422df876caf5b10d
5
5
  SHA512:
6
- metadata.gz: be591fafddeff784a41a817c51f1f0f4c6a7f0b14b80f16b4792c61564af97f22a38f8cc999d5e7431cae3393cbfe427eebb291e2bc2efac7c578a802a870ec7
7
- data.tar.gz: 4e0fceb32c0acbc09f74c91959121a9033b5ac188700eb225c7d51a4cee796665640302e5e7eed5508c870c63fc26a4370ed1ed6e88b15757fc8c291a70a3c88
6
+ metadata.gz: eb65bb19c23d4c112ae31289c3b610aca98f1541e7a4ee1a6fd1f1b98d1ace4849f061ebb323fc38b2f01ceae64907edd247e36becd849c52fa6998370faef5b
7
+ data.tar.gz: 0273f740b7458e1feaa59f05681e815c41ad45830fb8b5590b6860769e4f4e96ee556b5249bb90598b96e987a68bf7f3939fba9837a8573b16f0f4ce7dbc182a
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## master (unreleased)
2
2
 
3
+ ## 1.4.3
4
+
5
+ - perf:library now uses median instead of average (https://github.com/schneems/derailed_benchmarks/pull/160)
6
+
3
7
  ## 1.4.2
4
8
 
5
9
  - Fixed syntax error that resulted in ensure end error inside tasks.rb for older rubies (https://github.com/schneems/derailed_benchmarks/pull/155)
data/README.md CHANGED
@@ -431,7 +431,7 @@ Use a comma to seperate your branch names with the `SHAS_TO_TEST` env var, or om
431
431
 
432
432
  If you only include one SHA, then derailed will grab the latest commit and compare it to that SHA.
433
433
 
434
- These tests might take a along time to run so the output is stored on disk incase you want to see them in the future, they're at `tmp/library_branches/<timestamp>` and labeled with the same names as your commits.
434
+ These tests might take a along time to run so the output is stored on disk incase you want to see them in the future, they're at `tmp/compare_branches/<timestamp>` and labeled with the same names as your commits.
435
435
 
436
436
  When the test is done it will output which commit "won" and by how much:
437
437
 
@@ -66,15 +66,27 @@ module DerailedBenchmarks
66
66
  end
67
67
 
68
68
  def x_faster
69
- FORMAT % (oldest.average/newest.average).to_f
69
+ (oldest.median/newest.median).to_f
70
+ end
71
+
72
+ def faster?
73
+ newest.median < oldest.median
70
74
  end
71
75
 
72
76
  def percent_faster
73
- FORMAT % (((oldest.average - newest.average) / oldest.average).to_f * 100)
77
+ (((oldest.median - newest.median) / oldest.median).to_f * 100)
74
78
  end
75
79
 
76
80
  def change_direction
77
- newest.average < oldest.average ? "FASTER" : "SLOWER"
81
+ if faster?
82
+ "FASTER 🚀🚀🚀"
83
+ else
84
+ "SLOWER 🐢🐢🐢"
85
+ end
86
+ end
87
+
88
+ def align
89
+ " " * (("%i" % percent_faster).length - ("%i" % x_faster).length)
78
90
  end
79
91
 
80
92
  def banner(io = Kernel)
@@ -85,11 +97,11 @@ module DerailedBenchmarks
85
97
  io.puts "👎👎👎(NOT Statistically Significant) 👎👎👎"
86
98
  end
87
99
  io.puts
88
- io.puts "[#{newest.name}] #{newest.desc.inspect} - (#{newest.average} seconds)"
100
+ io.puts "[#{newest.name}] #{newest.desc.inspect} - (#{newest.median} seconds)"
89
101
  io.puts " #{change_direction} by:"
90
- io.puts " #{x_faster}x [older/newer]"
91
- io.puts " #{percent_faster}\% [(older - newer) / older * 100]"
92
- io.puts "[#{oldest.name}] #{oldest.desc.inspect} - (#{oldest.average} seconds)"
102
+ io.puts " #{align}#{FORMAT % x_faster}x [older/newer]"
103
+ io.puts " #{FORMAT % percent_faster}\% [(older - newer) / older * 100]"
104
+ io.puts "[#{oldest.name}] #{oldest.desc.inspect} - (#{oldest.median} seconds)"
93
105
  io.puts
94
106
  io.puts "Iterations per sample: #{ENV["TEST_COUNT"]}"
95
107
  io.puts "Samples: #{newest.values.length}"
@@ -30,9 +30,14 @@ module DerailedBenchmarks
30
30
  def call
31
31
  load_file!
32
32
 
33
+ @median = (values[(values.length - 1) / 2] + values[values.length/ 2]) / 2.0
33
34
  @average = values.inject(:+) / values.length
34
35
  end
35
36
 
37
+ def median
38
+ @median.to_f
39
+ end
40
+
36
41
  def average
37
42
  @average.to_f
38
43
  end
@@ -47,6 +52,8 @@ module DerailedBenchmarks
47
52
  raise e, "Problem with file #{@file.inspect}:\n#{@file.read}\n#{e.message}"
48
53
  end
49
54
  end
55
+
56
+ values.sort!
50
57
  values.freeze
51
58
  end
52
59
  end
@@ -39,7 +39,7 @@ namespace :perf do
39
39
  current_library_branch = ""
40
40
  Dir.chdir(library_dir) { current_library_branch = run!('git describe --contains --all HEAD').chomp }
41
41
 
42
- out_dir = Pathname.new("tmp/library_branches/#{Time.now.strftime('%Y-%m-%d-%H-%M-%s-%N')}")
42
+ out_dir = Pathname.new("tmp/compare_branches/#{Time.now.strftime('%Y-%m-%d-%H-%M-%s-%N')}")
43
43
  out_dir.mkpath
44
44
 
45
45
  branches_to_test = branch_names.each_with_object({}) {|elem, hash| hash[elem] = out_dir + "#{elem.gsub('/', ':')}.bench.txt" }
@@ -93,10 +93,18 @@ namespace :perf do
93
93
  end
94
94
  end
95
95
 
96
- stats.call.banner if stats
96
+ if stats
97
+ stats.call.banner
98
+
99
+ result_file = out_dir + "results.txt"
100
+ File.open(result_file, "w") do |f|
101
+ stats.banner(f)
102
+ end
103
+
104
+ puts "Output: #{result_file.to_s}"
105
+ end
97
106
  end
98
- end
99
-
107
+ end
100
108
 
101
109
  desc "hits the url TEST_COUNT times"
102
110
  task :test => [:setup] do
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DerailedBenchmarks
4
- VERSION = "1.4.2"
4
+ VERSION = "1.4.3"
5
5
  end
@@ -22,8 +22,11 @@ class StatsFromDirTest < ActiveSupport::TestCase
22
22
  assert_in_delta 0.1730818382602285, stats.d_critical, 0.00001
23
23
  assert_equal true, stats.significant?
24
24
 
25
- assert_equal "1.0062", stats.x_faster
26
- assert_equal "0.6131", stats.percent_faster
25
+ format = DerailedBenchmarks::StatsFromDir::FORMAT
26
+ assert_equal "1.0062", format % stats.x_faster
27
+ assert_equal "0.6147", format % stats.percent_faster
28
+
29
+ assert_equal "11.3844", format % newest.median
27
30
  end
28
31
 
29
32
  test "banner faster" do
@@ -44,17 +47,17 @@ class StatsFromDirTest < ActiveSupport::TestCase
44
47
  "0.001"
45
48
  end
46
49
 
47
- def newest.average
50
+ def newest.median
48
51
  10.5
49
52
  end
50
53
 
51
- def oldest.average
54
+ def oldest.median
52
55
  11.0
53
56
  end
54
57
 
55
- expected = <<-EOM
58
+ expected = <<~EOM
56
59
  [winner] "I am the new commit" - (10.5 seconds)
57
- FASTER by:
60
+ FASTER 🚀🚀🚀 by:
58
61
  1.0476x [older/newer]
59
62
  4.5455% [(older - newer) / older * 100]
60
63
  [loser] "Old commit" - (11.0 seconds)
@@ -75,18 +78,18 @@ EOM
75
78
  newest = stats.newest
76
79
  oldest = stats.oldest
77
80
 
78
- def oldest.average
81
+ def oldest.median
79
82
  10.5
80
83
  end
81
84
 
82
- def newest.average
85
+ def newest.median
83
86
  11.0
84
87
  end
85
88
 
86
- expected = <<-EOM
89
+ expected = <<~EOM
87
90
  [loser] "I am the new commit" - (11.0 seconds)
88
- SLOWER by:
89
- 0.9545x [older/newer]
91
+ SLOWER 🐢🐢🐢 by:
92
+ 0.9545x [older/newer]
90
93
  -4.7619% [(older - newer) / older * 100]
91
94
  [winner] "Old commit" - (10.5 seconds)
92
95
  EOM
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: derailed_benchmarks
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.2
4
+ version: 1.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Schneeman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-11 00:00:00.000000000 Z
11
+ date: 2019-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: heapy
@@ -257,6 +257,7 @@ files:
257
257
  - test/fixtures/stats/significant/winner.bench.txt
258
258
  - test/integration/tasks_test.rb
259
259
  - test/rails_app/Rakefile
260
+ - test/rails_app/app/assets/config/manifest.js
260
261
  - test/rails_app/app/assets/javascripts/authenticated.js
261
262
  - test/rails_app/app/assets/stylesheets/authenticated.css
262
263
  - test/rails_app/app/controllers/application_controller.rb
@@ -341,6 +342,7 @@ test_files:
341
342
  - test/fixtures/stats/significant/winner.bench.txt
342
343
  - test/integration/tasks_test.rb
343
344
  - test/rails_app/Rakefile
345
+ - test/rails_app/app/assets/config/manifest.js
344
346
  - test/rails_app/app/assets/javascripts/authenticated.js
345
347
  - test/rails_app/app/assets/stylesheets/authenticated.css
346
348
  - test/rails_app/app/controllers/application_controller.rb