stable_profile 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/stable_profile.rb +8 -13
  3. metadata +21 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 69f29fc4583e9a306a7aabbf1d9e267e924ea0be97ba6c3c592cc25899a9aa75
4
- data.tar.gz: aba44a7c4cc527a500c8e547aeda1d51944e1f2da271df0aec434967f88d6e00
3
+ metadata.gz: fdc1251ab06ef89ebd5900e3159d0783f45c283f47e3e8d536c2f3d264c0f482
4
+ data.tar.gz: c46a33e840de54c00ff9be23cef7fa31a95340e2ac8b7866e23e3b0733f54ad4
5
5
  SHA512:
6
- metadata.gz: d1374fbf762bed4ec91bc9207cd225546480bf68d4b94ce978277905d18360ee992aacad83cc19a45444f39ed9481263c7a831774cccbe9ec0b21f01288c7777
7
- data.tar.gz: c761db15d550d213bc0d629874dc2f50acb693d58fba3b656eb841ae590d863f70fafb231bcbd82b37844ebf2ab5aa56a70724e3af0975a2b320b67224bb5773
6
+ metadata.gz: 3bd390ac4a17735e2d4fab46196c1bce4a3152f1f0b1e958e58d15e03a4b6f83e437fdb8c25fb586f68fcca53b5949201ed10b92ad9076b6417cd948efdc2ab0
7
+ data.tar.gz: 2b21c63b395890dac6b1a7f4afef4efda08bb727f1ac339ef2899d718b26a2f06a013c4638ad3edbaa4669e26e2e8298becec6c9b17c6f65cc661a4570a078ab
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'colorize'
3
4
  require 'fileutils'
4
5
  require 'json'
5
6
  require 'ruby-progressbar'
@@ -18,15 +19,11 @@ module StableProfile
18
19
  TOP_SLOWEST_EXAMPLES = 5
19
20
 
20
21
  # The more iterations you run, the more accurate the results will be.
21
- # 20 seems like plenty, but it could take a while depending on the
22
- # size of your test suite.
23
- ITERATIONS = 4
22
+ ITERATIONS = 20
23
+ MINIMUM_SAMPLE_SIZE = ITERATIONS * 0.75
24
+ DECIMAL_PLACES = 4
24
25
 
25
- # It's a slow one if it showed up in at least half the profile runs.
26
- MINIMUM_SAMPLE_SIZE = ITERATIONS / 2
27
- DECIMAL_PLACES = 4
28
-
29
- OUTPUT_DIR = 'tmp/multi_profile'
26
+ OUTPUT_DIR = 'tmp/stable_profile'
30
27
 
31
28
 
32
29
  def bold(string)
@@ -35,8 +32,6 @@ module StableProfile
35
32
 
36
33
 
37
34
  def run
38
- puts "pwd = #{system('pwd')}"
39
-
40
35
  # Erase and Create the output directory
41
36
  FileUtils.rm_rf(OUTPUT_DIR)
42
37
  FileUtils.mkdir_p(OUTPUT_DIR)
@@ -44,7 +39,7 @@ module StableProfile
44
39
  # Run the specs ITERATIONS times, each time with a different random seed
45
40
  progressbar = ProgressBar.create(title: 'Running profiles', total: ITERATIONS, format: '%t: |%B| %p%% %a')
46
41
  ITERATIONS.times do |i|
47
- system("rspec --profile 50 --order random --format json > #{OUTPUT_DIR}/multi_profile_#{i+1}.json")
42
+ system("rspec --profile --order random --format json > #{OUTPUT_DIR}/multi_profile_#{i+1}.json")
48
43
  progressbar.increment
49
44
  end
50
45
 
@@ -91,7 +86,7 @@ module StableProfile
91
86
 
92
87
  example = record.fetch(:example)
93
88
 
94
- puts " #{example['full_description']}"
89
+ puts " #{example['full_description']}".colorize(:light_black)
95
90
  puts bold(" #{record[:average_time]} seconds").ljust(27) + " (N=#{record[:run_times].size})".ljust(7) + " #{example['file_path']}:#{example['line_number']}"
96
91
  end
97
92
 
@@ -105,7 +100,7 @@ module StableProfile
105
100
 
106
101
  group = record.fetch(:group)
107
102
 
108
- puts " #{group['description']}"
103
+ puts " #{group['description']}".colorize(:light_black)
109
104
  puts bold(" #{record[:average_time]} seconds").ljust(27) + " (N=#{record[:run_times].size})".ljust(7) + " #{group['location']}"
110
105
  end
111
106
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stable_profile
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robb Shecter
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-31 00:00:00.000000000 Z
11
+ date: 2023-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: colorize
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: ruby-progressbar
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -80,7 +94,11 @@ dependencies:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
96
  version: 3.12.0
83
- description: Repeatedly run --profile, averaging the results.
97
+ description: 'Solves a quirk of rspec --profile in some code bases: result vary with
98
+ every random spec ordering. This seems to be due to differences in dependency load
99
+ order, class initialization, and test server startup. This lib runs rspec --profile
100
+ many times, averaging the results to always give the same (stable) and meaningful
101
+ result.'
84
102
  email:
85
103
  - robb@public.law
86
104
  executables: