more_math 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ .*.sw[pon]
2
+ Gemfile.lock
3
+ pkg
@@ -0,0 +1,7 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - ruby-head
5
+ - ree
6
+ - rbx
7
+ - jruby
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # vim: set filetype=ruby et sw=2 ts=2:
2
+
3
+ source :rubygems
4
+
5
+ gemspec
@@ -8,7 +8,7 @@ Ruby library that contains various mathematical functions and algorithms.
8
8
 
9
9
  The homepage of this library is located at
10
10
 
11
- * http://flori.github.com/more_math
11
+ * http://github.com/flori/more_math
12
12
 
13
13
  == Author
14
14
 
data/Rakefile CHANGED
@@ -1,84 +1,32 @@
1
- begin
2
- require 'rake/gempackagetask'
3
- rescue LoadError
4
- end
5
- require 'rake/clean'
6
- require 'rbconfig'
7
- include Config
8
-
9
- PKG_NAME = 'more_math'
10
- PKG_VERSION = File.read('VERSION').chomp
11
- PKG_FILES = FileList['**/*'].exclude(/^(doc|CVS|pkg|coverage)/)
12
- CLEAN.include 'coverage', 'doc'
13
- CLOBBER.include FileList['data/*']
14
-
15
- desc "Run unit tests"
16
- task :test do
17
- sh %{RUBYOPT="-Ilib $RUBYOPT" testrb tests/*.rb}
18
- end
19
-
20
- desc "Testing library with coverage"
21
- task :coverage do
22
- sh 'rcov -x tests -Ilib tests/*.rb'
23
- end
24
-
25
- desc "Installing library"
26
- task :install do
27
- ruby 'install.rb'
28
- end
29
-
30
- desc "Creating documentation"
31
- task :doc do
32
- ruby 'make_doc.rb'
33
- end
34
-
35
- if defined? Gem
36
- spec = Gem::Specification.new do |s|
37
- s.name = PKG_NAME
38
- s.version = PKG_VERSION
39
- s.summary = "Library that provides more mathematics."
40
- s.description = "Library that provides more mathematical functions/algorithms than standard Ruby."
41
- s.add_dependency('dslkit', '~> 0.2')
42
-
43
- s.files = PKG_FILES
44
-
45
- s.require_path = 'lib'
46
-
47
- s.has_rdoc = true
48
- s.rdoc_options <<
49
- '--title' << 'MoreMath -- More Math in Ruby' << '--main' << 'README'
50
- s.extra_rdoc_files << 'README'
51
- s.test_files = Dir['tests/*.rb']
52
-
53
- s.author = "Florian Frank"
54
- s.email = "flori@ping.de"
55
- s.homepage = "http://flori.github.com/#{PKG_NAME}"
56
- s.rubyforge_project = PKG_NAME
57
- end
58
-
59
- Rake::GemPackageTask.new(spec) do |pkg|
60
- pkg.need_tar = true
61
- pkg.package_files += PKG_FILES
1
+ # vim: set filetype=ruby et sw=2 ts=2:
2
+
3
+ require 'gem_hadar'
4
+
5
+ GemHadar do
6
+ name 'more_math'
7
+ author 'Florian Frank'
8
+ email 'flori@ping.de'
9
+ homepage "http://flori.github.com/#{name}"
10
+ summary 'Library that provides more mathematics.'
11
+ description 'Library that provides more mathematical functions/algorithms than standard Ruby.'
12
+ test_dir 'tests'
13
+ ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock'
14
+ readme 'README.rdoc'
15
+ title "#{name.camelize} -- More Math in Ruby"
16
+
17
+ dependency 'spruz', '~>0.2'
18
+
19
+ install_library do
20
+ libdir = CONFIG["sitelibdir"]
21
+ file = 'lib/more_math.rb'
22
+ install(file, libdir, :mode => 0644)
23
+ mkdir_p subdir = File.join(libdir, 'more_math')
24
+ for f in Dir['lib/more_math/*.rb']
25
+ install(f, subdir)
26
+ end
27
+ mkdir_p subdir = File.join(libdir, 'more_math', 'constants')
28
+ for f in Dir['lib/more_math/constants/*.rb']
29
+ install(f, subdir)
30
+ end
62
31
  end
63
32
  end
64
-
65
- desc m = "Writing version information for #{PKG_VERSION}"
66
- task :version do
67
- puts m
68
- File.open(File.join('lib', PKG_NAME, 'version.rb'), 'w') do |v|
69
- v.puts <<EOT
70
- module MoreMath
71
- # MoreMath version
72
- VERSION = '#{PKG_VERSION}'
73
- VERSION_ARRAY = VERSION.split(/\\./).map { |x| x.to_i } # :nodoc:
74
- VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
75
- VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
76
- VERSION_BUILD = VERSION_ARRAY[2] # :nodoc:
77
- end
78
- EOT
79
- end
80
- end
81
-
82
- task :default => [ :version, :test ]
83
-
84
- task :release => [ :clobber, :version, :package ]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.0
1
+ 0.0.1
@@ -1,9 +1,19 @@
1
1
  module MoreMath
2
- Infinity = 1.0 / 0 # Refers to floating point infinity.
3
-
4
- Dir.chdir(File.join(File.dirname(__FILE__), 'more_math')) do
5
- Dir['**/*.rb'].each do |filename|
6
- require File.join('more_math', filename.gsub(/\.rb\Z/, ''))
7
- end
2
+ unless defined?(::MoreMath::Infinity) == 'constant'
3
+ Infinity = 1.0 / 0 # Refers to floating point infinity.
8
4
  end
5
+
6
+ require 'more_math/cantor_pairing_function'
7
+ require 'more_math/constants/functions_constants'
8
+ require 'more_math/continued_fraction'
9
+ require 'more_math/distributions'
10
+ require 'more_math/exceptions'
11
+ require 'more_math/functions'
12
+ require 'more_math/histogram'
13
+ require 'more_math/linear_regression'
14
+ require 'more_math/newton_bisection'
15
+ require 'more_math/numberify_string_function'
16
+ require 'more_math/sequence'
17
+ require 'more_math/string_numeral'
18
+ require 'more_math/version'
9
19
  end
@@ -136,6 +136,34 @@ module MoreMath
136
136
  end
137
137
  end
138
138
 
139
+ def log_ceil(n, b = 2)
140
+ raise ArgumentError, "n is required to be > 0" unless n > 0
141
+ raise ArgumentError, "b is required to be > 1" unless b > 1
142
+ e, result = 1, 0
143
+ until e >= n
144
+ e *= b
145
+ result += 1
146
+ end
147
+ result
148
+ end
149
+
150
+ def log_floor(n, b = 2)
151
+ raise ArgumentError, "n is required to be > 0" unless n > 0
152
+ raise ArgumentError, "b is required to be > 1" unless b > 1
153
+ e, result = 1, 0
154
+ until e * b > n
155
+ e *= b
156
+ result += 1
157
+ end
158
+ result
159
+ end
160
+
161
+ # Returns the base +b+ logarithm of the number +x+. +b+ defaults to base
162
+ # 2, binary logarithm.
163
+ def logb(x, b = 2)
164
+ Math.log(x) / Math.log(b)
165
+ end
166
+
139
167
  # Returns Cantor's tuple function for the tuple +*xs+ (the size must be at
140
168
  # least 2).
141
169
  def cantor_pairing(*xs)
@@ -147,5 +175,16 @@ module MoreMath
147
175
  def cantor_pairing_inv(c, n = 2)
148
176
  CantorPairingFunction.cantor_pairing_inv(c, n)
149
177
  end
178
+
179
+ # Computes a Gödel number from +string+ in the +alphabet+ and returns it.
180
+ def numberify_string(string, alphabet = 'a'..'z')
181
+ NumberifyStringFunction.numberify_string(string, alphabet)
182
+ end
183
+
184
+ # Computes the string in the +alphabet+ from a Gödel number +number+ and
185
+ # returns it. This is the inverse function of numberify_string.
186
+ def stringify_number(number, alphabet = 'a'..'z')
187
+ NumberifyStringFunction.stringify_number(number, alphabet)
188
+ end
150
189
  end
151
190
  end
@@ -0,0 +1,66 @@
1
+ require 'more_math'
2
+ require 'spruz/memoize'
3
+
4
+ module MoreMath
5
+ module NumberifyStringFunction
6
+ Functions = MoreMath::Functions
7
+
8
+ module_function
9
+
10
+ def numberify_string(string, alphabet = 'a'..'z')
11
+ alphabet = NumberifyStringFunction.convert_alphabet alphabet
12
+ s, k = string.size, alphabet.size
13
+ result = 0
14
+ for i in 0...s
15
+ c = string[i, 1]
16
+ a = (alphabet.index(c) || raise(ArgumentError, "#{c.inspect} not in alphabet")) + 1
17
+ j = s - i - 1
18
+ result += a * k ** j
19
+ end
20
+ result
21
+ end
22
+
23
+ def stringify_number(number, alphabet = 'a'..'z')
24
+ case
25
+ when number < 0
26
+ raise ArgumentError, "number is required to be >= 0"
27
+ when number == 0
28
+ return ''
29
+ end
30
+ alphabet = NumberifyStringFunction.convert_alphabet alphabet
31
+ s = NumberifyStringFunction.compute_size(number, alphabet.size)
32
+ k, m = alphabet.size, number
33
+ result = ' ' * s
34
+ q = m
35
+ s.downto(1) do |i|
36
+ r = q / k
37
+ q = r * k < q ? r : r - 1
38
+ result[i - 1] = alphabet[m - q * k - 1]
39
+ m = q
40
+ end
41
+ result
42
+ end
43
+
44
+ class << self
45
+ def compute_size(n, b)
46
+ i = 0
47
+ while n > 0
48
+ i += 1
49
+ n -= b ** i
50
+ end
51
+ i
52
+ end
53
+ memoize_function :compute_size
54
+
55
+ def convert_alphabet(alphabet)
56
+ if alphabet.respond_to?(:to_ary)
57
+ alphabet.to_ary
58
+ elsif alphabet.respond_to?(:to_str)
59
+ alphabet.to_str.split(//)
60
+ else
61
+ alphabet.to_a
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -1,12 +1,12 @@
1
1
  require 'more_math'
2
+ require 'spruz/memoize'
2
3
 
3
4
  module MoreMath
4
5
  # This class is used to contain elements and compute various statistical
5
6
  # values for them.
6
7
  class Sequence
7
8
  def initialize(elements)
8
- @elements = elements
9
- @elements.freeze
9
+ @elements = elements.dup.freeze
10
10
  end
11
11
 
12
12
  # Returns the array of elements.
@@ -28,105 +28,126 @@ module MoreMath
28
28
  @elements.size
29
29
  end
30
30
 
31
+ # Reset all memoized values of this sequence.
32
+ def reset
33
+ self.class.memoize_cache_clear
34
+ self
35
+ end
36
+
31
37
  # Returns the variance of the elements.
32
38
  def variance
33
- @variance ||= sum_of_squares / size
39
+ sum_of_squares / size
34
40
  end
41
+ memoize_method :variance
35
42
 
36
43
  # Returns the sample_variance of the elements.
37
44
  def sample_variance
38
- @sample_variance ||= size > 1 ? sum_of_squares / (size - 1.0) : 0.0
45
+ size > 1 ? sum_of_squares / (size - 1.0) : 0.0
39
46
  end
47
+ memoize_method :sample_variance
40
48
 
41
49
  # Returns the sum of squares (the sum of the squared deviations) of the
42
50
  # elements.
43
51
  def sum_of_squares
44
- @sum_of_squares ||= @elements.inject(0.0) { |s, t| s + (t - arithmetic_mean) ** 2 }
52
+ @elements.inject(0.0) { |s, t| s + (t - arithmetic_mean) ** 2 }
45
53
  end
54
+ memoize_method :sum_of_squares
46
55
 
47
56
  # Returns the standard deviation of the elements.
48
57
  def standard_deviation
49
- @sample_deviation ||= Math.sqrt(variance)
58
+ Math.sqrt(variance)
50
59
  end
60
+ memoize_method :standard_deviation
51
61
 
52
62
  # Returns the standard deviation of the elements in percentage of the
53
63
  # arithmetic mean.
54
64
  def standard_deviation_percentage
55
- @standard_deviation_percentage ||= 100.0 * standard_deviation / arithmetic_mean
65
+ 100.0 * standard_deviation / arithmetic_mean
56
66
  end
67
+ memoize_method :standard_deviation_percentage
57
68
 
58
69
  # Returns the sample standard deviation of the elements.
59
70
  def sample_standard_deviation
60
- @sample_standard_deviation ||= Math.sqrt(sample_variance)
71
+ Math.sqrt(sample_variance)
61
72
  end
73
+ memoize_method :sample_standard_deviation
62
74
 
63
75
  # Returns the sample standard deviation of the elements in percentage
64
76
  # of the arithmetic mean.
65
77
  def sample_standard_deviation_percentage
66
- @sample_standard_deviation_percentage ||= 100.0 * sample_standard_deviation / arithmetic_mean
78
+ 100.0 * sample_standard_deviation / arithmetic_mean
67
79
  end
80
+ memoize_method :sample_standard_deviation_percentage
68
81
 
69
82
  # Returns the sum of all elements.
70
83
  def sum
71
- @sum ||= @elements.inject(0.0) { |s, t| s + t }
84
+ @elements.inject(0.0) { |s, t| s + t }
72
85
  end
86
+ memoize_method :sum
73
87
 
74
88
  # Returns the arithmetic mean of the elements.
75
89
  def arithmetic_mean
76
- @arithmetic_mean ||= sum / size
90
+ sum / size
77
91
  end
92
+ memoize_method :arithmetic_mean
78
93
 
79
94
  alias mean arithmetic_mean
80
95
 
81
96
  # Returns the harmonic mean of the elements. If any of the elements
82
97
  # is less than or equal to 0.0, this method returns NaN.
83
98
  def harmonic_mean
84
- @harmonic_mean ||= (
85
- sum = @elements.inject(0.0) { |s, t|
86
- if t > 0
87
- s + 1.0 / t
88
- else
89
- break nil
90
- end
91
- }
92
- sum ? size / sum : 0 / 0.0
93
- )
99
+ sum = @elements.inject(0.0) { |s, t|
100
+ if t > 0
101
+ s + 1.0 / t
102
+ else
103
+ break nil
104
+ end
105
+ }
106
+ sum ? size / sum : 0 / 0.0
94
107
  end
108
+ memoize_method :harmonic_mean
95
109
 
96
110
  # Returns the geometric mean of the elements. If any of the
97
111
  # elements is less than 0.0, this method returns NaN.
98
112
  def geometric_mean
99
- @geometric_mean ||= (
100
- sum = @elements.inject(0.0) { |s, t|
101
- case
102
- when t > 0
103
- s + Math.log(t)
104
- when t == 0
105
- break :null
106
- else
107
- break nil
108
- end
109
- }
110
- case sum
111
- when :null
112
- 0.0
113
- when Float
114
- Math.exp(sum / size)
113
+ sum = @elements.inject(0.0) { |s, t|
114
+ case
115
+ when t > 0
116
+ s + Math.log(t)
117
+ when t == 0
118
+ break :null
115
119
  else
116
- 0 / 0.0
120
+ break nil
117
121
  end
118
- )
122
+ }
123
+ case sum
124
+ when :null
125
+ 0.0
126
+ when Float
127
+ Math.exp(sum / size)
128
+ else
129
+ 0 / 0.0
130
+ end
119
131
  end
132
+ memoize_method :geometric_mean
120
133
 
121
134
  # Returns the minimum of the elements.
122
135
  def min
123
- @min ||= @elements.min
136
+ @elements.min
124
137
  end
138
+ memoize_method :min
125
139
 
126
140
  # Returns the maximum of the elements.
127
141
  def max
128
- @max ||= @elements.max
142
+ @elements.max
143
+ end
144
+ memoize_method :max
145
+
146
+ # Return a sorted array of the elements.
147
+ def sorted
148
+ @elements.sort
129
149
  end
150
+ memoize_method :sorted
130
151
 
131
152
  # Returns the +p+-percentile of the elements.
132
153
  # There are many methods to compute the percentile, this method uses the
@@ -136,17 +157,17 @@ module MoreMath
136
157
  (0...100).include?(p) or
137
158
  raise ArgumentError, "p = #{p}, but has to be in (0...100)"
138
159
  p /= 100.0
139
- @sorted ||= @elements.sort
140
- r = p * (@sorted.size + 1)
160
+ sorted_elements = sorted
161
+ r = p * (sorted_elements.size + 1)
141
162
  r_i = r.to_i
142
163
  r_f = r - r_i
143
164
  if r_i >= 1
144
- result = @sorted[r_i - 1]
145
- if r_i < @sorted.size
146
- result += r_f * (@sorted[r_i] - @sorted[r_i - 1])
165
+ result = sorted_elements[r_i - 1]
166
+ if r_i < sorted_elements.size
167
+ result += r_f * (sorted_elements[r_i] - sorted_elements[r_i - 1])
147
168
  end
148
169
  else
149
- result = @sorted[0]
170
+ result = sorted_elements[0]
150
171
  end
151
172
  result
152
173
  end
@@ -325,8 +346,9 @@ module MoreMath
325
346
  # Returns the LinearRegression object for the equation a * x + b which
326
347
  # represents the line computed by the linear regression algorithm.
327
348
  def linear_regression
328
- @linear_regression ||= LinearRegression.new @elements
349
+ LinearRegression.new @elements
329
350
  end
351
+ memoize_method :linear_regression
330
352
 
331
353
  # Returns a Histogram instance with +bins+ as the number of bins for this
332
354
  # analysis' elements.
@@ -0,0 +1,153 @@
1
+ require 'more_math'
2
+
3
+ module MoreMath
4
+ class StringNumeral
5
+ include ::MoreMath::NumberifyStringFunction
6
+
7
+ def self.from(object, alphabet = 'a'..'z')
8
+ if object.respond_to?(:to_str)
9
+ StringNumeral.from_string(object.to_str, alphabet)
10
+ elsif object.respond_to?(:to_int)
11
+ StringNumeral.from_number(object.to_int, alphabet)
12
+ else
13
+ StringNumeral.from_string(object.to_s, alphabet)
14
+ end
15
+ end
16
+
17
+ def self.from_string(string, alphabet)
18
+ new string, nil, alphabet
19
+ end
20
+
21
+ def self.from_number(number, alphabet)
22
+ new nil, number, alphabet
23
+ end
24
+
25
+ def initialize(string, number, alphabet)
26
+ @alphabet = NumberifyStringFunction.convert_alphabet(alphabet).freeze
27
+ if string
28
+ @string = string.to_s
29
+ string.each_char.each do |c|
30
+ @alphabet.include?(c) or raise ArgumentError,
31
+ "illegal character #{c.inspect} in #{@string.inspect} for alphabet #{@alphabet.inspect}"
32
+ end
33
+ elsif number
34
+ @number = number.to_i
35
+ end
36
+ end
37
+ private_class_method :new
38
+
39
+ def number
40
+ @number ||= numberify_string(@string, @alphabet)
41
+ end
42
+ alias to_i number
43
+
44
+ def string
45
+ @string ||= stringify_number(@number, @alphabet).freeze
46
+ end
47
+
48
+ alias to_s string
49
+
50
+ def inspect
51
+ "#<#{self.class}: #{string.inspect} #{number.inspect}>"
52
+ end
53
+
54
+ attr_reader :alphabet
55
+
56
+ def coerce(other)
57
+ [ naturalize(other), number ]
58
+ end
59
+
60
+ def *(other)
61
+ self.class.from_number(number * naturalize(other), @alphabet)
62
+ end
63
+
64
+ def +(other)
65
+ self.class.from_number(number + naturalize(other), @alphabet)
66
+ end
67
+
68
+ def -(other)
69
+ self.class.from_number(naturalize(number - other), @alphabet)
70
+ end
71
+
72
+ def /(other)
73
+ self.class.from_number((number / naturalize(other)), @alphabet)
74
+ end
75
+
76
+ def %(other)
77
+ self.class.from_number((number % naturalize(other)), @alphabet)
78
+ end
79
+
80
+ def **(other)
81
+ self.class.from_number(number ** naturalize(other), @alphabet)
82
+ end
83
+
84
+ def <<(other)
85
+ self.class.from_number(number << naturalize(other), @alphabet)
86
+ end
87
+
88
+ def >>(other)
89
+ self.class.from_number(number >> naturalize(other), @alphabet)
90
+ end
91
+
92
+ def ^(other)
93
+ self.class.from_number(number ^ naturalize(other), @alphabet)
94
+ end
95
+
96
+ def &(other)
97
+ self.class.from_number(number & naturalize(other), @alphabet)
98
+ end
99
+
100
+ def |(other)
101
+ self.class.from_number(number | naturalize(other), @alphabet)
102
+ end
103
+
104
+ def [](other)
105
+ self.class.from_number(number[other.to_i], @alphabet)
106
+ end
107
+
108
+ def succ
109
+ self.class.from_number(number + 1, @alphabet)
110
+ end
111
+
112
+ def succ!
113
+ @number += 1
114
+ @string = nil
115
+ self
116
+ end
117
+
118
+ def pred
119
+ self.class.from_number(naturalize(number - 1), @alphabet)
120
+ end
121
+
122
+ def pred!
123
+ @number = naturalize(@number - 1)
124
+ @string = nil
125
+ self
126
+ end
127
+
128
+ def to_string_numeral
129
+ self
130
+ end
131
+
132
+ private
133
+
134
+ def naturalize(number)
135
+ number = number.to_i
136
+ number < 0 ? 0 : number
137
+ end
138
+
139
+ module Functions
140
+ def StringNumeral(other, alphabet = 'a'..'z')
141
+ ::MoreMath::StringNumeral.from(other, alphabet)
142
+ end
143
+
144
+ def to_sn(alphabet = 'a'..'z')
145
+ StringNumeral === self ? self : StringNumeral.from(self, alphabet)
146
+ end
147
+ end
148
+ end
149
+
150
+ class ::Object
151
+ include StringNumeral::Functions
152
+ end
153
+ end
@@ -1,6 +1,6 @@
1
1
  module MoreMath
2
2
  # MoreMath version
3
- VERSION = '0.0.0'
3
+ VERSION = '0.0.1'
4
4
  VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
@@ -0,0 +1,35 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{more_math}
5
+ s.version = "0.0.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Florian Frank"]
9
+ s.date = %q{2011-07-17}
10
+ s.description = %q{Library that provides more mathematical functions/algorithms than standard Ruby.}
11
+ s.email = %q{flori@ping.de}
12
+ s.extra_rdoc_files = ["README.rdoc", "lib/more_math/cantor_pairing_function.rb", "lib/more_math/version.rb", "lib/more_math/functions.rb", "lib/more_math/sequence.rb", "lib/more_math/linear_regression.rb", "lib/more_math/string_numeral.rb", "lib/more_math/histogram.rb", "lib/more_math/constants/functions_constants.rb", "lib/more_math/numberify_string_function.rb", "lib/more_math/distributions.rb", "lib/more_math/exceptions.rb", "lib/more_math/newton_bisection.rb", "lib/more_math/continued_fraction.rb", "lib/more_math.rb"]
13
+ s.files = [".gitignore", ".travis.yml", "CHANGES", "Gemfile", "LICENSE", "README.rdoc", "Rakefile", "VERSION", "lib/more_math.rb", "lib/more_math/cantor_pairing_function.rb", "lib/more_math/constants/functions_constants.rb", "lib/more_math/continued_fraction.rb", "lib/more_math/distributions.rb", "lib/more_math/exceptions.rb", "lib/more_math/functions.rb", "lib/more_math/histogram.rb", "lib/more_math/linear_regression.rb", "lib/more_math/newton_bisection.rb", "lib/more_math/numberify_string_function.rb", "lib/more_math/sequence.rb", "lib/more_math/string_numeral.rb", "lib/more_math/version.rb", "more_math.gemspec", "tests/test_analysis.rb", "tests/test_cantor_pairing_function.rb", "tests/test_continued_fraction.rb", "tests/test_distribution.rb", "tests/test_functions.rb", "tests/test_histogram.rb", "tests/test_newton_bisection.rb", "tests/test_numberify_string_function.rb"]
14
+ s.homepage = %q{http://flori.github.com/more_math}
15
+ s.rdoc_options = ["--title", "MoreMath -- More Math in Ruby", "--main", "README.rdoc"]
16
+ s.require_paths = ["lib"]
17
+ s.rubygems_version = %q{1.6.2}
18
+ s.summary = %q{Library that provides more mathematics.}
19
+ s.test_files = ["tests/test_cantor_pairing_function.rb", "tests/test_continued_fraction.rb", "tests/test_newton_bisection.rb", "tests/test_analysis.rb", "tests/test_functions.rb", "tests/test_distribution.rb", "tests/test_histogram.rb", "tests/test_numberify_string_function.rb"]
20
+
21
+ if s.respond_to? :specification_version then
22
+ s.specification_version = 3
23
+
24
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
25
+ s.add_development_dependency(%q<gem_hadar>, ["~> 0.0.5"])
26
+ s.add_runtime_dependency(%q<spruz>, ["~> 0.2"])
27
+ else
28
+ s.add_dependency(%q<gem_hadar>, ["~> 0.0.5"])
29
+ s.add_dependency(%q<spruz>, ["~> 0.2"])
30
+ end
31
+ else
32
+ s.add_dependency(%q<gem_hadar>, ["~> 0.0.5"])
33
+ s.add_dependency(%q<spruz>, ["~> 0.2"])
34
+ end
35
+ end
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'more_math'
5
+
6
+ class TestNumberifyStringFunction < Test::Unit::TestCase
7
+ include MoreMath::Functions
8
+
9
+ def test_log_ceil
10
+ assert_raise(ArgumentError) { log_ceil(-1) }
11
+ assert_raise(ArgumentError) { log_ceil(0) }
12
+ for x in 1..256
13
+ assert_equal logb(x).ceil, log_ceil(x), "log_ceil(#{x}) failed"
14
+ end
15
+ end
16
+
17
+ def test_log_floor
18
+ assert_raise(ArgumentError) { log_floor(-1) }
19
+ assert_raise(ArgumentError) { log_floor(0) }
20
+ for x in 1..256
21
+ assert_equal logb(x).floor, log_floor(x), "log_floor(#{x}) failed"
22
+ end
23
+ end
24
+
25
+ def test_numberify_string_function
26
+ assert_equal 0, numberify_string('', 'ab')
27
+ assert_equal 1, numberify_string('a', 'ab')
28
+ assert_equal 2, numberify_string('b', 'ab')
29
+ assert_equal 3, numberify_string('aa', 'ab')
30
+ assert_equal 4, numberify_string('ab', 'ab')
31
+ assert_equal 5, numberify_string('ba', 'ab')
32
+ assert_equal 6, numberify_string('bb', 'ab')
33
+
34
+ assert_equal 0, numberify_string('', 'abc')
35
+ assert_equal 1, numberify_string('a', 'abc')
36
+ assert_equal 2, numberify_string('b', 'abc')
37
+ assert_equal 3, numberify_string('c', 'abc')
38
+ assert_equal 4, numberify_string('aa', 'abc')
39
+ assert_equal 5, numberify_string('ab', 'abc')
40
+ end
41
+
42
+ def test_numberify_string_inv_function
43
+ assert_raise(ArgumentError) { stringify_number(-1, 'ab') }
44
+ assert_equal '', stringify_number(0, 'ab')
45
+ assert_equal 'a', stringify_number(1, 'ab')
46
+ assert_equal 'b', stringify_number(2, 'ab')
47
+ assert_equal 'aa', stringify_number(3, 'ab')
48
+ assert_equal 'ab', stringify_number(4, 'ab')
49
+ assert_equal 'ba', stringify_number(5, 'ab')
50
+ assert_equal 'bb', stringify_number(6, 'ab')
51
+
52
+ assert_raise(ArgumentError) { stringify_number(-1, 'abc') }
53
+ assert_equal '', stringify_number(0, 'abc')
54
+ assert_equal 'a', stringify_number(1, 'abc')
55
+ assert_equal 'b', stringify_number(2, 'abc')
56
+ assert_equal 'c', stringify_number(3, 'abc')
57
+ assert_equal 'aa', stringify_number(4, 'abc')
58
+ assert_equal 'ab', stringify_number(5, 'abc')
59
+ end
60
+ end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: more_math
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 29
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
8
  - 0
8
- - 0
9
- version: 0.0.0
9
+ - 1
10
+ version: 0.0.1
10
11
  platform: ruby
11
12
  authors:
12
13
  - Florian Frank
@@ -14,22 +15,40 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-11-01 00:00:00 +01:00
18
+ date: 2011-07-17 00:00:00 +02:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
- name: dslkit
22
+ name: gem_hadar
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ~>
26
28
  - !ruby/object:Gem::Version
29
+ hash: 21
30
+ segments:
31
+ - 0
32
+ - 0
33
+ - 5
34
+ version: 0.0.5
35
+ type: :development
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: spruz
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ hash: 15
27
46
  segments:
28
47
  - 0
29
48
  - 2
30
49
  version: "0.2"
31
50
  type: :runtime
32
- version_requirements: *id001
51
+ version_requirements: *id002
33
52
  description: Library that provides more mathematical functions/algorithms than standard Ruby.
34
53
  email: flori@ping.de
35
54
  executables: []
@@ -37,34 +56,53 @@ executables: []
37
56
  extensions: []
38
57
 
39
58
  extra_rdoc_files:
40
- - README
41
- files:
42
- - CHANGES
43
- - VERSION
44
- - README
45
- - make_doc.rb
46
- - Rakefile
47
- - lib/more_math/cantor_pairing_funtion.rb
48
- - lib/more_math/functions.rb
49
- - lib/more_math/distributions.rb
50
- - lib/more_math/newton_bisection.rb
51
- - lib/more_math/constants/functions_constants.rb
59
+ - README.rdoc
60
+ - lib/more_math/cantor_pairing_function.rb
52
61
  - lib/more_math/version.rb
62
+ - lib/more_math/functions.rb
53
63
  - lib/more_math/sequence.rb
54
64
  - lib/more_math/linear_regression.rb
65
+ - lib/more_math/string_numeral.rb
55
66
  - lib/more_math/histogram.rb
56
- - lib/more_math/continued_fraction.rb
67
+ - lib/more_math/constants/functions_constants.rb
68
+ - lib/more_math/numberify_string_function.rb
69
+ - lib/more_math/distributions.rb
57
70
  - lib/more_math/exceptions.rb
71
+ - lib/more_math/newton_bisection.rb
72
+ - lib/more_math/continued_fraction.rb
58
73
  - lib/more_math.rb
74
+ files:
75
+ - .gitignore
76
+ - .travis.yml
77
+ - CHANGES
78
+ - Gemfile
79
+ - LICENSE
80
+ - README.rdoc
81
+ - Rakefile
82
+ - VERSION
83
+ - lib/more_math.rb
84
+ - lib/more_math/cantor_pairing_function.rb
85
+ - lib/more_math/constants/functions_constants.rb
86
+ - lib/more_math/continued_fraction.rb
87
+ - lib/more_math/distributions.rb
88
+ - lib/more_math/exceptions.rb
89
+ - lib/more_math/functions.rb
90
+ - lib/more_math/histogram.rb
91
+ - lib/more_math/linear_regression.rb
92
+ - lib/more_math/newton_bisection.rb
93
+ - lib/more_math/numberify_string_function.rb
94
+ - lib/more_math/sequence.rb
95
+ - lib/more_math/string_numeral.rb
96
+ - lib/more_math/version.rb
97
+ - more_math.gemspec
98
+ - tests/test_analysis.rb
99
+ - tests/test_cantor_pairing_function.rb
59
100
  - tests/test_continued_fraction.rb
101
+ - tests/test_distribution.rb
60
102
  - tests/test_functions.rb
61
- - tests/test_analysis.rb
62
103
  - tests/test_histogram.rb
63
- - tests/test_distribution.rb
64
- - tests/test_cantor_pairing_function.rb
65
104
  - tests/test_newton_bisection.rb
66
- - install.rb
67
- - LICENSE
105
+ - tests/test_numberify_string_function.rb
68
106
  has_rdoc: true
69
107
  homepage: http://flori.github.com/more_math
70
108
  licenses: []
@@ -74,35 +112,40 @@ rdoc_options:
74
112
  - --title
75
113
  - MoreMath -- More Math in Ruby
76
114
  - --main
77
- - README
115
+ - README.rdoc
78
116
  require_paths:
79
117
  - lib
80
118
  required_ruby_version: !ruby/object:Gem::Requirement
119
+ none: false
81
120
  requirements:
82
121
  - - ">="
83
122
  - !ruby/object:Gem::Version
123
+ hash: 3
84
124
  segments:
85
125
  - 0
86
126
  version: "0"
87
127
  required_rubygems_version: !ruby/object:Gem::Requirement
128
+ none: false
88
129
  requirements:
89
130
  - - ">="
90
131
  - !ruby/object:Gem::Version
132
+ hash: 3
91
133
  segments:
92
134
  - 0
93
135
  version: "0"
94
136
  requirements: []
95
137
 
96
- rubyforge_project: more_math
97
- rubygems_version: 1.3.6
138
+ rubyforge_project:
139
+ rubygems_version: 1.6.2
98
140
  signing_key:
99
141
  specification_version: 3
100
142
  summary: Library that provides more mathematics.
101
143
  test_files:
144
+ - tests/test_cantor_pairing_function.rb
102
145
  - tests/test_continued_fraction.rb
103
- - tests/test_functions.rb
146
+ - tests/test_newton_bisection.rb
104
147
  - tests/test_analysis.rb
105
- - tests/test_histogram.rb
148
+ - tests/test_functions.rb
106
149
  - tests/test_distribution.rb
107
- - tests/test_cantor_pairing_function.rb
108
- - tests/test_newton_bisection.rb
150
+ - tests/test_histogram.rb
151
+ - tests/test_numberify_string_function.rb
data/install.rb DELETED
@@ -1,19 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'rbconfig'
4
- require 'fileutils'
5
- include FileUtils::Verbose
6
-
7
- include Config
8
-
9
- file = 'lib/more_math.rb'
10
- libdir = CONFIG["sitelibdir"]
11
- install(file, libdir, :mode => 0755)
12
- mkdir_p subdir = File.join(libdir, 'more_math')
13
- for f in Dir['lib/more_math/*.rb']
14
- install(f, subdir)
15
- end
16
- mkdir_p subdir = File.join(libdir, 'more_math', 'constants')
17
- for f in Dir['lib/more_math/constants/*.rb']
18
- install(f, subdir)
19
- end
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- puts "Creating documentation."
4
- system "rdoc --main README --title 'MoreMath -- More Math in Ruby'"\
5
- " -d #{Dir['lib/**/*.rb'] * ' '} README"