geometry 6.2 → 6.3

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.
@@ -0,0 +1,155 @@
1
+ require 'minitest/autorun'
2
+ require 'geometry/size_one'
3
+
4
+ describe Geometry::SizeOne do
5
+ Size = Geometry::Size
6
+
7
+ let(:one) { Geometry::SizeOne.new }
8
+
9
+ describe 'arithmetic' do
10
+ let(:left) { Size[1,2] }
11
+ let(:right) { Size[3,4] }
12
+
13
+ it 'must have +@' do
14
+ (+one).must_be :eql?, 1
15
+ (+one).must_be_instance_of(Geometry::SizeOne)
16
+ end
17
+
18
+ it 'must have unary negation' do
19
+ (-one).must_be :eql?, -1
20
+ # (-one).must_be_instance_of(Geometry::SizeOne)
21
+ end
22
+
23
+ it 'must add a number' do
24
+ (one + 3).must_equal 4
25
+ (3 + one).must_equal 4
26
+ end
27
+
28
+ it 'return a Size when adding two Sizes' do
29
+ (one + right).must_be_kind_of Size
30
+ (left + one).must_be_kind_of Size
31
+ end
32
+
33
+ it 'must return a Size when adding an array' do
34
+ (one + [5,6]).must_equal [6,7]
35
+ # ([5,6] + one).must_equal [6,7]
36
+ end
37
+
38
+ describe 'when subtracting' do
39
+ it 'must subtract a number' do
40
+ (one - 3).must_equal -2
41
+ (3 - one).must_equal 2
42
+ end
43
+
44
+ it 'return a Size when subtracting two Size' do
45
+ (one - right).must_equal Size[-2,-3]
46
+ (left - one).must_equal Size[0,1]
47
+ end
48
+
49
+ it 'must return a Size when subtracting an array' do
50
+ (one - [5,6]).must_equal [-4, -5]
51
+ # ([5,6] - one).must_equal [6,7]
52
+ end
53
+ end
54
+
55
+ it 'must multiply by a scalar' do
56
+ (one * 3).must_equal 3
57
+ (one * 3.0).must_equal 3.0
58
+ end
59
+
60
+ it 'must refuse to multiply by a Size' do
61
+ -> { one * Size[1,2] }.must_raise Geometry::OperationNotDefined
62
+ end
63
+
64
+ it 'must refuse to multiply by a Vector' do
65
+ -> { one * Vector[1, 2] }.must_raise Geometry::OperationNotDefined
66
+ end
67
+
68
+ describe 'division' do
69
+ it 'must divide by a scalar' do
70
+ (one / 3).must_equal 1/3
71
+ (one / 4.0).must_equal 1/4.0
72
+ end
73
+
74
+ it 'must raise an exception when divided by 0' do
75
+ -> { one / 0 }.must_raise ZeroDivisionError
76
+ end
77
+
78
+ it 'must raise an exception for Sizes' do
79
+ -> { one / Size[1,2] }.must_raise Geometry::OperationNotDefined
80
+ end
81
+
82
+ it 'must raise an exception for Vectors' do
83
+ -> { one / Vector[1,2] }.must_raise Geometry::OperationNotDefined
84
+ end
85
+ end
86
+ end
87
+
88
+ describe 'coercion' do
89
+ it 'must coerce Arrays into Sizes' do
90
+ one.coerce([3,4]).must_equal [Size[3,4], Size[1,1]]
91
+ end
92
+
93
+ it 'must coerce Vectors into Vectors' do
94
+ one.coerce(Vector[3,4]).must_equal [Vector[3,4], Vector[1,1]]
95
+ end
96
+
97
+ it 'must coerce Size into Size' do
98
+ one.coerce(Size[5,6]).must_equal [Size[5,6], Size[1,1]]
99
+ end
100
+ end
101
+
102
+ describe 'comparison' do
103
+ let(:one) { Geometry::SizeOne.new }
104
+
105
+ it 'must be equal to 1 and 1.0' do
106
+ one.must_be :eql?, 1
107
+ one.must_be :eql?, 1.0
108
+ end
109
+
110
+ it 'must not be equal to a non-one number' do
111
+ 0.wont_equal one
112
+ 3.14.wont_equal one
113
+ end
114
+
115
+ it 'must be equal to an Array of ones' do
116
+ one.must_be :==, [1,1]
117
+ one.must_be :eql?, [1,1]
118
+ [1,1].must_equal one
119
+ end
120
+
121
+ it 'must not be equal to a non-one Array' do
122
+ one.wont_equal [3,2]
123
+ [3,2].wont_equal one
124
+ end
125
+
126
+ it 'must be equal to a Size of ones' do
127
+ one.must_be :==, Size[1,1]
128
+ one.must_be :eql?, Size[1,1]
129
+ Size[1,1].must_equal one
130
+ end
131
+
132
+ it 'must not be equal to a non-one Size' do
133
+ one.wont_equal Size[3,2]
134
+ Size[3,2].wont_equal one
135
+ end
136
+
137
+ it 'must be equal to an Vector of onees' do
138
+ one.must_be :eql?, Vector[1,1]
139
+ Vector[1,1].must_equal one
140
+ end
141
+
142
+ it 'must not be equal to a non-one Vector' do
143
+ one.wont_equal Vector[3,2]
144
+ Vector[3,2].wont_equal one
145
+ end
146
+ end
147
+
148
+ describe 'when enumerating' do
149
+ it 'must have a first method' do
150
+ one.first.must_equal 1
151
+ one.first(1).must_equal [1]
152
+ one.first(5).must_equal [1,1,1,1,1]
153
+ end
154
+ end
155
+ end
@@ -150,4 +150,12 @@ describe Geometry::SizeZero do
150
150
  Vector[3,2].wont_equal zero
151
151
  end
152
152
  end
153
+
154
+ describe 'when enumerating' do
155
+ it 'must have a first method' do
156
+ zero.first.must_equal 0
157
+ zero.first(1).must_equal [0]
158
+ zero.first(5).must_equal [0,0,0,0,0]
159
+ end
160
+ end
153
161
  end
@@ -61,6 +61,10 @@ describe Geometry::Square do
61
61
  describe "properties" do
62
62
  subject { Square.new from:[2,3], to:[3,4] }
63
63
 
64
+ it 'must always be closed' do
65
+ subject.closed?.must_equal true
66
+ end
67
+
64
68
  it "must have an origin accessor" do
65
69
  subject.origin.must_equal Point[2,3]
66
70
  end
@@ -4,6 +4,10 @@ require 'geometry/triangle'
4
4
  describe Geometry::Triangle do
5
5
  Triangle = Geometry::Triangle
6
6
 
7
+ it 'must always be closed' do
8
+ Triangle.new([0,0], [0,1], [1,0]).closed?.must_equal true
9
+ end
10
+
7
11
  describe "when constructed with 3 points" do
8
12
  let(:triangle) { Triangle.new [0,0], [0,1], [1,0] }
9
13
 
@@ -15,6 +19,18 @@ describe Geometry::Triangle do
15
19
  it "must have a points accessor" do
16
20
  triangle.points.must_equal [Point[0,0], Point[0,1], Point[1,0]]
17
21
  end
22
+
23
+ it 'must know the max' do
24
+ triangle.max.must_equal Point[1,1]
25
+ end
26
+
27
+ it 'must know the min' do
28
+ triangle.min.must_equal Point[0,0]
29
+ end
30
+
31
+ it 'must know the min and the max' do
32
+ triangle.minmax.must_equal [Point[0,0], Point[1,1]]
33
+ end
18
34
  end
19
35
 
20
36
  describe "when constructed with a point and a leg length" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geometry
3
3
  version: !ruby/object:Gem::Version
4
- version: '6.2'
4
+ version: '6.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Fosdick
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-21 00:00:00.000000000 Z
11
+ date: 2014-08-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Geometric primitives and algorithms for Ruby
14
14
  email:
@@ -18,12 +18,14 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - .gitignore
21
+ - .travis.yml
21
22
  - Gemfile
22
23
  - LICENSE
23
24
  - README.markdown
24
25
  - Rakefile
25
26
  - geometry.gemspec
26
27
  - lib/geometry.rb
28
+ - lib/geometry/annulus.rb
27
29
  - lib/geometry/arc.rb
28
30
  - lib/geometry/circle.rb
29
31
  - lib/geometry/cluster_factory.rb
@@ -32,6 +34,8 @@ files:
32
34
  - lib/geometry/obround.rb
33
35
  - lib/geometry/path.rb
34
36
  - lib/geometry/point.rb
37
+ - lib/geometry/point_iso.rb
38
+ - lib/geometry/point_one.rb
35
39
  - lib/geometry/point_zero.rb
36
40
  - lib/geometry/polygon.rb
37
41
  - lib/geometry/polyline.rb
@@ -39,6 +43,7 @@ files:
39
43
  - lib/geometry/regular_polygon.rb
40
44
  - lib/geometry/rotation.rb
41
45
  - lib/geometry/size.rb
46
+ - lib/geometry/size_one.rb
42
47
  - lib/geometry/size_zero.rb
43
48
  - lib/geometry/square.rb
44
49
  - lib/geometry/transformation.rb
@@ -46,6 +51,7 @@ files:
46
51
  - lib/geometry/triangle.rb
47
52
  - lib/geometry/vector.rb
48
53
  - test/geometry.rb
54
+ - test/geometry/annulus.rb
49
55
  - test/geometry/arc.rb
50
56
  - test/geometry/circle.rb
51
57
  - test/geometry/edge.rb
@@ -53,6 +59,8 @@ files:
53
59
  - test/geometry/obround.rb
54
60
  - test/geometry/path.rb
55
61
  - test/geometry/point.rb
62
+ - test/geometry/point_iso.rb
63
+ - test/geometry/point_one.rb
56
64
  - test/geometry/point_zero.rb
57
65
  - test/geometry/polygon.rb
58
66
  - test/geometry/polyline.rb
@@ -60,6 +68,7 @@ files:
60
68
  - test/geometry/regular_polygon.rb
61
69
  - test/geometry/rotation.rb
62
70
  - test/geometry/size.rb
71
+ - test/geometry/size_one.rb
63
72
  - test/geometry/size_zero.rb
64
73
  - test/geometry/square.rb
65
74
  - test/geometry/transformation.rb
@@ -91,6 +100,7 @@ specification_version: 4
91
100
  summary: Geometric primitives and algoritms
92
101
  test_files:
93
102
  - test/geometry.rb
103
+ - test/geometry/annulus.rb
94
104
  - test/geometry/arc.rb
95
105
  - test/geometry/circle.rb
96
106
  - test/geometry/edge.rb
@@ -98,6 +108,8 @@ test_files:
98
108
  - test/geometry/obround.rb
99
109
  - test/geometry/path.rb
100
110
  - test/geometry/point.rb
111
+ - test/geometry/point_iso.rb
112
+ - test/geometry/point_one.rb
101
113
  - test/geometry/point_zero.rb
102
114
  - test/geometry/polygon.rb
103
115
  - test/geometry/polyline.rb
@@ -105,6 +117,7 @@ test_files:
105
117
  - test/geometry/regular_polygon.rb
106
118
  - test/geometry/rotation.rb
107
119
  - test/geometry/size.rb
120
+ - test/geometry/size_one.rb
108
121
  - test/geometry/size_zero.rb
109
122
  - test/geometry/square.rb
110
123
  - test/geometry/transformation.rb