@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,63 @@
|
|
|
1
|
+
// Copyright 2017 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
|
+
// This file contains some basic tests of the templating support. Testing of
|
|
19
|
+
// the actual algorithms is in s2closest_point_query_test.cc.
|
|
20
|
+
|
|
21
|
+
#include "s2/s2closest_point_query_base.h"
|
|
22
|
+
|
|
23
|
+
#include <gtest/gtest.h>
|
|
24
|
+
#include "s2/s2max_distance_targets.h"
|
|
25
|
+
#include "s2/s2text_format.h"
|
|
26
|
+
|
|
27
|
+
namespace {
|
|
28
|
+
|
|
29
|
+
// This is a proof-of-concept prototype of a possible S2FurthestPointQuery
|
|
30
|
+
// class. The purpose of this test is just to make sure that the code
|
|
31
|
+
// compiles and does something reasonable.
|
|
32
|
+
template <class Data>
|
|
33
|
+
using FurthestPointQuery = S2ClosestPointQueryBase<S2MaxDistance, Data>;
|
|
34
|
+
|
|
35
|
+
class FurthestPointTarget final : public S2MaxDistancePointTarget {
|
|
36
|
+
public:
|
|
37
|
+
explicit FurthestPointTarget(const S2Point& point)
|
|
38
|
+
: S2MaxDistancePointTarget(point) {}
|
|
39
|
+
|
|
40
|
+
int max_brute_force_index_size() const override {
|
|
41
|
+
return 10; // Arbitrary.
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
TEST(S2ClosestPointQueryBase, MaxDistance) {
|
|
46
|
+
S2PointIndex<int> index;
|
|
47
|
+
auto points = s2textformat::ParsePointsOrDie("0:0, 1:0, 2:0, 3:0");
|
|
48
|
+
for (int i = 0; i < points.size(); ++i) {
|
|
49
|
+
index.Add(points[i], i);
|
|
50
|
+
}
|
|
51
|
+
FurthestPointQuery<int> query(&index);
|
|
52
|
+
FurthestPointQuery<int>::Options options;
|
|
53
|
+
options.set_max_results(1);
|
|
54
|
+
FurthestPointTarget target(s2textformat::MakePoint("4:0"));
|
|
55
|
+
auto results = query.FindClosestPoints(&target, options);
|
|
56
|
+
ASSERT_EQ(1, results.size());
|
|
57
|
+
EXPECT_EQ(points[0], results[0].point());
|
|
58
|
+
EXPECT_EQ(0, results[0].data());
|
|
59
|
+
EXPECT_NEAR(4, S1ChordAngle(results[0].distance()).ToAngle().degrees(),
|
|
60
|
+
1e-13);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
} // namespace
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
// Copyright 2015 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/s2closest_point_query.h"
|
|
19
|
+
|
|
20
|
+
#include <memory>
|
|
21
|
+
#include <vector>
|
|
22
|
+
|
|
23
|
+
#include <gtest/gtest.h>
|
|
24
|
+
#include "s2/third_party/absl/memory/memory.h"
|
|
25
|
+
#include "s2/s1angle.h"
|
|
26
|
+
#include "s2/s2cap.h"
|
|
27
|
+
#include "s2/s2cell_id.h"
|
|
28
|
+
#include "s2/s2closest_edge_query_testing.h"
|
|
29
|
+
#include "s2/s2edge_distances.h"
|
|
30
|
+
#include "s2/s2loop.h"
|
|
31
|
+
#include "s2/s2pointutil.h"
|
|
32
|
+
#include "s2/s2testing.h"
|
|
33
|
+
|
|
34
|
+
using absl::make_unique;
|
|
35
|
+
using std::pair;
|
|
36
|
+
using std::unique_ptr;
|
|
37
|
+
using std::vector;
|
|
38
|
+
|
|
39
|
+
using TestIndex = S2PointIndex<int>;
|
|
40
|
+
using TestQuery = S2ClosestPointQuery<int>;
|
|
41
|
+
|
|
42
|
+
TEST(S2ClosestPointQuery, NoPoints) {
|
|
43
|
+
TestIndex index;
|
|
44
|
+
TestQuery query(&index);
|
|
45
|
+
S2ClosestPointQueryPointTarget target(S2Point(1, 0, 0));
|
|
46
|
+
const auto results = query.FindClosestPoints(&target);
|
|
47
|
+
EXPECT_EQ(0, results.size());
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
TEST(S2ClosestPointQuery, ManyDuplicatePoints) {
|
|
51
|
+
static const int kNumPoints = 10000;
|
|
52
|
+
const S2Point kTestPoint(1, 0, 0);
|
|
53
|
+
TestIndex index;
|
|
54
|
+
for (int i = 0; i < kNumPoints; ++i) {
|
|
55
|
+
index.Add(kTestPoint, i);
|
|
56
|
+
}
|
|
57
|
+
TestQuery query(&index);
|
|
58
|
+
S2ClosestPointQueryPointTarget target(kTestPoint);
|
|
59
|
+
const auto results = query.FindClosestPoints(&target);
|
|
60
|
+
EXPECT_EQ(kNumPoints, results.size());
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
TEST(S2ClosestPointQuery, EmptyTargetOptimized) {
|
|
64
|
+
// Ensure that the optimized algorithm handles empty targets when a distance
|
|
65
|
+
// limit is specified.
|
|
66
|
+
TestIndex index;
|
|
67
|
+
for (int i = 0; i < 1000; ++i) {
|
|
68
|
+
index.Add(S2Testing::RandomPoint(), i);
|
|
69
|
+
}
|
|
70
|
+
TestQuery query(&index);
|
|
71
|
+
query.mutable_options()->set_max_distance(S1Angle::Radians(1e-5));
|
|
72
|
+
MutableS2ShapeIndex target_index;
|
|
73
|
+
S2ClosestPointQueryShapeIndexTarget target(&target_index);
|
|
74
|
+
EXPECT_EQ(0, query.FindClosestPoints(&target).size());
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// An abstract class that adds points to an S2PointIndex for benchmarking.
|
|
78
|
+
struct PointIndexFactory {
|
|
79
|
+
public:
|
|
80
|
+
virtual ~PointIndexFactory() {}
|
|
81
|
+
|
|
82
|
+
// Requests that approximately "num_points" points located within the given
|
|
83
|
+
// S2Cap bound should be added to "index".
|
|
84
|
+
virtual void AddPoints(const S2Cap& index_cap, int num_points,
|
|
85
|
+
TestIndex* index) const = 0;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
// Generates points that are regularly spaced along a circle. Points along a
|
|
89
|
+
// circle are nearly the worst case for distance calculations, since many
|
|
90
|
+
// points are nearly equidistant from any query point that is not immediately
|
|
91
|
+
// adjacent to the circle.
|
|
92
|
+
struct CirclePointIndexFactory : public PointIndexFactory {
|
|
93
|
+
void AddPoints(const S2Cap& index_cap, int num_points,
|
|
94
|
+
TestIndex* index) const override {
|
|
95
|
+
vector<S2Point> points = S2Testing::MakeRegularPoints(
|
|
96
|
+
index_cap.center(), index_cap.GetRadius(), num_points);
|
|
97
|
+
for (int i = 0; i < points.size(); ++i) {
|
|
98
|
+
index->Add(points[i], i);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
// Generates the vertices of a fractal whose convex hull approximately
|
|
104
|
+
// matches the given cap.
|
|
105
|
+
struct FractalPointIndexFactory : public PointIndexFactory {
|
|
106
|
+
void AddPoints(const S2Cap& index_cap, int num_points,
|
|
107
|
+
TestIndex* index) const override {
|
|
108
|
+
S2Testing::Fractal fractal;
|
|
109
|
+
fractal.SetLevelForApproxMaxEdges(num_points);
|
|
110
|
+
fractal.set_fractal_dimension(1.5);
|
|
111
|
+
unique_ptr<S2Loop> loop(
|
|
112
|
+
fractal.MakeLoop(S2Testing::GetRandomFrameAt(index_cap.center()),
|
|
113
|
+
index_cap.GetRadius()));
|
|
114
|
+
for (int i = 0; i < loop->num_vertices(); ++i) {
|
|
115
|
+
index->Add(loop->vertex(i), i);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
// Generates vertices on a square grid that includes the entire given cap.
|
|
121
|
+
struct GridPointIndexFactory : public PointIndexFactory {
|
|
122
|
+
void AddPoints(const S2Cap& index_cap, int num_points,
|
|
123
|
+
TestIndex* index) const override {
|
|
124
|
+
int sqrt_num_points = ceil(sqrt(num_points));
|
|
125
|
+
Matrix3x3_d frame = S2Testing::GetRandomFrameAt(index_cap.center());
|
|
126
|
+
double radius = index_cap.GetRadius().radians();
|
|
127
|
+
double spacing = 2 * radius / sqrt_num_points;
|
|
128
|
+
for (int i = 0; i < sqrt_num_points; ++i) {
|
|
129
|
+
for (int j = 0; j < sqrt_num_points; ++j) {
|
|
130
|
+
S2Point point(tan((i + 0.5) * spacing - radius),
|
|
131
|
+
tan((j + 0.5) * spacing - radius), 1.0);
|
|
132
|
+
index->Add(S2::FromFrame(frame, point.Normalize()),
|
|
133
|
+
i * sqrt_num_points + j);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
// The approximate radius of S2Cap from which query points are chosen.
|
|
140
|
+
static const S1Angle kTestCapRadius = S2Testing::KmToAngle(10);
|
|
141
|
+
|
|
142
|
+
// The result format required by CheckDistanceResults() in s2testing.h.
|
|
143
|
+
using TestingResult = pair<S2MinDistance, int>;
|
|
144
|
+
|
|
145
|
+
// Use "query" to find the closest point(s) to the given target, and extract
|
|
146
|
+
// the query results into the given vector. Also verify that the results
|
|
147
|
+
// satisfy the search criteria.
|
|
148
|
+
static void GetClosestPoints(TestQuery::Target* target, TestQuery* query,
|
|
149
|
+
vector<TestingResult>* results) {
|
|
150
|
+
const auto query_results = query->FindClosestPoints(target);
|
|
151
|
+
EXPECT_LE(query_results.size(), query->options().max_results());
|
|
152
|
+
const S2Region* region = query->options().region();
|
|
153
|
+
if (!region && query->options().max_distance() == S1ChordAngle::Infinity()) {
|
|
154
|
+
// We can predict exactly how many points should be returned.
|
|
155
|
+
EXPECT_EQ(std::min(query->options().max_results(),
|
|
156
|
+
query->index().num_points()),
|
|
157
|
+
query_results.size());
|
|
158
|
+
}
|
|
159
|
+
for (const auto& result : query_results) {
|
|
160
|
+
// Check that the point satisfies the region() condition.
|
|
161
|
+
if (region) EXPECT_TRUE(region->Contains(result.point()));
|
|
162
|
+
|
|
163
|
+
// Check that it satisfies the max_distance() condition.
|
|
164
|
+
EXPECT_LT(result.distance(), query->options().max_distance());
|
|
165
|
+
results->push_back(TestingResult(result.distance(), result.data()));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
static void TestFindClosestPoints(TestQuery::Target* target, TestQuery *query) {
|
|
170
|
+
vector<TestingResult> expected, actual;
|
|
171
|
+
query->mutable_options()->set_use_brute_force(true);
|
|
172
|
+
GetClosestPoints(target, query, &expected);
|
|
173
|
+
query->mutable_options()->set_use_brute_force(false);
|
|
174
|
+
GetClosestPoints(target, query, &actual);
|
|
175
|
+
EXPECT_TRUE(CheckDistanceResults(expected, actual,
|
|
176
|
+
query->options().max_results(),
|
|
177
|
+
query->options().max_distance(),
|
|
178
|
+
query->options().max_error()))
|
|
179
|
+
<< "max_results=" << query->options().max_results()
|
|
180
|
+
<< ", max_distance=" << query->options().max_distance()
|
|
181
|
+
<< ", max_error=" << query->options().max_error();
|
|
182
|
+
|
|
183
|
+
if (expected.empty()) return;
|
|
184
|
+
|
|
185
|
+
// Note that when options.max_error() > 0, expected[0].distance may not be
|
|
186
|
+
// the minimum distance. It is never larger by more than max_error(), but
|
|
187
|
+
// the actual value also depends on max_results().
|
|
188
|
+
//
|
|
189
|
+
// Here we verify that GetDistance() and IsDistanceLess() return results
|
|
190
|
+
// that are consistent with the max_error() setting.
|
|
191
|
+
S1ChordAngle max_error = query->options().max_error();
|
|
192
|
+
S1ChordAngle min_distance = expected[0].first;
|
|
193
|
+
EXPECT_LE(query->GetDistance(target), min_distance + max_error);
|
|
194
|
+
|
|
195
|
+
// Test IsDistanceLess().
|
|
196
|
+
EXPECT_FALSE(query->IsDistanceLess(target, min_distance - max_error));
|
|
197
|
+
EXPECT_TRUE(query->IsConservativeDistanceLessOrEqual(target, min_distance));
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// (Note that every query is checked using the brute force algorithm.)
|
|
201
|
+
static void TestWithIndexFactory(const PointIndexFactory& factory,
|
|
202
|
+
int num_indexes, int num_points,
|
|
203
|
+
int num_queries) {
|
|
204
|
+
// Build a set of S2PointIndexes containing the desired geometry.
|
|
205
|
+
vector<S2Cap> index_caps;
|
|
206
|
+
vector<unique_ptr<TestIndex>> indexes;
|
|
207
|
+
for (int i = 0; i < num_indexes; ++i) {
|
|
208
|
+
S2Testing::rnd.Reset(FLAGS_s2_random_seed + i);
|
|
209
|
+
index_caps.push_back(S2Cap(S2Testing::RandomPoint(), kTestCapRadius));
|
|
210
|
+
indexes.push_back(make_unique<TestIndex>());
|
|
211
|
+
factory.AddPoints(index_caps.back(), num_points, indexes.back().get());
|
|
212
|
+
}
|
|
213
|
+
for (int i = 0; i < num_queries; ++i) {
|
|
214
|
+
S2Testing::rnd.Reset(FLAGS_s2_random_seed + i);
|
|
215
|
+
int i_index = S2Testing::rnd.Uniform(num_indexes);
|
|
216
|
+
const S2Cap& index_cap = index_caps[i_index];
|
|
217
|
+
|
|
218
|
+
// Choose query points from an area approximately 4x larger than the
|
|
219
|
+
// geometry being tested.
|
|
220
|
+
S1Angle query_radius = 2 * index_cap.GetRadius();
|
|
221
|
+
S2Cap query_cap(index_cap.center(), query_radius);
|
|
222
|
+
TestQuery query(indexes[i_index].get());
|
|
223
|
+
|
|
224
|
+
// Occasionally we don't set any limit on the number of result points.
|
|
225
|
+
// (This may return all points if we also don't set a distance limit.)
|
|
226
|
+
if (!S2Testing::rnd.OneIn(5)) {
|
|
227
|
+
query.mutable_options()->set_max_results(1 + S2Testing::rnd.Uniform(10));
|
|
228
|
+
}
|
|
229
|
+
// We set a distance limit 2/3 of the time.
|
|
230
|
+
if (!S2Testing::rnd.OneIn(3)) {
|
|
231
|
+
query.mutable_options()->set_max_distance(
|
|
232
|
+
S2Testing::rnd.RandDouble() * query_radius);
|
|
233
|
+
}
|
|
234
|
+
if (S2Testing::rnd.OneIn(2)) {
|
|
235
|
+
// Choose a maximum error whose logarithm is uniformly distributed over
|
|
236
|
+
// a reasonable range, except that it is sometimes zero.
|
|
237
|
+
query.mutable_options()->set_max_error(S1Angle::Radians(
|
|
238
|
+
pow(1e-4, S2Testing::rnd.RandDouble()) * query_radius.radians()));
|
|
239
|
+
}
|
|
240
|
+
S2LatLngRect filter_rect = S2LatLngRect::FromCenterSize(
|
|
241
|
+
S2LatLng(S2Testing::SamplePoint(query_cap)),
|
|
242
|
+
S2LatLng(S2Testing::rnd.RandDouble() * kTestCapRadius,
|
|
243
|
+
S2Testing::rnd.RandDouble() * kTestCapRadius));
|
|
244
|
+
if (S2Testing::rnd.OneIn(5)) {
|
|
245
|
+
query.mutable_options()->set_region(&filter_rect);
|
|
246
|
+
}
|
|
247
|
+
int target_type = S2Testing::rnd.Uniform(4);
|
|
248
|
+
if (target_type == 0) {
|
|
249
|
+
// Find the points closest to a given point.
|
|
250
|
+
S2Point point = S2Testing::SamplePoint(query_cap);
|
|
251
|
+
TestQuery::PointTarget target(point);
|
|
252
|
+
TestFindClosestPoints(&target, &query);
|
|
253
|
+
} else if (target_type == 1) {
|
|
254
|
+
// Find the points closest to a given edge.
|
|
255
|
+
S2Point a = S2Testing::SamplePoint(query_cap);
|
|
256
|
+
S2Point b = S2Testing::SamplePoint(
|
|
257
|
+
S2Cap(a, pow(1e-4, S2Testing::rnd.RandDouble()) * query_radius));
|
|
258
|
+
TestQuery::EdgeTarget target(a, b);
|
|
259
|
+
TestFindClosestPoints(&target, &query);
|
|
260
|
+
} else if (target_type == 2) {
|
|
261
|
+
// Find the points closest to a given cell.
|
|
262
|
+
int min_level = S2::kMaxDiag.GetLevelForMaxValue(query_radius.radians());
|
|
263
|
+
int level = min_level + S2Testing::rnd.Uniform(
|
|
264
|
+
S2CellId::kMaxLevel - min_level + 1);
|
|
265
|
+
S2Point a = S2Testing::SamplePoint(query_cap);
|
|
266
|
+
S2Cell cell(S2CellId(a).parent(level));
|
|
267
|
+
TestQuery::CellTarget target(cell);
|
|
268
|
+
TestFindClosestPoints(&target, &query);
|
|
269
|
+
} else {
|
|
270
|
+
S2_DCHECK_EQ(3, target_type);
|
|
271
|
+
MutableS2ShapeIndex target_index;
|
|
272
|
+
s2testing::FractalLoopShapeIndexFactory().AddEdges(index_cap, 100,
|
|
273
|
+
&target_index);
|
|
274
|
+
TestQuery::ShapeIndexTarget target(&target_index);
|
|
275
|
+
target.set_include_interiors(S2Testing::rnd.OneIn(2));
|
|
276
|
+
TestFindClosestPoints(&target, &query);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
static const int kNumIndexes = 10;
|
|
282
|
+
static const int kNumPoints = 1000;
|
|
283
|
+
static const int kNumQueries = 50;
|
|
284
|
+
|
|
285
|
+
TEST(S2ClosestPointQueryTest, CirclePoints) {
|
|
286
|
+
TestWithIndexFactory(CirclePointIndexFactory(),
|
|
287
|
+
kNumIndexes, kNumPoints, kNumQueries);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
TEST(S2ClosestPointQueryTest, FractalPoints) {
|
|
291
|
+
TestWithIndexFactory(FractalPointIndexFactory(),
|
|
292
|
+
kNumIndexes, kNumPoints, kNumQueries);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
TEST(S2ClosestPointQueryTest, GridPoints) {
|
|
296
|
+
TestWithIndexFactory(GridPointIndexFactory(),
|
|
297
|
+
kNumIndexes, kNumPoints, kNumQueries);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
TEST(S2ClosestPointQueryTest, ConservativeCellDistanceIsUsed) {
|
|
301
|
+
const int saved_seed = FLAGS_s2_random_seed;
|
|
302
|
+
// These specific test cases happen to fail if max_error() is not properly
|
|
303
|
+
// taken into account when measuring distances to S2PointIndex cells. They
|
|
304
|
+
// all involve S2ShapeIndexTarget, which takes advantage of max_error() to
|
|
305
|
+
// optimize its distance calculation.
|
|
306
|
+
for (int seed : {16, 586, 589, 822, 1959, 2298, 3155, 3490, 3723, 4953}) {
|
|
307
|
+
FLAGS_s2_random_seed = seed;
|
|
308
|
+
TestWithIndexFactory(FractalPointIndexFactory(), 5, 100, 10);
|
|
309
|
+
}
|
|
310
|
+
FLAGS_s2_random_seed = saved_seed;
|
|
311
|
+
}
|
|
312
|
+
|