geometry 3 → 4
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/README.markdown +10 -1
- data/Rakefile +11 -0
- data/geometry.gemspec +1 -1
- data/lib/geometry.rb +8 -1
- data/lib/geometry/arc.rb +31 -0
- data/lib/geometry/circle.rb +1 -1
- data/lib/geometry/edge.rb +1 -1
- data/lib/geometry/line.rb +2 -2
- data/lib/geometry/point.rb +67 -7
- data/lib/geometry/point_zero.rb +69 -0
- data/lib/geometry/polygon.rb +1 -0
- data/lib/geometry/rectangle.rb +38 -10
- data/lib/geometry/rotation.rb +46 -0
- data/lib/geometry/size_zero.rb +69 -0
- data/lib/geometry/square.rb +103 -0
- data/lib/geometry/transformation.rb +106 -0
- data/lib/geometry/vector.rb +14 -0
- data/test/{test_geometry.rb → geometry.rb} +6 -5
- data/test/geometry/arc.rb +13 -0
- data/test/geometry/circle.rb +6 -6
- data/test/geometry/edge.rb +15 -15
- data/test/{test_line.rb → geometry/line.rb} +18 -18
- data/test/geometry/point.rb +135 -46
- data/test/geometry/point_zero.rb +151 -0
- data/test/geometry/polygon.rb +10 -7
- data/test/geometry/rectangle.rb +60 -55
- data/test/geometry/rotation.rb +35 -0
- data/test/geometry/size.rb +46 -46
- data/test/geometry/size_zero.rb +151 -0
- data/test/geometry/square.rb +56 -0
- data/test/geometry/transformation.rb +90 -0
- data/test/geometry/vector.rb +17 -0
- metadata +28 -11
- data/test/helper.rb +0 -2
- data/test/test_unit_extensions.rb +0 -23
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'geometry/square'
|
3
|
+
|
4
|
+
describe Geometry::Square do
|
5
|
+
describe "when constructed" do
|
6
|
+
it "must create a Square from two Points" do
|
7
|
+
square = Geometry::Square.new [1,2], [3,4]
|
8
|
+
square.must_be_kind_of Geometry::Square
|
9
|
+
end
|
10
|
+
|
11
|
+
it "must reorder swapped points when constructed from two Points" do
|
12
|
+
square = Geometry::Square.new [3,4], [1,2]
|
13
|
+
square.must_be_kind_of Geometry::Square
|
14
|
+
square.instance_eval('@points[0]').must_equal Point[1,2]
|
15
|
+
square.instance_eval('@points[1]').must_equal Point[3,4]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "properties" do
|
20
|
+
let(:square) { Geometry::Square.new [2,3], [3,4] }
|
21
|
+
|
22
|
+
it "must have an origin accessor" do
|
23
|
+
square.origin.must_equal Point[2,3]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe Geometry::CenteredSquare do
|
29
|
+
describe "when constructed" do
|
30
|
+
it "must create a CenteredSquare from a center point and a size" do
|
31
|
+
square = Geometry::CenteredSquare.new [2,3], 5
|
32
|
+
square.must_be_instance_of Geometry::CenteredSquare
|
33
|
+
square.must_be_kind_of Geometry::Square
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "properties" do
|
38
|
+
let(:square) { Geometry::CenteredSquare.new [2,3], 4 }
|
39
|
+
|
40
|
+
it "must have a center property" do
|
41
|
+
square.center.must_equal Point[2,3]
|
42
|
+
end
|
43
|
+
|
44
|
+
it "must have a points property" do
|
45
|
+
square.points.must_equal [Point[0,1], Point[0,5], Point[4,5], Point[4,1]]
|
46
|
+
end
|
47
|
+
|
48
|
+
it "must have a height property" do
|
49
|
+
square.height.must_equal 4
|
50
|
+
end
|
51
|
+
|
52
|
+
it "must have a width property" do
|
53
|
+
square.width.must_equal 4
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'geometry/point'
|
3
|
+
require 'geometry/transformation'
|
4
|
+
|
5
|
+
describe Geometry::Transformation do
|
6
|
+
Transformation = Geometry::Transformation
|
7
|
+
|
8
|
+
describe "when constructed" do
|
9
|
+
it "must accept nothing and become an identity transformation" do
|
10
|
+
Transformation.new.identity?.must_equal true
|
11
|
+
end
|
12
|
+
|
13
|
+
it "must accept a translate parameter" do
|
14
|
+
Transformation.new([4,2]).translation.must_equal Point[4,2]
|
15
|
+
end
|
16
|
+
|
17
|
+
it "must accept a translate Array" do
|
18
|
+
translate = Transformation.new(:translate => [4,2])
|
19
|
+
translate.translation.must_equal Point[4,2]
|
20
|
+
end
|
21
|
+
|
22
|
+
it "must accept a translate Point" do
|
23
|
+
translate = Transformation.new(:translate => Point[4,2])
|
24
|
+
translate.translation.must_equal Point[4,2]
|
25
|
+
end
|
26
|
+
|
27
|
+
it "must accept a translate Point equal to zero" do
|
28
|
+
translate = Transformation.new(:translate => [0,0])
|
29
|
+
translate.translation.must_equal nil
|
30
|
+
end
|
31
|
+
|
32
|
+
it "must accept a translate Vector" do
|
33
|
+
translate = Transformation.new(:translate => Vector[4,2])
|
34
|
+
translate.translation.must_equal Point[4,2]
|
35
|
+
end
|
36
|
+
|
37
|
+
it "must accept an origin option" do
|
38
|
+
translate = Transformation.new(:origin => [4,2])
|
39
|
+
translate.translation.must_equal Point[4,2]
|
40
|
+
end
|
41
|
+
|
42
|
+
it "must raise an exception when given too many translation options" do
|
43
|
+
lambda { Transformation.new :translate => [1,2], :origin => [3,4] }.must_raise ArgumentError
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "when given a dimensions option" do
|
47
|
+
it "must raise an exception if the other arguments are too big" do
|
48
|
+
lambda { Transformation.new :dimensions => 2, :origin => [1,2,3] }.must_raise ArgumentError
|
49
|
+
end
|
50
|
+
|
51
|
+
it "must raise an exception if the other arguments are too small" do
|
52
|
+
lambda { Transformation.new :dimensions => 3, :origin => [1,2] }.must_raise ArgumentError
|
53
|
+
end
|
54
|
+
|
55
|
+
it "must not complain when given only a dimensions option" do
|
56
|
+
Transformation.new(:dimensions => 3).dimensions.must_equal 3
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "rotation" do
|
61
|
+
it "must accept an x axis option" do
|
62
|
+
t = Transformation.new :x => [0,1]
|
63
|
+
t.rotation.x.must_equal [0,1]
|
64
|
+
t.identity?.wont_equal true
|
65
|
+
end
|
66
|
+
|
67
|
+
it "must accept a y axis option" do
|
68
|
+
t = Transformation.new :y => [1,0]
|
69
|
+
t.rotation.y.must_equal [1,0]
|
70
|
+
t.identity?.wont_equal true
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "composition" do
|
76
|
+
let(:transformation) { Geometry::Transformation.new }
|
77
|
+
|
78
|
+
it "array addition" do
|
79
|
+
(transformation + [1,2]).translation.must_equal Point[1,2]
|
80
|
+
((transformation + [1,2]) + [2,3]).translation.must_equal Point[3,5]
|
81
|
+
(transformation + [1,2]).rotation.identity?.must_equal true
|
82
|
+
end
|
83
|
+
|
84
|
+
it "must update the translation when an array is subtracted" do
|
85
|
+
(transformation - [1,2]).translation.must_equal Point[-1,-2]
|
86
|
+
((transformation - [1,2]) - [2,3]).translation.must_equal Point[-3,-5]
|
87
|
+
(transformation - [1,2,3]).rotation.identity?.must_equal true
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'geometry/vector'
|
3
|
+
|
4
|
+
describe Vector do
|
5
|
+
describe "when monkeypatching Vector" do
|
6
|
+
let(:left) { Vector[1,2] }
|
7
|
+
let(:right) { Vector[3,4] }
|
8
|
+
|
9
|
+
it "must have +@" do
|
10
|
+
(+left).must_equal Vector[1,2]
|
11
|
+
end
|
12
|
+
|
13
|
+
it "must have unary negation" do
|
14
|
+
(-left).must_equal Vector[-1,-2]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geometry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '
|
4
|
+
version: '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-
|
12
|
+
date: 2012-08-06 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Geometric primitives and algorithms for Ruby
|
15
15
|
email:
|
@@ -25,23 +25,35 @@ files:
|
|
25
25
|
- Rakefile
|
26
26
|
- geometry.gemspec
|
27
27
|
- lib/geometry.rb
|
28
|
+
- lib/geometry/arc.rb
|
28
29
|
- lib/geometry/circle.rb
|
29
30
|
- lib/geometry/edge.rb
|
30
31
|
- lib/geometry/line.rb
|
31
32
|
- lib/geometry/point.rb
|
33
|
+
- lib/geometry/point_zero.rb
|
32
34
|
- lib/geometry/polygon.rb
|
33
35
|
- lib/geometry/rectangle.rb
|
36
|
+
- lib/geometry/rotation.rb
|
34
37
|
- lib/geometry/size.rb
|
38
|
+
- lib/geometry/size_zero.rb
|
39
|
+
- lib/geometry/square.rb
|
40
|
+
- lib/geometry/transformation.rb
|
41
|
+
- lib/geometry/vector.rb
|
42
|
+
- test/geometry.rb
|
43
|
+
- test/geometry/arc.rb
|
35
44
|
- test/geometry/circle.rb
|
36
45
|
- test/geometry/edge.rb
|
46
|
+
- test/geometry/line.rb
|
37
47
|
- test/geometry/point.rb
|
48
|
+
- test/geometry/point_zero.rb
|
38
49
|
- test/geometry/polygon.rb
|
39
50
|
- test/geometry/rectangle.rb
|
51
|
+
- test/geometry/rotation.rb
|
40
52
|
- test/geometry/size.rb
|
41
|
-
- test/
|
42
|
-
- test/
|
43
|
-
- test/
|
44
|
-
- test/
|
53
|
+
- test/geometry/size_zero.rb
|
54
|
+
- test/geometry/square.rb
|
55
|
+
- test/geometry/transformation.rb
|
56
|
+
- test/geometry/vector.rb
|
45
57
|
homepage: http://github.com/bfoz/geometry
|
46
58
|
licenses: []
|
47
59
|
post_install_message:
|
@@ -62,19 +74,24 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
62
74
|
version: '0'
|
63
75
|
requirements: []
|
64
76
|
rubyforge_project: geometry
|
65
|
-
rubygems_version: 1.8.
|
77
|
+
rubygems_version: 1.8.24
|
66
78
|
signing_key:
|
67
79
|
specification_version: 3
|
68
80
|
summary: Geometric primitives and algoritms
|
69
81
|
test_files:
|
82
|
+
- test/geometry.rb
|
83
|
+
- test/geometry/arc.rb
|
70
84
|
- test/geometry/circle.rb
|
71
85
|
- test/geometry/edge.rb
|
86
|
+
- test/geometry/line.rb
|
72
87
|
- test/geometry/point.rb
|
88
|
+
- test/geometry/point_zero.rb
|
73
89
|
- test/geometry/polygon.rb
|
74
90
|
- test/geometry/rectangle.rb
|
91
|
+
- test/geometry/rotation.rb
|
75
92
|
- test/geometry/size.rb
|
76
|
-
- test/
|
77
|
-
- test/
|
78
|
-
- test/
|
79
|
-
- test/
|
93
|
+
- test/geometry/size_zero.rb
|
94
|
+
- test/geometry/square.rb
|
95
|
+
- test/geometry/transformation.rb
|
96
|
+
- test/geometry/vector.rb
|
80
97
|
has_rdoc:
|
data/test/helper.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
# https://github.com/sandal/rbp/blob/master/testing/test_unit_extensions.rb
|
2
|
-
|
3
|
-
module Test::Unit
|
4
|
-
# Used to fix a minor minitest/unit incompatibility in flexmock
|
5
|
-
AssertionFailedError = Class.new(StandardError)
|
6
|
-
|
7
|
-
class TestCase
|
8
|
-
|
9
|
-
def self.must(name, &block)
|
10
|
-
test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
|
11
|
-
defined = instance_method(test_name) rescue false
|
12
|
-
raise "#{test_name} is already defined in #{self}" if defined
|
13
|
-
if block_given?
|
14
|
-
define_method(test_name, &block)
|
15
|
-
else
|
16
|
-
define_method(test_name) do
|
17
|
-
flunk "No implementation provided for #{name}"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|