@sentryware/s2-node 0.0.6
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.
- package/.circleci/config.yml +45 -0
- package/.dockerignore +1 -0
- package/.gitmodules +3 -0
- package/CHANGELOG.md +33 -0
- package/LICENSE +201 -0
- package/README.md +147 -0
- package/binding.gyp +170 -0
- package/docker/Dockerfile.node20.test +8 -0
- package/docker/Dockerfile.node22.test +8 -0
- package/docker/Dockerfile.node24.test +8 -0
- package/index.d.ts +117 -0
- package/index.js +6 -0
- package/jest.config.js +184 -0
- package/package.json +43 -0
- package/publish-linux.sh +18 -0
- package/publish-osx.sh +19 -0
- package/src/builder.cc +84 -0
- package/src/builder.h +29 -0
- package/src/cell.cc +71 -0
- package/src/cell.h +26 -0
- package/src/cell_id.cc +210 -0
- package/src/cell_id.h +44 -0
- package/src/cell_union.cc +237 -0
- package/src/cell_union.h +34 -0
- package/src/earth.cc +185 -0
- package/src/earth.h +33 -0
- package/src/latlng.cc +132 -0
- package/src/latlng.h +28 -0
- package/src/loop.cc +51 -0
- package/src/loop.h +21 -0
- package/src/point.cc +69 -0
- package/src/point.h +23 -0
- package/src/polygon.cc +36 -0
- package/src/polygon.h +20 -0
- package/src/polyline.cc +186 -0
- package/src/polyline.h +34 -0
- package/src/region_coverer.cc +450 -0
- package/src/region_coverer.h +56 -0
- package/src/s2.cc +27 -0
- package/test/Cell.test.js +37 -0
- package/test/CellId.test.js +135 -0
- package/test/CellUnion.test.js +150 -0
- package/test/Earth.test.js +62 -0
- package/test/LatLng.test.js +45 -0
- package/test/Point.test.js +14 -0
- package/test/Polyline.test.js +78 -0
- package/test/RegionCoverer.test.js +301 -0
- package/test.sh +16 -0
- package/third_party/s2geometry/.travis.yml +163 -0
- package/third_party/s2geometry/AUTHORS +13 -0
- package/third_party/s2geometry/CONTRIBUTING.md +65 -0
- package/third_party/s2geometry/CONTRIBUTORS +30 -0
- package/third_party/s2geometry/LICENSE +202 -0
- package/third_party/s2geometry/NOTICE +5 -0
- package/third_party/s2geometry/README.md +127 -0
- package/third_party/s2geometry/doc/examples/point_index.cc +44 -0
- package/third_party/s2geometry/doc/examples/term_index.cc +99 -0
- package/third_party/s2geometry/doc/examples/term_index.py +101 -0
- package/third_party/s2geometry/src/python/coder.i +125 -0
- package/third_party/s2geometry/src/python/pywraps2_test.py +786 -0
- package/third_party/s2geometry/src/python/s2.i +37 -0
- package/third_party/s2geometry/src/python/s2_common.i +756 -0
- package/third_party/s2geometry/src/s2/_fp_contract_off.h +60 -0
- package/third_party/s2geometry/src/s2/base/casts.h +318 -0
- package/third_party/s2geometry/src/s2/base/commandlineflags.h +67 -0
- package/third_party/s2geometry/src/s2/base/integral_types.h +31 -0
- package/third_party/s2geometry/src/s2/base/log_severity.h +40 -0
- package/third_party/s2geometry/src/s2/base/logging.h +173 -0
- package/third_party/s2geometry/src/s2/base/mutex.h +61 -0
- package/third_party/s2geometry/src/s2/base/port.h +999 -0
- package/third_party/s2geometry/src/s2/base/spinlock.h +60 -0
- package/third_party/s2geometry/src/s2/base/stringprintf.cc +107 -0
- package/third_party/s2geometry/src/s2/base/stringprintf.h +53 -0
- package/third_party/s2geometry/src/s2/base/strtoint.cc +65 -0
- package/third_party/s2geometry/src/s2/base/strtoint.h +106 -0
- package/third_party/s2geometry/src/s2/base/timer.h +50 -0
- package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.cc +164 -0
- package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.h +110 -0
- package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector_test.cc +232 -0
- package/third_party/s2geometry/src/s2/encoded_s2point_vector.cc +838 -0
- package/third_party/s2geometry/src/s2/encoded_s2point_vector.h +140 -0
- package/third_party/s2geometry/src/s2/encoded_s2point_vector_test.cc +344 -0
- package/third_party/s2geometry/src/s2/encoded_s2shape_index.cc +181 -0
- package/third_party/s2geometry/src/s2/encoded_s2shape_index.h +276 -0
- package/third_party/s2geometry/src/s2/encoded_s2shape_index_test.cc +244 -0
- package/third_party/s2geometry/src/s2/encoded_string_vector.cc +66 -0
- package/third_party/s2geometry/src/s2/encoded_string_vector.h +164 -0
- package/third_party/s2geometry/src/s2/encoded_string_vector_test.cc +69 -0
- package/third_party/s2geometry/src/s2/encoded_uint_vector.h +299 -0
- package/third_party/s2geometry/src/s2/encoded_uint_vector_test.cc +124 -0
- package/third_party/s2geometry/src/s2/id_set_lexicon.cc +81 -0
- package/third_party/s2geometry/src/s2/id_set_lexicon.h +199 -0
- package/third_party/s2geometry/src/s2/id_set_lexicon_test.cc +70 -0
- package/third_party/s2geometry/src/s2/mutable_s2shape_index.cc +1585 -0
- package/third_party/s2geometry/src/s2/mutable_s2shape_index.h +600 -0
- package/third_party/s2geometry/src/s2/mutable_s2shape_index_test.cc +589 -0
- package/third_party/s2geometry/src/s2/r1interval.h +220 -0
- package/third_party/s2geometry/src/s2/r1interval_test.cc +185 -0
- package/third_party/s2geometry/src/s2/r2.h +26 -0
- package/third_party/s2geometry/src/s2/r2rect.cc +93 -0
- package/third_party/s2geometry/src/s2/r2rect.h +234 -0
- package/third_party/s2geometry/src/s2/r2rect_test.cc +228 -0
- package/third_party/s2geometry/src/s2/s1angle.cc +54 -0
- package/third_party/s2geometry/src/s2/s1angle.h +336 -0
- package/third_party/s2geometry/src/s2/s1angle_test.cc +185 -0
- package/third_party/s2geometry/src/s2/s1chord_angle.cc +159 -0
- package/third_party/s2geometry/src/s2/s1chord_angle.h +369 -0
- package/third_party/s2geometry/src/s2/s1chord_angle_test.cc +207 -0
- package/third_party/s2geometry/src/s2/s1interval.cc +296 -0
- package/third_party/s2geometry/src/s2/s1interval.h +266 -0
- package/third_party/s2geometry/src/s2/s1interval_test.cc +469 -0
- package/third_party/s2geometry/src/s2/s2boolean_operation.cc +2391 -0
- package/third_party/s2geometry/src/s2/s2boolean_operation.h +501 -0
- package/third_party/s2geometry/src/s2/s2boolean_operation_test.cc +1400 -0
- package/third_party/s2geometry/src/s2/s2builder.cc +1828 -0
- package/third_party/s2geometry/src/s2/s2builder.h +1057 -0
- package/third_party/s2geometry/src/s2/s2builder_graph.cc +1084 -0
- package/third_party/s2geometry/src/s2/s2builder_graph.h +799 -0
- package/third_party/s2geometry/src/s2/s2builder_graph_test.cc +462 -0
- package/third_party/s2geometry/src/s2/s2builder_layer.h +50 -0
- package/third_party/s2geometry/src/s2/s2builder_test.cc +1329 -0
- package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.cc +313 -0
- package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.h +221 -0
- package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer_test.cc +261 -0
- package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.cc +392 -0
- package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.h +86 -0
- package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies_test.cc +182 -0
- package/third_party/s2geometry/src/s2/s2builderutil_graph_shape.h +57 -0
- package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.cc +212 -0
- package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.h +218 -0
- package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer_test.cc +367 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.cc +74 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.h +122 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer_test.cc +167 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.cc +191 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.h +211 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer_test.cc +312 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.cc +105 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.h +174 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer_test.cc +220 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.cc +98 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.h +292 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer_test.cc +233 -0
- package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.cc +354 -0
- package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.h +239 -0
- package/third_party/s2geometry/src/s2/s2builderutil_snap_functions_test.cc +716 -0
- package/third_party/s2geometry/src/s2/s2builderutil_testing.cc +37 -0
- package/third_party/s2geometry/src/s2/s2builderutil_testing.h +100 -0
- package/third_party/s2geometry/src/s2/s2builderutil_testing_test.cc +85 -0
- package/third_party/s2geometry/src/s2/s2cap.cc +347 -0
- package/third_party/s2geometry/src/s2/s2cap.h +286 -0
- package/third_party/s2geometry/src/s2/s2cap_test.cc +379 -0
- package/third_party/s2geometry/src/s2/s2cell.cc +552 -0
- package/third_party/s2geometry/src/s2/s2cell.h +249 -0
- package/third_party/s2geometry/src/s2/s2cell_id.cc +619 -0
- package/third_party/s2geometry/src/s2/s2cell_id.h +705 -0
- package/third_party/s2geometry/src/s2/s2cell_id_test.cc +633 -0
- package/third_party/s2geometry/src/s2/s2cell_index.cc +149 -0
- package/third_party/s2geometry/src/s2/s2cell_index.h +660 -0
- package/third_party/s2geometry/src/s2/s2cell_index_test.cc +411 -0
- package/third_party/s2geometry/src/s2/s2cell_test.cc +687 -0
- package/third_party/s2geometry/src/s2/s2cell_union.cc +515 -0
- package/third_party/s2geometry/src/s2/s2cell_union.h +399 -0
- package/third_party/s2geometry/src/s2/s2cell_union_test.cc +598 -0
- package/third_party/s2geometry/src/s2/s2centroids.cc +84 -0
- package/third_party/s2geometry/src/s2/s2centroids.h +87 -0
- package/third_party/s2geometry/src/s2/s2centroids_test.cc +82 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query.cc +123 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query.h +385 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query_base.h +841 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query_base_test.cc +63 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query_test.cc +412 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query.cc +106 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query.h +421 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query_base.h +946 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query_base_test.cc +59 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query_test.cc +505 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query_testing.h +91 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query.cc +66 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query.h +465 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query_base.h +767 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query_base_test.cc +63 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query_test.cc +312 -0
- package/third_party/s2geometry/src/s2/s2contains_point_query.h +328 -0
- package/third_party/s2geometry/src/s2/s2contains_point_query_test.cc +159 -0
- package/third_party/s2geometry/src/s2/s2contains_vertex_query.cc +39 -0
- package/third_party/s2geometry/src/s2/s2contains_vertex_query.h +66 -0
- package/third_party/s2geometry/src/s2/s2contains_vertex_query_test.cc +67 -0
- package/third_party/s2geometry/src/s2/s2convex_hull_query.cc +198 -0
- package/third_party/s2geometry/src/s2/s2convex_hull_query.h +110 -0
- package/third_party/s2geometry/src/s2/s2convex_hull_query_test.cc +208 -0
- package/third_party/s2geometry/src/s2/s2coords.cc +146 -0
- package/third_party/s2geometry/src/s2/s2coords.h +459 -0
- package/third_party/s2geometry/src/s2/s2coords_internal.h +71 -0
- package/third_party/s2geometry/src/s2/s2coords_test.cc +218 -0
- package/third_party/s2geometry/src/s2/s2crossing_edge_query.cc +380 -0
- package/third_party/s2geometry/src/s2/s2crossing_edge_query.h +220 -0
- package/third_party/s2geometry/src/s2/s2crossing_edge_query_test.cc +382 -0
- package/third_party/s2geometry/src/s2/s2debug.cc +23 -0
- package/third_party/s2geometry/src/s2/s2debug.h +69 -0
- package/third_party/s2geometry/src/s2/s2distance_target.h +165 -0
- package/third_party/s2geometry/src/s2/s2earth.cc +52 -0
- package/third_party/s2geometry/src/s2/s2earth.h +268 -0
- package/third_party/s2geometry/src/s2/s2earth_test.cc +146 -0
- package/third_party/s2geometry/src/s2/s2edge_clipping.cc +462 -0
- package/third_party/s2geometry/src/s2/s2edge_clipping.h +183 -0
- package/third_party/s2geometry/src/s2/s2edge_clipping_test.cc +335 -0
- package/third_party/s2geometry/src/s2/s2edge_crosser.cc +85 -0
- package/third_party/s2geometry/src/s2/s2edge_crosser.h +343 -0
- package/third_party/s2geometry/src/s2/s2edge_crosser_test.cc +264 -0
- package/third_party/s2geometry/src/s2/s2edge_crossings.cc +515 -0
- package/third_party/s2geometry/src/s2/s2edge_crossings.h +138 -0
- package/third_party/s2geometry/src/s2/s2edge_crossings_internal.h +59 -0
- package/third_party/s2geometry/src/s2/s2edge_crossings_test.cc +246 -0
- package/third_party/s2geometry/src/s2/s2edge_distances.cc +419 -0
- package/third_party/s2geometry/src/s2/s2edge_distances.h +192 -0
- package/third_party/s2geometry/src/s2/s2edge_distances_test.cc +539 -0
- package/third_party/s2geometry/src/s2/s2edge_tessellator.cc +276 -0
- package/third_party/s2geometry/src/s2/s2edge_tessellator.h +101 -0
- package/third_party/s2geometry/src/s2/s2edge_tessellator_test.cc +492 -0
- package/third_party/s2geometry/src/s2/s2edge_vector_shape.h +85 -0
- package/third_party/s2geometry/src/s2/s2edge_vector_shape_test.cc +66 -0
- package/third_party/s2geometry/src/s2/s2error.cc +29 -0
- package/third_party/s2geometry/src/s2/s2error.h +147 -0
- package/third_party/s2geometry/src/s2/s2error_test.cc +31 -0
- package/third_party/s2geometry/src/s2/s2furthest_edge_query.cc +117 -0
- package/third_party/s2geometry/src/s2/s2furthest_edge_query.h +439 -0
- package/third_party/s2geometry/src/s2/s2furthest_edge_query_test.cc +487 -0
- package/third_party/s2geometry/src/s2/s2latlng.cc +90 -0
- package/third_party/s2geometry/src/s2/s2latlng.h +234 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect.cc +727 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect.h +434 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.cc +344 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.h +89 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect_bounder_test.cc +306 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect_test.cc +1030 -0
- package/third_party/s2geometry/src/s2/s2latlng_test.cc +165 -0
- package/third_party/s2geometry/src/s2/s2lax_loop_shape.cc +104 -0
- package/third_party/s2geometry/src/s2/s2lax_loop_shape.h +153 -0
- package/third_party/s2geometry/src/s2/s2lax_loop_shape_test.cc +101 -0
- package/third_party/s2geometry/src/s2/s2lax_polygon_shape.cc +348 -0
- package/third_party/s2geometry/src/s2/s2lax_polygon_shape.h +183 -0
- package/third_party/s2geometry/src/s2/s2lax_polygon_shape_test.cc +234 -0
- package/third_party/s2geometry/src/s2/s2lax_polyline_shape.cc +118 -0
- package/third_party/s2geometry/src/s2/s2lax_polyline_shape.h +124 -0
- package/third_party/s2geometry/src/s2/s2lax_polyline_shape_test.cc +62 -0
- package/third_party/s2geometry/src/s2/s2loop.cc +1509 -0
- package/third_party/s2geometry/src/s2/s2loop.h +711 -0
- package/third_party/s2geometry/src/s2/s2loop_measures.cc +313 -0
- package/third_party/s2geometry/src/s2/s2loop_measures.h +280 -0
- package/third_party/s2geometry/src/s2/s2loop_measures_test.cc +367 -0
- package/third_party/s2geometry/src/s2/s2loop_test.cc +1371 -0
- package/third_party/s2geometry/src/s2/s2max_distance_targets.cc +265 -0
- package/third_party/s2geometry/src/s2/s2max_distance_targets.h +241 -0
- package/third_party/s2geometry/src/s2/s2max_distance_targets_test.cc +367 -0
- package/third_party/s2geometry/src/s2/s2measures.cc +128 -0
- package/third_party/s2geometry/src/s2/s2measures.h +78 -0
- package/third_party/s2geometry/src/s2/s2measures_test.cc +135 -0
- package/third_party/s2geometry/src/s2/s2metrics.cc +122 -0
- package/third_party/s2geometry/src/s2/s2metrics.h +199 -0
- package/third_party/s2geometry/src/s2/s2metrics_test.cc +127 -0
- package/third_party/s2geometry/src/s2/s2min_distance_targets.cc +295 -0
- package/third_party/s2geometry/src/s2/s2min_distance_targets.h +273 -0
- package/third_party/s2geometry/src/s2/s2min_distance_targets_test.cc +239 -0
- package/third_party/s2geometry/src/s2/s2padded_cell.cc +162 -0
- package/third_party/s2geometry/src/s2/s2padded_cell.h +108 -0
- package/third_party/s2geometry/src/s2/s2padded_cell_test.cc +138 -0
- package/third_party/s2geometry/src/s2/s2point.h +38 -0
- package/third_party/s2geometry/src/s2/s2point_compression.cc +388 -0
- package/third_party/s2geometry/src/s2/s2point_compression.h +78 -0
- package/third_party/s2geometry/src/s2/s2point_compression_test.cc +305 -0
- package/third_party/s2geometry/src/s2/s2point_index.h +345 -0
- package/third_party/s2geometry/src/s2/s2point_index_test.cc +147 -0
- package/third_party/s2geometry/src/s2/s2point_region.cc +72 -0
- package/third_party/s2geometry/src/s2/s2point_region.h +76 -0
- package/third_party/s2geometry/src/s2/s2point_region_test.cc +100 -0
- package/third_party/s2geometry/src/s2/s2point_span.h +57 -0
- package/third_party/s2geometry/src/s2/s2point_test.cc +47 -0
- package/third_party/s2geometry/src/s2/s2point_vector_shape.h +127 -0
- package/third_party/s2geometry/src/s2/s2point_vector_shape_test.cc +59 -0
- package/third_party/s2geometry/src/s2/s2pointutil.cc +131 -0
- package/third_party/s2geometry/src/s2/s2pointutil.h +138 -0
- package/third_party/s2geometry/src/s2/s2pointutil_test.cc +157 -0
- package/third_party/s2geometry/src/s2/s2polygon.cc +1569 -0
- package/third_party/s2geometry/src/s2/s2polygon.h +934 -0
- package/third_party/s2geometry/src/s2/s2polygon_test.cc +3025 -0
- package/third_party/s2geometry/src/s2/s2polyline.cc +645 -0
- package/third_party/s2geometry/src/s2/s2polyline.h +379 -0
- package/third_party/s2geometry/src/s2/s2polyline_alignment.cc +414 -0
- package/third_party/s2geometry/src/s2/s2polyline_alignment.h +245 -0
- package/third_party/s2geometry/src/s2/s2polyline_alignment_internal.h +158 -0
- package/third_party/s2geometry/src/s2/s2polyline_alignment_test.cc +610 -0
- package/third_party/s2geometry/src/s2/s2polyline_measures.cc +42 -0
- package/third_party/s2geometry/src/s2/s2polyline_measures.h +53 -0
- package/third_party/s2geometry/src/s2/s2polyline_measures_test.cc +57 -0
- package/third_party/s2geometry/src/s2/s2polyline_simplifier.cc +187 -0
- package/third_party/s2geometry/src/s2/s2polyline_simplifier.h +109 -0
- package/third_party/s2geometry/src/s2/s2polyline_simplifier_test.cc +165 -0
- package/third_party/s2geometry/src/s2/s2polyline_test.cc +554 -0
- package/third_party/s2geometry/src/s2/s2predicates.cc +1486 -0
- package/third_party/s2geometry/src/s2/s2predicates.h +282 -0
- package/third_party/s2geometry/src/s2/s2predicates_internal.h +135 -0
- package/third_party/s2geometry/src/s2/s2predicates_test.cc +1427 -0
- package/third_party/s2geometry/src/s2/s2projections.cc +109 -0
- package/third_party/s2geometry/src/s2/s2projections.h +161 -0
- package/third_party/s2geometry/src/s2/s2projections_test.cc +78 -0
- package/third_party/s2geometry/src/s2/s2r2rect.cc +88 -0
- package/third_party/s2geometry/src/s2/s2r2rect.h +292 -0
- package/third_party/s2geometry/src/s2/s2r2rect_test.cc +312 -0
- package/third_party/s2geometry/src/s2/s2region.cc +26 -0
- package/third_party/s2geometry/src/s2/s2region.h +142 -0
- package/third_party/s2geometry/src/s2/s2region_coverer.cc +514 -0
- package/third_party/s2geometry/src/s2/s2region_coverer.h +356 -0
- package/third_party/s2geometry/src/s2/s2region_coverer_test.cc +509 -0
- package/third_party/s2geometry/src/s2/s2region_intersection.cc +84 -0
- package/third_party/s2geometry/src/s2/s2region_intersection.h +79 -0
- package/third_party/s2geometry/src/s2/s2region_term_indexer.cc +270 -0
- package/third_party/s2geometry/src/s2/s2region_term_indexer.h +299 -0
- package/third_party/s2geometry/src/s2/s2region_term_indexer_test.cc +209 -0
- package/third_party/s2geometry/src/s2/s2region_test.cc +370 -0
- package/third_party/s2geometry/src/s2/s2region_union.cc +90 -0
- package/third_party/s2geometry/src/s2/s2region_union.h +83 -0
- package/third_party/s2geometry/src/s2/s2region_union_test.cc +89 -0
- package/third_party/s2geometry/src/s2/s2shape.h +283 -0
- package/third_party/s2geometry/src/s2/s2shape_index.cc +321 -0
- package/third_party/s2geometry/src/s2/s2shape_index.h +781 -0
- package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.cc +113 -0
- package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.h +135 -0
- package/third_party/s2geometry/src/s2/s2shape_index_buffered_region_test.cc +162 -0
- package/third_party/s2geometry/src/s2/s2shape_index_measures.cc +92 -0
- package/third_party/s2geometry/src/s2/s2shape_index_measures.h +100 -0
- package/third_party/s2geometry/src/s2/s2shape_index_measures_test.cc +136 -0
- package/third_party/s2geometry/src/s2/s2shape_index_region.h +350 -0
- package/third_party/s2geometry/src/s2/s2shape_index_region_test.cc +161 -0
- package/third_party/s2geometry/src/s2/s2shape_index_test.cc +24 -0
- package/third_party/s2geometry/src/s2/s2shape_measures.cc +138 -0
- package/third_party/s2geometry/src/s2/s2shape_measures.h +95 -0
- package/third_party/s2geometry/src/s2/s2shape_measures_test.cc +139 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.cc +120 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.h +66 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries_test.cc +170 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_coding.cc +253 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_coding.h +283 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_coding_test.cc +54 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.cc +40 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.h +41 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force_test.cc +55 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_count_edges.h +57 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_count_edges_test.cc +43 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.cc +45 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.h +72 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator_test.cc +116 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.cc +107 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.h +48 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point_test.cc +104 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.cc +58 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.h +65 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator_test.cc +61 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge.h +58 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge_id.h +97 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_testing.cc +104 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_testing.h +36 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.cc +440 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.h +72 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs_test.cc +184 -0
- package/third_party/s2geometry/src/s2/s2testing.cc +464 -0
- package/third_party/s2geometry/src/s2/s2testing.h +385 -0
- package/third_party/s2geometry/src/s2/s2testing_test.cc +166 -0
- package/third_party/s2geometry/src/s2/s2text_format.cc +506 -0
- package/third_party/s2geometry/src/s2/s2text_format.h +289 -0
- package/third_party/s2geometry/src/s2/s2text_format_test.cc +417 -0
- package/third_party/s2geometry/src/s2/s2wedge_relations.cc +80 -0
- package/third_party/s2geometry/src/s2/s2wedge_relations.h +64 -0
- package/third_party/s2geometry/src/s2/s2wedge_relations_test.cc +89 -0
- package/third_party/s2geometry/src/s2/sequence_lexicon.h +296 -0
- package/third_party/s2geometry/src/s2/sequence_lexicon_test.cc +113 -0
- package/third_party/s2geometry/src/s2/strings/ostringstream.cc +35 -0
- package/third_party/s2geometry/src/s2/strings/ostringstream.h +105 -0
- package/third_party/s2geometry/src/s2/strings/serialize.cc +46 -0
- package/third_party/s2geometry/src/s2/strings/serialize.h +40 -0
- package/third_party/s2geometry/src/s2/third_party/absl/algorithm/algorithm.h +187 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/attributes.h +666 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/casts.h +189 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/config.h +462 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.cc +129 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.h +394 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/atomic_hook.h +168 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/identity.h +33 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/inline_variable.h +117 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/invoke.h +188 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.cc +254 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.h +205 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.cc +106 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.h +71 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/unaligned_access.h +322 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/log_severity.h +77 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/macros.h +236 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/optimization.h +177 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/policy_checks.h +124 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/port.h +97 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/thread_annotations.h +277 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/fixed_array.h +523 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/inlined_vector.h +1453 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/internal/compressed_tuple.h +191 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/internal/container_memory.h +424 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/internal/layout.h +739 -0
- package/third_party/s2geometry/src/s2/third_party/absl/memory/memory.h +755 -0
- package/third_party/s2geometry/src/s2/third_party/absl/meta/type_traits.h +436 -0
- package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.cc +232 -0
- package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.h +656 -0
- package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_have_intrinsic.inc +3 -0
- package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_no_intrinsic.inc +3 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.cc +198 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.h +239 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii_ctype.h +66 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/bits.h +53 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.cc +110 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.h +146 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/resize_uninitialized.h +72 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/match.cc +38 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/match.h +89 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.cc +909 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.h +187 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.cc +240 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.h +398 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_join.h +22 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.cc +47 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.h +43 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.cc +245 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.h +602 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.cc +42 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.h +130 -0
- package/third_party/s2geometry/src/s2/third_party/absl/types/span.h +793 -0
- package/third_party/s2geometry/src/s2/third_party/absl/utility/utility.h +299 -0
- package/third_party/s2geometry/src/s2/util/bits/bit-interleave.cc +274 -0
- package/third_party/s2geometry/src/s2/util/bits/bit-interleave.h +53 -0
- package/third_party/s2geometry/src/s2/util/bits/bits.cc +155 -0
- package/third_party/s2geometry/src/s2/util/bits/bits.h +745 -0
- package/third_party/s2geometry/src/s2/util/coding/coder.cc +83 -0
- package/third_party/s2geometry/src/s2/util/coding/coder.h +553 -0
- package/third_party/s2geometry/src/s2/util/coding/nth-derivative.h +134 -0
- package/third_party/s2geometry/src/s2/util/coding/transforms.h +62 -0
- package/third_party/s2geometry/src/s2/util/coding/varint.cc +289 -0
- package/third_party/s2geometry/src/s2/util/coding/varint.h +476 -0
- package/third_party/s2geometry/src/s2/util/endian/endian.h +859 -0
- package/third_party/s2geometry/src/s2/util/gtl/btree.h +2471 -0
- package/third_party/s2geometry/src/s2/util/gtl/btree_container.h +411 -0
- package/third_party/s2geometry/src/s2/util/gtl/btree_map.h +79 -0
- package/third_party/s2geometry/src/s2/util/gtl/btree_set.h +73 -0
- package/third_party/s2geometry/src/s2/util/gtl/compact_array.h +653 -0
- package/third_party/s2geometry/src/s2/util/gtl/container_logging.h +291 -0
- package/third_party/s2geometry/src/s2/util/gtl/dense_hash_set.h +358 -0
- package/third_party/s2geometry/src/s2/util/gtl/densehashtable.h +1493 -0
- package/third_party/s2geometry/src/s2/util/gtl/hashtable_common.h +253 -0
- package/third_party/s2geometry/src/s2/util/gtl/layout.h +28 -0
- package/third_party/s2geometry/src/s2/util/gtl/legacy_random_shuffle.h +77 -0
- package/third_party/s2geometry/src/s2/util/hash/mix.h +76 -0
- package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.cc +832 -0
- package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.h +646 -0
- package/third_party/s2geometry/src/s2/util/math/mathutil.cc +75 -0
- package/third_party/s2geometry/src/s2/util/math/mathutil.h +189 -0
- package/third_party/s2geometry/src/s2/util/math/matrix3x3.h +574 -0
- package/third_party/s2geometry/src/s2/util/math/vector.h +569 -0
- package/third_party/s2geometry/src/s2/util/math/vector3_hash.h +54 -0
- package/third_party/s2geometry/src/s2/util/units/length-units.cc +21 -0
- package/third_party/s2geometry/src/s2/util/units/length-units.h +135 -0
- package/third_party/s2geometry/src/s2/util/units/physical-units.h +313 -0
- package/third_party/s2geometry/src/s2/value_lexicon.h +234 -0
- package/third_party/s2geometry/src/s2/value_lexicon_test.cc +121 -0
- package/third_party/s2geometry/third_party/cmake/FindGFlags.cmake +48 -0
- package/third_party/s2geometry/third_party/cmake/FindGlog.cmake +48 -0
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
// Copyright Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
#include "s2/s2text_format.h"
|
|
17
|
+
|
|
18
|
+
#include <vector>
|
|
19
|
+
#include <gtest/gtest.h>
|
|
20
|
+
#include "s2/third_party/absl/strings/str_split.h"
|
|
21
|
+
#include "s2/mutable_s2shape_index.h"
|
|
22
|
+
#include "s2/s1angle.h"
|
|
23
|
+
#include "s2/s2latlng.h"
|
|
24
|
+
#include "s2/s2lax_polygon_shape.h"
|
|
25
|
+
#include "s2/s2lax_polyline_shape.h"
|
|
26
|
+
#include "s2/s2loop.h"
|
|
27
|
+
#include "s2/s2polygon.h"
|
|
28
|
+
#include "s2/s2polyline.h"
|
|
29
|
+
#include "s2/s2testing.h"
|
|
30
|
+
|
|
31
|
+
using std::unique_ptr;
|
|
32
|
+
using std::vector;
|
|
33
|
+
|
|
34
|
+
namespace {
|
|
35
|
+
|
|
36
|
+
static const int kIters = 10000;
|
|
37
|
+
|
|
38
|
+
// Verify that s2textformat::ToString() formats the given lat/lng with at most
|
|
39
|
+
// "max_digits" after the decimal point and has no trailing zeros.
|
|
40
|
+
void ExpectMaxDigits(const S2LatLng& ll, int max_digits) {
|
|
41
|
+
string result = s2textformat::ToString(ll.ToPoint());
|
|
42
|
+
vector<string> values = absl::StrSplit(result, ':', absl::SkipEmpty());
|
|
43
|
+
EXPECT_EQ(2, values.size()) << result;
|
|
44
|
+
for (const auto& value : values) {
|
|
45
|
+
int num_digits = 0;
|
|
46
|
+
if (value.find('.') != string::npos) {
|
|
47
|
+
num_digits = value.size() - value.find('.') - 1;
|
|
48
|
+
EXPECT_NE('0', value.back());
|
|
49
|
+
}
|
|
50
|
+
EXPECT_LE(num_digits, max_digits) << value;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
void ExpectString(const string& expected, const S2LatLng& ll) {
|
|
55
|
+
EXPECT_EQ(expected, s2textformat::ToString(ll.ToPoint()));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
TEST(ToString, SpecialCases) {
|
|
59
|
+
ExpectString("0:0", S2LatLng::FromDegrees(0, 0));
|
|
60
|
+
ExpectString("1e-20:1e-30", S2LatLng::FromDegrees(1e-20, 1e-30));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
TEST(ToString, MinimalDigitsE5) {
|
|
64
|
+
for (int iter = 0; iter < kIters; ++iter) {
|
|
65
|
+
S2LatLng ll(S2Testing::RandomPoint());
|
|
66
|
+
S2LatLng ll_e5 = S2LatLng::FromE5(ll.lat().e5(), ll.lng().e5());
|
|
67
|
+
ExpectMaxDigits(ll_e5, 5);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
TEST(ToString, MinimalDigitsE6) {
|
|
72
|
+
for (int iter = 0; iter < kIters; ++iter) {
|
|
73
|
+
S2LatLng ll(S2Testing::RandomPoint());
|
|
74
|
+
S2LatLng ll_e6 = S2LatLng::FromE6(ll.lat().e6(), ll.lng().e6());
|
|
75
|
+
ExpectMaxDigits(ll_e6, 6);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
TEST(ToString, MinimalDigitsE7) {
|
|
80
|
+
ExpectMaxDigits(S2LatLng::FromDegrees(0, 0), 7);
|
|
81
|
+
for (int iter = 0; iter < kIters; ++iter) {
|
|
82
|
+
S2LatLng ll(S2Testing::RandomPoint());
|
|
83
|
+
S2LatLng ll_e7 = S2LatLng::FromE7(ll.lat().e7(), ll.lng().e7());
|
|
84
|
+
ExpectMaxDigits(ll_e7, 7);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
TEST(ToString, MinimalDigitsDoubleConstants) {
|
|
89
|
+
// Verify that points specified as floating-point literals in degrees using
|
|
90
|
+
// up to 10 digits after the decimal point are formatted with the minimal
|
|
91
|
+
// number of digits.
|
|
92
|
+
for (int iter = 0; iter < kIters; ++iter) {
|
|
93
|
+
int max_digits = S2Testing::rnd.Uniform(11);
|
|
94
|
+
int64 scale = MathUtil::FastInt64Round(pow(10, max_digits));
|
|
95
|
+
int64 lat = MathUtil::FastInt64Round(
|
|
96
|
+
S2Testing::rnd.UniformDouble(-90 * scale, 90 * scale));
|
|
97
|
+
int64 lng = MathUtil::FastInt64Round(
|
|
98
|
+
S2Testing::rnd.UniformDouble(-180 * scale, 180 * scale));
|
|
99
|
+
S2LatLng ll = S2LatLng::FromDegrees(lat / static_cast<double>(scale),
|
|
100
|
+
lng / static_cast<double>(scale));
|
|
101
|
+
ExpectMaxDigits(ll, max_digits);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
TEST(ToString, UninitializedLoop) {
|
|
106
|
+
S2Loop loop;
|
|
107
|
+
EXPECT_EQ("", s2textformat::ToString(loop));
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
TEST(ToString, EmptyLoop) {
|
|
111
|
+
S2Loop empty(S2Loop::kEmpty());
|
|
112
|
+
EXPECT_EQ("empty", s2textformat::ToString(empty));
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
TEST(ToString, FullLoop) {
|
|
116
|
+
S2Loop full(S2Loop::kFull());
|
|
117
|
+
EXPECT_EQ("full", s2textformat::ToString(full));
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
TEST(ToString, FullLoopSpan) {
|
|
121
|
+
vector<S2Point> points;
|
|
122
|
+
EXPECT_EQ("full", s2textformat::ToString(S2PointLoopSpan(points)));
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
TEST(ToString, EmptyPolyline) {
|
|
126
|
+
S2Polyline polyline;
|
|
127
|
+
EXPECT_EQ("", s2textformat::ToString(polyline));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
TEST(ToString, EmptyPointVector) {
|
|
131
|
+
vector<S2Point> points;
|
|
132
|
+
EXPECT_EQ("", s2textformat::ToString(points));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
TEST(ToString, EmptyPolygon) {
|
|
136
|
+
S2Polygon empty;
|
|
137
|
+
EXPECT_EQ("empty", s2textformat::ToString(empty));
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
TEST(ToString, FullPolygon) {
|
|
141
|
+
S2Polygon full(absl::make_unique<S2Loop>(S2Loop::kFull()));
|
|
142
|
+
EXPECT_EQ("full", s2textformat::ToString(full));
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
TEST(ToString, S2PolygonLoopSeparator) {
|
|
146
|
+
const string kLoop1 = "0:0, 0:5, 5:0";
|
|
147
|
+
const string kLoop2 = "1:1, 1:4, 4:1"; // Shells and holes same direction.
|
|
148
|
+
auto polygon = s2textformat::MakePolygonOrDie(kLoop1 + "; " + kLoop2);
|
|
149
|
+
EXPECT_EQ(kLoop1 + ";\n" + kLoop2, s2textformat::ToString(*polygon));
|
|
150
|
+
EXPECT_EQ(kLoop1 + "; " + kLoop2, s2textformat::ToString(*polygon, "; "));
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
TEST(ToString, LaxPolygonLoopSeparator) {
|
|
154
|
+
const string kLoop1 = "0:0, 0:5, 5:0";
|
|
155
|
+
const string kLoop2 = "1:1, 4:1, 1:4"; // Interior on left of all loops.
|
|
156
|
+
auto polygon = s2textformat::MakeLaxPolygonOrDie(kLoop1 + "; " + kLoop2);
|
|
157
|
+
EXPECT_EQ(kLoop1 + ";\n" + kLoop2, s2textformat::ToString(*polygon));
|
|
158
|
+
EXPECT_EQ(kLoop1 + "; " + kLoop2, s2textformat::ToString(*polygon, "; "));
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
TEST(MakeLaxPolygon, Empty) {
|
|
162
|
+
// Verify that "" and "empty" both create empty polygons.
|
|
163
|
+
auto shape = s2textformat::MakeLaxPolygonOrDie("");
|
|
164
|
+
EXPECT_EQ(0, shape->num_loops());
|
|
165
|
+
shape = s2textformat::MakeLaxPolygonOrDie("empty");
|
|
166
|
+
EXPECT_EQ(0, shape->num_loops());
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
TEST(MakeLaxPolygon, Full) {
|
|
170
|
+
auto shape = s2textformat::MakeLaxPolygonOrDie("full");
|
|
171
|
+
EXPECT_EQ(1, shape->num_loops());
|
|
172
|
+
EXPECT_EQ(0, shape->num_loop_vertices(0));
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
TEST(MakeLaxPolygon, FullWithHole) {
|
|
176
|
+
auto shape = s2textformat::MakeLaxPolygonOrDie("full; 0:0");
|
|
177
|
+
EXPECT_EQ(2, shape->num_loops());
|
|
178
|
+
EXPECT_EQ(0, shape->num_loop_vertices(0));
|
|
179
|
+
EXPECT_EQ(1, shape->num_loop_vertices(1));
|
|
180
|
+
EXPECT_EQ(1, shape->num_edges());
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
void TestS2ShapeIndex(const string& str) {
|
|
184
|
+
EXPECT_EQ(str, s2textformat::ToString(*s2textformat::MakeIndexOrDie(str)));
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
TEST(ToString, S2ShapeIndex) {
|
|
188
|
+
TestS2ShapeIndex("# #");
|
|
189
|
+
TestS2ShapeIndex("0:0 # #");
|
|
190
|
+
TestS2ShapeIndex("0:0 | 1:0 # #");
|
|
191
|
+
TestS2ShapeIndex("0:0 | 1:0 # #");
|
|
192
|
+
TestS2ShapeIndex("# 0:0, 0:0 #");
|
|
193
|
+
TestS2ShapeIndex("# 0:0, 0:0 | 1:0, 2:0 #");
|
|
194
|
+
TestS2ShapeIndex("# # 0:0");
|
|
195
|
+
TestS2ShapeIndex("# # 0:0, 0:1");
|
|
196
|
+
TestS2ShapeIndex("# # 0:0, 0:1, 1:0");
|
|
197
|
+
TestS2ShapeIndex("# # 0:0, 0:1, 1:0; 2:2");
|
|
198
|
+
TestS2ShapeIndex("# # full");
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
TEST(MakePoint, ValidInput) {
|
|
202
|
+
S2Point point;
|
|
203
|
+
EXPECT_TRUE(s2textformat::MakePoint("-20:150", &point));
|
|
204
|
+
EXPECT_EQ(S2LatLng::FromDegrees(-20, 150).ToPoint(), point);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
TEST(MakePoint, InvalidInput) {
|
|
208
|
+
S2Point point;
|
|
209
|
+
EXPECT_FALSE(s2textformat::MakePoint("blah", &point));
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
TEST(SafeParseLatLngs, ValidInput) {
|
|
213
|
+
std::vector<S2LatLng> latlngs;
|
|
214
|
+
EXPECT_TRUE(
|
|
215
|
+
s2textformat::ParseLatLngs("-20:150, -20:151, -19:150", &latlngs));
|
|
216
|
+
ASSERT_EQ(3, latlngs.size());
|
|
217
|
+
EXPECT_EQ(latlngs[0], S2LatLng::FromDegrees(-20, 150));
|
|
218
|
+
EXPECT_EQ(latlngs[1], S2LatLng::FromDegrees(-20, 151));
|
|
219
|
+
EXPECT_EQ(latlngs[2], S2LatLng::FromDegrees(-19, 150));
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
TEST(SafeParseLatLngs, InvalidInput) {
|
|
223
|
+
std::vector<S2LatLng> latlngs;
|
|
224
|
+
EXPECT_FALSE(s2textformat::ParseLatLngs("blah", &latlngs));
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
TEST(SafeParsePoints, ValidInput) {
|
|
228
|
+
std::vector<S2Point> vertices;
|
|
229
|
+
EXPECT_TRUE(
|
|
230
|
+
s2textformat::ParsePoints("-20:150, -20:151, -19:150", &vertices));
|
|
231
|
+
ASSERT_EQ(3, vertices.size());
|
|
232
|
+
EXPECT_EQ(vertices[0], S2LatLng::FromDegrees(-20, 150).ToPoint());
|
|
233
|
+
EXPECT_EQ(vertices[1], S2LatLng::FromDegrees(-20, 151).ToPoint());
|
|
234
|
+
EXPECT_EQ(vertices[2], S2LatLng::FromDegrees(-19, 150).ToPoint());
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
TEST(SafeParsePoints, InvalidInput) {
|
|
238
|
+
std::vector<S2Point> vertices;
|
|
239
|
+
EXPECT_FALSE(s2textformat::ParsePoints("blah", &vertices));
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
TEST(SafeMakeLatLngRect, ValidInput) {
|
|
243
|
+
S2LatLngRect rect;
|
|
244
|
+
EXPECT_TRUE(s2textformat::MakeLatLngRect("-10:-10, 10:10", &rect));
|
|
245
|
+
EXPECT_EQ(rect, S2LatLngRect(S2LatLng::FromDegrees(-10, -10),
|
|
246
|
+
S2LatLng::FromDegrees(10, 10)));
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
TEST(SafeMakeLatLngRect, InvalidInput) {
|
|
250
|
+
S2LatLngRect rect;
|
|
251
|
+
EXPECT_FALSE(s2textformat::MakeLatLngRect("blah", &rect));
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
TEST(SafeMakeLatLng, ValidInput) {
|
|
255
|
+
S2LatLng latlng;
|
|
256
|
+
EXPECT_TRUE(s2textformat::MakeLatLng("-12.3:45.6", &latlng));
|
|
257
|
+
EXPECT_EQ(latlng, S2LatLng(S2LatLng::FromDegrees(-12.3, 45.6)));
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
TEST(SafeMakeLatLng, InvalidInput) {
|
|
261
|
+
S2LatLng latlng;
|
|
262
|
+
EXPECT_FALSE(s2textformat::MakeLatLng("blah", &latlng));
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
TEST(SafeMakeCellId, ValidInput) {
|
|
266
|
+
S2CellId cell_id;
|
|
267
|
+
EXPECT_TRUE(s2textformat::MakeCellId("3/", &cell_id));
|
|
268
|
+
EXPECT_EQ(cell_id, S2CellId::FromFace(3));
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
TEST(SafeMakeCellId, InvalidInput) {
|
|
272
|
+
S2CellId cell_id;
|
|
273
|
+
EXPECT_FALSE(s2textformat::MakeCellId("blah", &cell_id));
|
|
274
|
+
EXPECT_FALSE(s2textformat::MakeCellId("6/0", &cell_id));
|
|
275
|
+
EXPECT_FALSE(s2textformat::MakeCellId("3/04", &cell_id));
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
TEST(SafeMakeCellUnion, ValidInput) {
|
|
279
|
+
S2CellUnion cell_union;
|
|
280
|
+
EXPECT_TRUE(s2textformat::MakeCellUnion("1/3, 4/", &cell_union));
|
|
281
|
+
S2CellUnion expected({S2CellId::FromFace(1).child(3), S2CellId::FromFace(4)});
|
|
282
|
+
EXPECT_EQ(cell_union, expected);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
TEST(SafeMakeCellUnion, InvalidInput) {
|
|
286
|
+
S2CellUnion cell_union;
|
|
287
|
+
EXPECT_FALSE(s2textformat::MakeCellUnion("abc", &cell_union));
|
|
288
|
+
EXPECT_FALSE(s2textformat::MakeCellUnion("3/1 4/1", &cell_union));
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
TEST(SafeMakeLoop, ValidInput) {
|
|
292
|
+
std::unique_ptr<S2Loop> loop;
|
|
293
|
+
EXPECT_TRUE(s2textformat::MakeLoop("-20:150, -20:151, -19:150", &loop));
|
|
294
|
+
EXPECT_TRUE(loop->BoundaryApproxEquals(
|
|
295
|
+
S2Loop({S2LatLng::FromDegrees(-20, 150).ToPoint(),
|
|
296
|
+
S2LatLng::FromDegrees(-20, 151).ToPoint(),
|
|
297
|
+
S2LatLng::FromDegrees(-19, 150).ToPoint()})));
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
TEST(SafeMakeLoop, InvalidInput) {
|
|
301
|
+
std::unique_ptr<S2Loop> loop;
|
|
302
|
+
EXPECT_FALSE(s2textformat::MakeLoop("blah", &loop));
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
TEST(SafeMakePolyline, ValidInput) {
|
|
306
|
+
std::unique_ptr<S2Polyline> polyline;
|
|
307
|
+
EXPECT_TRUE(
|
|
308
|
+
s2textformat::MakePolyline("-20:150, -20:151, -19:150", &polyline));
|
|
309
|
+
S2Polyline expected({S2LatLng::FromDegrees(-20, 150).ToPoint(),
|
|
310
|
+
S2LatLng::FromDegrees(-20, 151).ToPoint(),
|
|
311
|
+
S2LatLng::FromDegrees(-19, 150).ToPoint()});
|
|
312
|
+
EXPECT_TRUE(polyline->Equals(&expected));
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
TEST(SafeMakePolyline, InvalidInput) {
|
|
316
|
+
std::unique_ptr<S2Polyline> polyline;
|
|
317
|
+
EXPECT_FALSE(s2textformat::MakePolyline("blah", &polyline));
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
TEST(SafeMakeLaxPolyline, ValidInput) {
|
|
321
|
+
std::unique_ptr<S2LaxPolylineShape> lax_polyline;
|
|
322
|
+
EXPECT_TRUE(s2textformat::MakeLaxPolyline("-20:150, -20:151, -19:150",
|
|
323
|
+
&lax_polyline));
|
|
324
|
+
// No easy equality check for LaxPolylines; check vertices instead.
|
|
325
|
+
ASSERT_EQ(3, lax_polyline->num_vertices());
|
|
326
|
+
EXPECT_TRUE(S2LatLng(lax_polyline->vertex(0))
|
|
327
|
+
.ApproxEquals(S2LatLng::FromDegrees(-20, 150)));
|
|
328
|
+
EXPECT_TRUE(S2LatLng(lax_polyline->vertex(1))
|
|
329
|
+
.ApproxEquals(S2LatLng::FromDegrees(-20, 151)));
|
|
330
|
+
EXPECT_TRUE(S2LatLng(lax_polyline->vertex(2))
|
|
331
|
+
.ApproxEquals(S2LatLng::FromDegrees(-19, 150)));
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
TEST(SafeMakeLaxPolyline, InvalidInput) {
|
|
335
|
+
std::unique_ptr<S2LaxPolylineShape> lax_polyline;
|
|
336
|
+
EXPECT_FALSE(s2textformat::MakeLaxPolyline("blah", &lax_polyline));
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
TEST(SafeMakePolygon, ValidInput) {
|
|
340
|
+
std::unique_ptr<S2Polygon> polygon;
|
|
341
|
+
EXPECT_TRUE(s2textformat::MakePolygon("-20:150, -20:151, -19:150", &polygon));
|
|
342
|
+
std::vector<S2Point> vertices({S2LatLng::FromDegrees(-20, 150).ToPoint(),
|
|
343
|
+
S2LatLng::FromDegrees(-20, 151).ToPoint(),
|
|
344
|
+
S2LatLng::FromDegrees(-19, 150).ToPoint()});
|
|
345
|
+
S2Polygon expected(absl::make_unique<S2Loop>(vertices));
|
|
346
|
+
EXPECT_TRUE(polygon->Equals(&expected));
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
TEST(SafeMakePolygon, InvalidInput) {
|
|
350
|
+
std::unique_ptr<S2Polygon> polygon;
|
|
351
|
+
EXPECT_FALSE(s2textformat::MakePolygon("blah", &polygon));
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
TEST(SafeMakePolygon, Empty) {
|
|
355
|
+
// Verify that "" and "empty" both create empty polygons.
|
|
356
|
+
std::unique_ptr<S2Polygon> polygon;
|
|
357
|
+
EXPECT_TRUE(s2textformat::MakePolygon("", &polygon));
|
|
358
|
+
EXPECT_TRUE(polygon->is_empty());
|
|
359
|
+
EXPECT_TRUE(s2textformat::MakePolygon("empty", &polygon));
|
|
360
|
+
EXPECT_TRUE(polygon->is_empty());
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
TEST(SafeMakePolygon, Full) {
|
|
364
|
+
// Verify that "full" creates the full polygon.
|
|
365
|
+
std::unique_ptr<S2Polygon> polygon;
|
|
366
|
+
EXPECT_TRUE(s2textformat::MakePolygon("full", &polygon));
|
|
367
|
+
EXPECT_TRUE(polygon->is_full());
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
TEST(SafeMakeVerbatimPolygon, ValidInput) {
|
|
371
|
+
std::unique_ptr<S2Polygon> polygon;
|
|
372
|
+
EXPECT_TRUE(
|
|
373
|
+
s2textformat::MakeVerbatimPolygon("-20:150, -20:151, -19:150", &polygon));
|
|
374
|
+
std::vector<S2Point> vertices({S2LatLng::FromDegrees(-20, 150).ToPoint(),
|
|
375
|
+
S2LatLng::FromDegrees(-20, 151).ToPoint(),
|
|
376
|
+
S2LatLng::FromDegrees(-19, 150).ToPoint()});
|
|
377
|
+
S2Polygon expected(absl::make_unique<S2Loop>(vertices));
|
|
378
|
+
EXPECT_TRUE(polygon->Equals(&expected));
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
TEST(SafeMakeVerbatimPolygon, InvalidInput) {
|
|
382
|
+
std::unique_ptr<S2Polygon> polygon;
|
|
383
|
+
EXPECT_FALSE(s2textformat::MakeVerbatimPolygon("blah", &polygon));
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
TEST(SafeMakeLaxPolygon, ValidInput) {
|
|
387
|
+
std::unique_ptr<S2LaxPolygonShape> lax_polygon;
|
|
388
|
+
EXPECT_TRUE(
|
|
389
|
+
s2textformat::MakeLaxPolygon("-20:150, -20:151, -19:150", &lax_polygon));
|
|
390
|
+
// No easy equality check for LaxPolygons; check vertices instead.
|
|
391
|
+
ASSERT_EQ(1, lax_polygon->num_loops());
|
|
392
|
+
ASSERT_EQ(3, lax_polygon->num_vertices());
|
|
393
|
+
EXPECT_TRUE(S2LatLng(lax_polygon->loop_vertex(0, 0))
|
|
394
|
+
.ApproxEquals(S2LatLng::FromDegrees(-20, 150)));
|
|
395
|
+
EXPECT_TRUE(S2LatLng(lax_polygon->loop_vertex(0, 1))
|
|
396
|
+
.ApproxEquals(S2LatLng::FromDegrees(-20, 151)));
|
|
397
|
+
EXPECT_TRUE(S2LatLng(lax_polygon->loop_vertex(0, 2))
|
|
398
|
+
.ApproxEquals(S2LatLng::FromDegrees(-19, 150)));
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
TEST(SafeMakeLaxPolygon, InvalidInput) {
|
|
402
|
+
std::unique_ptr<S2LaxPolygonShape> lax_polygon;
|
|
403
|
+
EXPECT_FALSE(s2textformat::MakeLaxPolygon("blah", &lax_polygon));
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
TEST(SafeMakeIndex, ValidInput) {
|
|
407
|
+
auto index = absl::make_unique<MutableS2ShapeIndex>();
|
|
408
|
+
EXPECT_TRUE(s2textformat::MakeIndex("# 0:0, 0:0 | 1:0, 2:0 #", &index));
|
|
409
|
+
EXPECT_EQ("# 0:0, 0:0 | 1:0, 2:0 #", s2textformat::ToString(*index));
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
TEST(SafeMakeIndex, InvalidInput) {
|
|
413
|
+
auto index = absl::make_unique<MutableS2ShapeIndex>();
|
|
414
|
+
EXPECT_FALSE(s2textformat::MakeIndex("# blah #", &index));
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
} // namespace
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// Copyright 2005 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
|
|
18
|
+
#include "s2/s2wedge_relations.h"
|
|
19
|
+
|
|
20
|
+
#include "s2/s2predicates.h"
|
|
21
|
+
|
|
22
|
+
namespace S2 {
|
|
23
|
+
|
|
24
|
+
bool WedgeContains(
|
|
25
|
+
const S2Point& a0, const S2Point& ab1, const S2Point& a2,
|
|
26
|
+
const S2Point& b0, const S2Point& b2) {
|
|
27
|
+
// For A to contain B (where each loop interior is defined to be its left
|
|
28
|
+
// side), the CCW edge order around ab1 must be a2 b2 b0 a0. We split
|
|
29
|
+
// this test into two parts that test three vertices each.
|
|
30
|
+
return (s2pred::OrderedCCW(a2, b2, b0, ab1) &&
|
|
31
|
+
s2pred::OrderedCCW(b0, a0, a2, ab1));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
bool WedgeIntersects(
|
|
35
|
+
const S2Point& a0, const S2Point& ab1, const S2Point& a2,
|
|
36
|
+
const S2Point& b0, const S2Point& b2) {
|
|
37
|
+
// For A not to intersect B (where each loop interior is defined to be
|
|
38
|
+
// its left side), the CCW edge order around ab1 must be a0 b2 b0 a2.
|
|
39
|
+
// Note that it's important to write these conditions as negatives
|
|
40
|
+
// (!OrderedCCW(a,b,c,o) rather than Ordered(c,b,a,o)) to get correct
|
|
41
|
+
// results when two vertices are the same.
|
|
42
|
+
return !(s2pred::OrderedCCW(a0, b2, b0, ab1) &&
|
|
43
|
+
s2pred::OrderedCCW(b0, a2, a0, ab1));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
WedgeRelation GetWedgeRelation(
|
|
47
|
+
const S2Point& a0, const S2Point& ab1, const S2Point& a2,
|
|
48
|
+
const S2Point& b0, const S2Point& b2) {
|
|
49
|
+
// There are 6 possible edge orderings at a shared vertex (all
|
|
50
|
+
// of these orderings are circular, i.e. abcd == bcda):
|
|
51
|
+
//
|
|
52
|
+
// (1) a2 b2 b0 a0: A contains B
|
|
53
|
+
// (2) a2 a0 b0 b2: B contains A
|
|
54
|
+
// (3) a2 a0 b2 b0: A and B are disjoint
|
|
55
|
+
// (4) a2 b0 a0 b2: A and B intersect in one wedge
|
|
56
|
+
// (5) a2 b2 a0 b0: A and B intersect in one wedge
|
|
57
|
+
// (6) a2 b0 b2 a0: A and B intersect in two wedges
|
|
58
|
+
//
|
|
59
|
+
// We do not distinguish between 4, 5, and 6.
|
|
60
|
+
// We pay extra attention when some of the edges overlap. When edges
|
|
61
|
+
// overlap, several of these orderings can be satisfied, and we take
|
|
62
|
+
// the most specific.
|
|
63
|
+
if (a0 == b0 && a2 == b2) return WEDGE_EQUALS;
|
|
64
|
+
|
|
65
|
+
if (s2pred::OrderedCCW(a0, a2, b2, ab1)) {
|
|
66
|
+
// The cases with this vertex ordering are 1, 5, and 6,
|
|
67
|
+
// although case 2 is also possible if a2 == b2.
|
|
68
|
+
if (s2pred::OrderedCCW(b2, b0, a0, ab1)) return WEDGE_PROPERLY_CONTAINS;
|
|
69
|
+
|
|
70
|
+
// We are in case 5 or 6, or case 2 if a2 == b2.
|
|
71
|
+
return (a2 == b2) ? WEDGE_IS_PROPERLY_CONTAINED : WEDGE_PROPERLY_OVERLAPS;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// We are in case 2, 3, or 4.
|
|
75
|
+
if (s2pred::OrderedCCW(a0, b0, b2, ab1)) return WEDGE_IS_PROPERLY_CONTAINED;
|
|
76
|
+
return s2pred::OrderedCCW(a0, b0, a2, ab1) ?
|
|
77
|
+
WEDGE_IS_DISJOINT : WEDGE_PROPERLY_OVERLAPS;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
} // namespace S2
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// Copyright 2005 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
//
|
|
18
|
+
// Defines functions for determining the relationship between two angles
|
|
19
|
+
// ("wedges") that share a common vertex.
|
|
20
|
+
|
|
21
|
+
#ifndef S2_S2WEDGE_RELATIONS_H_
|
|
22
|
+
#define S2_S2WEDGE_RELATIONS_H_
|
|
23
|
+
|
|
24
|
+
#include "s2/s2point.h"
|
|
25
|
+
|
|
26
|
+
namespace S2 {
|
|
27
|
+
|
|
28
|
+
// Given an edge chain (x0, x1, x2), the wedge at x1 is the region to the
|
|
29
|
+
// left of the edges. More precisely, it is the set of all rays from x1x0
|
|
30
|
+
// (inclusive) to x1x2 (exclusive) in the *clockwise* direction.
|
|
31
|
+
//
|
|
32
|
+
// The following functions compare two *non-empty* wedges that share the
|
|
33
|
+
// same middle vertex: A=(a0, ab1, a2) and B=(b0, ab1, b2).
|
|
34
|
+
|
|
35
|
+
// Detailed relation from one wedge A to another wedge B.
|
|
36
|
+
enum WedgeRelation {
|
|
37
|
+
WEDGE_EQUALS, // A and B are equal.
|
|
38
|
+
WEDGE_PROPERLY_CONTAINS, // A is a strict superset of B.
|
|
39
|
+
WEDGE_IS_PROPERLY_CONTAINED, // A is a strict subset of B.
|
|
40
|
+
WEDGE_PROPERLY_OVERLAPS, // A-B, B-A, and A intersect B are non-empty.
|
|
41
|
+
WEDGE_IS_DISJOINT, // A and B are disjoint.
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// Returns the relation from wedge A to B.
|
|
45
|
+
// REQUIRES: A and B are non-empty.
|
|
46
|
+
WedgeRelation GetWedgeRelation(
|
|
47
|
+
const S2Point& a0, const S2Point& ab1, const S2Point& a2,
|
|
48
|
+
const S2Point& b0, const S2Point& b2);
|
|
49
|
+
|
|
50
|
+
// Returns true if wedge A contains wedge B. Equivalent to but faster than
|
|
51
|
+
// GetWedgeRelation() == WEDGE_PROPERLY_CONTAINS || WEDGE_EQUALS.
|
|
52
|
+
// REQUIRES: A and B are non-empty.
|
|
53
|
+
bool WedgeContains(const S2Point& a0, const S2Point& ab1, const S2Point& a2,
|
|
54
|
+
const S2Point& b0, const S2Point& b2);
|
|
55
|
+
|
|
56
|
+
// Returns true if wedge A intersects wedge B. Equivalent to but faster
|
|
57
|
+
// than GetWedgeRelation() != WEDGE_IS_DISJOINT.
|
|
58
|
+
// REQUIRES: A and B are non-empty.
|
|
59
|
+
bool WedgeIntersects(const S2Point& a0, const S2Point& ab1, const S2Point& a2,
|
|
60
|
+
const S2Point& b0, const S2Point& b2);
|
|
61
|
+
|
|
62
|
+
} // namespace S2
|
|
63
|
+
|
|
64
|
+
#endif // S2_S2WEDGE_RELATIONS_H_
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// Copyright 2005 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
|
|
18
|
+
#include "s2/s2wedge_relations.h"
|
|
19
|
+
|
|
20
|
+
#include <gtest/gtest.h>
|
|
21
|
+
#include "s2/s2point.h"
|
|
22
|
+
|
|
23
|
+
void TestWedge(S2Point a0, S2Point ab1, S2Point a2, S2Point b0, S2Point b2,
|
|
24
|
+
bool contains, bool intersects,
|
|
25
|
+
S2::WedgeRelation wedge_relation) {
|
|
26
|
+
a0 = a0.Normalize();
|
|
27
|
+
ab1 = ab1.Normalize();
|
|
28
|
+
a2 = a2.Normalize();
|
|
29
|
+
b0 = b0.Normalize();
|
|
30
|
+
b2 = b2.Normalize();
|
|
31
|
+
EXPECT_EQ(contains, S2::WedgeContains(a0, ab1, a2, b0, b2));
|
|
32
|
+
EXPECT_EQ(intersects, S2::WedgeIntersects(a0, ab1, a2, b0, b2));
|
|
33
|
+
EXPECT_EQ(wedge_relation, S2::GetWedgeRelation(a0, ab1, a2, b0, b2));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
TEST(S2WedgeRelations, Wedges) {
|
|
37
|
+
// For simplicity, all of these tests use an origin of (0, 0, 1).
|
|
38
|
+
// This shouldn't matter as long as the lower-level primitives are
|
|
39
|
+
// implemented correctly.
|
|
40
|
+
|
|
41
|
+
// Intersection in one wedge.
|
|
42
|
+
TestWedge(S2Point(-1, 0, 10), S2Point(0, 0, 1), S2Point(1, 2, 10),
|
|
43
|
+
S2Point(0, 1, 10), S2Point(1, -2, 10),
|
|
44
|
+
false, true, S2::WEDGE_PROPERLY_OVERLAPS);
|
|
45
|
+
// Intersection in two wedges.
|
|
46
|
+
TestWedge(S2Point(-1, -1, 10), S2Point(0, 0, 1), S2Point(1, -1, 10),
|
|
47
|
+
S2Point(1, 0, 10), S2Point(-1, 1, 10),
|
|
48
|
+
false, true, S2::WEDGE_PROPERLY_OVERLAPS);
|
|
49
|
+
|
|
50
|
+
// Normal containment.
|
|
51
|
+
TestWedge(S2Point(-1, -1, 10), S2Point(0, 0, 1), S2Point(1, -1, 10),
|
|
52
|
+
S2Point(-1, 0, 10), S2Point(1, 0, 10),
|
|
53
|
+
true, true, S2::WEDGE_PROPERLY_CONTAINS);
|
|
54
|
+
// Containment with equality on one side.
|
|
55
|
+
TestWedge(S2Point(2, 1, 10), S2Point(0, 0, 1), S2Point(-1, -1, 10),
|
|
56
|
+
S2Point(2, 1, 10), S2Point(1, -5, 10),
|
|
57
|
+
true, true, S2::WEDGE_PROPERLY_CONTAINS);
|
|
58
|
+
// Containment with equality on the other side.
|
|
59
|
+
TestWedge(S2Point(2, 1, 10), S2Point(0, 0, 1), S2Point(-1, -1, 10),
|
|
60
|
+
S2Point(1, -2, 10), S2Point(-1, -1, 10),
|
|
61
|
+
true, true, S2::WEDGE_PROPERLY_CONTAINS);
|
|
62
|
+
|
|
63
|
+
// Containment with equality on both sides.
|
|
64
|
+
TestWedge(S2Point(-2, 3, 10), S2Point(0, 0, 1), S2Point(4, -5, 10),
|
|
65
|
+
S2Point(-2, 3, 10), S2Point(4, -5, 10),
|
|
66
|
+
true, true, S2::WEDGE_EQUALS);
|
|
67
|
+
|
|
68
|
+
// Disjoint with equality on one side.
|
|
69
|
+
TestWedge(S2Point(-2, 3, 10), S2Point(0, 0, 1), S2Point(4, -5, 10),
|
|
70
|
+
S2Point(4, -5, 10), S2Point(-2, -3, 10),
|
|
71
|
+
false, false, S2::WEDGE_IS_DISJOINT);
|
|
72
|
+
// Disjoint with equality on the other side.
|
|
73
|
+
TestWedge(S2Point(-2, 3, 10), S2Point(0, 0, 1), S2Point(0, 5, 10),
|
|
74
|
+
S2Point(4, -5, 10), S2Point(-2, 3, 10),
|
|
75
|
+
false, false, S2::WEDGE_IS_DISJOINT);
|
|
76
|
+
// Disjoint with equality on both sides.
|
|
77
|
+
TestWedge(S2Point(-2, 3, 10), S2Point(0, 0, 1), S2Point(4, -5, 10),
|
|
78
|
+
S2Point(4, -5, 10), S2Point(-2, 3, 10),
|
|
79
|
+
false, false, S2::WEDGE_IS_DISJOINT);
|
|
80
|
+
|
|
81
|
+
// B contains A with equality on one side.
|
|
82
|
+
TestWedge(S2Point(2, 1, 10), S2Point(0, 0, 1), S2Point(1, -5, 10),
|
|
83
|
+
S2Point(2, 1, 10), S2Point(-1, -1, 10),
|
|
84
|
+
false, true, S2::WEDGE_IS_PROPERLY_CONTAINED);
|
|
85
|
+
// B contains A with equality on the other side.
|
|
86
|
+
TestWedge(S2Point(2, 1, 10), S2Point(0, 0, 1), S2Point(1, -5, 10),
|
|
87
|
+
S2Point(-2, 1, 10), S2Point(1, -5, 10),
|
|
88
|
+
false, true, S2::WEDGE_IS_PROPERLY_CONTAINED);
|
|
89
|
+
}
|