benchmark-perf 0.3.0 → 0.4.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.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +11 -0
 - data/README.md +2 -2
 - data/lib/benchmark/perf/execution_time.rb +21 -5
 - data/lib/benchmark/perf/version.rb +1 -1
 - data/spec/unit/assertions_spec.rb +1 -1
 - data/spec/unit/execution_time_spec.rb +17 -4
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: b9e96517aac61f030785b74eebd97e06e49e74eda0bb7ce37854ed454817a5f9
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 82a06c6df41203a33abbe439fe30fc0df64a2a22c26e5ef730fcb065733e0dbd
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: b09c694ef8fe8d30f21407a0a16d3ce8a86ac139257a08876ad1cf2cce298d2dfccee5f2078e75ec2420985bcd8588383a442a9f1e1d85f52a17ea4889b50bb2
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 4c4e308e46b4874bf656f15716500149a1d3daa869f330714c478bac1d50cb3b224cb6f2587a385d1adcc1545b45dd003020696a8468dec645d68e6531175c99
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,5 +1,15 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Change log
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            ## [v0.4.0] - 2018-09-30
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            ### Changed
         
     | 
| 
      
 6 
     | 
    
         
            +
            * Change ExecutionTime#run :times argument to :repeat
         
     | 
| 
      
 7 
     | 
    
         
            +
            * Change ExecutionTime#run to specify accepted values for :repeat argument
         
     | 
| 
      
 8 
     | 
    
         
            +
            * Change default measurements repeat time to be once
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            ### Fixed
         
     | 
| 
      
 11 
     | 
    
         
            +
            * Change ExecutionTime#run to correctly generate repeats range
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
       3 
13 
     | 
    
         
             
            ## [v0.3.0] - 2018-09-16
         
     | 
| 
       4 
14 
     | 
    
         | 
| 
       5 
15 
     | 
    
         
             
            ### Added
         
     | 
| 
         @@ -40,6 +50,7 @@ 
     | 
|
| 
       40 
50 
     | 
    
         | 
| 
       41 
51 
     | 
    
         
             
            Initial release
         
     | 
| 
       42 
52 
     | 
    
         | 
| 
      
 53 
     | 
    
         
            +
            [v0.4.0]: https://github.com/piotrmurach/benchmark-perf/compare/v0.3.0...v0.4.0
         
     | 
| 
       43 
54 
     | 
    
         
             
            [v0.3.0]: https://github.com/piotrmurach/benchmark-perf/compare/v0.2.1...v0.3.0
         
     | 
| 
       44 
55 
     | 
    
         
             
            [v0.2.1]: https://github.com/piotrmurach/benchmark-perf/compare/v0.2.0...v0.2.1
         
     | 
| 
       45 
56 
     | 
    
         
             
            [v0.2.0]: https://github.com/piotrmurach/benchmark-perf/compare/v0.1.1...v0.2.0
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -59,10 +59,10 @@ mean, stddev, iter, elapsed_time = Benchmark::Perf::Iteration.run { ... } 
     | 
|
| 
       59 
59 
     | 
    
         | 
| 
       60 
60 
     | 
    
         
             
            ### 2.1 Execution time
         
     | 
| 
       61 
61 
     | 
    
         | 
| 
       62 
     | 
    
         
            -
            By default ` 
     | 
| 
      
 62 
     | 
    
         
            +
            By default `1` measurement is taken, and `1` warmup cycle is run. If you need to change number of measurements taken use `:repeat`:
         
     | 
| 
       63 
63 
     | 
    
         | 
| 
       64 
64 
     | 
    
         
             
            ```ruby
         
     | 
| 
       65 
     | 
    
         
            -
            mean, std_dev = Benchmark::Perf::ExecutionTime.run( 
     | 
| 
      
 65 
     | 
    
         
            +
            mean, std_dev = Benchmark::Perf::ExecutionTime.run(repeat: 10) { ... }
         
     | 
| 
       66 
66 
     | 
    
         
             
            ```
         
     | 
| 
       67 
67 
     | 
    
         | 
| 
       68 
68 
     | 
    
         
             
            And to change number of warmup cycles use `:warmup` keyword like so:
         
     | 
| 
         @@ -71,8 +71,8 @@ module Benchmark 
     | 
|
| 
       71 
71 
     | 
    
         | 
| 
       72 
72 
     | 
    
         
             
                  # Perform work x times
         
     | 
| 
       73 
73 
     | 
    
         
             
                  #
         
     | 
| 
       74 
     | 
    
         
            -
                  # @param [Integer]  
     | 
| 
       75 
     | 
    
         
            -
                  #   how many times  
     | 
| 
      
 74 
     | 
    
         
            +
                  # @param [Integer] repeat
         
     | 
| 
      
 75 
     | 
    
         
            +
                  #   how many times to repeat the code measuremenets
         
     | 
| 
       76 
76 
     | 
    
         
             
                  #
         
     | 
| 
       77 
77 
     | 
    
         
             
                  # @example
         
     | 
| 
       78 
78 
     | 
    
         
             
                  #   ExecutionTime.run(times: 10) { ... }
         
     | 
| 
         @@ -81,12 +81,12 @@ module Benchmark 
     | 
|
| 
       81 
81 
     | 
    
         
             
                  #   average and standard deviation
         
     | 
| 
       82 
82 
     | 
    
         
             
                  #
         
     | 
| 
       83 
83 
     | 
    
         
             
                  # @api public
         
     | 
| 
       84 
     | 
    
         
            -
                  def run( 
     | 
| 
       85 
     | 
    
         
            -
                     
     | 
| 
      
 84 
     | 
    
         
            +
                  def run(repeat: 1, io: nil, warmup: 1, &work)
         
     | 
| 
      
 85 
     | 
    
         
            +
                    check_greater(repeat, 0)
         
     | 
| 
       86 
86 
     | 
    
         
             
                    measurements = []
         
     | 
| 
       87 
87 
     | 
    
         
             
                    run_warmup(warmup: warmup, &work)
         
     | 
| 
       88 
88 
     | 
    
         | 
| 
       89 
     | 
    
         
            -
                     
     | 
| 
      
 89 
     | 
    
         
            +
                    repeat.times do
         
     | 
| 
       90 
90 
     | 
    
         
             
                      GC.start
         
     | 
| 
       91 
91 
     | 
    
         
             
                      measurements << run_in_subprocess(io: io) do
         
     | 
| 
       92 
92 
     | 
    
         
             
                        Perf.clock_time(&work)
         
     | 
| 
         @@ -97,6 +97,22 @@ module Benchmark 
     | 
|
| 
       97 
97 
     | 
    
         
             
                    [Perf.average(measurements), Perf.std_dev(measurements)]
         
     | 
| 
       98 
98 
     | 
    
         
             
                  end
         
     | 
| 
       99 
99 
     | 
    
         
             
                  module_function :run
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                  # Check if expected value is greater than minimum
         
     | 
| 
      
 102 
     | 
    
         
            +
                  #
         
     | 
| 
      
 103 
     | 
    
         
            +
                  # @param [Numeric] expected
         
     | 
| 
      
 104 
     | 
    
         
            +
                  # @param [Numeric] min
         
     | 
| 
      
 105 
     | 
    
         
            +
                  #
         
     | 
| 
      
 106 
     | 
    
         
            +
                  # @raise [ArgumentError]
         
     | 
| 
      
 107 
     | 
    
         
            +
                  #
         
     | 
| 
      
 108 
     | 
    
         
            +
                  # @api private
         
     | 
| 
      
 109 
     | 
    
         
            +
                  def check_greater(expected, min)
         
     | 
| 
      
 110 
     | 
    
         
            +
                    unless expected > min
         
     | 
| 
      
 111 
     | 
    
         
            +
                      raise ArgumentError,
         
     | 
| 
      
 112 
     | 
    
         
            +
                            "Repeat value: #{expected} needs to be greater than #{min}"
         
     | 
| 
      
 113 
     | 
    
         
            +
                    end
         
     | 
| 
      
 114 
     | 
    
         
            +
                  end
         
     | 
| 
      
 115 
     | 
    
         
            +
                  module_function :check_greater
         
     | 
| 
       100 
116 
     | 
    
         
             
                end # ExecutionTime
         
     | 
| 
       101 
117 
     | 
    
         
             
              end # Perf
         
     | 
| 
       102 
118 
     | 
    
         
             
            end # Benchmark
         
     | 
| 
         @@ -3,7 +3,7 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            RSpec.describe Benchmark::Perf, 'assertions' do
         
     | 
| 
       4 
4 
     | 
    
         
             
              it "passes asertion by performing under threshold" do
         
     | 
| 
       5 
5 
     | 
    
         
             
                bench = Benchmark::Perf
         
     | 
| 
       6 
     | 
    
         
            -
                assertion = bench.assert_perform_under(0.01,  
     | 
| 
      
 6 
     | 
    
         
            +
                assertion = bench.assert_perform_under(0.01, repeat: 2) { 'x' * 1_024 }
         
     | 
| 
       7 
7 
     | 
    
         
             
                expect(assertion).to eq(true)
         
     | 
| 
       8 
8 
     | 
    
         
             
              end
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
         @@ -7,16 +7,29 @@ RSpec.describe Benchmark::Perf::ExecutionTime do 
     | 
|
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
              it "provides default benchmark range" do
         
     | 
| 
       9 
9 
     | 
    
         
             
                allow(described_class).to receive(:run_in_subprocess).and_return(0.1)
         
     | 
| 
       10 
     | 
    
         
            -
                described_class.run { 'x' * 1024 }
         
     | 
| 
       11 
     | 
    
         
            -
                expect(described_class).to have_received(:run_in_subprocess). 
     | 
| 
      
 10 
     | 
    
         
            +
                described_class.run(warmup: 0) { 'x' * 1024 }
         
     | 
| 
      
 11 
     | 
    
         
            +
                expect(described_class).to have_received(:run_in_subprocess).once
         
     | 
| 
       12 
12 
     | 
    
         
             
              end
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
              it "accepts custom number of samples" do
         
     | 
| 
       15 
15 
     | 
    
         
             
                allow(described_class).to receive(:run_in_subprocess).and_return(0.1)
         
     | 
| 
       16 
     | 
    
         
            -
                described_class.run( 
     | 
| 
      
 16 
     | 
    
         
            +
                described_class.run(repeat: 12, warmup: 0) { 'x' * 1024 }
         
     | 
| 
       17 
17 
     | 
    
         
             
                expect(described_class).to have_received(:run_in_subprocess).exactly(12).times
         
     | 
| 
       18 
18 
     | 
    
         
             
              end
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
      
 20 
     | 
    
         
            +
              it "doesn't accept range smaller than 1" do
         
     | 
| 
      
 21 
     | 
    
         
            +
                allow(described_class).to receive(:run_in_subprocess).and_return(0.1)
         
     | 
| 
      
 22 
     | 
    
         
            +
                described_class.run(repeat: 1, warmup: 1) { 'x' }
         
     | 
| 
      
 23 
     | 
    
         
            +
                expect(described_class).to have_received(:run_in_subprocess).twice
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              it "doesn't accept range smaller than 1" do
         
     | 
| 
      
 27 
     | 
    
         
            +
                expect {
         
     | 
| 
      
 28 
     | 
    
         
            +
                  described_class.run(repeat: 0) { 'x' }
         
     | 
| 
      
 29 
     | 
    
         
            +
                }.to raise_error(ArgumentError,
         
     | 
| 
      
 30 
     | 
    
         
            +
                                'Repeat value: 0 needs to be greater than 0')
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
       20 
33 
     | 
    
         
             
              it "provides measurements for 30 samples by default" do
         
     | 
| 
       21 
34 
     | 
    
         
             
                sample = described_class.run { 'x' * 1024 }
         
     | 
| 
       22 
35 
     | 
    
         
             
                expect(sample).to all(be < 0.01)
         
     | 
| 
         @@ -39,7 +52,7 @@ RSpec.describe Benchmark::Perf::ExecutionTime do 
     | 
|
| 
       39 
52 
     | 
    
         
             
              end
         
     | 
| 
       40 
53 
     | 
    
         | 
| 
       41 
54 
     | 
    
         
             
              it "measures work performance for 10 samples" do
         
     | 
| 
       42 
     | 
    
         
            -
                sample = described_class.run( 
     | 
| 
      
 55 
     | 
    
         
            +
                sample = described_class.run(repeat: 10) { 'x' * 1_000_000 }
         
     | 
| 
       43 
56 
     | 
    
         
             
                expect(sample.size).to eq(2)
         
     | 
| 
       44 
57 
     | 
    
         
             
                expect(sample).to all(be < 0.01)
         
     | 
| 
       45 
58 
     | 
    
         
             
              end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: benchmark-perf
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.4.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Piotr Murach
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2018-09- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2018-09-30 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     |