3
# These tests evaluate the geos relational operators
10
class TestGeosRelations < Test::Unit::TestCase
11
X = Geos::IllegalArgumentException
14
@test_helper = GeosTestHelper.new()
17
def get_expected_result(results, row, column)
18
value = results[row][column]
20
# 0 is false and 1 is true
29
raise ArgumentError, "Unknown result value"
33
def run_relational_operation(operation, results, &block)
34
STDOUT << "\n" << "------ #{operation} RELATION ------" << "\n"
37
# Create the geometries
38
geoms = @test_helper.create_geoms()
40
# Loop through the the geometries the first time
43
# Loop through the the geometries the second time
46
# Get the expected result
47
expected = self.get_expected_result(results, row, column)
50
# Get the actual result from the provided block
51
result = yield(geom1, geom2)
60
assert_equal(expected, result, "#{operation} failure")
62
# Geometry Collection is not a valid argument
63
rescue Geos::IllegalArgumentException => error
64
# This is probably ok but check
65
assert_equal(expected, Geos::IllegalArgumentException)
78
# Setup the expected results
81
# [0][1][2][3][4][5][6][7][8][9][10]
83
results[0] = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
84
results[1] = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
85
results[2] = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
86
results[3] = [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
87
results[4] = [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]
88
results[5] = [X, X, X, X, X, X, 0, 0, 0, 0, X]
89
results[6] = [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]
90
results[7] = [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]
91
results[8] = [0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0]
92
results[9] = [0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0]
93
results[10] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
95
self.run_relational_operation("CONTAINS", results) do |geom1, geom2|
101
# Setup the expected results
104
# [0][1][2][3][4][5][6][7][8][9][10]
105
results = Array.new()
106
results[0] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
107
results[1] = [0, 0, 1, 0, 0, X, 0, 0, 0, 0, 0]
108
results[2] = [0, 1, 0, 0, 0, X, 1, 1, 1, 1, 0]
109
results[3] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
110
results[4] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
111
results[5] = [X, X, X, X, X, X, X, X, X, X, X]
112
results[6] = [0, 0, 1, 0, 0, X, 0, 0, 0, 0, 0]
113
results[7] = [0, 0, 1, 0, 0, X, 0, 0, 0, 0, 0]
114
results[8] = [0, 0, 1, 0, 0, X, 0, 0, 0, 0, 0]
115
results[9] = [0, 0, 1, 0, 0, X, 0, 0, 0, 0, 0]
116
results[10] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
118
self.run_relational_operation("CROSSES", results) do |geom1, geom2|
124
# Setup the expected results
127
# [0][1][2][3][4][5][6][7][8][9][10]
128
results = Array.new()
129
results[0] = [0, 1, 1, 1, 0, X, 1, 1, 1, 1, 1]
130
results[1] = [1, 0, 0, 1, 1, X, 1, 1, 1, 1, 1]
131
results[2] = [1, 0, 0, 1, 1, X, 0, 0, 0, 0, 0]
132
results[3] = [1, 1, 1, 0, 0, X, 1, 1, 1, 1, 1]
133
results[4] = [0, 1, 1, 0, 0, X, 1, 1, 1, 1, 1]
134
results[5] = [X, X, X, X, X, X, X, X, X, X, X]
135
results[6] = [1, 1, 0, 1, 1, X, 0, 0, 0, 0, 1]
136
results[7] = [1, 1, 0, 1, 1, X, 0, 0, 0, 0, 1]
137
results[8] = [1, 1, 0, 1, 1, X, 0, 0, 0, 0, 1]
138
results[9] = [1, 1, 0, 1, 1, X, 0, 0, 0, 0, 1]
139
results[10] = [1, 1, 0, 1, 1, X, 1, 1, 1, 1, 0]
141
self.run_relational_operation("DISJOINT", results) do |geom1, geom2|
142
geom1.disjoint(geom2)
147
# Setup the expected results
150
# [0][1][2][3][4][5][6][7][8][9][10]
151
results = Array.new()
152
results[0] = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
153
results[1] = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
154
results[2] = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
155
results[3] = [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
156
results[4] = [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]
157
results[5] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
158
results[6] = [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]
159
results[7] = [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]
160
results[8] = [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
161
results[9] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
162
results[10] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
164
self.run_relational_operation("EQUALS", results) do |geom1, geom2|
169
def test_equals_exact()
170
# Setup the expected results
172
# EQUALS_EXACT Results
173
# [0][1][2][3][4][5][6][7][8][9][10]
174
results = Array.new()
175
results[0] = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
176
results[1] = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
177
results[2] = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
178
results[3] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
179
results[4] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
180
results[5] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
181
results[6] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
182
results[7] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
183
results[8] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
184
results[9] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
185
results[10] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
187
self.run_relational_operation("EQUALS_EXACT", results) do |geom1, geom2|
188
geom1.equals_exact(geom2)
192
def test_intersects()
193
# Setup the expected results
196
# [0][1][2][3][4][5][6][7][8][9][10]
197
results = Array.new()
198
results[0] = [1, 0, 0, 0, 1, X, 0, 0, 0, 0, 0]
199
results[1] = [0, 1, 1, 0, 0, X, 0, 0, 0, 0, 0]
200
results[2] = [0, 1, 1, 0, 0, X, 1, 1, 1, 1, 1]
201
results[3] = [0, 0, 0, 1, 1, X, 0, 0, 0, 0, 0]
202
results[4] = [1, 0, 0, 1, 1, X, 0, 0, 0, 0, 0]
203
results[5] = [X, X, X, X, X, X, X, X, X, X, X]
204
results[6] = [0, 0, 1, 0, 0, X, 1, 1, 1, 1, 0]
205
results[7] = [0, 0, 1, 0, 0, X, 1, 1, 1, 1, 0]
206
results[8] = [0, 0, 1, 0, 0, X, 1, 1, 1, 1, 0]
207
results[9] = [0, 0, 1, 0, 0, X, 1, 1, 1, 1, 0]
208
results[10] = [0, 0, 1, 0, 0, X, 0, 0, 0, 0, 1]
210
self.run_relational_operation("INTERSECTS", results) do |geom1, geom2|
211
geom1.intersects(geom2)
215
def test_is_within_distance()
216
# Setup the expected results
218
# IS_WITHIN_DISTANCE Results
219
# [0][1][2][3][4][5][6][7][8][9][10]
220
results = Array.new()
221
results[0] = [1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0]
222
results[1] = [0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0]
223
results[2] = [0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0]
224
results[3] = [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0]
225
results[4] = [1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0]
226
results[5] = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
227
results[6] = [0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0]
228
results[7] = [0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0]
229
results[8] = [0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0]
230
results[9] = [0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0]
231
results[10] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
233
self.run_relational_operation("IS_WITHIN_DISTANCE", results) do |geom1, geom2|
234
geom1.is_within_distance(geom2, 2)
239
# Setup the expected results
242
# [0][1][2][3][4][5][6][7][8][9][10]
243
results = Array.new()
244
results[0] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
245
results[1] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
246
results[2] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 1]
247
results[3] = [0, 0, 0, 0, 1, X, 0, 0, 0, 0, 0]
248
results[4] = [0, 0, 0, 1, 0, X, 0, 0, 0, 0, 0]
249
results[5] = [X, X, X, X, X, X, X, X, X, X, X]
250
results[6] = [0, 0, 0, 0, 0, X, 0, 1, 0, 0, 0]
251
results[7] = [0, 0, 0, 0, 0, X, 1, 0, 1, 1, 0]
252
results[8] = [0, 0, 0, 0, 0, X, 0, 1, 0, 0, 0]
253
results[9] = [0, 0, 0, 0, 0, X, 0, 1, 0, 0, 0]
254
results[10] = [0, 0, 1, 0, 0, X, 0, 0, 0, 0, 0]
256
self.run_relational_operation("OVERLAPS", results) do |geom1, geom2|
257
geom1.overlaps(geom2)
262
# Setup the expected results
265
# [0][1][2][3][4][5][6][7][8][9][10]
266
results = Array.new()
267
results[0] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
268
results[1] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
269
results[2] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
270
results[3] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
271
results[4] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
272
results[5] = [X, X, X, X, X, X, X, X, X, X, X]
273
results[6] = [0, 0, 0, 0, 0, X, 0, 1, 0, 0, 0]
274
results[7] = [0, 0, 0, 0, 0, X, 1, 0, 1, 1, 0]
275
results[8] = [0, 0, 0, 0, 0, X, 0, 1, 0, 0, 0]
276
results[9] = [0, 0, 0, 0, 0, X, 0, 1, 0, 0, 0]
277
results[10] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
279
self.run_relational_operation("RELATE", results) do |geom1, geom2|
280
geom1.relate(geom2, "212101212")
285
# Setup the expected results
288
# [0][1][2][3][4][5][6][7][8][9][10]
289
results = Array.new()
290
results[0] = [0, 0, 0, 0, 1, X, 0, 0, 0, 0, 0]
291
results[1] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
292
results[2] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
293
results[3] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
294
results[4] = [1, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
295
results[5] = [X, X, X, X, X, X, X, X, X, X, X]
296
results[6] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
297
results[7] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
298
results[8] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
299
results[9] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
300
results[10] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
302
self.run_relational_operation("TOUCHES", results) do |geom1, geom2|
308
# Setup the expected results
311
# [0][1][2][3][4][5][6][7][8][9][10]
312
results = Array.new()
313
results[0] = [1, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
314
results[1] = [0, 1, 0, 0, 0, X, 0, 0, 0, 0, 0]
315
results[2] = [0, 0, 1, 0, 0, X, 0, 0, 0, 0, 0]
316
results[3] = [0, 0, 0, 1, 0, X, 0, 0, 0, 0, 0]
317
results[4] = [0, 0, 0, 0, 1, X, 0, 0, 0, 0, 0]
318
results[5] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0]
319
results[6] = [0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0]
320
results[7] = [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]
321
results[8] = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0]
322
results[9] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
323
results[10] = [0, 0, 0, 0, 0, X, 0, 0, 0, 0, 1]
325
self.run_relational_operation("WITHIN", results) do |geom1, geom2|
b'\\ No newline at end of file'