ffi-geos 0.0.1.beta1

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,188 @@
1
+
2
+ $: << File.dirname(__FILE__)
3
+ require 'test_helper'
4
+
5
+ class WkbReaderTests < Test::Unit::TestCase
6
+ include TestHelper
7
+
8
+ def setup
9
+ @wkb_reader = Geos::WkbReader.new
10
+ @writer = Geos::WktWriter.new
11
+ @reader = Geos::WktReader.new
12
+ end
13
+
14
+ def wkb_tester(expected, g, type_id, geom_type, klass, srid, hex = true)
15
+ geom = if hex
16
+ @wkb_reader.read_hex(g)
17
+ else
18
+ @wkb_reader.read(g)
19
+ end
20
+ assert(geom)
21
+ assert_equal(type_id, geom.type_id)
22
+ assert_equal(geom_type, geom.geom_type)
23
+ assert(geom.is_a?(klass))
24
+ assert(read(expected).eql_exact?(geom, TOLERANCE))
25
+ assert_equal(srid, geom.srid)
26
+ end
27
+
28
+ def test_2d_little_endian
29
+ wkb_tester(
30
+ 'POINT(6 7)',
31
+ '010100000000000000000018400000000000001C40',
32
+ Geos::GEOS_POINT,
33
+ 'Point',
34
+ Geos::Point,
35
+ 0
36
+ )
37
+ end
38
+
39
+ def test_2d_big_endian
40
+ wkb_tester(
41
+ 'POINT (6 7)',
42
+ '00000000014018000000000000401C000000000000',
43
+ Geos::GEOS_POINT,
44
+ 'Point',
45
+ Geos::Point,
46
+ 0
47
+ )
48
+ end
49
+
50
+ def test_2d_little_endian_srid
51
+ wkb_tester(
52
+ 'POINT (6 7)',
53
+ '01010000202B00000000000000000018400000000000001C40',
54
+ Geos::GEOS_POINT,
55
+ 'Point',
56
+ Geos::Point,
57
+ 43
58
+ )
59
+ end
60
+
61
+ def test_2d_big_endian_srid
62
+ wkb_tester(
63
+ 'POINT (6 7)',
64
+ '00200000010000002B4018000000000000401C000000000000',
65
+ Geos::GEOS_POINT,
66
+ 'Point',
67
+ Geos::Point,
68
+ 43
69
+ )
70
+ end
71
+
72
+ def test_3d_little_endian
73
+ wkb_tester(
74
+ 'POINT Z (6 7 8)',
75
+ '010100008000000000000018400000000000001C400000000000002040',
76
+ Geos::GEOS_POINT,
77
+ 'Point',
78
+ Geos::Point,
79
+ 0
80
+ )
81
+ end
82
+
83
+ def test_3d_big_endian
84
+ wkb_tester(
85
+ 'POINT Z (6 7 8)',
86
+ '00800000014018000000000000401C0000000000004020000000000000',
87
+ Geos::GEOS_POINT,
88
+ 'Point',
89
+ Geos::Point,
90
+ 0
91
+ )
92
+ end
93
+
94
+ def test_3d_big_endian_srid
95
+ wkb_tester(
96
+ 'POINT Z (6 7 8)',
97
+ '00A0000001000000354018000000000000401C0000000000004020000000000000',
98
+ Geos::GEOS_POINT,
99
+ 'Point',
100
+ Geos::Point,
101
+ 53
102
+ )
103
+ end
104
+
105
+ def test_2d_little_endian_binary
106
+ wkb_tester(
107
+ 'POINT(6 7)',
108
+ "\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x40\x00\x00\x00\x00\x00\x00\x1C\x40",
109
+ Geos::GEOS_POINT,
110
+ 'Point',
111
+ Geos::Point,
112
+ 0,
113
+ false
114
+ )
115
+ end
116
+
117
+ def test_2d_big_endian_binary
118
+ wkb_tester(
119
+ 'POINT (6 7)',
120
+ "\x00\x00\x00\x00\x01\x40\x18\x00\x00\x00\x00\x00\x00\x40\x1C\x00\x00\x00\x00\x00\x00",
121
+ Geos::GEOS_POINT,
122
+ 'Point',
123
+ Geos::Point,
124
+ 0,
125
+ false
126
+ )
127
+ end
128
+
129
+ def test_2d_little_endian_srid_binary
130
+ wkb_tester(
131
+ 'POINT (6 7)',
132
+ "\x01\x01\x00\x00\x20\x2B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x40\x00\x00\x00\x00\x00\x00\x1C\x40",
133
+ Geos::GEOS_POINT,
134
+ 'Point',
135
+ Geos::Point,
136
+ 43,
137
+ false
138
+ )
139
+ end
140
+
141
+ def test_2d_big_endian_srid_binary
142
+ wkb_tester(
143
+ 'POINT (6 7)',
144
+ "\x00\x20\x00\x00\x01\x00\x00\x00\x2B\x40\x18\x00\x00\x00\x00\x00\x00\x40\x1C\x00\x00\x00\x00\x00\x00",
145
+ Geos::GEOS_POINT,
146
+ 'Point',
147
+ Geos::Point,
148
+ 43,
149
+ false
150
+ )
151
+ end
152
+
153
+ def test_3d_little_endian_binary
154
+ wkb_tester(
155
+ 'POINT Z (6 7 8)',
156
+ "\x01\x01\x00\x00\x80\x00\x00\x00\x00\x00\x00\x18\x40\x00\x00\x00\x00\x00\x00\x1C\x40\x00\x00\x00\x00\x00\x00\x20\x40",
157
+ Geos::GEOS_POINT,
158
+ 'Point',
159
+ Geos::Point,
160
+ 0,
161
+ false
162
+ )
163
+ end
164
+
165
+ def test_3d_big_endian_binary
166
+ wkb_tester(
167
+ 'POINT Z (6 7 8)',
168
+ "\x00\x80\x00\x00\x01\x40\x18\x00\x00\x00\x00\x00\x00\x40\x1C\x00\x00\x00\x00\x00\x00\x40\x20\x00\x00\x00\x00\x00\x00",
169
+ Geos::GEOS_POINT,
170
+ 'Point',
171
+ Geos::Point,
172
+ 0,
173
+ false
174
+ )
175
+ end
176
+
177
+ def test_3d_big_endian_srid_binary
178
+ wkb_tester(
179
+ 'POINT Z (6 7 8)',
180
+ "\x00\xA0\x00\x00\x01\x00\x00\x00\x35\x40\x18\x00\x00\x00\x00\x00\x00\x40\x1C\x00\x00\x00\x00\x00\x00\x40\x20\x00\x00\x00\x00\x00\x00",
181
+ Geos::GEOS_POINT,
182
+ 'Point',
183
+ Geos::Point,
184
+ 53,
185
+ false
186
+ )
187
+ end
188
+ end
@@ -0,0 +1,435 @@
1
+
2
+ $: << File.dirname(__FILE__)
3
+ require 'test_helper'
4
+
5
+ class WkbWriterTests < Test::Unit::TestCase
6
+ include TestHelper
7
+
8
+ def setup
9
+ @wkb_writer = Geos::WkbWriter.new
10
+ @writer = Geos::WktWriter.new
11
+ @reader = Geos::WktReader.new
12
+ end
13
+
14
+ def wkb_tester(expected, g, dimensions, byte_order, srid, include_srid, hex = true)
15
+ geom = read(g)
16
+ geom.srid = srid
17
+
18
+ @wkb_writer.output_dimensions = dimensions
19
+ @wkb_writer.byte_order = byte_order
20
+ @wkb_writer.include_srid = include_srid
21
+
22
+ result = if hex
23
+ @wkb_writer.write_hex(geom)
24
+ else
25
+ @wkb_writer.write(geom)
26
+ end
27
+
28
+ assert_equal(expected, result)
29
+ end
30
+
31
+ def test_2d_little_endian
32
+ wkb_tester(
33
+ '010100000000000000000018400000000000001C40',
34
+ 'POINT(6 7)',
35
+ 2,
36
+ :ndr,
37
+ 43,
38
+ false
39
+ )
40
+ end
41
+
42
+ def test_2d_little_endian_with_srid
43
+ wkb_tester(
44
+ '01010000202B00000000000000000018400000000000001C40',
45
+ 'POINT(6 7)',
46
+ 2,
47
+ :ndr,
48
+ 43,
49
+ true
50
+ )
51
+ end
52
+
53
+ def test_2d_big_endian
54
+ wkb_tester(
55
+ '00000000014018000000000000401C000000000000',
56
+ 'POINT(6 7)',
57
+ 2,
58
+ :xdr,
59
+ 43,
60
+ false
61
+ )
62
+ end
63
+
64
+ def test_2d_big_endian_with_srid
65
+ wkb_tester(
66
+ '00200000010000002B4018000000000000401C000000000000',
67
+ 'POINT(6 7)',
68
+ 2,
69
+ :xdr,
70
+ 43,
71
+ true
72
+ )
73
+ end
74
+
75
+ def test_3d_little_endian_with_2d_output
76
+ wkb_tester(
77
+ '010100000000000000000018400000000000001C40',
78
+ 'POINT(6 7)',
79
+ 3,
80
+ :ndr,
81
+ 43,
82
+ false
83
+ )
84
+ end
85
+
86
+ def test_3d_little_endian__with_2d_output_with_srid
87
+ wkb_tester(
88
+ '01010000202B00000000000000000018400000000000001C40',
89
+ 'POINT(6 7)',
90
+ 3,
91
+ :ndr,
92
+ 43,
93
+ true
94
+ )
95
+ end
96
+
97
+ def test_3d_big_endian_with_2d_input
98
+ wkb_tester(
99
+ '00000000014018000000000000401C000000000000',
100
+ 'POINT(6 7)',
101
+ 3,
102
+ :xdr,
103
+ 43,
104
+ false
105
+ )
106
+ end
107
+
108
+ def test_3d_big_endian_with_2d_input_with_srid
109
+ wkb_tester(
110
+ '00200000010000002B4018000000000000401C000000000000',
111
+ 'POINT(6 7)',
112
+ 3,
113
+ :xdr,
114
+ 43,
115
+ true
116
+ )
117
+ end
118
+
119
+
120
+
121
+ def test_2d_little_endian_with_3d_input
122
+ wkb_tester(
123
+ '010100000000000000000018400000000000001C40',
124
+ 'POINT(6 7 8)',
125
+ 2,
126
+ :ndr,
127
+ 53,
128
+ false
129
+ )
130
+ end
131
+
132
+ def test_2d_little_endian_with_3d_input_with_srid
133
+ wkb_tester(
134
+ '01010000203500000000000000000018400000000000001C40',
135
+ 'POINT(6 7 8)',
136
+ 2,
137
+ :ndr,
138
+ 53,
139
+ true
140
+ )
141
+ end
142
+
143
+
144
+
145
+ def test_2d_big_endian_with_3d_input
146
+ wkb_tester(
147
+ '00000000014018000000000000401C000000000000',
148
+ 'POINT(6 7 8)',
149
+ 2,
150
+ :xdr,
151
+ 53,
152
+ false
153
+ )
154
+ end
155
+
156
+ def test_2d_big_endian_with_3d_input_with_srid
157
+ wkb_tester(
158
+ '0020000001000000354018000000000000401C000000000000',
159
+ 'POINT(6 7 8)',
160
+ 2,
161
+ :xdr,
162
+ 53,
163
+ true
164
+ )
165
+ end
166
+
167
+ def test_3d_little_endian_with_3d_input
168
+ wkb_tester(
169
+ '010100008000000000000018400000000000001C400000000000002040',
170
+ 'POINT(6 7 8)',
171
+ 3,
172
+ :ndr,
173
+ 53,
174
+ false
175
+ )
176
+ end
177
+
178
+ def test_3d_big_endian_with_3d_input
179
+ wkb_tester(
180
+ '00800000014018000000000000401C0000000000004020000000000000',
181
+ 'POINT(6 7 8)',
182
+ 3,
183
+ :xdr,
184
+ 53,
185
+ false
186
+ )
187
+ end
188
+
189
+ def test_3d_big_endian_with_3d_input_with_srid
190
+ wkb_tester(
191
+ '00A0000001000000354018000000000000401C0000000000004020000000000000',
192
+ 'POINT(6 7 8)',
193
+ 3,
194
+ :xdr,
195
+ 53,
196
+ true
197
+ )
198
+ end
199
+
200
+ def test_try_bad_byte_order_value
201
+ assert_raise(TypeError) do
202
+ wkb_tester(
203
+ '010100008000000000000018400000000000001C400000000000002040',
204
+ 'POINT(6 7 8)',
205
+ 3,
206
+ 'gibberish',
207
+ 53,
208
+ false
209
+ )
210
+ end
211
+
212
+ assert_raise(TypeError) do
213
+ wkb_tester(
214
+ '010100008000000000000018400000000000001C400000000000002040',
215
+ 'POINT(6 7 8)',
216
+ 3,
217
+ 1000,
218
+ 53,
219
+ false
220
+ )
221
+ end
222
+ end
223
+
224
+ def test_2d_little_endian_binary
225
+ wkb_tester(
226
+ '010100000000000000000018400000000000001C40',
227
+ 'POINT(6 7)',
228
+ 2,
229
+ 1,
230
+ 43,
231
+ false
232
+ )
233
+ end
234
+
235
+ def test_2d_little_endian_with_srid_binary
236
+ wkb_tester(
237
+ '01010000202B00000000000000000018400000000000001C40',
238
+ 'POINT(6 7)',
239
+ 2,
240
+ 1,
241
+ 43,
242
+ true
243
+ )
244
+ end
245
+
246
+ def test_2d_big_endian_binary
247
+ wkb_tester(
248
+ '00000000014018000000000000401C000000000000',
249
+ 'POINT(6 7)',
250
+ 2,
251
+ 0,
252
+ 43,
253
+ false
254
+ )
255
+ end
256
+
257
+ def test_2d_big_endian_with_srid_binary
258
+ wkb_tester(
259
+ '00200000010000002B4018000000000000401C000000000000',
260
+ 'POINT(6 7)',
261
+ 2,
262
+ 0,
263
+ 43,
264
+ true
265
+ )
266
+ end
267
+
268
+ def test_3d_little_endian_with_2d_output_binary
269
+ wkb_tester(
270
+ '010100000000000000000018400000000000001C40',
271
+ 'POINT(6 7)',
272
+ 3,
273
+ 1,
274
+ 43,
275
+ false
276
+ )
277
+ end
278
+
279
+ def test_3d_little_endian__with_2d_output_with_srid_binary
280
+ wkb_tester(
281
+ '01010000202B00000000000000000018400000000000001C40',
282
+ 'POINT(6 7)',
283
+ 3,
284
+ 1,
285
+ 43,
286
+ true
287
+ )
288
+ end
289
+
290
+ def test_3d_big_endian_with_2d_input_binary
291
+ wkb_tester(
292
+ '00000000014018000000000000401C000000000000',
293
+ 'POINT(6 7)',
294
+ 3,
295
+ 0,
296
+ 43,
297
+ false
298
+ )
299
+ end
300
+
301
+ def test_3d_big_endian_with_2d_input_with_srid_binary
302
+ wkb_tester(
303
+ '00200000010000002B4018000000000000401C000000000000',
304
+ 'POINT(6 7)',
305
+ 3,
306
+ 0,
307
+ 43,
308
+ true
309
+ )
310
+ end
311
+
312
+
313
+
314
+ def test_2d_little_endian_with_3d_input_binary
315
+ wkb_tester(
316
+ '010100000000000000000018400000000000001C40',
317
+ 'POINT(6 7 8)',
318
+ 2,
319
+ 1,
320
+ 53,
321
+ false
322
+ )
323
+ end
324
+
325
+ def test_2d_little_endian_with_3d_input_with_srid_binary
326
+ wkb_tester(
327
+ '01010000203500000000000000000018400000000000001C40',
328
+ 'POINT(6 7 8)',
329
+ 2,
330
+ 1,
331
+ 53,
332
+ true
333
+ )
334
+ end
335
+
336
+ def test_2d_big_endian_with_3d_input_binary
337
+ wkb_tester(
338
+ "\x00\x00\x00\x00\x01\x40\x18\x00\x00\x00\x00\x00\x00\x40\x1C\x00\x00\x00\x00\x00\x00",
339
+ 'POINT(6 7 8)',
340
+ 2,
341
+ 0,
342
+ 53,
343
+ false,
344
+ false
345
+ )
346
+ end
347
+
348
+ def test_2d_big_endian_with_3d_input_with_srid_binary
349
+ wkb_tester(
350
+ "\x00\x20\x00\x00\x01\x00\x00\x00\x35\x40\x18\x00\x00\x00\x00\x00\x00\x40\x1C\x00\x00\x00\x00\x00\x00",
351
+ 'POINT(6 7 8)',
352
+ 2,
353
+ 0,
354
+ 53,
355
+ true,
356
+ false
357
+ )
358
+ end
359
+
360
+ def test_3d_little_endian_with_3d_input_binary
361
+ wkb_tester(
362
+ "\x01\x01\x00\x00\x80\x00\x00\x00\x00\x00\x00\x18\x40\x00\x00\x00\x00\x00\x00\x1C\x40\x00\x00\x00\x00\x00\x00\x20\x40",
363
+ 'POINT(6 7 8)',
364
+ 3,
365
+ 1,
366
+ 53,
367
+ false,
368
+ false
369
+ )
370
+ end
371
+
372
+ def test_3d_big_endian_with_3d_input_binary
373
+ wkb_tester(
374
+ "\x00\x80\x00\x00\x01\x40\x18\x00\x00\x00\x00\x00\x00\x40\x1C\x00\x00\x00\x00\x00\x00\x40\x20\x00\x00\x00\x00\x00\x00",
375
+ 'POINT(6 7 8)',
376
+ 3,
377
+ 0,
378
+ 53,
379
+ false,
380
+ false
381
+ )
382
+ end
383
+
384
+ def test_3d_big_endian_with_3d_input_with_srid_binary
385
+ wkb_tester(
386
+ "\x00\xA0\x00\x00\x01\x00\x00\x00\x35\x40\x18\x00\x00\x00\x00\x00\x00\x40\x1C\x00\x00\x00\x00\x00\x00\x40\x20\x00\x00\x00\x00\x00\x00",
387
+ 'POINT(6 7 8)',
388
+ 3,
389
+ 0,
390
+ 53,
391
+ true,
392
+ false
393
+ )
394
+ end
395
+
396
+ def test_try_bad_byte_order_value_binary
397
+ assert_raise(TypeError) do
398
+ wkb_tester(
399
+ "\x01\x01\x00\x00\x80\x00\x00\x00\x00\x00\x00\x18\x40\x00\x00\x00\x00\x00\x00\x1C\x40\x00\x00\x00\x00\x00\x00\x20\x40",
400
+ 'POINT(6 7 8)',
401
+ 3,
402
+ 'gibberish',
403
+ 53,
404
+ false,
405
+ false
406
+ )
407
+ end
408
+
409
+ assert_raise(TypeError) do
410
+ wkb_tester(
411
+ "\x01\x01\x00\x00\x80\x00\x00\x00\x00\x00\x00\x18\x40\x00\x00\x00\x00\x00\x00\x1C\x40\x00\x00\x00\x00\x00\x00\x20\x40",
412
+ 'POINT(6 7 8)',
413
+ 3,
414
+ 1000,
415
+ 53,
416
+ false,
417
+ false
418
+ )
419
+ end
420
+ end
421
+
422
+ if ENV['FORCE_TESTS'] || defined?(Geos::FFIGeos)
423
+ def test_write_with_options
424
+ geom = read('POINT(1 2 3)')
425
+ geom.srid = 4326
426
+
427
+
428
+ assert_equal('0101000020E6100000000000000000F03F0000000000000040', @wkb_writer.write_hex(geom, {
429
+ :include_srid => true
430
+ }))
431
+
432
+ assert_equal('0101000000000000000000F03F0000000000000040', @wkb_writer.write_hex(geom))
433
+ end
434
+ end
435
+ end