ffi-geos 2.4.0 → 2.5.0
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.
- checksums.yaml +4 -4
 - data/.github/workflows/main.yml +2 -2
 - data/.rbenv-vars +1 -0
 - data/.rubocop.yml +538 -92
 - data/.rubocop_todo.yml +28 -18
 - data/ffi-geos.gemspec +2 -2
 - data/lib/ffi-geos/coordinate_sequence.rb +2 -1
 - data/lib/ffi-geos/geometry.rb +95 -1
 - data/lib/ffi-geos/point.rb +9 -0
 - data/lib/ffi-geos/version.rb +1 -1
 - data/lib/ffi-geos.rb +78 -3
 - data/test/coordinate_sequence_tests.rb +22 -4
 - data/test/geojson_reader_tests.rb +6 -2
 - data/test/geometry/area_tests.rb +18 -0
 - data/test/geometry/boundary_tests.rb +36 -0
 - data/test/geometry/buffer_tests.rb +116 -0
 - data/test/geometry/build_area_tests.rb +20 -0
 - data/test/geometry/centroid_tests.rb +37 -0
 - data/test/geometry/clip_by_rect_tests.rb +56 -0
 - data/test/geometry/clone_tests.rb +29 -0
 - data/test/geometry/concave_hull_of_polygons_tests.rb +28 -0
 - data/test/geometry/concave_hull_tests.rb +38 -0
 - data/test/geometry/convex_hull_tests.rb +26 -0
 - data/test/geometry/coord_seq_tests.rb +27 -0
 - data/test/geometry/delaunay_triangulation_tests.rb +82 -0
 - data/test/geometry/densify_tests.rb +95 -0
 - data/test/geometry/difference_tests.rb +108 -0
 - data/test/geometry/dimensions_tests.rb +46 -0
 - data/test/geometry/distance_tests.rb +29 -0
 - data/test/geometry/dump_points_tests.rb +60 -0
 - data/test/geometry/dup_tests.rb +29 -0
 - data/test/geometry/empty_tests.rb +23 -0
 - data/test/geometry/envelope_tests.rb +26 -0
 - data/test/geometry/equal_identical_tests.rb +78 -0
 - data/test/geometry/equal_tests.rb +62 -0
 - data/test/geometry/exterior_ring_tests.rb +27 -0
 - data/test/geometry/extract_unique_points_tests.rb +41 -0
 - data/test/geometry/frecet_distance_tests.rb +24 -0
 - data/test/geometry/get_geometry_n_tests.rb +21 -0
 - data/test/geometry/hausdorff_distance_tests.rb +46 -0
 - data/test/geometry/hilbert_code_tests.rb +45 -0
 - data/test/geometry/interior_ring_n_tests.rb +64 -0
 - data/test/geometry/interior_rings_tests.rb +36 -0
 - data/test/geometry/interpolate_tests.rb +49 -0
 - data/test/geometry/intersection_tests.rb +49 -0
 - data/test/geometry/largest_empty_circle_tests.rb +26 -0
 - data/test/geometry/length_tests.rb +18 -0
 - data/test/geometry/line_merge_directed_tests.rb +28 -0
 - data/test/geometry/line_merge_tests.rb +25 -0
 - data/test/geometry/line_string_enumerator_tests.rb +20 -0
 - data/test/geometry/line_substring_tests.rb +76 -0
 - data/test/geometry/make_valid_tests.rb +27 -0
 - data/test/geometry/maximum_inscribed_circle_tests.rb +21 -0
 - data/test/geometry/minimum_bounding_circle_tests.rb +23 -0
 - data/test/geometry/minimum_clearance_tests.rb +58 -0
 - data/test/geometry/minimum_rotated_rectangle_tests.rb +28 -0
 - data/test/geometry/minimum_width_tests.rb +26 -0
 - data/test/geometry/misc_tests.rb +24 -0
 - data/test/geometry/nearest_points_tests.rb +46 -0
 - data/test/geometry/node_tests.rb +22 -0
 - data/test/geometry/normalize_tests.rb +34 -0
 - data/test/geometry/num_coordinates_tests.rb +39 -0
 - data/test/geometry/num_goemetries_tests.rb +35 -0
 - data/test/geometry/num_interior_rings_tests.rb +28 -0
 - data/test/geometry/orient_polygons_tests.rb +101 -0
 - data/test/geometry/point_on_surface_tests.rb +37 -0
 - data/test/geometry/polygon_hull_simplify_tests.rb +55 -0
 - data/test/geometry/polygonize_tests.rb +173 -0
 - data/test/geometry/precision_tests.rb +42 -0
 - data/test/geometry/project_tests.rb +56 -0
 - data/test/geometry/relate_tests.rb +73 -0
 - data/test/geometry/relationships_tests.rb +138 -0
 - data/test/geometry/reverse_tests.rb +44 -0
 - data/test/geometry/ring_tests.rb +18 -0
 - data/test/geometry/shared_path_tests.rb +31 -0
 - data/test/geometry/simple_tests.rb +18 -0
 - data/test/geometry/simplify_tests.rb +21 -0
 - data/test/geometry/snap_tests.rb +20 -0
 - data/test/geometry/srid_copy_policy_tests.rb +94 -0
 - data/test/geometry/start_and_end_point_tests.rb +24 -0
 - data/test/geometry/sym_difference_tests.rb +114 -0
 - data/test/geometry/topology_preserve_simplify_tests.rb +21 -0
 - data/test/geometry/union_tests.rb +216 -0
 - data/test/geometry/valid_tests.rb +56 -0
 - data/test/geometry/voronoi_diagram_tests.rb +62 -0
 - data/test/geometry_collection_tests.rb +14 -2
 - data/test/interrupt_tests.rb +1 -1
 - data/test/line_string_tests.rb +24 -3
 - data/test/misc_tests.rb +1 -1
 - data/test/point/has_m_tests.rb +43 -0
 - data/test/point/x_y_z_m_tests.rb +51 -0
 - data/test/point_tests.rb +25 -3
 - data/test/polygon_tests.rb +14 -1
 - data/test/prepared_geometry_tests.rb +6 -5
 - data/test/strtree_tests.rb +11 -18
 - data/test/test_helper.rb +2 -0
 - data/test/tools_tests.rb +7 -0
 - data/test/utils_tests.rb +14 -3
 - data/test/wkb_reader_tests.rb +1 -0
 - data/test/wkb_writer_tests.rb +26 -5
 - data/test/wkt_reader_tests.rb +2 -0
 - data/test/wkt_writer_tests.rb +20 -2
 - metadata +154 -7
 - data/test/geometry_tests.rb +0 -2114
 
| 
         @@ -0,0 +1,138 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class GeometryRelationshipsTests < Minitest::Test
         
     | 
| 
      
 6 
     | 
    
         
            +
              include TestHelper
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 9 
     | 
    
         
            +
                super
         
     | 
| 
      
 10 
     | 
    
         
            +
                writer.trim = true
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def test_relationships
         
     | 
| 
      
 14 
     | 
    
         
            +
                tester = lambda { |geom_a, geom_b, tests|
         
     | 
| 
      
 15 
     | 
    
         
            +
                  tests.each do |test|
         
     | 
| 
      
 16 
     | 
    
         
            +
                    expected, method, args = test
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                    next unless ENV['FORCE_TESTS'] || geom_a.respond_to?(method)
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                    value = geom_a.send(method, *([geom_b] + Array(args)))
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                    assert_equal(expected, value)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                }
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                tester[read('POINT(0 0)'), read('POINT(0 0)'), [
         
     | 
| 
      
 27 
     | 
    
         
            +
                  [false, :disjoint?],
         
     | 
| 
      
 28 
     | 
    
         
            +
                  [false, :touches?],
         
     | 
| 
      
 29 
     | 
    
         
            +
                  [true, :intersects?],
         
     | 
| 
      
 30 
     | 
    
         
            +
                  [false, :crosses?],
         
     | 
| 
      
 31 
     | 
    
         
            +
                  [true, :within?],
         
     | 
| 
      
 32 
     | 
    
         
            +
                  [true, :contains?],
         
     | 
| 
      
 33 
     | 
    
         
            +
                  [false, :overlaps?],
         
     | 
| 
      
 34 
     | 
    
         
            +
                  [true, :eql?],
         
     | 
| 
      
 35 
     | 
    
         
            +
                  [true, :eql_exact?, TOLERANCE],
         
     | 
| 
      
 36 
     | 
    
         
            +
                  [true, :covers?],
         
     | 
| 
      
 37 
     | 
    
         
            +
                  [true, :covered_by?]
         
     | 
| 
      
 38 
     | 
    
         
            +
                ]]
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                tester[read('POINT(0 0)'), read('LINESTRING(0 0, 10 0)'), [
         
     | 
| 
      
 41 
     | 
    
         
            +
                  [false, :disjoint?],
         
     | 
| 
      
 42 
     | 
    
         
            +
                  [true, :touches?],
         
     | 
| 
      
 43 
     | 
    
         
            +
                  [true, :intersects?],
         
     | 
| 
      
 44 
     | 
    
         
            +
                  [false, :crosses?],
         
     | 
| 
      
 45 
     | 
    
         
            +
                  [false, :within?],
         
     | 
| 
      
 46 
     | 
    
         
            +
                  [false, :contains?],
         
     | 
| 
      
 47 
     | 
    
         
            +
                  [false, :overlaps?],
         
     | 
| 
      
 48 
     | 
    
         
            +
                  [false, :eql?],
         
     | 
| 
      
 49 
     | 
    
         
            +
                  [false, :eql_exact?, TOLERANCE],
         
     | 
| 
      
 50 
     | 
    
         
            +
                  [false, :covers?],
         
     | 
| 
      
 51 
     | 
    
         
            +
                  [true, :covered_by?]
         
     | 
| 
      
 52 
     | 
    
         
            +
                ]]
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                tester[read('POINT(5 0)'), read('LINESTRING(0 0, 10 0)'), [
         
     | 
| 
      
 55 
     | 
    
         
            +
                  [false, :disjoint?],
         
     | 
| 
      
 56 
     | 
    
         
            +
                  [false, :touches?],
         
     | 
| 
      
 57 
     | 
    
         
            +
                  [true, :intersects?],
         
     | 
| 
      
 58 
     | 
    
         
            +
                  [false, :crosses?],
         
     | 
| 
      
 59 
     | 
    
         
            +
                  [true, :within?],
         
     | 
| 
      
 60 
     | 
    
         
            +
                  [false, :contains?],
         
     | 
| 
      
 61 
     | 
    
         
            +
                  [false, :overlaps?],
         
     | 
| 
      
 62 
     | 
    
         
            +
                  [false, :eql?],
         
     | 
| 
      
 63 
     | 
    
         
            +
                  [false, :eql_exact?, TOLERANCE],
         
     | 
| 
      
 64 
     | 
    
         
            +
                  [false, :covers?],
         
     | 
| 
      
 65 
     | 
    
         
            +
                  [true, :covered_by?]
         
     | 
| 
      
 66 
     | 
    
         
            +
                ]]
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                tester[read('LINESTRING(5 -5, 5 5)'), read('LINESTRING(0 0, 10 0)'), [
         
     | 
| 
      
 69 
     | 
    
         
            +
                  [false, :disjoint?],
         
     | 
| 
      
 70 
     | 
    
         
            +
                  [false, :touches?],
         
     | 
| 
      
 71 
     | 
    
         
            +
                  [true, :intersects?],
         
     | 
| 
      
 72 
     | 
    
         
            +
                  [true, :crosses?],
         
     | 
| 
      
 73 
     | 
    
         
            +
                  [false, :within?],
         
     | 
| 
      
 74 
     | 
    
         
            +
                  [false, :contains?],
         
     | 
| 
      
 75 
     | 
    
         
            +
                  [false, :overlaps?],
         
     | 
| 
      
 76 
     | 
    
         
            +
                  [false, :eql?],
         
     | 
| 
      
 77 
     | 
    
         
            +
                  [false, :eql_exact?, TOLERANCE],
         
     | 
| 
      
 78 
     | 
    
         
            +
                  [false, :covers?],
         
     | 
| 
      
 79 
     | 
    
         
            +
                  [false, :covered_by?]
         
     | 
| 
      
 80 
     | 
    
         
            +
                ]]
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                tester[read('LINESTRING(5 0, 15 0)'), read('LINESTRING(0 0, 10 0)'), [
         
     | 
| 
      
 83 
     | 
    
         
            +
                  [false, :disjoint?],
         
     | 
| 
      
 84 
     | 
    
         
            +
                  [false, :touches?],
         
     | 
| 
      
 85 
     | 
    
         
            +
                  [true, :intersects?],
         
     | 
| 
      
 86 
     | 
    
         
            +
                  [false, :crosses?],
         
     | 
| 
      
 87 
     | 
    
         
            +
                  [false, :within?],
         
     | 
| 
      
 88 
     | 
    
         
            +
                  [false, :contains?],
         
     | 
| 
      
 89 
     | 
    
         
            +
                  [true, :overlaps?],
         
     | 
| 
      
 90 
     | 
    
         
            +
                  [false, :eql?],
         
     | 
| 
      
 91 
     | 
    
         
            +
                  [false, :eql_exact?, TOLERANCE],
         
     | 
| 
      
 92 
     | 
    
         
            +
                  [false, :covers?],
         
     | 
| 
      
 93 
     | 
    
         
            +
                  [false, :covered_by?]
         
     | 
| 
      
 94 
     | 
    
         
            +
                ]]
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                tester[read('LINESTRING(0 0, 5 0, 10 0)'), read('LINESTRING(0 0, 10 0)'), [
         
     | 
| 
      
 97 
     | 
    
         
            +
                  [false, :disjoint?],
         
     | 
| 
      
 98 
     | 
    
         
            +
                  [false, :touches?],
         
     | 
| 
      
 99 
     | 
    
         
            +
                  [true, :intersects?],
         
     | 
| 
      
 100 
     | 
    
         
            +
                  [false, :crosses?],
         
     | 
| 
      
 101 
     | 
    
         
            +
                  [true, :within?],
         
     | 
| 
      
 102 
     | 
    
         
            +
                  [true, :contains?],
         
     | 
| 
      
 103 
     | 
    
         
            +
                  [false, :overlaps?],
         
     | 
| 
      
 104 
     | 
    
         
            +
                  [true, :eql?],
         
     | 
| 
      
 105 
     | 
    
         
            +
                  [false, :eql_exact?, TOLERANCE],
         
     | 
| 
      
 106 
     | 
    
         
            +
                  [true, :covers?],
         
     | 
| 
      
 107 
     | 
    
         
            +
                  [true, :covered_by?]
         
     | 
| 
      
 108 
     | 
    
         
            +
                ]]
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                tester[read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'), read('POLYGON((5 -5, 5 5, 15 5, 15 -5, 5 -5))'), [
         
     | 
| 
      
 111 
     | 
    
         
            +
                  [false, :disjoint?],
         
     | 
| 
      
 112 
     | 
    
         
            +
                  [false, :touches?],
         
     | 
| 
      
 113 
     | 
    
         
            +
                  [true, :intersects?],
         
     | 
| 
      
 114 
     | 
    
         
            +
                  [false, :crosses?],
         
     | 
| 
      
 115 
     | 
    
         
            +
                  [false, :within?],
         
     | 
| 
      
 116 
     | 
    
         
            +
                  [false, :contains?],
         
     | 
| 
      
 117 
     | 
    
         
            +
                  [true, :overlaps?],
         
     | 
| 
      
 118 
     | 
    
         
            +
                  [false, :eql?],
         
     | 
| 
      
 119 
     | 
    
         
            +
                  [false, :eql_exact?, TOLERANCE],
         
     | 
| 
      
 120 
     | 
    
         
            +
                  [false, :covers?],
         
     | 
| 
      
 121 
     | 
    
         
            +
                  [false, :covered_by?]
         
     | 
| 
      
 122 
     | 
    
         
            +
                ]]
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
      
 124 
     | 
    
         
            +
                tester[read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'), read('POINT(15 15)'), [
         
     | 
| 
      
 125 
     | 
    
         
            +
                  [true, :disjoint?],
         
     | 
| 
      
 126 
     | 
    
         
            +
                  [false, :touches?],
         
     | 
| 
      
 127 
     | 
    
         
            +
                  [false, :intersects?],
         
     | 
| 
      
 128 
     | 
    
         
            +
                  [false, :crosses?],
         
     | 
| 
      
 129 
     | 
    
         
            +
                  [false, :within?],
         
     | 
| 
      
 130 
     | 
    
         
            +
                  [false, :contains?],
         
     | 
| 
      
 131 
     | 
    
         
            +
                  [false, :overlaps?],
         
     | 
| 
      
 132 
     | 
    
         
            +
                  [false, :eql?],
         
     | 
| 
      
 133 
     | 
    
         
            +
                  [false, :eql_exact?, TOLERANCE],
         
     | 
| 
      
 134 
     | 
    
         
            +
                  [false, :covers?],
         
     | 
| 
      
 135 
     | 
    
         
            +
                  [false, :covered_by?]
         
     | 
| 
      
 136 
     | 
    
         
            +
                ]]
         
     | 
| 
      
 137 
     | 
    
         
            +
              end
         
     | 
| 
      
 138 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,44 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class GeometryReverseTests < Minitest::Test
         
     | 
| 
      
 6 
     | 
    
         
            +
              include TestHelper
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 9 
     | 
    
         
            +
                super
         
     | 
| 
      
 10 
     | 
    
         
            +
                writer.trim = true
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def test_reverse
         
     | 
| 
      
 14 
     | 
    
         
            +
                skip unless ENV['FORCE_TESTS'] || Geos::Geometry.method_defined?(:reverse)
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                simple_tester(:reverse, 'POINT (3 5)', 'POINT (3 5)')
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                if Geos::GEOS_NICE_VERSION >= '031200'
         
     | 
| 
      
 19 
     | 
    
         
            +
                  simple_tester(:reverse, 'MULTIPOINT ((100 100), (10 100), (30 100))', 'MULTIPOINT (100 100, 10 100, 30 100)')
         
     | 
| 
      
 20 
     | 
    
         
            +
                else
         
     | 
| 
      
 21 
     | 
    
         
            +
                  simple_tester(:reverse, 'MULTIPOINT (100 100, 10 100, 30 100)', 'MULTIPOINT (100 100, 10 100, 30 100)')
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                simple_tester(:reverse, 'LINESTRING (200 200, 200 100)', 'LINESTRING (200 100, 200 200)')
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                if Geos::GEOS_NICE_VERSION >= '030801'
         
     | 
| 
      
 27 
     | 
    
         
            +
                  simple_tester(:reverse, 'MULTILINESTRING ((3 3, 4 4), (1 1, 2 2))', 'MULTILINESTRING ((4 4, 3 3), (2 2, 1 1))')
         
     | 
| 
      
 28 
     | 
    
         
            +
                else
         
     | 
| 
      
 29 
     | 
    
         
            +
                  simple_tester(:reverse, 'MULTILINESTRING ((1 1, 2 2), (3 3, 4 4))', 'MULTILINESTRING ((4 4, 3 3), (2 2, 1 1))')
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                simple_tester(:reverse, 'POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0), (1 1, 2 1, 2 2, 1 2, 1 1))', 'POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1))')
         
     | 
| 
      
 33 
     | 
    
         
            +
                simple_tester(:reverse, 'MULTIPOLYGON (((0 0, 10 0, 10 10, 0 10, 0 0), (1 1, 2 1, 2 2, 1 2, 1 1)), ((100 100, 100 200, 200 200, 100 100)))', 'MULTIPOLYGON (((0 0, 0 10, 10 10, 10 0, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1)), ((100 100, 200 200, 100 200, 100 100)))')
         
     | 
| 
      
 34 
     | 
    
         
            +
                simple_tester(:reverse, 'GEOMETRYCOLLECTION (LINESTRING (1 1, 2 2), GEOMETRYCOLLECTION (LINESTRING (3 5, 2 9)))', 'GEOMETRYCOLLECTION (LINESTRING (2 2, 1 1), GEOMETRYCOLLECTION(LINESTRING (2 9, 3 5)))')
         
     | 
| 
      
 35 
     | 
    
         
            +
                simple_tester(:reverse, 'POINT EMPTY', 'POINT EMPTY')
         
     | 
| 
      
 36 
     | 
    
         
            +
                simple_tester(:reverse, 'LINESTRING EMPTY', 'LINESTRING EMPTY')
         
     | 
| 
      
 37 
     | 
    
         
            +
                simple_tester(:reverse, 'LINEARRING EMPTY', 'LINEARRING EMPTY')
         
     | 
| 
      
 38 
     | 
    
         
            +
                simple_tester(:reverse, 'POLYGON EMPTY', 'POLYGON EMPTY')
         
     | 
| 
      
 39 
     | 
    
         
            +
                simple_tester(:reverse, 'MULTIPOINT EMPTY', 'MULTIPOINT EMPTY')
         
     | 
| 
      
 40 
     | 
    
         
            +
                simple_tester(:reverse, 'MULTILINESTRING EMPTY', 'MULTILINESTRING EMPTY')
         
     | 
| 
      
 41 
     | 
    
         
            +
                simple_tester(:reverse, 'MULTIPOLYGON EMPTY', 'MULTIPOLYGON EMPTY')
         
     | 
| 
      
 42 
     | 
    
         
            +
                simple_tester(:reverse, 'GEOMETRYCOLLECTION EMPTY', 'GEOMETRYCOLLECTION EMPTY')
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class GeometryRingTests < Minitest::Test
         
     | 
| 
      
 6 
     | 
    
         
            +
              include TestHelper
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 9 
     | 
    
         
            +
                super
         
     | 
| 
      
 10 
     | 
    
         
            +
                writer.trim = true
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def test_ring
         
     | 
| 
      
 14 
     | 
    
         
            +
                refute_geom_ring(read('POINT(0 0)'))
         
     | 
| 
      
 15 
     | 
    
         
            +
                refute_geom_ring(read('LINESTRING(0 0, 10 0, 5 5, 5 -5)'))
         
     | 
| 
      
 16 
     | 
    
         
            +
                assert_geom_ring(read('LINESTRING(0 0, 10 0, 5 5, 0 0)'))
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class GeometrySharedPathTests < Minitest::Test
         
     | 
| 
      
 6 
     | 
    
         
            +
              include TestHelper
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 9 
     | 
    
         
            +
                super
         
     | 
| 
      
 10 
     | 
    
         
            +
                writer.trim = true
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def test_shared_paths
         
     | 
| 
      
 14 
     | 
    
         
            +
                skip unless ENV['FORCE_TESTS'] || Geos::Geometry.method_defined?(:shared_paths)
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                geom_a = read('LINESTRING(0 0, 50 0)')
         
     | 
| 
      
 17 
     | 
    
         
            +
                geom_b = read('MULTILINESTRING((5 0, 15 0),(40 0, 30 0))')
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                paths = geom_a.shared_paths(geom_b)
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                assert_equal(2, paths.length)
         
     | 
| 
      
 22 
     | 
    
         
            +
                assert_equal(
         
     | 
| 
      
 23 
     | 
    
         
            +
                  'MULTILINESTRING ((5 0, 15 0))',
         
     | 
| 
      
 24 
     | 
    
         
            +
                  write(paths[0])
         
     | 
| 
      
 25 
     | 
    
         
            +
                )
         
     | 
| 
      
 26 
     | 
    
         
            +
                assert_equal(
         
     | 
| 
      
 27 
     | 
    
         
            +
                  'MULTILINESTRING ((30 0, 40 0))',
         
     | 
| 
      
 28 
     | 
    
         
            +
                  write(paths[1])
         
     | 
| 
      
 29 
     | 
    
         
            +
                )
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class GeometrySimpleTests < Minitest::Test
         
     | 
| 
      
 6 
     | 
    
         
            +
              include TestHelper
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 9 
     | 
    
         
            +
                super
         
     | 
| 
      
 10 
     | 
    
         
            +
                writer.trim = true
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def test_simple
         
     | 
| 
      
 14 
     | 
    
         
            +
                assert_geom_simple(read('POINT(0 0)'))
         
     | 
| 
      
 15 
     | 
    
         
            +
                assert_geom_simple(read('LINESTRING(0 0, 10 0)'))
         
     | 
| 
      
 16 
     | 
    
         
            +
                refute_geom_simple(read('LINESTRING(0 0, 10 0, 5 5, 5 -5)'))
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,21 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class GeometrySimplifyTests < Minitest::Test
         
     | 
| 
      
 6 
     | 
    
         
            +
              include TestHelper
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 9 
     | 
    
         
            +
                super
         
     | 
| 
      
 10 
     | 
    
         
            +
                writer.trim = true
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def test_simplify
         
     | 
| 
      
 14 
     | 
    
         
            +
                simple_tester(
         
     | 
| 
      
 15 
     | 
    
         
            +
                  :simplify,
         
     | 
| 
      
 16 
     | 
    
         
            +
                  'LINESTRING (0 0, 5 10, 10 0, 10 9, 0 9)',
         
     | 
| 
      
 17 
     | 
    
         
            +
                  'LINESTRING(0 0, 3 4, 5 10, 10 0, 10 9, 5 11, 0 9)',
         
     | 
| 
      
 18 
     | 
    
         
            +
                  2
         
     | 
| 
      
 19 
     | 
    
         
            +
                )
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class GeometrySnapTests < Minitest::Test
         
     | 
| 
      
 6 
     | 
    
         
            +
              include TestHelper
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 9 
     | 
    
         
            +
                super
         
     | 
| 
      
 10 
     | 
    
         
            +
                writer.trim = true
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def test_snap
         
     | 
| 
      
 14 
     | 
    
         
            +
                skip unless ENV['FORCE_TESTS'] || Geos::Geometry.method_defined?(:snap)
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                geom = read('POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))')
         
     | 
| 
      
 17 
     | 
    
         
            +
                simple_tester(:snap, 'POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))', geom, read('POINT(0.1 0)'), 0)
         
     | 
| 
      
 18 
     | 
    
         
            +
                simple_tester(:snap, 'POLYGON ((0.1 0, 1 0, 1 1, 0 1, 0.1 0))', geom, read('POINT(0.1 0)'), 0.5)
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,94 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class GeometrySridCopyPolicyTests < Minitest::Test
         
     | 
| 
      
 6 
     | 
    
         
            +
              include TestHelper
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 9 
     | 
    
         
            +
                super
         
     | 
| 
      
 10 
     | 
    
         
            +
                writer.trim = true
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def test_srid_copy_policy
         
     | 
| 
      
 14 
     | 
    
         
            +
                geom = read('POLYGON ((0 0, 0 5, 5 5, 5 0, 0 0))')
         
     | 
| 
      
 15 
     | 
    
         
            +
                geom.srid = 4326
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                Geos.srid_copy_policy = :zero
         
     | 
| 
      
 18 
     | 
    
         
            +
                cloned = geom.clone
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                assert_equal(4326, cloned.srid)
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                Geos.srid_copy_policy = :lenient
         
     | 
| 
      
 23 
     | 
    
         
            +
                cloned = geom.clone
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                assert_equal(4326, cloned.srid)
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                Geos.srid_copy_policy = :strict
         
     | 
| 
      
 28 
     | 
    
         
            +
                cloned = geom.clone
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                assert_equal(4326, cloned.srid)
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                Geos.srid_copy_policy = :zero
         
     | 
| 
      
 33 
     | 
    
         
            +
                geom_b = geom.convex_hull
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                assert_equal(0, geom_b.srid)
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                Geos.srid_copy_policy = :lenient
         
     | 
| 
      
 38 
     | 
    
         
            +
                geom_b = geom.convex_hull
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                assert_equal(4326, geom_b.srid)
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                Geos.srid_copy_policy = :strict
         
     | 
| 
      
 43 
     | 
    
         
            +
                geom_b = geom.convex_hull
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                assert_equal(4326, geom_b.srid)
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                geom_b = read('POLYGON ((3 3, 3 8, 8 8, 8 3, 3 3))')
         
     | 
| 
      
 48 
     | 
    
         
            +
                geom_b.srid = 3875
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                Geos.srid_copy_policy = :zero
         
     | 
| 
      
 51 
     | 
    
         
            +
                geom_c = geom.intersection(geom_b)
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                assert_equal(0, geom_c.srid)
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                Geos.srid_copy_policy = :lenient
         
     | 
| 
      
 56 
     | 
    
         
            +
                geom_c = geom.intersection(geom_b)
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                assert_equal(4326, geom_c.srid)
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                Geos.srid_copy_policy = :strict
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                assert_raises(Geos::MixedSRIDsError) do
         
     | 
| 
      
 63 
     | 
    
         
            +
                  geom.intersection(geom_b)
         
     | 
| 
      
 64 
     | 
    
         
            +
                end
         
     | 
| 
      
 65 
     | 
    
         
            +
              ensure
         
     | 
| 
      
 66 
     | 
    
         
            +
                Geos.srid_copy_policy = :default
         
     | 
| 
      
 67 
     | 
    
         
            +
              end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
              def test_bad_srid_copy_policy
         
     | 
| 
      
 70 
     | 
    
         
            +
                assert_raises(ArgumentError) do
         
     | 
| 
      
 71 
     | 
    
         
            +
                  Geos.srid_copy_policy = :blart
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
              end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
              def test_srid_copy_policy_default
         
     | 
| 
      
 76 
     | 
    
         
            +
                Geos.srid_copy_policy_default = :default
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                assert_equal(:zero, Geos.srid_copy_policy_default)
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                Geos.srid_copy_policy_default = :lenient
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                assert_equal(:lenient, Geos.srid_copy_policy_default)
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                Geos.srid_copy_policy_default = :strict
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                assert_equal(:strict, Geos.srid_copy_policy_default)
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                assert_raises(ArgumentError) do
         
     | 
| 
      
 89 
     | 
    
         
            +
                  Geos.srid_copy_policy_default = :blart
         
     | 
| 
      
 90 
     | 
    
         
            +
                end
         
     | 
| 
      
 91 
     | 
    
         
            +
              ensure
         
     | 
| 
      
 92 
     | 
    
         
            +
                Geos.srid_copy_policy_default = :default
         
     | 
| 
      
 93 
     | 
    
         
            +
              end
         
     | 
| 
      
 94 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class GeometryStartAndEndPointTests < Minitest::Test
         
     | 
| 
      
 6 
     | 
    
         
            +
              include TestHelper
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 9 
     | 
    
         
            +
                super
         
     | 
| 
      
 10 
     | 
    
         
            +
                writer.trim = true
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def test_start_and_end_points
         
     | 
| 
      
 14 
     | 
    
         
            +
                skip unless ENV['FORCE_TESTS'] || Geos::Geometry.method_defined?(:start_point)
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                geom = read('LINESTRING (10 10, 10 14, 14 14, 14 10)')
         
     | 
| 
      
 17 
     | 
    
         
            +
                simple_tester(:start_point, 'POINT (10 10)', geom)
         
     | 
| 
      
 18 
     | 
    
         
            +
                simple_tester(:end_point, 'POINT (14 10)', geom)
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                geom = read('LINEARRING (11 11, 11 12, 12 11, 11 11)')
         
     | 
| 
      
 21 
     | 
    
         
            +
                simple_tester(:start_point, 'POINT (11 11)', geom)
         
     | 
| 
      
 22 
     | 
    
         
            +
                simple_tester(:start_point, 'POINT (11 11)', geom)
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,114 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class GeometrySymDifferenceTests < Minitest::Test
         
     | 
| 
      
 6 
     | 
    
         
            +
              include TestHelper
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 9 
     | 
    
         
            +
                super
         
     | 
| 
      
 10 
     | 
    
         
            +
                writer.trim = true
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def test_sym_difference
         
     | 
| 
      
 14 
     | 
    
         
            +
                %w{ sym_difference symmetric_difference }.each do |method|
         
     | 
| 
      
 15 
     | 
    
         
            +
                  comparison_tester(
         
     | 
| 
      
 16 
     | 
    
         
            +
                    method,
         
     | 
| 
      
 17 
     | 
    
         
            +
                    EMPTY_GEOMETRY,
         
     | 
| 
      
 18 
     | 
    
         
            +
                    'POINT(0 0)',
         
     | 
| 
      
 19 
     | 
    
         
            +
                    'POINT(0 0)'
         
     | 
| 
      
 20 
     | 
    
         
            +
                  )
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  comparison_tester(
         
     | 
| 
      
 23 
     | 
    
         
            +
                    method,
         
     | 
| 
      
 24 
     | 
    
         
            +
                    if Geos::GEOS_NICE_VERSION >= '031200'
         
     | 
| 
      
 25 
     | 
    
         
            +
                      'MULTIPOINT ((0 0), (1 0))'
         
     | 
| 
      
 26 
     | 
    
         
            +
                    else
         
     | 
| 
      
 27 
     | 
    
         
            +
                      'MULTIPOINT (0 0, 1 0)'
         
     | 
| 
      
 28 
     | 
    
         
            +
                    end,
         
     | 
| 
      
 29 
     | 
    
         
            +
                    'POINT(0 0)',
         
     | 
| 
      
 30 
     | 
    
         
            +
                    'POINT(1 0)'
         
     | 
| 
      
 31 
     | 
    
         
            +
                  )
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  comparison_tester(
         
     | 
| 
      
 34 
     | 
    
         
            +
                    method,
         
     | 
| 
      
 35 
     | 
    
         
            +
                    'LINESTRING (0 0, 10 0)',
         
     | 
| 
      
 36 
     | 
    
         
            +
                    'LINESTRING(0 0, 10 0)',
         
     | 
| 
      
 37 
     | 
    
         
            +
                    'POINT(5 0)'
         
     | 
| 
      
 38 
     | 
    
         
            +
                  )
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  comparison_tester(
         
     | 
| 
      
 41 
     | 
    
         
            +
                    method,
         
     | 
| 
      
 42 
     | 
    
         
            +
                    'LINESTRING (0 0, 10 0)',
         
     | 
| 
      
 43 
     | 
    
         
            +
                    'POINT(5 0)',
         
     | 
| 
      
 44 
     | 
    
         
            +
                    'LINESTRING(0 0, 10 0)'
         
     | 
| 
      
 45 
     | 
    
         
            +
                  )
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  comparison_tester(
         
     | 
| 
      
 48 
     | 
    
         
            +
                    method,
         
     | 
| 
      
 49 
     | 
    
         
            +
                    'GEOMETRYCOLLECTION (POINT (5 0), LINESTRING (0 1, 10 1))',
         
     | 
| 
      
 50 
     | 
    
         
            +
                    'POINT(5 0)',
         
     | 
| 
      
 51 
     | 
    
         
            +
                    'LINESTRING(0 1, 10 1)'
         
     | 
| 
      
 52 
     | 
    
         
            +
                  )
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                  comparison_tester(
         
     | 
| 
      
 55 
     | 
    
         
            +
                    method,
         
     | 
| 
      
 56 
     | 
    
         
            +
                    'MULTILINESTRING ((0 0, 5 0), (5 0, 10 0), (5 -10, 5 0), (5 0, 5 10))',
         
     | 
| 
      
 57 
     | 
    
         
            +
                    'LINESTRING(0 0, 10 0)',
         
     | 
| 
      
 58 
     | 
    
         
            +
                    'LINESTRING(5 -10, 5 10)'
         
     | 
| 
      
 59 
     | 
    
         
            +
                  )
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                  comparison_tester(
         
     | 
| 
      
 62 
     | 
    
         
            +
                    method,
         
     | 
| 
      
 63 
     | 
    
         
            +
                    'MULTILINESTRING ((0 0, 5 0), (10 0, 20 0))',
         
     | 
| 
      
 64 
     | 
    
         
            +
                    'LINESTRING(0 0, 10 0)',
         
     | 
| 
      
 65 
     | 
    
         
            +
                    'LINESTRING(5 0, 20 0)'
         
     | 
| 
      
 66 
     | 
    
         
            +
                  )
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                  comparison_tester(
         
     | 
| 
      
 69 
     | 
    
         
            +
                    method,
         
     | 
| 
      
 70 
     | 
    
         
            +
                    if Geos::GEOS_NICE_VERSION > '030900'
         
     | 
| 
      
 71 
     | 
    
         
            +
                      'GEOMETRYCOLLECTION (POLYGON ((0 10, 5 10, 10 10, 10 0, 5 0, 0 0, 0 10)), LINESTRING (5 -10, 5 0))'
         
     | 
| 
      
 72 
     | 
    
         
            +
                    else
         
     | 
| 
      
 73 
     | 
    
         
            +
                      'GEOMETRYCOLLECTION (LINESTRING (5 -10, 5 0), POLYGON ((0 0, 0 10, 5 10, 10 10, 10 0, 5 0, 0 0)))'
         
     | 
| 
      
 74 
     | 
    
         
            +
                    end,
         
     | 
| 
      
 75 
     | 
    
         
            +
                    'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))',
         
     | 
| 
      
 76 
     | 
    
         
            +
                    'LINESTRING(5 -10, 5 10)'
         
     | 
| 
      
 77 
     | 
    
         
            +
                  )
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                  comparison_tester(
         
     | 
| 
      
 80 
     | 
    
         
            +
                    method,
         
     | 
| 
      
 81 
     | 
    
         
            +
                    if Geos::GEOS_NICE_VERSION > '030900'
         
     | 
| 
      
 82 
     | 
    
         
            +
                      'GEOMETRYCOLLECTION (POLYGON ((0 10, 10 10, 10 0, 0 0, 0 10)), LINESTRING (10 0, 20 0))'
         
     | 
| 
      
 83 
     | 
    
         
            +
                    else
         
     | 
| 
      
 84 
     | 
    
         
            +
                      'GEOMETRYCOLLECTION (LINESTRING (10 0, 20 0), POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0)))'
         
     | 
| 
      
 85 
     | 
    
         
            +
                    end,
         
     | 
| 
      
 86 
     | 
    
         
            +
                    'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))',
         
     | 
| 
      
 87 
     | 
    
         
            +
                    'LINESTRING(10 0, 20 0)'
         
     | 
| 
      
 88 
     | 
    
         
            +
                  )
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                  comparison_tester(
         
     | 
| 
      
 91 
     | 
    
         
            +
                    method,
         
     | 
| 
      
 92 
     | 
    
         
            +
                    if Geos::GEOS_NICE_VERSION > '030900'
         
     | 
| 
      
 93 
     | 
    
         
            +
                      'MULTIPOLYGON (((0 10, 10 10, 10 5, 5 5, 5 0, 0 0, 0 10)), ((10 0, 10 5, 15 5, 15 -5, 5 -5, 5 0, 10 0)))'
         
     | 
| 
      
 94 
     | 
    
         
            +
                    else
         
     | 
| 
      
 95 
     | 
    
         
            +
                      'MULTIPOLYGON (((0 0, 0 10, 10 10, 10 5, 5 5, 5 0, 0 0)), ((5 0, 10 0, 10 5, 15 5, 15 -5, 5 -5, 5 0)))'
         
     | 
| 
      
 96 
     | 
    
         
            +
                    end,
         
     | 
| 
      
 97 
     | 
    
         
            +
                    'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))',
         
     | 
| 
      
 98 
     | 
    
         
            +
                    'POLYGON((5 -5, 5 5, 15 5, 15 -5, 5 -5))'
         
     | 
| 
      
 99 
     | 
    
         
            +
                  )
         
     | 
| 
      
 100 
     | 
    
         
            +
                end
         
     | 
| 
      
 101 
     | 
    
         
            +
              end
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
              def test_sym_difference_with_precision
         
     | 
| 
      
 104 
     | 
    
         
            +
                skip unless ENV['FORCE_TESTS'] || Geos::FFIGeos.respond_to?(:GEOSSymDifferencePrec_r)
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
                comparison_tester(
         
     | 
| 
      
 107 
     | 
    
         
            +
                  :sym_difference,
         
     | 
| 
      
 108 
     | 
    
         
            +
                  'GEOMETRYCOLLECTION (POLYGON ((0 10, 6 10, 10 10, 10 0, 6 0, 0 0, 0 10)), LINESTRING (6 -10, 6 0))',
         
     | 
| 
      
 109 
     | 
    
         
            +
                  'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))',
         
     | 
| 
      
 110 
     | 
    
         
            +
                  'LINESTRING(5 -10, 5 10)',
         
     | 
| 
      
 111 
     | 
    
         
            +
                  precision: 2
         
     | 
| 
      
 112 
     | 
    
         
            +
                )
         
     | 
| 
      
 113 
     | 
    
         
            +
              end
         
     | 
| 
      
 114 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,21 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class GeometryTests < Minitest::Test
         
     | 
| 
      
 6 
     | 
    
         
            +
              include TestHelper
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 9 
     | 
    
         
            +
                super
         
     | 
| 
      
 10 
     | 
    
         
            +
                writer.trim = true
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def test_topology_preserve_simplify
         
     | 
| 
      
 14 
     | 
    
         
            +
                simple_tester(
         
     | 
| 
      
 15 
     | 
    
         
            +
                  :topology_preserve_simplify,
         
     | 
| 
      
 16 
     | 
    
         
            +
                  'LINESTRING (0 0, 5 10, 10 0, 10 9, 5 11, 0 9)',
         
     | 
| 
      
 17 
     | 
    
         
            +
                  'LINESTRING(0 0, 3 4, 5 10, 10 0, 10 9, 5 11, 0 9)',
         
     | 
| 
      
 18 
     | 
    
         
            +
                  2
         
     | 
| 
      
 19 
     | 
    
         
            +
                )
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
            end
         
     |