benchmark_harness 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -5,7 +5,6 @@ source "http://rubygems.org"
5
5
 
6
6
  # Add dependencies to develop your gem here.
7
7
  # Include everything needed to run rake, tests, features, etc.
8
- gem "easystats"
9
8
 
10
9
  group :development do
11
10
  gem "rspec", "~> 2.3.0"
data/Gemfile.lock CHANGED
@@ -3,7 +3,6 @@ GEM
3
3
  specs:
4
4
  columnize (0.3.2)
5
5
  diff-lcs (1.1.2)
6
- easystats (0.0.7)
7
6
  git (1.2.5)
8
7
  jeweler (1.5.2)
9
8
  bundler (~> 1.0.0)
@@ -32,7 +31,6 @@ PLATFORMS
32
31
 
33
32
  DEPENDENCIES
34
33
  bundler (~> 1.0.0)
35
- easystats
36
34
  jeweler (~> 1.5.2)
37
35
  mocha
38
36
  rcov
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{benchmark_harness}
8
- s.version = "0.0.1"
8
+ s.version = "0.0.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Daniel Higginbotham"]
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
29
29
  "benchmark_harness.gemspec",
30
30
  "lib/benchmark_harness.rb",
31
31
  "lib/benchmark_harness/collection.rb",
32
+ "lib/benchmark_harness/stats.rb",
32
33
  "spec/benchmark_harness_spec.rb",
33
34
  "spec/fixtures/nested_example.rb",
34
35
  "spec/fixtures/string_example.rb",
@@ -51,7 +52,6 @@ Gem::Specification.new do |s|
51
52
  s.specification_version = 3
52
53
 
53
54
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
54
- s.add_runtime_dependency(%q<easystats>, [">= 0"])
55
55
  s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
56
56
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
57
57
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
@@ -59,7 +59,6 @@ Gem::Specification.new do |s|
59
59
  s.add_development_dependency(%q<ruby-debug>, [">= 0"])
60
60
  s.add_development_dependency(%q<mocha>, [">= 0"])
61
61
  else
62
- s.add_dependency(%q<easystats>, [">= 0"])
63
62
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
64
63
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
65
64
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
@@ -68,7 +67,6 @@ Gem::Specification.new do |s|
68
67
  s.add_dependency(%q<mocha>, [">= 0"])
69
68
  end
70
69
  else
71
- s.add_dependency(%q<easystats>, [">= 0"])
72
70
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
73
71
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
74
72
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
@@ -1,5 +1,6 @@
1
1
  class BenchmarkHarness
2
2
  class Collection < Array
3
+
3
4
  # order corresponds to values in each sample
4
5
  KEYS = [:user, :system, :children_user, :children_system, :real]
5
6
  STATS = [:mean, :median, :mode, :range, :standard_deviation, :variance]
@@ -45,6 +46,5 @@ class BenchmarkHarness
45
46
  puts sprintf("%#{label_size}s: %g %g %g %g %g", label, *KEYS.collect{|k| self.send(STATS[i], k)})
46
47
  end
47
48
  end
48
-
49
49
  end
50
50
  end
@@ -0,0 +1,176 @@
1
+ class BenchmarkHarness
2
+ # copied from https://github.com/mgrigajtis/easystats/blob/master/lib/easystats.rb until orig author fixes
3
+ # sum conflict problem
4
+ module Stats
5
+ # take in an array of numbers and calculate the sum
6
+ def self.included(base)
7
+ unless base.method_defined? :sum
8
+ base.class_eval do
9
+ define_method :sum do
10
+ data = self
11
+ sum_of_numbers = 0
12
+
13
+ # Get the total sum only if there are actually numbers to total
14
+ if data.count > 0
15
+ data.each do |num|
16
+ sum_of_numbers += num
17
+ end
18
+ else
19
+ sum_of_numbers = 0
20
+ end
21
+
22
+ sum_of_numbers
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ # take in an array of numbers and calculate the mean (average)
29
+ def mean
30
+ data = self
31
+
32
+ # Check to make sure there are numbers to avoid division by 0
33
+ if data.count > 0
34
+ self.sum / data.count.to_f
35
+ else
36
+ 0
37
+ end
38
+ end
39
+ alias_method :average, :mean
40
+
41
+ # this is an internat function (technically the developer can use it but should have no need)
42
+ # this function returns the sum of each squared difference of mean
43
+ def sum_of_deviations_squared
44
+ data = self
45
+
46
+ deviations = Array.new
47
+ average = self.mean
48
+ sum_of_deviations_squared = 0
49
+
50
+ data.each do |num|
51
+ deviations.push((num-average)**2)
52
+ end
53
+
54
+ deviations.each do |num|
55
+ sum_of_deviations_squared += num
56
+ end
57
+
58
+ sum_of_deviations_squared
59
+ end
60
+
61
+ # take in an array of numbers and calculate the standard deviation
62
+ def standard_deviation
63
+ data = self
64
+ sum_of_deviations_squared = self.sum_of_deviations_squared
65
+
66
+ if data.count > 1
67
+ Math::sqrt(sum_of_deviations_squared / (data.count-1))
68
+ else
69
+ 0
70
+ end
71
+ end
72
+
73
+ def variance
74
+ data = self
75
+ average = self.mean
76
+ sum_of_deviations = self.sum_of_deviations_squared
77
+
78
+ if data.count > 0
79
+ sum_of_deviations / data.count.to_f
80
+ else
81
+ 0
82
+ end
83
+ end
84
+
85
+ # take in the array of numbers and calculate the median
86
+ def median
87
+ data = self
88
+
89
+ halfway = data.count / 2
90
+
91
+ # Sort the array
92
+ data = data.sort
93
+
94
+ # The median will be different based on the number of numbers in the array
95
+ # If there is an even number in the array
96
+ if(data.count % 2) == 0
97
+ median = (data[halfway] + data[halfway-1]) / 2.0
98
+
99
+ # Else, there is an odd number of elements in the array
100
+ else
101
+ median = data[halfway]
102
+ end
103
+
104
+ median
105
+ end
106
+
107
+ # take in an array of numbers and calculate the range
108
+ def range
109
+ data = self
110
+ data = data.sort
111
+ data[data.count-1] - data[0]
112
+ end
113
+
114
+ # take in an array of numbers and return the mode
115
+ def mode
116
+ data = self
117
+
118
+ # Sort the array
119
+ data = data.sort
120
+
121
+ # create a flag to tell the user if all the numbers only appear once
122
+ no_mode = true
123
+
124
+ # The variable that will hold the highest number
125
+ highest_value = 0
126
+
127
+ # The variable that holds the most time the value appears
128
+ most_times = 0
129
+
130
+ # Create a new hash to hold the numbers
131
+ tmp = Hash.new
132
+
133
+ # Populate the hash
134
+ data.each do |num|
135
+ if tmp["#{num}"].nil? == false
136
+ tmp["#{num}"] = tmp["#{num}"].to_i + 1
137
+ else
138
+ tmp["#{num}"] = 1
139
+ end
140
+ end
141
+
142
+ # Check to make sure that there is a mode
143
+ data.each do |num|
144
+ if tmp["#{num}"].to_i > 1
145
+ no_mode = false
146
+ end
147
+ end
148
+
149
+ if no_mode == true
150
+ 0
151
+ else
152
+ data.each do |num|
153
+ if tmp["#{num}"].to_i > most_times
154
+ highest_value = num
155
+ most_times = tmp["#{num}"]
156
+ end
157
+ end
158
+
159
+ # now loop through again just to make sure another number doesn't appear an equal number of times
160
+ data.each do |num|
161
+ if num != highest_value
162
+ if tmp["#{num}"].to_i == most_times
163
+ no_mode = true
164
+ end
165
+ end
166
+ end
167
+
168
+ if no_mode == true
169
+ 0
170
+ else
171
+ highest_value
172
+ end
173
+ end
174
+ end
175
+ end
176
+ end
@@ -1,8 +1,8 @@
1
1
  require 'singleton'
2
2
  require 'forwardable'
3
3
  require 'benchmark'
4
- require 'easystats'
5
4
 
5
+ require 'benchmark_harness/stats'
6
6
  require 'benchmark_harness/collection'
7
7
 
8
8
  class BenchmarkHarness
@@ -74,4 +74,8 @@ class BenchmarkHarness
74
74
  end
75
75
  parent_constant
76
76
  end
77
+ end
78
+
79
+ class Array
80
+ include BenchmarkHarness::Stats
77
81
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: benchmark_harness
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Daniel Higginbotham
@@ -18,25 +18,11 @@ cert_chain: []
18
18
  date: 2011-03-29 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
- - !ruby/object:Gem::Dependency
22
- prerelease: false
23
- type: :runtime
24
- name: easystats
25
- version_requirements: &id001 !ruby/object:Gem::Requirement
26
- none: false
27
- requirements:
28
- - - ">="
29
- - !ruby/object:Gem::Version
30
- hash: 3
31
- segments:
32
- - 0
33
- version: "0"
34
- requirement: *id001
35
21
  - !ruby/object:Gem::Dependency
36
22
  prerelease: false
37
23
  type: :development
38
24
  name: rspec
39
- version_requirements: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: &id001 !ruby/object:Gem::Requirement
40
26
  none: false
41
27
  requirements:
42
28
  - - ~>
@@ -47,12 +33,12 @@ dependencies:
47
33
  - 3
48
34
  - 0
49
35
  version: 2.3.0
50
- requirement: *id002
36
+ requirement: *id001
51
37
  - !ruby/object:Gem::Dependency
52
38
  prerelease: false
53
39
  type: :development
54
40
  name: bundler
55
- version_requirements: &id003 !ruby/object:Gem::Requirement
41
+ version_requirements: &id002 !ruby/object:Gem::Requirement
56
42
  none: false
57
43
  requirements:
58
44
  - - ~>
@@ -63,12 +49,12 @@ dependencies:
63
49
  - 0
64
50
  - 0
65
51
  version: 1.0.0
66
- requirement: *id003
52
+ requirement: *id002
67
53
  - !ruby/object:Gem::Dependency
68
54
  prerelease: false
69
55
  type: :development
70
56
  name: jeweler
71
- version_requirements: &id004 !ruby/object:Gem::Requirement
57
+ version_requirements: &id003 !ruby/object:Gem::Requirement
72
58
  none: false
73
59
  requirements:
74
60
  - - ~>
@@ -79,12 +65,12 @@ dependencies:
79
65
  - 5
80
66
  - 2
81
67
  version: 1.5.2
82
- requirement: *id004
68
+ requirement: *id003
83
69
  - !ruby/object:Gem::Dependency
84
70
  prerelease: false
85
71
  type: :development
86
72
  name: rcov
87
- version_requirements: &id005 !ruby/object:Gem::Requirement
73
+ version_requirements: &id004 !ruby/object:Gem::Requirement
88
74
  none: false
89
75
  requirements:
90
76
  - - ">="
@@ -93,12 +79,12 @@ dependencies:
93
79
  segments:
94
80
  - 0
95
81
  version: "0"
96
- requirement: *id005
82
+ requirement: *id004
97
83
  - !ruby/object:Gem::Dependency
98
84
  prerelease: false
99
85
  type: :development
100
86
  name: ruby-debug
101
- version_requirements: &id006 !ruby/object:Gem::Requirement
87
+ version_requirements: &id005 !ruby/object:Gem::Requirement
102
88
  none: false
103
89
  requirements:
104
90
  - - ">="
@@ -107,12 +93,12 @@ dependencies:
107
93
  segments:
108
94
  - 0
109
95
  version: "0"
110
- requirement: *id006
96
+ requirement: *id005
111
97
  - !ruby/object:Gem::Dependency
112
98
  prerelease: false
113
99
  type: :development
114
100
  name: mocha
115
- version_requirements: &id007 !ruby/object:Gem::Requirement
101
+ version_requirements: &id006 !ruby/object:Gem::Requirement
116
102
  none: false
117
103
  requirements:
118
104
  - - ">="
@@ -121,7 +107,7 @@ dependencies:
121
107
  segments:
122
108
  - 0
123
109
  version: "0"
124
- requirement: *id007
110
+ requirement: *id006
125
111
  description: harness for running benchmark multiple times and running stats on the results
126
112
  email: daniel@flyingmachinestudios.com
127
113
  executables: []
@@ -144,6 +130,7 @@ files:
144
130
  - benchmark_harness.gemspec
145
131
  - lib/benchmark_harness.rb
146
132
  - lib/benchmark_harness/collection.rb
133
+ - lib/benchmark_harness/stats.rb
147
134
  - spec/benchmark_harness_spec.rb
148
135
  - spec/fixtures/nested_example.rb
149
136
  - spec/fixtures/string_example.rb