polaris 0.0.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/spec/helper.rb +4 -0
- data/spec/line_of_site_spec.rb +12 -0
- data/spec/polaris_spec.rb +193 -0
- metadata +99 -0
data/spec/helper.rb
ADDED
@@ -0,0 +1,193 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__),'helper')
|
2
|
+
require 'polaris'
|
3
|
+
require 'two_d_grid_map'
|
4
|
+
|
5
|
+
describe 'A new polaris' do
|
6
|
+
before do
|
7
|
+
@map = TwoDGridMap.new 10, 20
|
8
|
+
@pather = Polaris.new @map
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should return an empty path if destination is not valid' do
|
12
|
+
from = TwoDGridLocation.new @map.w-1, @map.h-1
|
13
|
+
to = TwoDGridLocation.new @map.w, @map.h
|
14
|
+
@pather.guide(from,to).should be_nil
|
15
|
+
|
16
|
+
to = TwoDGridLocation.new(-1, -1)
|
17
|
+
@pather.guide(from,to).should be_nil
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should return an empty path if start is not valid' do
|
21
|
+
from = TwoDGridLocation.new @map.w, @map.h
|
22
|
+
to = TwoDGridLocation.new @map.w-1, @map.h-1
|
23
|
+
@pather.guide(from,to).should be_nil
|
24
|
+
|
25
|
+
from = TwoDGridLocation.new -1, -1
|
26
|
+
@pather.guide(from,to).should be_nil
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should return the path of "to" for accessible neighbor' do
|
30
|
+
from = TwoDGridLocation.new 0, 0
|
31
|
+
to = TwoDGridLocation.new 1, 0
|
32
|
+
|
33
|
+
path = @pather.guide(from,to)
|
34
|
+
path.should_not be_nil
|
35
|
+
path.size.should equal(1)
|
36
|
+
|
37
|
+
path.first.cost_to.should equal(TwoDGridMap::TRAVEL_COST_STRAIGHT)
|
38
|
+
path.first.dist_from.should equal(0)
|
39
|
+
path.first.location.x.should equal(to.x)
|
40
|
+
path.first.location.y.should equal(to.y)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should return the right horizontal path of length 2' do
|
44
|
+
from = TwoDGridLocation.new 0, 0
|
45
|
+
to = TwoDGridLocation.new 2, 0
|
46
|
+
|
47
|
+
path = @pather.guide(from,to)
|
48
|
+
|
49
|
+
path.should_not be_nil
|
50
|
+
path.size.should equal(2)
|
51
|
+
|
52
|
+
path.first.location.x.should equal(1)
|
53
|
+
path.first.location.y.should equal(0)
|
54
|
+
path.last.location.should == to
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should return the left horizontal path of length 2' do
|
58
|
+
from = TwoDGridLocation.new 2, 0
|
59
|
+
to = TwoDGridLocation.new 0, 0
|
60
|
+
|
61
|
+
path = @pather.guide(from,to)
|
62
|
+
|
63
|
+
path.should_not be_nil
|
64
|
+
path.size.should equal(2)
|
65
|
+
|
66
|
+
path.first.location.x.should equal(1)
|
67
|
+
path.first.location.y.should equal(0)
|
68
|
+
path.last.location.should == to
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
it 'should return the left up diag path of length 2' do
|
73
|
+
from = TwoDGridLocation.new 2, 2
|
74
|
+
to = TwoDGridLocation.new 0, 0
|
75
|
+
|
76
|
+
path = @pather.guide(from,to)
|
77
|
+
|
78
|
+
path.should_not be_nil
|
79
|
+
path.size.should equal(2)
|
80
|
+
|
81
|
+
path.first.location.x.should equal(1)
|
82
|
+
path.first.location.y.should equal(1)
|
83
|
+
path.last.location.should == to
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'should return the right up diag path of length 2' do
|
87
|
+
from = TwoDGridLocation.new 2, 2
|
88
|
+
to = TwoDGridLocation.new 4, 0
|
89
|
+
|
90
|
+
path = @pather.guide(from,to)
|
91
|
+
|
92
|
+
path.should_not be_nil
|
93
|
+
path.size.should equal(2)
|
94
|
+
|
95
|
+
path.first.location.x.should equal(3)
|
96
|
+
path.first.location.y.should equal(1)
|
97
|
+
path.last.location.should == to
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'should return the right down diag path of length 2' do
|
101
|
+
from = TwoDGridLocation.new 2, 2
|
102
|
+
to = TwoDGridLocation.new 4, 4
|
103
|
+
|
104
|
+
path = @pather.guide(from,to)
|
105
|
+
|
106
|
+
path.should_not be_nil
|
107
|
+
path.size.should equal(2)
|
108
|
+
|
109
|
+
path.first.location.x.should equal(3)
|
110
|
+
path.first.location.y.should equal(3)
|
111
|
+
path.last.location.should == to
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'should return the left down diag path of length 2' do
|
115
|
+
from = TwoDGridLocation.new 2, 2
|
116
|
+
to = TwoDGridLocation.new 0, 4
|
117
|
+
|
118
|
+
path = @pather.guide(from,to)
|
119
|
+
|
120
|
+
path.should_not be_nil
|
121
|
+
path.size.should equal(2)
|
122
|
+
|
123
|
+
path.first.location.x.should equal(1)
|
124
|
+
path.first.location.y.should equal(3)
|
125
|
+
path.last.location.should == to
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'should return go around an obstacle' do
|
129
|
+
from = TwoDGridLocation.new 0, 0
|
130
|
+
to = TwoDGridLocation.new 2, 0
|
131
|
+
|
132
|
+
in_the_way = TwoDGridLocation.new 1, 0
|
133
|
+
@map.place in_the_way, "ME"
|
134
|
+
|
135
|
+
path = @pather.guide(from,to)
|
136
|
+
|
137
|
+
path.should_not be_nil
|
138
|
+
path.size.should equal(2)
|
139
|
+
|
140
|
+
path.first.location.x.should equal(1)
|
141
|
+
path.first.location.y.should equal(1)
|
142
|
+
path.last.location.should == to
|
143
|
+
end
|
144
|
+
|
145
|
+
it 'should return shortest path of horizontal and diag length 5' do
|
146
|
+
from = TwoDGridLocation.new 0, 0
|
147
|
+
to = TwoDGridLocation.new 5, 4
|
148
|
+
|
149
|
+
path = @pather.guide(from,to)
|
150
|
+
|
151
|
+
path.should_not be_nil
|
152
|
+
path.size.should equal(5)
|
153
|
+
|
154
|
+
# make sure that all elements of the path are neighbors
|
155
|
+
prev_el = PathElement.new from, nil
|
156
|
+
path.each do |path_el|
|
157
|
+
@map.neighbors(prev_el.location).include?(path_el.location).should be_true
|
158
|
+
prev_el = path_el
|
159
|
+
end
|
160
|
+
|
161
|
+
path.last.location.should == to
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'should return nil when the shortest path is longer than the max step passed in' do
|
165
|
+
from = TwoDGridLocation.new 0, 0
|
166
|
+
to = TwoDGridLocation.new 5, 4
|
167
|
+
|
168
|
+
path = @pather.guide(from,to,nil,4)
|
169
|
+
path.should == nil
|
170
|
+
end
|
171
|
+
|
172
|
+
it 'should return nil when the path does not exist for unit type' do
|
173
|
+
from = TwoDGridLocation.new 0, 0
|
174
|
+
to = TwoDGridLocation.new 2, 0
|
175
|
+
|
176
|
+
path = @pather.guide(from,to,:blocked)
|
177
|
+
path.should == nil
|
178
|
+
end
|
179
|
+
|
180
|
+
it 'should return nil when the path does not exist' do
|
181
|
+
from = TwoDGridLocation.new 0, 0
|
182
|
+
to = TwoDGridLocation.new 2, 0
|
183
|
+
|
184
|
+
# put up a wall
|
185
|
+
@map.h.times do |i|
|
186
|
+
@map.place TwoDGridLocation.new(1, i), "ME"
|
187
|
+
end
|
188
|
+
|
189
|
+
path = @pather.guide(from,to)
|
190
|
+
path.should == nil
|
191
|
+
@pather.nodes_considered.should == @map.h
|
192
|
+
end
|
193
|
+
end
|
metadata
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: polaris
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Shawn Anderson
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-02-27 00:00:00 -05:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rspec
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :development
|
31
|
+
version_requirements: *id001
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: jeweler
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
41
|
+
version: "0"
|
42
|
+
type: :development
|
43
|
+
version_requirements: *id002
|
44
|
+
- !ruby/object:Gem::Dependency
|
45
|
+
name: algorithms
|
46
|
+
prerelease: false
|
47
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
segments:
|
52
|
+
- 0
|
53
|
+
version: "0"
|
54
|
+
type: :runtime
|
55
|
+
version_requirements: *id003
|
56
|
+
description: A* pathfinding in Ruby, using C datastructures to speed things up.
|
57
|
+
email: shawn42@gmail.com
|
58
|
+
executables: []
|
59
|
+
|
60
|
+
extensions: []
|
61
|
+
|
62
|
+
extra_rdoc_files: []
|
63
|
+
|
64
|
+
files: []
|
65
|
+
|
66
|
+
has_rdoc: true
|
67
|
+
homepage: http://github.com/shawn42/polaris
|
68
|
+
licenses: []
|
69
|
+
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options:
|
72
|
+
- --charset=UTF-8
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
segments:
|
80
|
+
- 0
|
81
|
+
version: "0"
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
segments:
|
87
|
+
- 0
|
88
|
+
version: "0"
|
89
|
+
requirements: []
|
90
|
+
|
91
|
+
rubyforge_project: polaris
|
92
|
+
rubygems_version: 1.3.6
|
93
|
+
signing_key:
|
94
|
+
specification_version: 3
|
95
|
+
summary: A* pathfinding in ruby.
|
96
|
+
test_files:
|
97
|
+
- spec/helper.rb
|
98
|
+
- spec/line_of_site_spec.rb
|
99
|
+
- spec/polaris_spec.rb
|