eymiha_math 0.1.0 → 0.1.1

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.
data/gem_package.rb CHANGED
@@ -4,7 +4,7 @@ class GemPackage
4
4
 
5
5
  def initialize
6
6
  @name = 'eymiha_math'
7
- @version = '0.1.0'
7
+ @version = '0.1.1'
8
8
  @files = FileList[
9
9
  '*.rb',
10
10
  'lib/*',
@@ -1,7 +1,15 @@
1
1
  # Approminately equals returns true when values are close enough, within some
2
- # distance epsilon above or below the given value.
2
+ # distance epsilon above or below the given value. Three methods and a class
3
+ # variable are added to the Numeric class.
4
+ #
5
+ # @@epsilon, and two class methods, Numeric.epsilon and Numeric.epsilon= get
6
+ # and set the maximum difference between two values for them to be
7
+ # approximately equal.
8
+ #
9
+ # approximately_equals? and the aliased operator =~ return true if two values
10
+ # are approximately equal.
3
11
 
4
- # Adds the approximately equals operation to Numeric and its progeny.
12
+ # Behavor added to Numeric by eymiha_math.
5
13
  class Numeric
6
14
 
7
15
  # The initial default distance from a Numeric below which it is considered
data/lib/eymiha_math.rb CHANGED
@@ -2,4 +2,5 @@
2
2
 
3
3
  require 'rectify'
4
4
  require 'approximately_equals'
5
+ require 'fraction'
5
6
 
data/lib/fraction.rb ADDED
@@ -0,0 +1,31 @@
1
+ # Behavior for rendering and rounding fractions with respect to a denominator.
2
+ # Two methods are added to the Numeric class.
3
+ #
4
+ # with_fraction is an alternative to to_s that renders a value as a string
5
+ # with a whole number and any decimal part as a fraction.
6
+ #
7
+ # round_to_nearest rounds a value such that a fractional part with the given
8
+ # denominator will have integer as its numerator.
9
+
10
+ # Behavior added to Numeric by eymiha_math
11
+ class Numeric
12
+
13
+ # Renders a numeric value as a whole number and a fraction with a given
14
+ # denominator, separated with a given separator, and optionally showing
15
+ # fractions with a numerator of zero.
16
+ def with_fraction(denominator=1,separator='-',show_zero=false)
17
+ sign = self <=> 0
18
+ unsigned = self*sign
19
+ whole = (((unsigned*denominator).round)/denominator).floor
20
+ numerator = ((unsigned-whole)*denominator).round
21
+ "#{sign*whole}#{(numerator != 0)||show_zero ?
22
+ "#{separator}#{numerator}/#{denominator}" : ""}"
23
+ end
24
+
25
+ # Returns a numeric value such that any remainder is evenly divided by
26
+ # the given denominator.
27
+ def round_to_nearest(denominator=1)
28
+ ((self*denominator).round)/(1.0*denominator)
29
+ end
30
+
31
+ end
data/lib/rectify.rb CHANGED
@@ -1,7 +1,16 @@
1
- # Rectification maps values to an interval treated either as a cycle or a
2
- # cutoff.
1
+ # Rectification maps values to an limits treated either as cycles, upper
2
+ # bounds, lower bounds or both. Four methods are added to the Numeric class:
3
+ #
4
+ # wrap_rectify() wraps values to an interval treated as a cycle. Think of it
5
+ # as degrees around a compass.
6
+ #
7
+ # cut_rectify() cuts off values to keep them between an upper and lower bound.
8
+ #
9
+ # at_most() cuts off values at an upper bound.
10
+ #
11
+ # at_least() cuts off value at a lower bound.
3
12
 
4
- # Adds recticiation to Numerics and their progeny
13
+ # Behavior added to Numeric by eymiha_math.
5
14
  class Numeric
6
15
 
7
16
  # Treats the interval between low and high as a cycle, returning the result
@@ -21,13 +30,17 @@ class Numeric
21
30
  # the two.
22
31
  def cut_rectify(high=1,low=0)
23
32
  low,high = high,low if low > high
24
- if (self < low)
25
- low
26
- elsif (self > high)
27
- high
28
- else
29
- self
30
- end
33
+ (self < low)? low : (self > high)? high : self
31
34
  end
32
35
 
36
+ # Constrains a value to an upper limit.
37
+ def at_most(high=0)
38
+ self > high ? high : self
39
+ end
40
+
41
+ # Constrains a value to a lower limit.
42
+ def at_least(low=0)
43
+ self < low ? low : self
44
+ end
45
+
33
46
  end
@@ -0,0 +1,19 @@
1
+ require 'test/unit'
2
+
3
+ require 'fraction'
4
+
5
+ class TC_fraction < Test::Unit::TestCase
6
+
7
+ def test_with_fraction
8
+ assert(2.31.with_fraction(4) == "2-1/4")
9
+ assert(2.31.with_fraction(5) == "2-2/5")
10
+ assert(2.31.with_fraction(6,' ') == "2 2/6")
11
+ end
12
+
13
+ def test_round_to_nearest
14
+ assert(0.22.round_to_nearest(5) == 0.2)
15
+ assert(0.22.round_to_nearest(10) == 0.2)
16
+ assert(0.22.round_to_nearest(50) == 0.22)
17
+ end
18
+
19
+ end
data/test/tc_rectify.rb CHANGED
@@ -25,5 +25,15 @@ class TC_rectify < Test::Unit::TestCase
25
25
  assert(0.5.cut_rectify(0.5,2) == 0.5)
26
26
  assert(0.5.cut_rectify(0,0) == 0)
27
27
  end
28
+
29
+ def test_at_most
30
+ assert((-5..5).collect{|v| v.at_most(2)} ==
31
+ [-5,-4,-3,-2,-1,0,1,2,2,2,2])
32
+ end
33
+
34
+ def test_at_least
35
+ assert((-5..5).collect{|v| v.at_least(-1.5)} ==
36
+ [-1.5,-1.5,-1.5,-1.5,-1,0,1,2,3,4,5])
37
+ end
28
38
 
29
39
  end
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0
2
+ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: eymiha_math
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.0
7
- date: 2007-05-10 00:00:00 -04:00
6
+ version: 0.1.1
7
+ date: 2007-08-22 00:00:00 -04:00
8
8
  summary: Eymiha basic math extensions
9
9
  require_paths:
10
10
  - lib
@@ -33,8 +33,10 @@ files:
33
33
  - rakefile.rb
34
34
  - lib/approximately_equals.rb
35
35
  - lib/eymiha_math.rb
36
+ - lib/fraction.rb
36
37
  - lib/rectify.rb
37
38
  - test/tc_approximately_equals.rb
39
+ - test/tc_fraction.rb
38
40
  - test/tc_rectify.rb
39
41
  test_files: []
40
42