borel 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -3,7 +3,9 @@ source "http://www.rubygems.org"
3
3
  gemspec
4
4
 
5
5
  group :development do
6
- gem 'yard', '~> 0.7.5'
7
6
  gem 'rspec', '~> 2.8.0'
8
- gem 'guard', '~> 1.0.0'
7
+ gem 'guard-rspec', '~> 0.7.0'
8
+ gem 'yard', '~> 0.7.5'
9
+ gem 'redcarpet'
10
+ gem 'fivemat'
9
11
  end
@@ -3,6 +3,12 @@ class Array
3
3
 
4
4
  # Initializes an interval with the calling array as argument
5
5
  # @return [Interval]
6
+ # @example
7
+ # [].to_interval # -> Interval[]
8
+ # @example
9
+ # [1,2].to_interval # -> Interval[1,2]
10
+ # @example
11
+ # [[1,2],[3,4]].to_interval # -> Interval[[1,2],[3,4]]
6
12
  def to_interval
7
13
  Interval[*self]
8
14
  end
@@ -1,13 +1,33 @@
1
1
  require 'borel/errors'
2
2
 
3
- # Exposes infinity for initializing unbounded intervals
4
- Infinity = 1/0.0
3
+ # Exposes `Infinity` and `-Infinity` for initializing unbounded intervals
4
+ #
5
+ # @example
6
+ # Interval[-Infinity, 0]
7
+ # @example
8
+ # Interval[1, Infinity]
9
+ # @example
10
+ # Interval[-Infinity, Infinity]
11
+ Infinity = Float::INFINITY
5
12
 
6
13
  # Retains all non-specific Interval logic
7
14
  class Interval
8
15
  include Enumerable
9
16
 
17
+ # Initializes an Interval
18
+ #
19
+ # @param [Array<Comparable>,Array<Array<Comparable>>] array none, one or
20
+ # multiple 1,2-length arrays
10
21
  # @return [Interval]
22
+ #
23
+ # @example Empty interval
24
+ # Interval[]
25
+ # @example An interval with only one point
26
+ # Interval[1]
27
+ # @example A simple interval
28
+ # Interval[0,1]
29
+ # @example A non simple interval
30
+ # Interval[[0,1],[2,3],[5]]
11
31
  def self.[](*array)
12
32
  union(*
13
33
  if array.empty?
@@ -25,6 +45,8 @@ class Interval
25
45
  raise
26
46
  end
27
47
 
48
+ # Performs the union of Intervals
49
+ # @param Array<Interval> array the intervals to be united
28
50
  # @return [Interval]
29
51
  def self.union(*array)
30
52
  intervals = []
@@ -40,7 +62,11 @@ class Interval
40
62
  intervals.size == 1 ? intervals.first : Multiple.new(intervals)
41
63
  end
42
64
 
65
+ # Performs the operation of union with other interval
66
+ # @param [#to_interval] other the other interval-compatible object
43
67
  # @return [Interval]
68
+ # @example
69
+ # Interval[1,2].union(3..4) == Interval[[1,2],[3,4]] # true
44
70
  def union(other)
45
71
  Interval.union(other.to_interval, self)
46
72
  end
@@ -83,7 +109,8 @@ class Interval
83
109
  components.empty?
84
110
  end
85
111
 
86
- # @return [Interval]
112
+ # Implemented for establishing obvious interval-compatibility
113
+ # @return [Interval] returns `self`
87
114
  def to_interval
88
115
  self
89
116
  end
@@ -98,7 +125,15 @@ class Interval
98
125
  inspect
99
126
  end
100
127
 
101
- # @return [Interval]
128
+ # The convex hull of the Interval
129
+ # Note that for simple Intervals it is itself
130
+ #
131
+ # @example
132
+ # Interval[].hull == Interval[] # true
133
+ # @example
134
+ # Interval[[1,2],[3,4]].hull == Interval[1,4] # true
135
+ #
136
+ # @return [Interval] a simple Interval composed by the inf and sup points
102
137
  def hull
103
138
  if empty? then Interval[] else Interval[inf, sup] end
104
139
  end
@@ -6,7 +6,7 @@ class Interval::Simple < Interval
6
6
 
7
7
  def initialize (a, b = a)
8
8
  if (a.respond_to?(:nan?) && a.nan?) || (b.respond_to?(:nan?) && b.nan?)
9
- @inf, @sup = -Infinity, Infinity
9
+ @inf, @sup = -Float::INFINITY, Float::INFINITY
10
10
  else
11
11
  @inf, @sup = a, b
12
12
  end
@@ -26,7 +26,7 @@ class Interval::Simple < Interval
26
26
 
27
27
  # @return [Interval::Multiple]
28
28
  def complement
29
- Interval[[-Infinity, inf], [sup, Infinity]]
29
+ Interval[[-Float::INFINITY, inf], [sup, Float::INFINITY]]
30
30
  end
31
31
 
32
32
  # @return [Interval]
@@ -49,16 +49,26 @@ class Interval::Simple < Interval
49
49
  extrema.uniq
50
50
  end
51
51
 
52
+ # Verifies that a point is inside the interval
53
+ #
54
+ # @param [Comparable] x the point to be verified
52
55
  # @return [Boolean]
56
+ # @example
57
+ # Interval[1,5].include?(3.4) # -> true
53
58
  def include?(x)
54
59
  inf <= x && x <= sup
55
60
  end
56
61
 
62
+ # Verifies that the Interval is degenerate, i.e. the extrema are equal
63
+ # @example
64
+ # Interval[1,2].degenerate? # -> false
65
+ # Interval[1].degenerate? # -> true
57
66
  # @return [Boolean]
58
67
  def degenerate?
59
68
  inf == sup
60
69
  end
61
70
 
71
+ # Verifies that this class represents simple intervals
62
72
  # @return [Boolean]
63
73
  def simple?
64
74
  true
@@ -3,7 +3,10 @@ require 'borel'
3
3
  module Borel
4
4
  # Includes numeric intervals related methods
5
5
  module IntervalArithmetic
6
+
6
7
  # @return [Number] the width of the interval
8
+ # @example
9
+ # Interval[1,5].width # -> 5-1
7
10
  def width
8
11
  raise NonSimple, self unless respond_to?(:simple?) and simple?
9
12
  extrema.last - extrema.first
@@ -3,6 +3,9 @@ require 'borel/math_extensions/interval_arithmetic'
3
3
  module Borel
4
4
  # Includes methods for picking random elements on intervals
5
5
  module Randomizable
6
+
7
+ # @example
8
+ # Interval[1,5].rand # -> Random.new.rand 1..5
6
9
  # @return [Object] a random element of the interval
7
10
  def rand
8
11
  raise EmptyInterval if respond_to?(:empty?) and empty?
@@ -3,6 +3,8 @@ class NilClass
3
3
 
4
4
  # Initializes an empty interval
5
5
  # @return [Interval]
6
+ # @example
7
+ # nil.to_interval # -> Interval[]
6
8
  def to_interval
7
9
  Interval[]
8
10
  end
@@ -2,6 +2,10 @@
2
2
  class Range
3
3
 
4
4
  # @return [Interval]
5
+ # @example
6
+ # (1..2).to_interval # -> Interval[1,2]
7
+ # @example
8
+ # (1...3).to_interval # -> Interval[1,2]
5
9
  def to_interval
6
10
  Interval[first,
7
11
  if exclude_end?
@@ -5,7 +5,7 @@ module Borel
5
5
  # Minor version number
6
6
  MINOR = 3
7
7
  # Tiny version number
8
- TINY = 3
8
+ TINY = 4
9
9
 
10
10
  # Joins the version numbers
11
11
  VERSION = [MAJOR, MINOR, TINY].join('.')
@@ -20,8 +20,8 @@ describe Interval do
20
20
  end
21
21
 
22
22
  specify "Interval[-Infinity, Infinity] -> [-Infinity, Infinity]" do
23
- Interval[-Infinity, Infinity].construction.
24
- should eq [-Infinity, Infinity]
23
+ Interval[-Float::INFINITY, Float::INFINITY].construction.
24
+ should eq [-Float::INFINITY, Float::INFINITY]
25
25
  end
26
26
  end
27
27
 
@@ -57,7 +57,7 @@ describe Interval do
57
57
  end
58
58
 
59
59
  specify "[-infty, infty]^[0,1] = [0,1]" do
60
- (Interval[-Infinity, Infinity] ^ Interval[0,1]).
60
+ (Interval[-Float::INFINITY, Float::INFINITY] ^ Interval[0,1]).
61
61
  construction.should eq [0,1]
62
62
  end
63
63
 
@@ -196,12 +196,12 @@ describe Interval do
196
196
  end
197
197
 
198
198
  specify '[-infty,infty]-[0,1] = [-infty,0]U[1,infty]' do
199
- (Interval[-Infinity,Infinity] - Interval[0,1]).construction.
200
- should eq [[-Infinity,0], [1,Infinity]]
199
+ (Interval[-Float::INFINITY,Float::INFINITY] - Interval[0,1]).construction.
200
+ should eq [[-Float::INFINITY,0], [1,Float::INFINITY]]
201
201
  end
202
202
 
203
203
  specify '[0,1]-[-infty,infty] = []' do
204
- (Interval[0,1] - Interval[-Infinity,Infinity]).construction.
204
+ (Interval[0,1] - Interval[-Float::INFINITY,Float::INFINITY]).construction.
205
205
  should eq []
206
206
  end
207
207
  end
@@ -21,11 +21,11 @@ describe Numeric do
21
21
  end
22
22
 
23
23
  it "1/0 should be [Infinity]" do
24
- (1/0.0).to_interval.should eq Interval[Infinity]
24
+ (1/0.0).to_interval.should eq Interval[Float::INFINITY]
25
25
  end
26
26
 
27
27
  it "Infinity should be [Infinity]" do
28
- (-1/0.0).to_interval.should eq Interval[-Infinity]
28
+ (-1/0.0).to_interval.should eq Interval[-Float::INFINITY]
29
29
  end
30
30
 
31
31
  end
@@ -11,20 +11,21 @@ describe Range do
11
11
  (1...3).to_interval.should eq Interval[1,2]
12
12
  end
13
13
 
14
- it '(1..Infinity) should be [1,infty]' do
15
- (1..Infinity).to_interval.should eq Interval[1,Infinity]
14
+ it '(1..Float::INFINITY) should be [1,infty]' do
15
+ (1..Float::INFINITY).to_interval.should eq Interval[1,Float::INFINITY]
16
16
  end
17
17
 
18
- it '(1...Infinity) should raise OpenRight' do
19
- expect{(1...Infinity).to_interval}.to raise_error Borel::OpenRight
18
+ it '(1...Float::INFINITY) should raise OpenRight' do
19
+ expect{(1...Float::INFINITY).to_interval}.to raise_error Borel::OpenRight
20
20
  end
21
21
 
22
- it '(-Infinity..1) should be [-infty,1]' do
23
- (-Infinity..1).to_interval.should eq Interval[-Infinity,1]
22
+ it '(-Float::INFINITY..1) should be [-infty,1]' do
23
+ (-Float::INFINITY..1).to_interval.should eq Interval[-Float::INFINITY,1]
24
24
  end
25
25
 
26
- it '(-Infinity..Infinity) should be [-infty,infty]' do
27
- (-Infinity..Infinity).to_interval.should eq Interval[-Infinity,Infinity]
26
+ it '(-Float::INFINITY..Float::INFINITY) should be [-infty,infty]' do
27
+ (-Float::INFINITY..Float::INFINITY).to_interval.
28
+ should eq Interval[-Float::INFINITY,Float::INFINITY]
28
29
  end
29
30
  end
30
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: borel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-13 00:00:00.000000000 Z
12
+ date: 2013-02-24 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: ! 'Borel sets are made of enumerable union and intersection of
15
15
 
@@ -73,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
73
  version: 1.3.6
74
74
  requirements: []
75
75
  rubyforge_project: borel
76
- rubygems_version: 1.8.21
76
+ rubygems_version: 1.8.25
77
77
  signing_key:
78
78
  specification_version: 3
79
79
  summary: Interval operation on Comparable classes