diff --git a/lib/histogram.rb b/lib/histogram.rb index 9fcd9fc..eb095cb 100644 --- a/lib/histogram.rb +++ b/lib/histogram.rb @@ -72,7 +72,7 @@ def iqrange(obj, opts={}) hi_idx += 1 unless sz.even? median(srted[hi_idx..-1]) - median(srted[0..lo_idx]) else - raise ArgumentError, "method must be :tukey" + raise ArgumentError, "method must be :tukey or :moore_mccabe" end answer.to_f end @@ -318,9 +318,9 @@ def histogram(*args) # NUMBER OF BINS: ######################################################## # Create the scaling factor - dmin = _min.to_f - conv = _max == _min ? 0 : bins.to_f/(_max - _min) + min_equals_max = _max == _min + conv = min_equals_max ? 0 : bins.to_f/(_max - _min) _bins = if self.is_a?(Array) @@ -352,20 +352,18 @@ def histogram(*args) iconv = 1.0/conv case bin_boundary when :avg - if bins == 1 - _bins[0] = self.to_a.inject(0.0) {|sum, val| sum + val } / self.size - else - (0...bins).each do |i| - _bins[i] = ((i+0.5) * iconv) + dmin - end + if min_equals_max + set_bin_value = self.to_a.inject(0.0) {|sum, val| sum + val } / self.size + end + (0...bins).each do |i| + _bins[i] = min_equals_max ? set_bin_value : ((i+0.5) * iconv) + dmin end when :min - if bins == 1 - _bins[0] = self.min - else - (0...bins).each do |i| - _bins[i] = (i * iconv) + dmin - end + if min_equals_max + set_bin_value = self.min + end + (0...bins).each do |i| + _bins[i] = min_equals_max ? set_bin_value : (i * iconv) + dmin end end end diff --git a/lib/histogram/version.rb b/lib/histogram/version.rb index d1dfd6c..9e1c0d8 100644 --- a/lib/histogram/version.rb +++ b/lib/histogram/version.rb @@ -1,3 +1,3 @@ module Histogram - VERSION = "0.2.4.0" + VERSION = "0.2.4.1" end diff --git a/spec/histogram_spec.rb b/spec/histogram_spec.rb index 474e4d7..efc2351 100644 --- a/spec/histogram_spec.rb +++ b/spec/histogram_spec.rb @@ -116,6 +116,12 @@ def round(n=nil) freq.to_a.should == [5] end + it 'sets all bin values to the same if min equals max' do + bins, freq = obj6.histogram(2) + bins.to_a.should == [0.0, 0.0] + freq.to_a.should == [5.0, 0.0] + end + end describe Histogram do