ffi-geos 1.2.2 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +49 -0
- data/.rubocop.yml +5117 -4
- data/FUNDING.yml +2 -0
- data/Gemfile +9 -16
- data/Guardfile +3 -4
- data/MIT-LICENSE +1 -1
- data/README.rdoc +2 -20
- data/Rakefile +3 -2
- data/ffi-geos.gemspec +7 -2
- data/lib/ffi-geos/buffer_params.rb +1 -1
- data/lib/ffi-geos/coordinate_sequence.rb +179 -177
- data/lib/ffi-geos/geometry.rb +118 -31
- data/lib/ffi-geos/geometry_collection.rb +26 -12
- data/lib/ffi-geos/interrupt.rb +11 -14
- data/lib/ffi-geos/line_string.rb +64 -49
- data/lib/ffi-geos/multi_line_string.rb +1 -1
- data/lib/ffi-geos/point.rb +18 -18
- data/lib/ffi-geos/polygon.rb +44 -30
- data/lib/ffi-geos/prepared_geometry.rb +1 -1
- data/lib/ffi-geos/strtree.rb +28 -30
- data/lib/ffi-geos/tools.rb +1 -1
- data/lib/ffi-geos/utils.rb +16 -23
- data/lib/ffi-geos/version.rb +1 -1
- data/lib/ffi-geos/wkb_reader.rb +1 -1
- data/lib/ffi-geos/wkb_writer.rb +4 -5
- data/lib/ffi-geos/wkt_reader.rb +1 -1
- data/lib/ffi-geos/wkt_writer.rb +7 -13
- data/lib/ffi-geos.rb +134 -48
- data/sonar-project.properties +16 -0
- data/test/coordinate_sequence_tests.rb +148 -126
- data/test/geometry_collection_tests.rb +41 -67
- data/test/geometry_tests.rb +341 -40
- data/test/interrupt_tests.rb +7 -7
- data/test/line_string_tests.rb +23 -15
- data/test/point_tests.rb +5 -5
- data/test/polygon_tests.rb +6 -7
- data/test/prepared_geometry_tests.rb +8 -8
- data/test/strtree_tests.rb +13 -12
- data/test/test_helper.rb +74 -56
- data/test/utils_tests.rb +69 -59
- data/test/wkb_reader_tests.rb +9 -9
- data/test/wkb_writer_tests.rb +14 -12
- data/test/wkt_reader_tests.rb +0 -1
- data/test/wkt_writer_tests.rb +2 -5
- metadata +12 -10
- data/.travis.yml +0 -21
@@ -43,6 +43,28 @@ class CoordinateSequenceTests < Minitest::Test
|
|
43
43
|
assert_equal(2, @cs.dimensions)
|
44
44
|
end
|
45
45
|
|
46
|
+
def test_counter_clockwise
|
47
|
+
skip unless ENV['FORCE_TESTS'] || Geos::CoordinateSequence.method_defined?(:counter_clockwise?)
|
48
|
+
|
49
|
+
cs = Geos::CoordinateSequence.new([
|
50
|
+
[0, 0],
|
51
|
+
[1, 0],
|
52
|
+
[1, 1],
|
53
|
+
[0, 0]
|
54
|
+
])
|
55
|
+
|
56
|
+
assert(cs.counter_clockwise?)
|
57
|
+
|
58
|
+
cs = Geos::CoordinateSequence.new([
|
59
|
+
[0, 0],
|
60
|
+
[1, 1],
|
61
|
+
[1, 0],
|
62
|
+
[0, 0]
|
63
|
+
])
|
64
|
+
|
65
|
+
refute(cs.counter_clockwise?)
|
66
|
+
end
|
67
|
+
|
46
68
|
def test_check_bounds
|
47
69
|
assert_raises(Geos::IndexBoundsError) { @cs.set_x(10, 0.1) }
|
48
70
|
assert_raises(Geos::IndexBoundsError) { @cs.set_x(-1, 0.1) }
|
@@ -105,11 +127,11 @@ class CoordinateSequenceTests < Minitest::Test
|
|
105
127
|
|
106
128
|
def test_read_from_array
|
107
129
|
cs = Geos::CoordinateSequence.new([
|
108
|
-
[
|
109
|
-
[
|
110
|
-
[
|
111
|
-
[
|
112
|
-
[
|
130
|
+
[0, 0],
|
131
|
+
[1, 1],
|
132
|
+
[2, 2],
|
133
|
+
[3, 3],
|
134
|
+
[4, 4]
|
113
135
|
])
|
114
136
|
|
115
137
|
assert_equal(2, cs.dimensions)
|
@@ -117,30 +139,30 @@ class CoordinateSequenceTests < Minitest::Test
|
|
117
139
|
|
118
140
|
assert_raises(Geos::CoordinateSequence::ParseError) do
|
119
141
|
cs = Geos::CoordinateSequence.new([
|
120
|
-
[
|
121
|
-
[
|
142
|
+
[1, 2],
|
143
|
+
[1, 2, 3]
|
122
144
|
])
|
123
145
|
end
|
124
146
|
|
125
147
|
assert_raises(Geos::CoordinateSequence::ParseError) do
|
126
148
|
cs = Geos::CoordinateSequence.new([
|
127
|
-
[
|
149
|
+
[1, 2, 3, 4]
|
128
150
|
])
|
129
151
|
end
|
130
152
|
end
|
131
153
|
|
132
154
|
def test_to_point
|
133
|
-
cs = Geos::CoordinateSequence.new([
|
155
|
+
cs = Geos::CoordinateSequence.new([5, 7])
|
134
156
|
assert_equal('POINT (5 7)', write(cs.to_point, trim: true))
|
135
157
|
end
|
136
158
|
|
137
159
|
def test_to_to_linear_ring
|
138
160
|
cs = Geos::CoordinateSequence.new([
|
139
|
-
[
|
140
|
-
[
|
141
|
-
[
|
142
|
-
[
|
143
|
-
[
|
161
|
+
[0, 0],
|
162
|
+
[0, 5],
|
163
|
+
[5, 5],
|
164
|
+
[5, 0],
|
165
|
+
[0, 0]
|
144
166
|
])
|
145
167
|
|
146
168
|
assert_equal('LINEARRING (0 0, 0 5, 5 5, 5 0, 0 0)', write(cs.to_linear_ring, trim: true))
|
@@ -150,7 +172,7 @@ class CoordinateSequenceTests < Minitest::Test
|
|
150
172
|
cs = Geos::CoordinateSequence.new
|
151
173
|
assert_geom_empty(cs)
|
152
174
|
|
153
|
-
cs = Geos::CoordinateSequence.new([
|
175
|
+
cs = Geos::CoordinateSequence.new([4, 1])
|
154
176
|
refute_geom_empty(cs)
|
155
177
|
end
|
156
178
|
|
@@ -162,10 +184,10 @@ class CoordinateSequenceTests < Minitest::Test
|
|
162
184
|
|
163
185
|
def test_to_line_string
|
164
186
|
cs = Geos::CoordinateSequence.new([
|
165
|
-
[
|
166
|
-
[
|
167
|
-
[
|
168
|
-
[
|
187
|
+
[0, 0],
|
188
|
+
[0, 5],
|
189
|
+
[5, 5],
|
190
|
+
[5, 0]
|
169
191
|
])
|
170
192
|
|
171
193
|
assert_equal('LINESTRING (0 0, 0 5, 5 5, 5 0)', write(cs.to_line_string, trim: true))
|
@@ -179,11 +201,11 @@ class CoordinateSequenceTests < Minitest::Test
|
|
179
201
|
|
180
202
|
def test_to_polygon
|
181
203
|
cs = Geos::CoordinateSequence.new([
|
182
|
-
[
|
183
|
-
[
|
184
|
-
[
|
185
|
-
[
|
186
|
-
[
|
204
|
+
[0, 0],
|
205
|
+
[0, 5],
|
206
|
+
[5, 5],
|
207
|
+
[5, 0],
|
208
|
+
[0, 0]
|
187
209
|
])
|
188
210
|
|
189
211
|
assert_equal('POLYGON ((0 0, 0 5, 5 5, 5 0, 0 0))', write(cs.to_polygon, trim: true))
|
@@ -262,7 +284,7 @@ class CoordinateSequenceTests < Minitest::Test
|
|
262
284
|
|
263
285
|
assert_kind_of(Enumerable, cs.x.each)
|
264
286
|
assert_kind_of(Enumerable, cs.x.to_enum)
|
265
|
-
assert_equal(cs.x, cs.x.each
|
287
|
+
assert_equal(cs.x, cs.x.each(&EMPTY_BLOCK))
|
266
288
|
end
|
267
289
|
|
268
290
|
def test_options_hash
|
@@ -277,13 +299,13 @@ class CoordinateSequenceTests < Minitest::Test
|
|
277
299
|
|
278
300
|
assert_kind_of(Enumerable, cs.each)
|
279
301
|
assert_kind_of(Enumerable, cs.to_enum)
|
280
|
-
assert_equal(cs, cs.each
|
302
|
+
assert_equal(cs, cs.each(&EMPTY_BLOCK))
|
281
303
|
end
|
282
304
|
|
283
305
|
def test_array_like_access
|
284
306
|
cs = Geos::CoordinateSequence.new([
|
285
|
-
[
|
286
|
-
[
|
307
|
+
[0, 1],
|
308
|
+
[2, 3]
|
287
309
|
])
|
288
310
|
|
289
311
|
assert_equal(0, cs[0][0])
|
@@ -292,7 +314,7 @@ class CoordinateSequenceTests < Minitest::Test
|
|
292
314
|
assert_equal(3, cs[1][1])
|
293
315
|
|
294
316
|
cs = Geos::CoordinateSequence.new([
|
295
|
-
[
|
317
|
+
[4, 5, 6]
|
296
318
|
])
|
297
319
|
|
298
320
|
assert_equal(4, cs[0][0])
|
@@ -302,9 +324,9 @@ class CoordinateSequenceTests < Minitest::Test
|
|
302
324
|
|
303
325
|
def test_slice
|
304
326
|
cs = Geos::CoordinateSequence.new([
|
305
|
-
[
|
306
|
-
[
|
307
|
-
[
|
327
|
+
[0, 1],
|
328
|
+
[2, 3],
|
329
|
+
[4, 5]
|
308
330
|
])
|
309
331
|
|
310
332
|
assert_equal([[0, 1], [2, 3]], cs.slice(0..1))
|
@@ -313,21 +335,21 @@ class CoordinateSequenceTests < Minitest::Test
|
|
313
335
|
end
|
314
336
|
|
315
337
|
def test_proxy_clone
|
316
|
-
cs = Geos::CoordinateSequence.new([
|
317
|
-
|
338
|
+
cs = Geos::CoordinateSequence.new([10, 20])
|
339
|
+
cs_2 = cs.clone
|
318
340
|
|
319
341
|
cs.x[0] = 100
|
320
342
|
|
321
343
|
assert_equal(100, cs.x[0])
|
322
|
-
assert_equal(10,
|
344
|
+
assert_equal(10, cs_2.x[0])
|
323
345
|
|
324
|
-
refute_equal(cs.x,
|
325
|
-
refute_equal(cs.y,
|
346
|
+
refute_equal(cs.x, cs_2.x)
|
347
|
+
refute_equal(cs.y, cs_2.y)
|
326
348
|
end
|
327
349
|
|
328
350
|
def test_has_z
|
329
|
-
assert_geom_has_z(Geos::CoordinateSequence.new([
|
330
|
-
refute_geom_has_z(Geos::CoordinateSequence.new([
|
351
|
+
assert_geom_has_z(Geos::CoordinateSequence.new([0, 1, 2]))
|
352
|
+
refute_geom_has_z(Geos::CoordinateSequence.new([0, 1]))
|
331
353
|
refute_geom_has_z(Geos::CoordinateSequence.new(1, 2))
|
332
354
|
assert_geom_has_z(Geos::CoordinateSequence.new(1, 3))
|
333
355
|
assert_geom_has_z(read('POINT (0 0 0)').coord_seq)
|
@@ -335,38 +357,38 @@ class CoordinateSequenceTests < Minitest::Test
|
|
335
357
|
end
|
336
358
|
|
337
359
|
def test_x_max
|
338
|
-
cs = Geos::CoordinateSequence.new([
|
360
|
+
cs = Geos::CoordinateSequence.new([-10, -15], [0, 5], [10, 20])
|
339
361
|
assert_equal(10, cs.x_max)
|
340
362
|
end
|
341
363
|
|
342
364
|
def test_x_min
|
343
|
-
cs = Geos::CoordinateSequence.new([
|
365
|
+
cs = Geos::CoordinateSequence.new([-10, -15], [0, 5], [10, 20])
|
344
366
|
assert_equal(-10, cs.x_min)
|
345
367
|
end
|
346
368
|
|
347
369
|
def test_y_max
|
348
|
-
cs = Geos::CoordinateSequence.new([
|
370
|
+
cs = Geos::CoordinateSequence.new([-10, -15], [0, 5], [10, 20])
|
349
371
|
assert_equal(20, cs.y_max)
|
350
372
|
end
|
351
373
|
|
352
374
|
def test_y_min
|
353
|
-
cs = Geos::CoordinateSequence.new([
|
375
|
+
cs = Geos::CoordinateSequence.new([-10, -15], [0, 5], [10, 20])
|
354
376
|
assert_equal(-15, cs.y_min)
|
355
377
|
end
|
356
378
|
|
357
379
|
def test_z_max
|
358
|
-
cs = Geos::CoordinateSequence.new([
|
359
|
-
assert(cs.z_max.nan?,
|
380
|
+
cs = Geos::CoordinateSequence.new([-10, -15], [0, 5], [10, 20])
|
381
|
+
assert(cs.z_max.nan?, ' Expected NaN')
|
360
382
|
|
361
|
-
cs = Geos::CoordinateSequence.new([
|
383
|
+
cs = Geos::CoordinateSequence.new([-10, -15, -20], [0, 5, 10], [10, 20, 30])
|
362
384
|
assert_equal(30, cs.z_max)
|
363
385
|
end
|
364
386
|
|
365
387
|
def test_z_min
|
366
|
-
cs = Geos::CoordinateSequence.new([
|
367
|
-
assert(cs.z_min.nan?,
|
388
|
+
cs = Geos::CoordinateSequence.new([-10, -15], [0, 5], [10, 20])
|
389
|
+
assert(cs.z_min.nan?, ' Expected NaN')
|
368
390
|
|
369
|
-
cs = Geos::CoordinateSequence.new([
|
391
|
+
cs = Geos::CoordinateSequence.new([-10, -15, -20], [0, 5, 10], [10, 20, 30])
|
370
392
|
assert_equal(-20, cs.z_min)
|
371
393
|
end
|
372
394
|
|
@@ -384,9 +406,9 @@ class CoordinateSequenceTests < Minitest::Test
|
|
384
406
|
]
|
385
407
|
|
386
408
|
coordinates = [
|
387
|
-
[
|
388
|
-
[
|
389
|
-
[
|
409
|
+
[-10.123456789, -15.123456789],
|
410
|
+
[0.123456789, 5.123456789],
|
411
|
+
[10.123456789, 20.123456789]
|
390
412
|
]
|
391
413
|
|
392
414
|
9.times do |i|
|
@@ -407,54 +429,54 @@ class CoordinateSequenceTests < Minitest::Test
|
|
407
429
|
|
408
430
|
def test_snap_to_grid_with_hash
|
409
431
|
cs = Geos::CoordinateSequence.new(
|
410
|
-
[
|
411
|
-
[
|
412
|
-
[
|
432
|
+
[10, 10],
|
433
|
+
[20, 20],
|
434
|
+
[30, 30]
|
413
435
|
)
|
414
|
-
cs.snap_to_grid!(:
|
436
|
+
cs.snap_to_grid!(size_x: 1, size_y: 1, offset_x: 12.5, offset_y: 12.5)
|
415
437
|
|
416
438
|
assert_equal([
|
417
|
-
[
|
418
|
-
[
|
419
|
-
[
|
439
|
+
[9.5, 9.5],
|
440
|
+
[20.5, 20.5],
|
441
|
+
[30.5, 30.5]
|
420
442
|
], cs.to_a)
|
421
443
|
end
|
422
444
|
|
423
445
|
def test_snap_to_grid_with_geometry_origin
|
424
446
|
cs = Geos::CoordinateSequence.new(
|
425
|
-
[
|
426
|
-
[
|
427
|
-
[
|
447
|
+
[10, 10],
|
448
|
+
[20, 20],
|
449
|
+
[30, 30]
|
428
450
|
)
|
429
|
-
cs.snap_to_grid!(:
|
451
|
+
cs.snap_to_grid!(size: 1, offset: read('LINESTRING (0 0, 25 25)'))
|
430
452
|
|
431
453
|
assert_equal([
|
432
|
-
[
|
433
|
-
[
|
434
|
-
[
|
454
|
+
[9.5, 9.5],
|
455
|
+
[20.5, 20.5],
|
456
|
+
[30.5, 30.5]
|
435
457
|
], cs.to_a)
|
436
458
|
end
|
437
459
|
|
438
460
|
def test_snap_to_grid_with_z
|
439
461
|
cs = Geos::CoordinateSequence.new(
|
440
|
-
[
|
441
|
-
[
|
442
|
-
[
|
462
|
+
[10, 10, 10],
|
463
|
+
[20, 20, 20],
|
464
|
+
[30, 30, 30]
|
443
465
|
)
|
444
466
|
cs.snap_to_grid!(
|
445
|
-
:
|
446
|
-
:
|
447
|
-
:
|
467
|
+
size_x: 1,
|
468
|
+
size_y: 1,
|
469
|
+
size_z: 1,
|
448
470
|
|
449
|
-
:
|
450
|
-
:
|
451
|
-
:
|
471
|
+
offset_x: 12.5,
|
472
|
+
offset_y: 12.5,
|
473
|
+
offset_z: 12.5
|
452
474
|
)
|
453
475
|
|
454
476
|
assert_equal([
|
455
|
-
[
|
456
|
-
[
|
457
|
-
[
|
477
|
+
[9.5, 9.5, 9.5],
|
478
|
+
[20.5, 20.5, 20.5],
|
479
|
+
[30.5, 30.5, 30.5]
|
458
480
|
], cs.to_a)
|
459
481
|
end
|
460
482
|
|
@@ -486,99 +508,99 @@ class CoordinateSequenceTests < Minitest::Test
|
|
486
508
|
assert_equal(expected, cs.to_a)
|
487
509
|
|
488
510
|
cs = Geos::CoordinateSequence.new(coords)
|
489
|
-
|
511
|
+
cs_2 = cs.snap_to_grid
|
490
512
|
|
491
513
|
assert_equal(coords, cs.to_a)
|
492
|
-
assert_equal(expected,
|
514
|
+
assert_equal(expected, cs_2.to_a)
|
493
515
|
end
|
494
516
|
|
495
517
|
undef :affine_tester
|
496
|
-
def affine_tester(method, expected, coords, *args)
|
518
|
+
def affine_tester(method, expected, coords, *args, **options)
|
497
519
|
cs = Geos::CoordinateSequence.new(coords)
|
498
|
-
cs.
|
520
|
+
cs.__safe_send__("#{method}!", *args, **options)
|
499
521
|
|
500
522
|
expected.length.times do |i|
|
501
523
|
assert_in_delta(expected[i], cs.get_ordinate(0, i), TOLERANCE)
|
502
524
|
end
|
503
525
|
|
504
526
|
cs = Geos::CoordinateSequence.new(coords)
|
505
|
-
|
527
|
+
cs_2 = cs.__safe_send__(method, *args, **options)
|
506
528
|
|
507
529
|
expected.length.times do |i|
|
508
530
|
assert_in_delta(coords[i], cs.get_ordinate(0, i), TOLERANCE)
|
509
|
-
assert_in_delta(expected[i],
|
531
|
+
assert_in_delta(expected[i], cs_2.get_ordinate(0, i), TOLERANCE)
|
510
532
|
end
|
511
533
|
end
|
512
534
|
|
513
535
|
def test_rotate
|
514
|
-
affine_tester(:rotate, [
|
515
|
-
affine_tester(:rotate, [
|
516
|
-
affine_tester(:rotate, [
|
517
|
-
affine_tester(:rotate, [
|
536
|
+
affine_tester(:rotate, [29.0, 11.0], [1, 1], Math::PI / 2, [10.0, 20.0])
|
537
|
+
affine_tester(:rotate, [-2.0, 0.0], [1, 1], -Math::PI / 2, [-1.0, 2.0])
|
538
|
+
affine_tester(:rotate, [19.0, 1.0], [1, 1], Math::PI / 2, read('POINT(10 10)'))
|
539
|
+
affine_tester(:rotate, [-0.5, 0.5], [1, 1], Math::PI / 2, read('LINESTRING(0 0, 1 0)'))
|
518
540
|
end
|
519
541
|
|
520
542
|
def test_rotate_x
|
521
|
-
affine_tester(:rotate_x, [
|
522
|
-
affine_tester(:rotate_x, [
|
523
|
-
affine_tester(:rotate_x, [
|
524
|
-
affine_tester(:rotate_x, [
|
543
|
+
affine_tester(:rotate_x, [1, -1, -1], [1, 1, 1], Math::PI)
|
544
|
+
affine_tester(:rotate_x, [1, -1, 1], [1, 1, 1], Math::PI / 2)
|
545
|
+
affine_tester(:rotate_x, [1, 1, -1], [1, 1, 1], Math::PI + (Math::PI / 2))
|
546
|
+
affine_tester(:rotate_x, [1, 1, 1], [1, 1, 1], Math::PI * 2)
|
525
547
|
end
|
526
548
|
|
527
549
|
def test_rotate_y
|
528
|
-
affine_tester(:rotate_y, [
|
529
|
-
affine_tester(:rotate_y, [
|
530
|
-
affine_tester(:rotate_y, [
|
531
|
-
affine_tester(:rotate_y, [
|
550
|
+
affine_tester(:rotate_y, [-1, 1, -1], [1, 1, 1], Math::PI)
|
551
|
+
affine_tester(:rotate_y, [1, 1, -1], [1, 1, 1], Math::PI / 2)
|
552
|
+
affine_tester(:rotate_y, [-1, 1, 1], [1, 1, 1], Math::PI + (Math::PI / 2))
|
553
|
+
affine_tester(:rotate_y, [1, 1, 1], [1, 1, 1], Math::PI * 2)
|
532
554
|
end
|
533
555
|
|
534
556
|
def test_rotate_z
|
535
|
-
affine_tester(:rotate_z, [
|
536
|
-
affine_tester(:rotate_z, [
|
537
|
-
affine_tester(:rotate_z, [
|
538
|
-
affine_tester(:rotate_z, [
|
557
|
+
affine_tester(:rotate_z, [-1, -1], [1, 1], Math::PI)
|
558
|
+
affine_tester(:rotate_z, [-1, 1], [1, 1], Math::PI / 2)
|
559
|
+
affine_tester(:rotate_z, [1, -1], [1, 1], Math::PI + (Math::PI / 2))
|
560
|
+
affine_tester(:rotate_z, [1, 1], [1, 1], Math::PI * 2)
|
539
561
|
end
|
540
562
|
|
541
563
|
def test_scale
|
542
|
-
affine_tester(:scale, [
|
543
|
-
affine_tester(:scale, [
|
544
|
-
affine_tester(:scale, [
|
564
|
+
affine_tester(:scale, [5, 5], [1, 1], 5, 5)
|
565
|
+
affine_tester(:scale, [3, 2], [1, 1], 3, 2)
|
566
|
+
affine_tester(:scale, [40, 40, 40], [10, 20, -5], 4, 2, -8)
|
545
567
|
end
|
546
568
|
|
547
569
|
def test_scale_hash
|
548
|
-
affine_tester(:scale, [
|
549
|
-
affine_tester(:scale, [
|
550
|
-
affine_tester(:scale, [
|
570
|
+
affine_tester(:scale, [5, 5], [1, 1], x: 5, y: 5)
|
571
|
+
affine_tester(:scale, [3, 2], [1, 1], x: 3, y: 2)
|
572
|
+
affine_tester(:scale, [40, 40, 40], [10, 20, -5], x: 4, y: 2, z: -8)
|
551
573
|
end
|
552
574
|
|
553
575
|
def test_trans_scale
|
554
|
-
affine_tester(:trans_scale, [
|
555
|
-
affine_tester(:trans_scale, [
|
556
|
-
affine_tester(:trans_scale, [
|
557
|
-
affine_tester(:trans_scale, [
|
558
|
-
affine_tester(:trans_scale, [
|
559
|
-
affine_tester(:trans_scale, [
|
560
|
-
affine_tester(:trans_scale, [
|
561
|
-
affine_tester(:trans_scale, [
|
562
|
-
affine_tester(:trans_scale, [
|
563
|
-
affine_tester(:trans_scale, [
|
564
|
-
affine_tester(:trans_scale, [
|
565
|
-
affine_tester(:trans_scale, [
|
566
|
-
affine_tester(:trans_scale, [
|
576
|
+
affine_tester(:trans_scale, [2, 2], [1, 1], 1, 1, 1, 1)
|
577
|
+
affine_tester(:trans_scale, [3, 3], [2, 2], 1, 1, 1, 1)
|
578
|
+
affine_tester(:trans_scale, [0, 0], [1, 1], -1, -1, -1, -1)
|
579
|
+
affine_tester(:trans_scale, [1, 2], [1, 1], 0, 1, 1, 1)
|
580
|
+
affine_tester(:trans_scale, [2, 1], [1, 1], 1, 0, 1, 1)
|
581
|
+
affine_tester(:trans_scale, [0, 2], [1, 1], 1, 1, 0, 1)
|
582
|
+
affine_tester(:trans_scale, [2, 0], [1, 1], 1, 1, 1, 0)
|
583
|
+
affine_tester(:trans_scale, [3, 2], [1, 1], 2, 1, 1, 1)
|
584
|
+
affine_tester(:trans_scale, [2, 3], [1, 1], 1, 2, 1, 1)
|
585
|
+
affine_tester(:trans_scale, [4, 2], [1, 1], 1, 1, 2, 1)
|
586
|
+
affine_tester(:trans_scale, [2, 4], [1, 1], 1, 1, 1, 2)
|
587
|
+
affine_tester(:trans_scale, [15, 28], [1, 1], 2, 3, 5, 7)
|
588
|
+
affine_tester(:trans_scale, [15, 28, 1], [1, 1, 1], 2, 3, 5, 7)
|
567
589
|
end
|
568
590
|
|
569
591
|
def test_trans_scale_hash
|
570
|
-
affine_tester(:trans_scale, [
|
571
|
-
affine_tester(:trans_scale, [
|
572
|
-
affine_tester(:trans_scale, [
|
592
|
+
affine_tester(:trans_scale, [2, 2], [1, 1], delta_x: 1, delta_y: 1, x_factor: 1, y_factor: 1)
|
593
|
+
affine_tester(:trans_scale, [15, 28, 1], [1, 1, 1], delta_x: 2, delta_y: 3, x_factor: 5, y_factor: 7)
|
594
|
+
affine_tester(:trans_scale, [3, 1, 1], [1, 1, 1], delta_x: 2, z_factor: 2)
|
573
595
|
end
|
574
596
|
|
575
597
|
def test_translate
|
576
|
-
affine_tester(:translate, [
|
577
|
-
affine_tester(:translate, [
|
598
|
+
affine_tester(:translate, [5, 12], [0, 0], 5, 12)
|
599
|
+
affine_tester(:translate, [-3, -7, 3], [0, 0, 0], -3, -7, 3)
|
578
600
|
end
|
579
601
|
|
580
602
|
def test_translate_hash
|
581
|
-
affine_tester(:translate, [
|
582
|
-
affine_tester(:translate, [
|
603
|
+
affine_tester(:translate, [5, 12], [0, 0], x: 5, y: 12)
|
604
|
+
affine_tester(:translate, [-3, -7, 3], [0, 0, 0], x: -3, y: -7, z: 3)
|
583
605
|
end
|
584
606
|
end
|