eymiha_math 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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