benchmark-bigo 0.0.1 → 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 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