benchmark-bigo 0.0.1 → 0.1.0

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
  SHA1:
3
- metadata.gz: 423aefb007643b70b3a3b6948ec4be73a699e39e
4
- data.tar.gz: 58fb68d5bc09db75769948213ba3d7f493cdc433
3
+ metadata.gz: ddf502a4bf2a5eabc6ec0127d22f1ab16ee69eca
4
+ data.tar.gz: 43b1ce1e054c451c63a0d9597d73461d4b64be15
5
5
  SHA512:
6
- metadata.gz: 5725e3a65ab19f74b6ebcb12a949247abf1d66cd22ebe8394da76e876ce1014a3628c1398e39daaab81597137f67976c88dcc564e07c4994c747bb47aaea311b
7
- data.tar.gz: 674a6df9fa33fc2963906343d0f11dad96e4ab12345186743f6d5a3d0c3df40e82b9d318342e76917a2cdac3c7e1628add50bf296423cb1d6056c6346c5cecc3
6
+ metadata.gz: 6c73e84f56907153c5ff2ec84ecf4da9942431ed477a2408504b0d96e2c5d0be2c3aee8638a117fa5c5da29a76b4c4b150f2221b5362520b66d296201dc19fce
7
+ data.tar.gz: e7bbe74394cd62b596a51bc2002abe776f36c789ffb7b4a941dc88fb3e8c2fd2a4339dcc008c281e12264385b547fcfd91fd2d4c32a8e19d00405667eec57ea6
data/README.md CHANGED
@@ -2,20 +2,28 @@
2
2
 
3
3
  # benchmark-bigo
4
4
 
5
- * http://github.com/davy/benchmark-bigo
5
+ Benchmark objects to help calculate Big O behavior
6
6
 
7
- ## DESCRIPTION:
7
+ ## Installation
8
8
 
9
- Benchmark objects to help calculate Big O behavior
9
+ In your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'benchmark-bigo'
13
+ ```
10
14
 
11
- ## SYNOPSIS:
15
+ Or install it manually:
16
+
17
+ ```sh
18
+ $ gem install benchmark-bigo
19
+ ```
20
+
21
+ ## Usage
12
22
 
13
23
  ```ruby
14
24
  require 'benchmark/bigo'
15
25
 
16
26
  report = Benchmark.bigo do |x|
17
-
18
-
19
27
  # increments is the total number of data points to collect
20
28
  x.increments = 6
21
29
 
@@ -23,8 +31,11 @@ report = Benchmark.bigo do |x|
23
31
  # example of an Array generator
24
32
  x.generator {|size| (0...size).to_a.shuffle }
25
33
 
34
+ # or you can use the built in array generator
35
+ # x.generate :array
36
+
26
37
  # specifies how the size of the object should grow
27
- # options: linear, logarithmic
38
+ # options: linear, exponential
28
39
  #
29
40
  # specifies that arrays should grow linearly by 1000
30
41
  x.linear 1000
@@ -44,28 +55,27 @@ report = Benchmark.bigo do |x|
44
55
  # for each report, create a comparison chart showing the report
45
56
  # and scaled series for O(log n), O(n), O(n log n), and O(n squared)
46
57
  x.compare!
47
-
48
58
  end
49
59
  ```
50
60
 
51
- ## REQUIREMENTS:
52
-
53
- * benchmark-ips (http://github.com/evanphx/benchmark-ips)
54
-
55
- ## INSTALL:
56
-
57
- $ gem install benchmark-bigo
61
+ ## Contributing
58
62
 
59
- ## DEVELOPERS:
63
+ After checking out the source, run the tests:
60
64
 
61
- After checking out the source, run:
65
+ ```
66
+ $ git clone git@github.com:davy/benchmark-bigo.git
67
+ $ cd benchmark-bigo
68
+ $ bundle install
69
+ $ bundle exec rake test
70
+ ```
62
71
 
63
- $ rake newb
72
+ You can also generate RDoc:
64
73
 
65
- This task will install any missing dependencies, run the tests/specs,
66
- and generate the RDoc.
74
+ ```
75
+ $ bundle exec rdoc --main README.md
76
+ ```
67
77
 
68
- ## LICENSE:
78
+ ## License
69
79
 
70
80
  (The MIT License)
71
81
 
@@ -8,8 +8,6 @@ require 'benchmark/bigo/job'
8
8
  module Benchmark
9
9
 
10
10
  module BigO
11
- VERSION = "0.0.1"
12
-
13
11
  def bigo
14
12
  suite = nil
15
13
 
@@ -125,8 +125,8 @@ module Benchmark
125
125
  @logscale = false
126
126
  end
127
127
 
128
- # logarithmic incrementer
129
- def logarithmic base=10
128
+ # exponential incrementer
129
+ def exponential base=10
130
130
  @incrementer = Proc.new {|i| base ** (i-1) }
131
131
  @full_report.logscale!
132
132
  @logscale = true
@@ -190,7 +190,7 @@ module Benchmark
190
190
  end
191
191
  end
192
192
 
193
- template_file = File.join File.dirname(__FILE__), 'chart.erb'
193
+ template_file = File.join File.dirname(__FILE__), 'templates/chart.erb'
194
194
  template = ERB.new(File.read(template_file))
195
195
 
196
196
  File.open @chart, 'w' do |f|
@@ -0,0 +1,15 @@
1
+ module Benchmark
2
+ module BigO
3
+ class Version
4
+ MAJOR = 0
5
+ MINOR = 1
6
+ PATCH = 0
7
+
8
+ def self.to_s
9
+ [MAJOR, MINOR, PATCH].compact.join('.')
10
+ end
11
+ end
12
+
13
+ VERSION = Version.to_s
14
+ end
15
+ end
@@ -1,8 +1,156 @@
1
1
  require "minitest/autorun"
2
2
  require "benchmark/bigo"
3
3
 
4
- class TestBenchmark::TestBigo < MiniTest::Test
5
- def test_sanity
6
- # flunk "write tests or I will kneecap you"
4
+ class TestBenchmarkBigo < MiniTest::Test
5
+ def setup
6
+ @old_stdout = $stdout
7
+ $stdout = StringIO.new
8
+ end
9
+
10
+ def teardown
11
+ $stdout = @old_stdout
12
+ end
13
+
14
+ def test_bigo
15
+ #skip('pass')
16
+
17
+ report = Benchmark.bigo do |x|
18
+ x.config(:time => 1, :warmup => 1, :increments => 2)
19
+ x.generate :array
20
+
21
+ x.report("#at") {|array, size| array.at rand(size) }
22
+ x.report("#index") {|array, size| array.index rand(size) }
23
+ x.report("sleep") { |a,b| sleep(0.25) }
24
+ end
25
+
26
+ assert_equal 3, report.entries.length
27
+
28
+ assert report.entries.keys.include?("#at")
29
+ assert report.entries.keys.include?("#index")
30
+ assert report.entries.keys.include?("sleep")
31
+
32
+ at_rep = report.entries["#at"]
33
+ index_rep = report.entries["#index"]
34
+ sleep_rep = report.entries["sleep"]
35
+
36
+ assert_equal 2, at_rep.size
37
+ assert_equal 2, index_rep.size
38
+ assert_equal 2, sleep_rep.size
39
+
40
+ assert_equal "#at 100", at_rep[0].label
41
+ assert_equal "#at 200", at_rep[1].label
42
+
43
+ assert_equal "#index 100", index_rep[0].label
44
+ assert_equal "#index 200", index_rep[1].label
45
+
46
+ assert_equal "sleep 100", sleep_rep[0].label
47
+ assert_equal "sleep 200", sleep_rep[1].label
48
+
49
+ assert_equal 4, sleep_rep[0].iterations
50
+ assert_in_delta 4.0, sleep_rep[0].ips, 0.2
51
+
52
+ end
53
+
54
+ def test_bigo_alternate_config
55
+ #skip('pass')
56
+ report = Benchmark.bigo do |x|
57
+ x.time = 1
58
+ x.warmup = 1
59
+ x.increments = 2
60
+ x.generate(:array)
61
+ x.report("sleep") { |a,b| sleep(0.25) }
62
+ end
63
+
64
+ rep = report.entries["sleep"]
65
+ assert_equal 2, rep.size
66
+
67
+ assert_equal "sleep 100", rep[0].label
68
+ assert_equal 4, rep[0].iterations
69
+ assert_in_delta 4.0, rep[0].ips, 0.2
70
+ end
71
+
72
+ def test_bigo_defaults
73
+ #skip('pass')
74
+ report = Benchmark.bigo do |x|
75
+ x.config(:time => 1, :warmup => 1)
76
+ x.generate :array
77
+ x.report("sleep") { |a,b| sleep(0.25) }
78
+ end
79
+
80
+ assert_equal 1, report.entries.keys.length
81
+ rep = report.entries["sleep"]
82
+
83
+ assert_equal 5, rep.size
84
+
85
+ assert_equal "sleep 100", rep[0].label
86
+ assert_equal "sleep 200", rep[1].label
87
+ assert_equal "sleep 300", rep[2].label
88
+ assert_equal "sleep 400", rep[3].label
89
+ assert_equal "sleep 500", rep[4].label
90
+
91
+ assert_equal 4, rep[0].iterations
92
+ assert_in_delta 4.0, rep[0].ips, 0.2
93
+ end
94
+
95
+ def test_bigo_exponential
96
+ #skip('pass')
97
+ report = Benchmark.bigo do |x|
98
+ x.config(:time => 1, :warmup => 1, :increments => 2)
99
+ x.generate :array
100
+ x.exponential
101
+ x.report("sleep") { |a,b| sleep(0.25) }
102
+ end
103
+
104
+ rep = report.entries["sleep"]
105
+
106
+ assert_equal "sleep 1", rep[0].label
107
+ assert_equal "sleep 10", rep[1].label
108
+ assert_equal 4, rep[0].iterations
109
+ assert_in_delta 4.0, rep[0].ips, 0.2
110
+ end
111
+
112
+ def test_bigo_increments_config
113
+ #skip('pass')
114
+ report = Benchmark.bigo do |x|
115
+ x.config(:time => 1, :warmup => 1, :increments => 3)
116
+ x.generate :array
117
+
118
+ x.report("#at") {|array, size| array.at rand(size) }
119
+ end
120
+
121
+ assert_equal 1, report.entries.length
122
+
123
+ assert report.entries.keys.include?("#at")
124
+
125
+ at_rep = report.entries["#at"]
126
+
127
+ assert_equal 3, at_rep.size
128
+
129
+ assert_equal "#at 100", at_rep[0].label
130
+ assert_equal "#at 200", at_rep[1].label
131
+ assert_equal "#at 300", at_rep[2].label
132
+ end
133
+
134
+ def test_bigo_increments_setter
135
+ #skip('pass')
136
+ report = Benchmark.bigo do |x|
137
+ x.config(:time => 1, :warmup => 1)
138
+ x.increments = 3
139
+ x.generate :array
140
+
141
+ x.report("#at") {|array, size| array.at rand(size) }
142
+ end
143
+
144
+ assert_equal 1, report.entries.length
145
+
146
+ assert report.entries.keys.include?("#at")
147
+
148
+ at_rep = report.entries["#at"]
149
+
150
+ assert_equal 3, at_rep.size
151
+
152
+ assert_equal "#at 100", at_rep[0].label
153
+ assert_equal "#at 200", at_rep[1].label
154
+ assert_equal "#at 300", at_rep[2].label
7
155
  end
8
156
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: benchmark-bigo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Davy Stevenson
@@ -14,121 +14,110 @@ dependencies:
14
14
  name: benchmark-ips
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '2.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: chartkick
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.2'
34
- - - '>='
35
- - !ruby/object:Gem::Version
36
- version: 1.2.4
37
34
  type: :runtime
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
40
37
  requirements:
41
- - - ~>
38
+ - - "~>"
42
39
  - !ruby/object:Gem::Version
43
40
  version: '1.2'
44
- - - '>='
45
- - !ruby/object:Gem::Version
46
- version: 1.2.4
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: minitest
49
43
  requirement: !ruby/object:Gem::Requirement
50
44
  requirements:
51
- - - ~>
45
+ - - "~>"
52
46
  - !ruby/object:Gem::Version
53
47
  version: '5.3'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
51
  requirements:
58
- - - ~>
52
+ - - "~>"
59
53
  - !ruby/object:Gem::Version
60
54
  version: '5.3'
61
55
  - !ruby/object:Gem::Dependency
62
56
  name: rdoc
63
57
  requirement: !ruby/object:Gem::Requirement
64
58
  requirements:
65
- - - ~>
59
+ - - "~>"
66
60
  - !ruby/object:Gem::Version
67
61
  version: '4.0'
68
62
  type: :development
69
63
  prerelease: false
70
64
  version_requirements: !ruby/object:Gem::Requirement
71
65
  requirements:
72
- - - ~>
66
+ - - "~>"
73
67
  - !ruby/object:Gem::Version
74
68
  version: '4.0'
75
69
  - !ruby/object:Gem::Dependency
76
- name: hoe
70
+ name: rake
77
71
  requirement: !ruby/object:Gem::Requirement
78
72
  requirements:
79
- - - ~>
73
+ - - ">="
80
74
  - !ruby/object:Gem::Version
81
- version: '3.12'
75
+ version: '0'
82
76
  type: :development
83
77
  prerelease: false
84
78
  version_requirements: !ruby/object:Gem::Requirement
85
79
  requirements:
86
- - - ~>
80
+ - - ">="
87
81
  - !ruby/object:Gem::Version
88
- version: '3.12'
82
+ version: '0'
89
83
  description: Benchmark objects to help calculate Big O behavior
90
84
  email:
91
85
  - davy.stevenson@gmail.com
92
86
  executables: []
93
87
  extensions: []
94
88
  extra_rdoc_files:
95
- - History.txt
96
- - Manifest.txt
97
89
  - README.md
98
90
  files:
99
- - History.txt
100
- - Manifest.txt
101
91
  - README.md
102
- - Rakefile
103
92
  - lib/benchmark/bigo.rb
104
- - lib/benchmark/bigo/report.rb
105
93
  - lib/benchmark/bigo/job.rb
106
- - lib/benchmark/bigo/chart.erb
94
+ - lib/benchmark/bigo/report.rb
95
+ - lib/benchmark/bigo/templates/chart.erb
96
+ - lib/benchmark/bigo/version.rb
107
97
  - test/benchmark/test_bigo.rb
108
- - .gemtest
109
98
  homepage: http://github.com/davy/benchmark-bigo
110
99
  licenses:
111
100
  - MIT
112
101
  metadata: {}
113
102
  post_install_message:
114
103
  rdoc_options:
115
- - --main
104
+ - "--main"
116
105
  - README.md
117
106
  require_paths:
118
107
  - lib
119
108
  required_ruby_version: !ruby/object:Gem::Requirement
120
109
  requirements:
121
- - - '>='
110
+ - - ">="
122
111
  - !ruby/object:Gem::Version
123
112
  version: '0'
124
113
  required_rubygems_version: !ruby/object:Gem::Requirement
125
114
  requirements:
126
- - - '>='
115
+ - - ">="
127
116
  - !ruby/object:Gem::Version
128
117
  version: '0'
129
118
  requirements: []
130
119
  rubyforge_project:
131
- rubygems_version: 2.0.3
120
+ rubygems_version: 2.2.2
132
121
  signing_key:
133
122
  specification_version: 4
134
123
  summary: Benchmark objects to help calculate Big O behavior
data/.gemtest DELETED
File without changes
@@ -1,6 +0,0 @@
1
- === 0.0.1 / 2014-05-12
2
-
3
- * 1 major enhancement
4
-
5
- * Birthday!
6
-
@@ -1,8 +0,0 @@
1
- History.txt
2
- Manifest.txt
3
- README.md
4
- Rakefile
5
- lib/benchmark/bigo.rb
6
- lib/benchmark/bigo/report.rb
7
- lib/benchmark/bigo/job.rb
8
- lib/benchmark/bigo/chart.erb
data/Rakefile DELETED
@@ -1,20 +0,0 @@
1
- # -*- ruby -*-
2
-
3
- require "rubygems"
4
- require "hoe"
5
-
6
- Hoe.plugin :minitest
7
-
8
- Hoe.spec "benchmark-bigo" do
9
-
10
- developer("Davy Stevenson", "davy.stevenson@gmail.com")
11
-
12
- extra_deps << ["benchmark-ips", '~> 2.0']
13
- extra_deps << ["chartkick", '~> 1.2', '>= 1.2.4']
14
-
15
- self.readme_file = 'README.md'
16
-
17
- license "MIT" # this should match the license in the README
18
- end
19
-
20
- # vim: syntax=ruby