bnchmrkr 0.0.2 → 0.1.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/.reek +36 -0
- data/.travis.yml +10 -0
- data/Gemfile +4 -1
- data/Gemfile.lock +70 -8
- data/README.md +6 -4
- data/Rakefile +27 -3
- data/VERSION +1 -1
- data/lib/bnchmrkr.rb +50 -15
- data/test/examples/test_examples.rb +20 -0
- data/test/unit/test_contrived.rb +20 -8
- data/test/unit/test_exceptions.rb +35 -0
- data/test/unit/test_initialize.rb +3 -3
- metadata +54 -5
- data/bnchmrkr.gemspec +0 -51
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 214df34c63b9b084f735e0f68b852f7b133cac08
|
|
4
|
+
data.tar.gz: 0a62535f2639dfcab95c35c4a90740b8ba5b8207
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: be45d3fd8037efeeea35eda76b1ebb2258d5b96a09e95fe5e525cf77f5907e243f7a7f3e2c5c6a20fb9b5a2ad5eff1546013a857f74a26fb7b6f35c723c2fabf
|
|
7
|
+
data.tar.gz: dedbf34a52fccd4e5a45387fc8bfc412cff22b0421d9380a5d59560644d445fbea82a5f4aaf5d26b2047228eba72fedb47ba2cb4cd92ce057f616e6e75a440aa
|
data/.reek
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
Attribute:
|
|
4
|
+
enabled: false
|
|
5
|
+
|
|
6
|
+
# so judgy.. and without context
|
|
7
|
+
BooleanParameter:
|
|
8
|
+
enabled: false
|
|
9
|
+
|
|
10
|
+
ControlParameter:
|
|
11
|
+
enabled: false
|
|
12
|
+
|
|
13
|
+
DuplicateMethodCall:
|
|
14
|
+
enabled: false
|
|
15
|
+
|
|
16
|
+
NestedIterators:
|
|
17
|
+
max_allowed_nesting: 3
|
|
18
|
+
|
|
19
|
+
# more lacking context judgement - when _would_ you be ok with '!' ?
|
|
20
|
+
PrimaDonnaMethod:
|
|
21
|
+
enabled: false
|
|
22
|
+
|
|
23
|
+
# this feels a bit arbitrary.. maybe would make more sense if was an average
|
|
24
|
+
TooManyStatements:
|
|
25
|
+
max_statements: 15
|
|
26
|
+
|
|
27
|
+
# i don't name my exceptions specifically. that doesn't make me a bad person.
|
|
28
|
+
UncommunicativeVariableName:
|
|
29
|
+
accept: /^[a|b|e|f|i|j|k|l|m|r]$/
|
|
30
|
+
|
|
31
|
+
# or my comparators in ~sort() functions
|
|
32
|
+
## https://github.com/troessner/reek/issues/886
|
|
33
|
+
UncommunicativeParameterName:
|
|
34
|
+
accept:
|
|
35
|
+
- a
|
|
36
|
+
- b
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
|
@@ -2,8 +2,11 @@ ruby '2.0.0'
|
|
|
2
2
|
|
|
3
3
|
source 'https://rubygems.org'
|
|
4
4
|
|
|
5
|
+
gem 'rake', '~> 10.5.0', '>= 10.5.0'
|
|
6
|
+
|
|
5
7
|
group :development do
|
|
6
|
-
gem 'jeweler', '~> 0'
|
|
8
|
+
gem 'jeweler', '~> 2.0.1', '>= 2.0.1'
|
|
9
|
+
gem 'reek', '~> 3.11', '>= 3.11'
|
|
7
10
|
gem 'test-unit', '~> 3.0.0', '>= 3.0.0'
|
|
8
11
|
end
|
|
9
12
|
|
data/Gemfile.lock
CHANGED
|
@@ -1,20 +1,82 @@
|
|
|
1
1
|
GEM
|
|
2
2
|
remote: https://rubygems.org/
|
|
3
3
|
specs:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
addressable (2.4.0)
|
|
5
|
+
ast (2.2.0)
|
|
6
|
+
axiom-types (0.1.1)
|
|
7
|
+
descendants_tracker (~> 0.0.4)
|
|
8
|
+
ice_nine (~> 0.11.0)
|
|
9
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
|
10
|
+
builder (3.2.2)
|
|
11
|
+
codeclimate-engine-rb (0.3.1)
|
|
12
|
+
virtus (~> 1.0)
|
|
13
|
+
coercible (1.0.0)
|
|
14
|
+
descendants_tracker (~> 0.0.1)
|
|
15
|
+
descendants_tracker (0.0.4)
|
|
16
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
|
17
|
+
equalizer (0.0.11)
|
|
18
|
+
faraday (0.9.2)
|
|
19
|
+
multipart-post (>= 1.2, < 3)
|
|
20
|
+
git (1.3.0)
|
|
21
|
+
github_api (0.13.1)
|
|
22
|
+
addressable (~> 2.4.0)
|
|
23
|
+
descendants_tracker (~> 0.0.4)
|
|
24
|
+
faraday (~> 0.8, < 0.10)
|
|
25
|
+
hashie (>= 3.4)
|
|
26
|
+
multi_json (>= 1.7.5, < 2.0)
|
|
27
|
+
oauth2
|
|
28
|
+
hashie (3.4.3)
|
|
29
|
+
highline (1.7.8)
|
|
30
|
+
ice_nine (0.11.2)
|
|
31
|
+
jeweler (2.0.1)
|
|
32
|
+
builder
|
|
33
|
+
bundler (>= 1.0)
|
|
34
|
+
git (>= 1.2.5)
|
|
35
|
+
github_api
|
|
36
|
+
highline (>= 1.6.15)
|
|
37
|
+
nokogiri (>= 1.5.10)
|
|
38
|
+
rake
|
|
39
|
+
rdoc
|
|
40
|
+
json (1.8.3)
|
|
41
|
+
jwt (1.5.1)
|
|
42
|
+
mini_portile2 (2.0.0)
|
|
43
|
+
multi_json (1.11.2)
|
|
44
|
+
multi_xml (0.5.5)
|
|
45
|
+
multipart-post (2.0.0)
|
|
46
|
+
nokogiri (1.6.7.2)
|
|
47
|
+
mini_portile2 (~> 2.0.0.rc2)
|
|
48
|
+
oauth2 (1.1.0)
|
|
49
|
+
faraday (>= 0.8, < 0.10)
|
|
50
|
+
jwt (~> 1.0, < 1.5.2)
|
|
51
|
+
multi_json (~> 1.3)
|
|
52
|
+
multi_xml (~> 0.5)
|
|
53
|
+
rack (>= 1.2, < 3)
|
|
54
|
+
parser (2.3.0.6)
|
|
55
|
+
ast (~> 2.2)
|
|
8
56
|
power_assert (0.2.7)
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
57
|
+
rack (1.6.4)
|
|
58
|
+
rainbow (2.1.0)
|
|
59
|
+
rake (10.5.0)
|
|
60
|
+
rdoc (4.2.2)
|
|
61
|
+
json (~> 1.4)
|
|
62
|
+
reek (3.11)
|
|
63
|
+
codeclimate-engine-rb (~> 0.3.1)
|
|
64
|
+
parser (~> 2.3, >= 2.3.0.6)
|
|
65
|
+
rainbow (~> 2.0)
|
|
12
66
|
test-unit (3.0.9)
|
|
13
67
|
power_assert
|
|
68
|
+
thread_safe (0.3.5)
|
|
69
|
+
virtus (1.0.5)
|
|
70
|
+
axiom-types (~> 0.1)
|
|
71
|
+
coercible (~> 1.0)
|
|
72
|
+
descendants_tracker (~> 0.0, >= 0.0.3)
|
|
73
|
+
equalizer (~> 0.0, >= 0.0.9)
|
|
14
74
|
|
|
15
75
|
PLATFORMS
|
|
16
76
|
ruby
|
|
17
77
|
|
|
18
78
|
DEPENDENCIES
|
|
19
|
-
jeweler (~> 0)
|
|
79
|
+
jeweler (~> 2.0.1, >= 2.0.1)
|
|
80
|
+
rake (~> 10.5.0, >= 10.5.0)
|
|
81
|
+
reek (~> 3.11, >= 3.11)
|
|
20
82
|
test-unit (~> 3.0.0, >= 3.0.0)
|
data/README.md
CHANGED
|
@@ -7,10 +7,10 @@ Bnchmrkr (Benchmarker) is a tool to help benchmark different method implementati
|
|
|
7
7
|
it is driven by [Benchmark](http://ruby-doc.org/stdlib-2.0.0/libdoc/benchmark/rdoc/Benchmark.html)
|
|
8
8
|
|
|
9
9
|
## usage
|
|
10
|
+
|
|
10
11
|
### pre-built gem installation (stable)
|
|
11
12
|
|
|
12
|
-
[
|
|
13
|
-
[](http://badge.fury.io/rb/bnchmrkr)
|
|
13
|
+
[](https://rubygems.org/gems/bnchmrkr)
|
|
14
14
|
|
|
15
15
|
```sh
|
|
16
16
|
gem install bnchmrkr
|
|
@@ -22,6 +22,8 @@ irb(main):001:0> require 'bnchmrkr'
|
|
|
22
22
|
|
|
23
23
|
### from-source installation (latest)
|
|
24
24
|
|
|
25
|
+
[](https://travis-ci.org/chorankates/bnchmrkr)
|
|
26
|
+
|
|
25
27
|
```sh
|
|
26
28
|
git clone https://github.com/chorankates/bnchmrkr.git
|
|
27
29
|
cd bnchmrkr
|
|
@@ -33,7 +35,7 @@ irb(main):001:0> require 'bnchmrkr'
|
|
|
33
35
|
=> true
|
|
34
36
|
```
|
|
35
37
|
|
|
36
|
-
|
|
38
|
+
## examples
|
|
37
39
|
|
|
38
40
|
```rb
|
|
39
41
|
tester = Bnchmrkr.new({
|
|
@@ -74,7 +76,7 @@ overall:
|
|
|
74
76
|
slowest => stat [0.076243]
|
|
75
77
|
```
|
|
76
78
|
|
|
77
|
-
|
|
79
|
+
## instance methods
|
|
78
80
|
```
|
|
79
81
|
benchmark!
|
|
80
82
|
count
|
data/Rakefile
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
require 'jeweler'
|
|
2
|
+
require 'rake'
|
|
3
|
+
require 'rake/clean'
|
|
2
4
|
require 'rake/testtask'
|
|
5
|
+
require 'reek/rake/task'
|
|
6
|
+
|
|
7
|
+
BASEDIR = File.dirname(__FILE__)
|
|
8
|
+
|
|
9
|
+
$LOAD_PATH << File.join([BASEDIR, 'lib'])
|
|
10
|
+
$LOAD_PATH << BASEDIR
|
|
3
11
|
|
|
4
|
-
$LOAD_PATH << File.join([File.dirname(__FILE__), 'lib'])
|
|
5
|
-
$LOAD_PATH << File.dirname(__FILE__)
|
|
6
12
|
require 'bnchmrkr'
|
|
7
13
|
|
|
14
|
+
CLEAN.include('bnchmrkr.gemspec')
|
|
15
|
+
CLOBBER.include('pkg/*')
|
|
16
|
+
|
|
8
17
|
Jeweler::Tasks.new do |gem|
|
|
9
18
|
gem.name = 'bnchmrkr'
|
|
10
19
|
gem.summary = 'compare execution time'
|
|
@@ -29,10 +38,17 @@ namespace :test do
|
|
|
29
38
|
t.verbose = true
|
|
30
39
|
end
|
|
31
40
|
|
|
41
|
+
Rake::TestTask.new do |t|
|
|
42
|
+
t.name = 'examples'
|
|
43
|
+
t.libs << 'lib'
|
|
44
|
+
t.test_files = FileList['test/examples/**/*.rb']
|
|
45
|
+
t.verbose = true
|
|
46
|
+
end
|
|
47
|
+
|
|
32
48
|
end
|
|
33
49
|
|
|
34
50
|
desc 'run all tests'
|
|
35
|
-
task :test => ['test:unit'] do
|
|
51
|
+
task :test => ['test:unit', 'test:examples'] do
|
|
36
52
|
end
|
|
37
53
|
|
|
38
54
|
desc 'run all examples'
|
|
@@ -41,4 +57,12 @@ task :examples do
|
|
|
41
57
|
sh "time ruby #{file}"
|
|
42
58
|
puts
|
|
43
59
|
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
Reek::Rake::Task.new do |t|
|
|
63
|
+
t.config_file = File.join(BASEDIR, '.reek')
|
|
64
|
+
t.source_files = './**/*.rb'
|
|
65
|
+
t.reek_opts = '--no-wiki-links'
|
|
66
|
+
t.fail_on_error = false
|
|
67
|
+
t.verbose = true
|
|
44
68
|
end
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.0
|
|
1
|
+
0.1.0
|
data/lib/bnchmrkr.rb
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require 'benchmark'
|
|
4
4
|
|
|
5
|
+
# Bnchmrkr is a tool to help Benchmark.measure {} and compare different method implementations
|
|
5
6
|
class Bnchmrkr
|
|
6
7
|
|
|
7
8
|
attr_reader :count, :results
|
|
@@ -36,10 +37,14 @@ class Bnchmrkr
|
|
|
36
37
|
def benchmark!
|
|
37
38
|
@lambdas.each_pair do |name, l|
|
|
38
39
|
1.upto(@count).each do |round|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
begin
|
|
41
|
+
measure = Benchmark.measure {
|
|
42
|
+
l.call
|
|
43
|
+
}
|
|
44
|
+
add_measure(name, measure)
|
|
45
|
+
rescue => e
|
|
46
|
+
add_measure(sprintf('%s-failed', name).to_sym, Benchmark.measure {})
|
|
47
|
+
end
|
|
43
48
|
end
|
|
44
49
|
end
|
|
45
50
|
|
|
@@ -56,7 +61,8 @@ class Bnchmrkr
|
|
|
56
61
|
string = String.new
|
|
57
62
|
inspection = self.inspect
|
|
58
63
|
return string unless inspection.nil? or inspection.has_key?(:overall)
|
|
59
|
-
|
|
64
|
+
|
|
65
|
+
longest_key = inspection[:specific].keys.each { |i| i.length }.max.length + 5
|
|
60
66
|
|
|
61
67
|
inspection[:specific].keys.each do |i|
|
|
62
68
|
string << sprintf('%s:%s', i, "\n")
|
|
@@ -67,7 +73,13 @@ class Bnchmrkr
|
|
|
67
73
|
|
|
68
74
|
string << sprintf('overall:%s', "\n")
|
|
69
75
|
inspection[:overall].each_pair do |type, measure|
|
|
70
|
-
string << sprintf(" %#{longest_key}s => %s [%s]%s",
|
|
76
|
+
string << sprintf(" %#{longest_key}s => %s [%s]%s%s",
|
|
77
|
+
type,
|
|
78
|
+
measure[:name],
|
|
79
|
+
measure[:measure],
|
|
80
|
+
measure.has_key?(:faster_by) ? sprintf(' [faster by %s]', measure[:faster_by]) : '',
|
|
81
|
+
"\n"
|
|
82
|
+
)
|
|
71
83
|
end
|
|
72
84
|
|
|
73
85
|
string
|
|
@@ -109,14 +121,14 @@ class Bnchmrkr
|
|
|
109
121
|
@slowest
|
|
110
122
|
end
|
|
111
123
|
|
|
112
|
-
# +a+
|
|
113
|
-
# +b+
|
|
124
|
+
# +a+ Symbol that represents a known lambda
|
|
125
|
+
# +b+ Symbol that represents a known lambda
|
|
114
126
|
# +mode+ :fastest, :slowest, :mean, :median, :total
|
|
115
127
|
# return boolean if a is faster than b, false if invalid
|
|
116
128
|
def is_faster?(a, b, mode = :total)
|
|
117
129
|
result = calculate_per_lambda
|
|
118
|
-
return false unless result.has_key?(a
|
|
119
|
-
result[a
|
|
130
|
+
return false unless result.has_key?(a) and result.has_key?(b)
|
|
131
|
+
result[a][mode] < result[b][mode]
|
|
120
132
|
end
|
|
121
133
|
|
|
122
134
|
# +a+ {:name => name, :measure => measure}
|
|
@@ -129,14 +141,37 @@ class Bnchmrkr
|
|
|
129
141
|
|
|
130
142
|
# +a+ {:name => name, :measure => measure}
|
|
131
143
|
# +b+ {:name => name, :measure => measure}
|
|
132
|
-
#
|
|
133
|
-
|
|
144
|
+
# +percent+ Boolean representing percent (String) or Float difference
|
|
145
|
+
# return Float representing difference in measures, or false, if b is slower than a
|
|
146
|
+
def faster_by_result(a, b, percent = true)
|
|
134
147
|
return false if b[:measure] < a[:measure]
|
|
135
148
|
|
|
136
|
-
faster = (b[:measure] - a[:measure]) /
|
|
149
|
+
faster = (b[:measure] - a[:measure]) / a[:measure]
|
|
137
150
|
percent ? sprintf('%4f%', faster * 100) : faster
|
|
138
151
|
end
|
|
139
152
|
|
|
153
|
+
# +a+ Symbol representing name of known lambda type
|
|
154
|
+
# +b+ Symbol representing name of known lambda type
|
|
155
|
+
# +percent+ Boolean representing percent (String) or Float difference
|
|
156
|
+
# return Float representing difference in measures, or false, if b is slower than a
|
|
157
|
+
def faster_by_type(a, b, percent = true)
|
|
158
|
+
fastest_a = fastest_by_type(a)
|
|
159
|
+
fastest_b = fastest_by_type(b)
|
|
160
|
+
|
|
161
|
+
return false if fastest_b < fastest_a
|
|
162
|
+
|
|
163
|
+
faster = (fastest_b - fastest_a) / fastest_a
|
|
164
|
+
percent ? sprintf('%4f%', faster * 100) : faster
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def slower_by_type(a, b, percent = true)
|
|
168
|
+
! faster_by_type(a, b, percent)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def slower_by_result(a, b, percent = true)
|
|
172
|
+
! faster_by_result(a, b, percent)
|
|
173
|
+
end
|
|
174
|
+
|
|
140
175
|
private
|
|
141
176
|
|
|
142
177
|
def add_measure(name, measure)
|
|
@@ -156,9 +191,8 @@ class Bnchmrkr
|
|
|
156
191
|
hash[name] = Hash.new
|
|
157
192
|
|
|
158
193
|
total = 0
|
|
194
|
+
# TODO add the mode
|
|
159
195
|
measures.collect {|m| total += m.real }
|
|
160
|
-
|
|
161
|
-
# TODO do we want to determine the mode?
|
|
162
196
|
hash[name][:fastest] = sorted.first.real
|
|
163
197
|
hash[name][:slowest] = sorted.last.real
|
|
164
198
|
hash[name][:mean] = sprintf('%5f', total / sorted.size)
|
|
@@ -181,6 +215,7 @@ class Bnchmrkr
|
|
|
181
215
|
end
|
|
182
216
|
end
|
|
183
217
|
|
|
218
|
+
@fastest[:faster_by] = self.faster_by_result(@fastest, @slowest)
|
|
184
219
|
{ :fastest => @fastest, :slowest => @slowest }
|
|
185
220
|
end
|
|
186
221
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require_relative File.expand_path(sprintf('%s/../../lib/bnchmrkr', File.dirname(__FILE__)))
|
|
2
|
+
require 'test-unit'
|
|
3
|
+
|
|
4
|
+
# run all examples, ensure non-0 exit code and non-nil output
|
|
5
|
+
class TestExamples < Test::Unit::TestCase
|
|
6
|
+
|
|
7
|
+
def setup; end
|
|
8
|
+
|
|
9
|
+
def test_all_examples
|
|
10
|
+
@files = Dir.glob(sprintf('%s/../../examples/*.rb', File.dirname(__FILE__)))
|
|
11
|
+
|
|
12
|
+
@files.each do |file|
|
|
13
|
+
raw = `ruby #{file}`
|
|
14
|
+
|
|
15
|
+
assert_true($?.success?)
|
|
16
|
+
assert_not_nil(raw)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
data/test/unit/test_contrived.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require_relative File.expand_path(sprintf('%s/../../lib/bnchmrkr', File.dirname(__FILE__)))
|
|
2
2
|
require 'test-unit'
|
|
3
3
|
|
|
4
|
+
# tests for the example in examplescontrived.rb
|
|
4
5
|
class TestContrived < Test::Unit::TestCase
|
|
5
6
|
|
|
6
7
|
def setup
|
|
@@ -38,8 +39,8 @@ class TestContrived < Test::Unit::TestCase
|
|
|
38
39
|
end
|
|
39
40
|
|
|
40
41
|
def test_is_faster?
|
|
41
|
-
fast = @tester.fastest_overall
|
|
42
|
-
slow = @tester.slowest_overall
|
|
42
|
+
fast = @tester.fastest_overall[:name]
|
|
43
|
+
slow = @tester.slowest_overall[:name]
|
|
43
44
|
|
|
44
45
|
forward = @tester.is_faster?(fast, slow)
|
|
45
46
|
reverse = @tester.is_faster?(slow, fast)
|
|
@@ -52,8 +53,8 @@ class TestContrived < Test::Unit::TestCase
|
|
|
52
53
|
end
|
|
53
54
|
|
|
54
55
|
def test_is_slower?
|
|
55
|
-
fast = @tester.fastest_overall
|
|
56
|
-
slow = @tester.slowest_overall
|
|
56
|
+
fast = @tester.fastest_overall[:name]
|
|
57
|
+
slow = @tester.slowest_overall[:name]
|
|
57
58
|
|
|
58
59
|
forward = @tester.is_slower?(slow, fast)
|
|
59
60
|
reverse = @tester.is_slower?(fast, slow)
|
|
@@ -65,13 +66,24 @@ class TestContrived < Test::Unit::TestCase
|
|
|
65
66
|
assert_true(equal) # ugh, this is misleading.. but is_slower? is boolean opposite of is_slower?
|
|
66
67
|
end
|
|
67
68
|
|
|
68
|
-
def
|
|
69
|
-
|
|
69
|
+
def test_faster_by_result
|
|
70
70
|
fast = @tester.fastest_overall
|
|
71
71
|
slow = @tester.slowest_overall
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
assert_not_nil(@tester.faster_by_result(fast, slow, true))
|
|
74
|
+
assert_match(/\d+\.\d+%/, @tester.faster_by_result(fast, slow, true))
|
|
75
|
+
assert_true(@tester.faster_by_result(fast, slow, false).is_a?(Float))
|
|
76
|
+
assert_false(@tester.faster_by_result(slow, fast))
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def test_faster_by_type
|
|
80
|
+
fastest = @tester.fastest_overall[:name]
|
|
81
|
+
slowest = @tester.slowest_overall[:name]
|
|
82
|
+
|
|
83
|
+
assert_not_nil(@tester.faster_by_type(fastest, slowest, true))
|
|
84
|
+
assert_match(/\d+\.\d+%/, @tester.faster_by_type(fastest, slowest, true))
|
|
85
|
+
assert_true(@tester.faster_by_type(fastest, slowest, false).is_a?(Float))
|
|
86
|
+
assert_false(@tester.faster_by_type(slowest, fastest))
|
|
75
87
|
|
|
76
88
|
end
|
|
77
89
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require_relative File.expand_path(sprintf('%s/../../lib/bnchmrkr', File.dirname(__FILE__)))
|
|
2
|
+
require 'test-unit'
|
|
3
|
+
|
|
4
|
+
# test that exceptions thrown in the middle of a #benchmark! run will behave in expected ways
|
|
5
|
+
class TestExceptions < Test::Unit::TestCase
|
|
6
|
+
|
|
7
|
+
def setup; end
|
|
8
|
+
|
|
9
|
+
def test_lambdas_will_raise
|
|
10
|
+
tester = Bnchmrkr.new({
|
|
11
|
+
:divbyzero => lambda {
|
|
12
|
+
10 / 0
|
|
13
|
+
},
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
assert_nothing_raised do
|
|
17
|
+
tester.benchmark!
|
|
18
|
+
assert_true(tester.results.has_key?('divbyzero-failed'.to_sym))
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_lambdas_wont_raise_anyway
|
|
23
|
+
tester = Bnchmrkr.new({
|
|
24
|
+
:foo => lambda { 'bar' }
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
assert_nothing_raised do
|
|
28
|
+
tester.benchmark!
|
|
29
|
+
assert_true(tester.results.has_key?(:foo))
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
end
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
require_relative File.expand_path(sprintf('%s/../../lib/bnchmrkr', File.dirname(__FILE__)))
|
|
2
2
|
require 'test-unit'
|
|
3
3
|
|
|
4
|
-
class TestInitialize < Test::Unit::TestCase
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
# test valid/invalid instantiations
|
|
6
|
+
class TestInitialize < Test::Unit::TestCase
|
|
7
7
|
|
|
8
|
-
end
|
|
8
|
+
def setup; end
|
|
9
9
|
|
|
10
10
|
def test_valid
|
|
11
11
|
|
metadata
CHANGED
|
@@ -1,29 +1,75 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bnchmrkr
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0
|
|
4
|
+
version: 0.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Conor Horan-Kates
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-
|
|
11
|
+
date: 2016-04-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: rake
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - '>='
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 10.5.0
|
|
20
|
+
- - ~>
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: 10.5.0
|
|
23
|
+
type: :runtime
|
|
24
|
+
prerelease: false
|
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
26
|
+
requirements:
|
|
27
|
+
- - '>='
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: 10.5.0
|
|
30
|
+
- - ~>
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: 10.5.0
|
|
13
33
|
- !ruby/object:Gem::Dependency
|
|
14
34
|
name: jeweler
|
|
15
35
|
requirement: !ruby/object:Gem::Requirement
|
|
16
36
|
requirements:
|
|
37
|
+
- - '>='
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: 2.0.1
|
|
17
40
|
- - ~>
|
|
18
41
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
42
|
+
version: 2.0.1
|
|
20
43
|
type: :development
|
|
21
44
|
prerelease: false
|
|
22
45
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
46
|
requirements:
|
|
47
|
+
- - '>='
|
|
48
|
+
- !ruby/object:Gem::Version
|
|
49
|
+
version: 2.0.1
|
|
50
|
+
- - ~>
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: 2.0.1
|
|
53
|
+
- !ruby/object:Gem::Dependency
|
|
54
|
+
name: reek
|
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
|
56
|
+
requirements:
|
|
57
|
+
- - '>='
|
|
58
|
+
- !ruby/object:Gem::Version
|
|
59
|
+
version: '3.11'
|
|
60
|
+
- - ~>
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: '3.11'
|
|
63
|
+
type: :development
|
|
64
|
+
prerelease: false
|
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
66
|
+
requirements:
|
|
67
|
+
- - '>='
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: '3.11'
|
|
24
70
|
- - ~>
|
|
25
71
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
72
|
+
version: '3.11'
|
|
27
73
|
- !ruby/object:Gem::Dependency
|
|
28
74
|
name: test-unit
|
|
29
75
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -52,14 +98,17 @@ extensions: []
|
|
|
52
98
|
extra_rdoc_files:
|
|
53
99
|
- README.md
|
|
54
100
|
files:
|
|
101
|
+
- .reek
|
|
102
|
+
- .travis.yml
|
|
55
103
|
- Gemfile
|
|
56
104
|
- Gemfile.lock
|
|
57
105
|
- README.md
|
|
58
106
|
- Rakefile
|
|
59
107
|
- VERSION
|
|
60
|
-
- bnchmrkr.gemspec
|
|
61
108
|
- lib/bnchmrkr.rb
|
|
109
|
+
- test/examples/test_examples.rb
|
|
62
110
|
- test/unit/test_contrived.rb
|
|
111
|
+
- test/unit/test_exceptions.rb
|
|
63
112
|
- test/unit/test_initialize.rb
|
|
64
113
|
homepage: http://github.com/chorankates/bnchmrkr
|
|
65
114
|
licenses:
|
data/bnchmrkr.gemspec
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# Generated by jeweler
|
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
|
-
# -*- encoding: utf-8 -*-
|
|
5
|
-
# stub: bnchmrkr 0.0.2 ruby lib
|
|
6
|
-
|
|
7
|
-
Gem::Specification.new do |s|
|
|
8
|
-
s.name = "bnchmrkr"
|
|
9
|
-
s.version = "0.0.2"
|
|
10
|
-
|
|
11
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
12
|
-
s.require_paths = ["lib"]
|
|
13
|
-
s.authors = ["Conor Horan-Kates"]
|
|
14
|
-
s.date = "2016-03-08"
|
|
15
|
-
s.description = "given a hash of lambdas, runs and compares the amount of time each implementation takes"
|
|
16
|
-
s.email = "conor.code@gmail.com"
|
|
17
|
-
s.extra_rdoc_files = [
|
|
18
|
-
"README.md"
|
|
19
|
-
]
|
|
20
|
-
s.files = [
|
|
21
|
-
"Gemfile",
|
|
22
|
-
"Gemfile.lock",
|
|
23
|
-
"README.md",
|
|
24
|
-
"Rakefile",
|
|
25
|
-
"VERSION",
|
|
26
|
-
"bnchmrkr.gemspec",
|
|
27
|
-
"lib/bnchmrkr.rb",
|
|
28
|
-
"test/unit/test_contrived.rb",
|
|
29
|
-
"test/unit/test_initialize.rb"
|
|
30
|
-
]
|
|
31
|
-
s.homepage = "http://github.com/chorankates/bnchmrkr"
|
|
32
|
-
s.licenses = ["MIT"]
|
|
33
|
-
s.rubygems_version = "2.2.2"
|
|
34
|
-
s.summary = "compare execution time"
|
|
35
|
-
|
|
36
|
-
if s.respond_to? :specification_version then
|
|
37
|
-
s.specification_version = 4
|
|
38
|
-
|
|
39
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
40
|
-
s.add_development_dependency(%q<jeweler>, ["~> 0"])
|
|
41
|
-
s.add_development_dependency(%q<test-unit>, [">= 3.0.0", "~> 3.0.0"])
|
|
42
|
-
else
|
|
43
|
-
s.add_dependency(%q<jeweler>, ["~> 0"])
|
|
44
|
-
s.add_dependency(%q<test-unit>, [">= 3.0.0", "~> 3.0.0"])
|
|
45
|
-
end
|
|
46
|
-
else
|
|
47
|
-
s.add_dependency(%q<jeweler>, ["~> 0"])
|
|
48
|
-
s.add_dependency(%q<test-unit>, [">= 3.0.0", "~> 3.0.0"])
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|