@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,385 @@
|
|
|
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
|
+
#ifndef S2_S2TESTING_H_
|
|
19
|
+
#define S2_S2TESTING_H_
|
|
20
|
+
|
|
21
|
+
#include <algorithm>
|
|
22
|
+
#include <memory>
|
|
23
|
+
#include <string>
|
|
24
|
+
#include <utility>
|
|
25
|
+
#include <vector>
|
|
26
|
+
|
|
27
|
+
#include "s2/base/commandlineflags.h"
|
|
28
|
+
#include "s2/base/integral_types.h"
|
|
29
|
+
#include "s2/_fp_contract_off.h"
|
|
30
|
+
#include "s2/r2.h"
|
|
31
|
+
#include "s2/s1angle.h"
|
|
32
|
+
#include "s2/s1chord_angle.h"
|
|
33
|
+
#include "s2/s2cell_id.h"
|
|
34
|
+
#include "s2/third_party/absl/base/macros.h"
|
|
35
|
+
#include "s2/util/math/matrix3x3.h"
|
|
36
|
+
|
|
37
|
+
class S1Angle;
|
|
38
|
+
class S2Cap;
|
|
39
|
+
class S2CellUnion;
|
|
40
|
+
class S2LatLng;
|
|
41
|
+
class S2LatLngRect;
|
|
42
|
+
class S2Loop;
|
|
43
|
+
class S2Polygon;
|
|
44
|
+
class S2Polyline;
|
|
45
|
+
class S2Region;
|
|
46
|
+
|
|
47
|
+
// You can optionally call S2Testing::rnd.Reset(FLAGS_s2_random_seed) at the
|
|
48
|
+
// start of a test or benchmark to ensure that its results do not depend on
|
|
49
|
+
// which other tests of benchmarks have run previously. This can help with
|
|
50
|
+
// debugging.
|
|
51
|
+
//
|
|
52
|
+
// This flag currently does *not* affect the initial seed value for
|
|
53
|
+
// S2Testing::rnd. TODO(user): Fix this.
|
|
54
|
+
S2_DECLARE_int32(s2_random_seed);
|
|
55
|
+
|
|
56
|
+
// This class defines various static functions that are useful for writing
|
|
57
|
+
// unit tests.
|
|
58
|
+
class S2Testing {
|
|
59
|
+
public:
|
|
60
|
+
// Returns a vector of points shaped as a regular polygon with
|
|
61
|
+
// num_vertices vertices, all on a circle of the specified angular
|
|
62
|
+
// radius around the center. The radius is the actual distance from
|
|
63
|
+
// the center to the circle along the sphere.
|
|
64
|
+
//
|
|
65
|
+
// If you want to construct a regular polygon, try this:
|
|
66
|
+
// S2Polygon polygon(S2Loop::MakeRegularLoop(center, radius, num_vertices));
|
|
67
|
+
static std::vector<S2Point> MakeRegularPoints(const S2Point& center,
|
|
68
|
+
S1Angle radius,
|
|
69
|
+
int num_vertices);
|
|
70
|
+
|
|
71
|
+
// Append the vertices of "loop" to "vertices".
|
|
72
|
+
static void AppendLoopVertices(const S2Loop& loop,
|
|
73
|
+
std::vector<S2Point>* vertices);
|
|
74
|
+
|
|
75
|
+
// A simple class that generates "Koch snowflake" fractals (see Wikipedia
|
|
76
|
+
// for an introduction). There is an option to control the fractal
|
|
77
|
+
// dimension (between 1.0 and 2.0); values between 1.02 and 1.50 are
|
|
78
|
+
// reasonable simulations of various coastlines. The default dimension
|
|
79
|
+
// (about 1.26) corresponds to the standard Koch snowflake. (The west coast
|
|
80
|
+
// of Britain has a fractal dimension of approximately 1.25.)
|
|
81
|
+
//
|
|
82
|
+
// The fractal is obtained by starting with an equilateral triangle and
|
|
83
|
+
// recursively subdividing each edge into four segments of equal length.
|
|
84
|
+
// Therefore the shape at level "n" consists of 3*(4**n) edges. Multi-level
|
|
85
|
+
// fractals are also supported: if you set min_level() to a non-negative
|
|
86
|
+
// value, then the recursive subdivision has an equal probability of
|
|
87
|
+
// stopping at any of the levels between the given min and max (inclusive).
|
|
88
|
+
// This yields a fractal where the perimeter of the original triangle is
|
|
89
|
+
// approximately equally divided between fractals at the various possible
|
|
90
|
+
// levels. If there are k distinct levels {min,..,max}, the expected number
|
|
91
|
+
// of edges at each level "i" is approximately 3*(4**i)/k.
|
|
92
|
+
class Fractal {
|
|
93
|
+
public:
|
|
94
|
+
// You must call set_max_level() or SetLevelForApproxMaxEdges() before
|
|
95
|
+
// calling MakeLoop().
|
|
96
|
+
Fractal();
|
|
97
|
+
|
|
98
|
+
// Set the maximum subdivision level for the fractal (see above).
|
|
99
|
+
// REQUIRES: max_level >= 0
|
|
100
|
+
void set_max_level(int max_level);
|
|
101
|
+
int max_level() const { return max_level_; }
|
|
102
|
+
|
|
103
|
+
// Set the minimum subdivision level for the fractal (see above). The
|
|
104
|
+
// default value of -1 causes the min and max levels to be the same. A
|
|
105
|
+
// min_level of 0 should be avoided since this creates a significant
|
|
106
|
+
// chance that none of the three original edges will be subdivided at all.
|
|
107
|
+
//
|
|
108
|
+
// DEFAULT: max_level()
|
|
109
|
+
void set_min_level(int min_level_arg);
|
|
110
|
+
int min_level() const { return min_level_arg_; }
|
|
111
|
+
|
|
112
|
+
// Set the min and/or max level to produce approximately the given number
|
|
113
|
+
// of edges. (The values are rounded to a nearby value of 3*(4**n).)
|
|
114
|
+
void SetLevelForApproxMinEdges(int min_edges);
|
|
115
|
+
void SetLevelForApproxMaxEdges(int max_edges);
|
|
116
|
+
|
|
117
|
+
// Set the fractal dimension. The default value of approximately 1.26
|
|
118
|
+
// corresponds to the stardard Koch curve. The value must lie in the
|
|
119
|
+
// range [1.0, 2.0).
|
|
120
|
+
//
|
|
121
|
+
// DEFAULT: log(4) / log(3) ~= 1.26
|
|
122
|
+
void set_fractal_dimension(double dimension);
|
|
123
|
+
double fractal_dimension() const { return dimension_; }
|
|
124
|
+
|
|
125
|
+
// Return a lower bound on ratio (Rmin / R), where "R" is the radius
|
|
126
|
+
// passed to MakeLoop() and "Rmin" is the minimum distance from the
|
|
127
|
+
// fractal boundary to its center, where all distances are measured in the
|
|
128
|
+
// tangent plane at the fractal's center. This can be used to inscribe
|
|
129
|
+
// another geometric figure within the fractal without intersection.
|
|
130
|
+
double min_radius_factor() const;
|
|
131
|
+
|
|
132
|
+
// Return the ratio (Rmax / R), where "R" is the radius passed to
|
|
133
|
+
// MakeLoop() and "Rmax" is the maximum distance from the fractal boundary
|
|
134
|
+
// to its center, where all distances are measured in the tangent plane at
|
|
135
|
+
// the fractal's center. This can be used to inscribe the fractal within
|
|
136
|
+
// some other geometric figure without intersection.
|
|
137
|
+
double max_radius_factor() const;
|
|
138
|
+
|
|
139
|
+
// Return a fractal loop centered around the z-axis of the given
|
|
140
|
+
// coordinate frame, with the first vertex in the direction of the
|
|
141
|
+
// positive x-axis. In order to avoid self-intersections, the fractal is
|
|
142
|
+
// generated by first drawing it in a 2D tangent plane to the unit sphere
|
|
143
|
+
// (touching at the fractal's center point) and then projecting the edges
|
|
144
|
+
// onto the sphere. This has the side effect of shrinking the fractal
|
|
145
|
+
// slightly compared to its nominal radius.
|
|
146
|
+
std::unique_ptr<S2Loop> MakeLoop(const Matrix3x3_d& frame,
|
|
147
|
+
S1Angle nominal_radius) const;
|
|
148
|
+
|
|
149
|
+
private:
|
|
150
|
+
void ComputeMinLevel();
|
|
151
|
+
void ComputeOffsets();
|
|
152
|
+
void GetR2Vertices(std::vector<R2Point>* vertices) const;
|
|
153
|
+
void GetR2VerticesHelper(const R2Point& v0, const R2Point& v4, int level,
|
|
154
|
+
std::vector<R2Point>* vertices) const;
|
|
155
|
+
|
|
156
|
+
int max_level_;
|
|
157
|
+
int min_level_arg_; // Value set by user
|
|
158
|
+
int min_level_; // Actual min level (depends on max_level_)
|
|
159
|
+
double dimension_;
|
|
160
|
+
|
|
161
|
+
// The ratio of the sub-edge length to the original edge length at each
|
|
162
|
+
// subdivision step.
|
|
163
|
+
double edge_fraction_;
|
|
164
|
+
|
|
165
|
+
// The distance from the original edge to the middle vertex at each
|
|
166
|
+
// subdivision step, as a fraction of the original edge length.
|
|
167
|
+
double offset_fraction_;
|
|
168
|
+
|
|
169
|
+
Fractal(const Fractal&) = delete;
|
|
170
|
+
void operator=(const Fractal&) = delete;
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
// Convert a distance on the Earth's surface to an angle.
|
|
174
|
+
// Do not use these methods in non-testing code; use s2earth.h instead.
|
|
175
|
+
static S1Angle MetersToAngle(double meters);
|
|
176
|
+
static S1Angle KmToAngle(double km);
|
|
177
|
+
|
|
178
|
+
// Convert an area in steradians (as returned by the S2 area methods) to
|
|
179
|
+
// square meters or square kilometers.
|
|
180
|
+
static double AreaToMeters2(double steradians);
|
|
181
|
+
static double AreaToKm2(double steradians);
|
|
182
|
+
|
|
183
|
+
// The Earth's mean radius in kilometers (according to NASA).
|
|
184
|
+
static const double kEarthRadiusKm;
|
|
185
|
+
|
|
186
|
+
// A deterministically-seeded random number generator.
|
|
187
|
+
class Random;
|
|
188
|
+
|
|
189
|
+
static Random rnd;
|
|
190
|
+
|
|
191
|
+
// Return a random unit-length vector.
|
|
192
|
+
static S2Point RandomPoint();
|
|
193
|
+
|
|
194
|
+
// Return a right-handed coordinate frame (three orthonormal vectors).
|
|
195
|
+
static void GetRandomFrame(S2Point* x, S2Point* y, S2Point* z);
|
|
196
|
+
static Matrix3x3_d GetRandomFrame();
|
|
197
|
+
|
|
198
|
+
// Given a unit-length z-axis, compute x- and y-axes such that (x,y,z) is a
|
|
199
|
+
// right-handed coordinate frame (three orthonormal vectors).
|
|
200
|
+
static void GetRandomFrameAt(const S2Point& z, S2Point* x, S2Point *y);
|
|
201
|
+
static Matrix3x3_d GetRandomFrameAt(const S2Point& z);
|
|
202
|
+
|
|
203
|
+
// Return a cap with a random axis such that the log of its area is
|
|
204
|
+
// uniformly distributed between the logs of the two given values.
|
|
205
|
+
// (The log of the cap angle is also approximately uniformly distributed.)
|
|
206
|
+
static S2Cap GetRandomCap(double min_area, double max_area);
|
|
207
|
+
|
|
208
|
+
// Return a point chosen uniformly at random (with respect to area)
|
|
209
|
+
// from the given cap.
|
|
210
|
+
static S2Point SamplePoint(const S2Cap& cap);
|
|
211
|
+
|
|
212
|
+
// Return a point chosen uniformly at random (with respect to area on the
|
|
213
|
+
// sphere) from the given latitude-longitude rectangle.
|
|
214
|
+
static S2Point SamplePoint(const S2LatLngRect& rect);
|
|
215
|
+
|
|
216
|
+
// Return a random cell id at the given level or at a randomly chosen
|
|
217
|
+
// level. The distribution is uniform over the space of cell ids,
|
|
218
|
+
// but only approximately uniform over the surface of the sphere.
|
|
219
|
+
static S2CellId GetRandomCellId(int level);
|
|
220
|
+
static S2CellId GetRandomCellId();
|
|
221
|
+
|
|
222
|
+
// Return a polygon with the specified center, number of concentric loops
|
|
223
|
+
// and vertices per loop.
|
|
224
|
+
static void ConcentricLoopsPolygon(const S2Point& center,
|
|
225
|
+
int num_loops,
|
|
226
|
+
int num_vertices_per_loop,
|
|
227
|
+
S2Polygon* polygon);
|
|
228
|
+
|
|
229
|
+
// Checks that "covering" completely covers the given region. If
|
|
230
|
+
// "check_tight" is true, also checks that it does not contain any cells
|
|
231
|
+
// that do not intersect the given region. ("id" is only used internally.)
|
|
232
|
+
static void CheckCovering(const S2Region& region,
|
|
233
|
+
const S2CellUnion& covering,
|
|
234
|
+
bool check_tight,
|
|
235
|
+
S2CellId id = S2CellId());
|
|
236
|
+
|
|
237
|
+
private:
|
|
238
|
+
// Contains static methods
|
|
239
|
+
S2Testing() = delete;
|
|
240
|
+
S2Testing(const S2Testing&) = delete;
|
|
241
|
+
void operator=(const S2Testing&) = delete;
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
// Functions in this class return random numbers that are as good as random()
|
|
245
|
+
// is. The results are reproducible since the seed is deterministic. This
|
|
246
|
+
// class is *NOT* thread-safe; it is only intended for testing purposes.
|
|
247
|
+
class S2Testing::Random {
|
|
248
|
+
public:
|
|
249
|
+
// Initialize using a deterministic seed.
|
|
250
|
+
Random();
|
|
251
|
+
|
|
252
|
+
// Reset the generator state using the given seed.
|
|
253
|
+
void Reset(int32 seed);
|
|
254
|
+
|
|
255
|
+
// Return a uniformly distributed 64-bit unsigned integer.
|
|
256
|
+
uint64 Rand64();
|
|
257
|
+
|
|
258
|
+
// Return a uniformly distributed 32-bit unsigned integer.
|
|
259
|
+
uint32 Rand32();
|
|
260
|
+
|
|
261
|
+
// Return a uniformly distributed "double" in the range [0,1). Note that
|
|
262
|
+
// the values returned are all multiples of 2**-53, which means that not all
|
|
263
|
+
// possible values in this range are returned.
|
|
264
|
+
double RandDouble();
|
|
265
|
+
|
|
266
|
+
// Return a uniformly distributed integer in the range [0,n).
|
|
267
|
+
int32 Uniform(int32 n);
|
|
268
|
+
|
|
269
|
+
// Return a uniformly distributed "double" in the range [min, limit).
|
|
270
|
+
double UniformDouble(double min, double limit);
|
|
271
|
+
|
|
272
|
+
// A functor-style version of Uniform, so that this class can be used with
|
|
273
|
+
// STL functions that require a RandomNumberGenerator concept.
|
|
274
|
+
int32 operator() (int32 n) {
|
|
275
|
+
return Uniform(n);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// Return true with probability 1 in n.
|
|
279
|
+
bool OneIn(int32 n);
|
|
280
|
+
|
|
281
|
+
// Skewed: pick "base" uniformly from range [0,max_log] and then
|
|
282
|
+
// return "base" random bits. The effect is to pick a number in the
|
|
283
|
+
// range [0,2^max_log-1] with bias towards smaller numbers.
|
|
284
|
+
int32 Skewed(int max_log);
|
|
285
|
+
|
|
286
|
+
private:
|
|
287
|
+
// Currently this class is based on random(), therefore it makes no sense to
|
|
288
|
+
// make a copy.
|
|
289
|
+
Random(const Random&) = delete;
|
|
290
|
+
void operator=(const Random&) = delete;
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
// Compare two sets of "closest" items, where "expected" is computed via brute
|
|
294
|
+
// force (i.e., considering every possible candidate) and "actual" is computed
|
|
295
|
+
// using a spatial data structure. Here "max_size" is a bound on the maximum
|
|
296
|
+
// number of items, "max_distance" is a limit on the distance to any item, and
|
|
297
|
+
// "max_error" is the maximum error allowed when selecting which items are
|
|
298
|
+
// closest (see S2ClosestEdgeQuery::Options::max_error).
|
|
299
|
+
template <typename Id, typename Distance>
|
|
300
|
+
bool CheckDistanceResults(
|
|
301
|
+
const std::vector<std::pair<Distance, Id>>& expected,
|
|
302
|
+
const std::vector<std::pair<Distance, Id>>& actual,
|
|
303
|
+
int max_size, Distance max_distance, typename Distance::Delta max_error);
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
//////////////////// Implementation Details Follow ////////////////////////
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
namespace S2 {
|
|
310
|
+
namespace internal {
|
|
311
|
+
|
|
312
|
+
// Check that result set "x" contains all the expected results from "y", and
|
|
313
|
+
// does not include any duplicate results.
|
|
314
|
+
template <typename Id, typename Distance>
|
|
315
|
+
bool CheckResultSet(const std::vector<std::pair<Distance, Id>>& x,
|
|
316
|
+
const std::vector<std::pair<Distance, Id>>& y,
|
|
317
|
+
int max_size, Distance max_distance,
|
|
318
|
+
typename Distance::Delta max_error,
|
|
319
|
+
typename Distance::Delta max_pruning_error,
|
|
320
|
+
const string& label) {
|
|
321
|
+
using Result = std::pair<Distance, Id>;
|
|
322
|
+
// Results should be sorted by distance, but not necessarily then by Id.
|
|
323
|
+
EXPECT_TRUE(std::is_sorted(x.begin(), x.end(),
|
|
324
|
+
[](const Result& x, const Result& y) {
|
|
325
|
+
return x.first < y.first;
|
|
326
|
+
}));
|
|
327
|
+
|
|
328
|
+
// Result set X should contain all the items from Y whose distance is less
|
|
329
|
+
// than "limit" computed below.
|
|
330
|
+
Distance limit = Distance::Zero();
|
|
331
|
+
if (x.size() < max_size) {
|
|
332
|
+
// Result set X was not limited by "max_size", so it should contain all
|
|
333
|
+
// the items up to "max_distance", except that a few items right near the
|
|
334
|
+
// distance limit may be missed because the distance measurements used for
|
|
335
|
+
// pruning S2Cells are not conservative.
|
|
336
|
+
if (max_distance == Distance::Infinity()) {
|
|
337
|
+
limit = max_distance;
|
|
338
|
+
} else {
|
|
339
|
+
limit = max_distance - max_pruning_error;
|
|
340
|
+
}
|
|
341
|
+
} else if (!x.empty()) {
|
|
342
|
+
// Result set X contains only the closest "max_size" items, to within a
|
|
343
|
+
// tolerance of "max_error + max_pruning_error".
|
|
344
|
+
limit = (x.back().first - max_error) - max_pruning_error;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
bool result = true;
|
|
348
|
+
for (const auto& yp : y) {
|
|
349
|
+
// Note that this test also catches duplicate values.
|
|
350
|
+
int count = std::count_if(x.begin(), x.end(), [&yp](const Result& xp) {
|
|
351
|
+
return xp.second == yp.second;
|
|
352
|
+
});
|
|
353
|
+
if (yp.first < limit && count != 1) {
|
|
354
|
+
result = false;
|
|
355
|
+
std::cout << (count > 1 ? "Duplicate" : label) << " distance = "
|
|
356
|
+
<< S1ChordAngle(yp.first) << ", id = " << yp.second
|
|
357
|
+
<< std::endl;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
return result;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
} // namespace internal
|
|
365
|
+
} // namespace S2
|
|
366
|
+
|
|
367
|
+
template <typename Id, typename Distance>
|
|
368
|
+
bool CheckDistanceResults(
|
|
369
|
+
const std::vector<std::pair<Distance, Id>>& expected,
|
|
370
|
+
const std::vector<std::pair<Distance, Id>>& actual,
|
|
371
|
+
int max_size, Distance max_distance, typename Distance::Delta max_error) {
|
|
372
|
+
// This is a conservative bound on the error in computing the distance from
|
|
373
|
+
// the target geometry to an S2Cell. Such errors can cause candidates to be
|
|
374
|
+
// pruned from the result set even though they may be slightly closer.
|
|
375
|
+
static const typename Distance::Delta kMaxPruningError(
|
|
376
|
+
S1ChordAngle::Radians(1e-15));
|
|
377
|
+
return (S2::internal::CheckResultSet(
|
|
378
|
+
actual, expected, max_size, max_distance, max_error,
|
|
379
|
+
kMaxPruningError, "Missing") & /*not &&*/
|
|
380
|
+
S2::internal::CheckResultSet(
|
|
381
|
+
expected, actual, max_size, max_distance, max_error,
|
|
382
|
+
Distance::Delta::Zero(), "Extra"));
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
#endif // S2_S2TESTING_H_
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
// Copyright 2012 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/s2testing.h"
|
|
19
|
+
|
|
20
|
+
#include <algorithm>
|
|
21
|
+
#include <cmath>
|
|
22
|
+
#include <memory>
|
|
23
|
+
|
|
24
|
+
#include "s2/base/logging.h"
|
|
25
|
+
#include <gtest/gtest.h>
|
|
26
|
+
|
|
27
|
+
#include "s2/s1angle.h"
|
|
28
|
+
#include "s2/s2loop.h"
|
|
29
|
+
|
|
30
|
+
using std::max;
|
|
31
|
+
using std::min;
|
|
32
|
+
using std::unique_ptr;
|
|
33
|
+
|
|
34
|
+
namespace {
|
|
35
|
+
|
|
36
|
+
int NumVerticesAtLevel(int level) {
|
|
37
|
+
S2_DCHECK(level >= 0 && level <= 14); // Sanity / overflow check
|
|
38
|
+
return 3 * (1 << (2 * level)); // 3*(4**level)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
void TestFractal(int min_level, int max_level, double dimension) {
|
|
42
|
+
// This function constructs a fractal and then computes various metrics
|
|
43
|
+
// (number of vertices, total length, minimum and maximum radius) and
|
|
44
|
+
// verifies that they are within expected tolerances. Essentially this
|
|
45
|
+
// directly verifies that the shape constructed *is* a fractal, i.e. the
|
|
46
|
+
// total length of the curve increases exponentially with the level, while
|
|
47
|
+
// the area bounded by the fractal is more or less constant.
|
|
48
|
+
|
|
49
|
+
// The radius needs to be fairly small to avoid spherical distortions.
|
|
50
|
+
const double nominal_radius = 0.001; // radians, or about 6km
|
|
51
|
+
const double kDistortionError = 1e-5;
|
|
52
|
+
|
|
53
|
+
S2Testing::Fractal fractal;
|
|
54
|
+
fractal.set_min_level(min_level);
|
|
55
|
+
fractal.set_max_level(max_level);
|
|
56
|
+
fractal.set_fractal_dimension(dimension);
|
|
57
|
+
Matrix3x3_d frame = S2Testing::GetRandomFrame();
|
|
58
|
+
unique_ptr<S2Loop> loop(
|
|
59
|
+
fractal.MakeLoop(frame, S1Angle::Radians(nominal_radius)));
|
|
60
|
+
ASSERT_TRUE(loop->IsValid());
|
|
61
|
+
|
|
62
|
+
// If min_level and max_level are not equal, then the number of vertices and
|
|
63
|
+
// the total length of the curve are subject to random variation. Here we
|
|
64
|
+
// compute an approximation of the standard deviation relative to the mean,
|
|
65
|
+
// noting that most of the variance is due to the random choices about
|
|
66
|
+
// whether to stop subdividing at "min_level" or not. (The random choices
|
|
67
|
+
// at higher levels contribute progressively less and less to the variance.)
|
|
68
|
+
// The "relative_error" below corresponds to *one* standard deviation of
|
|
69
|
+
// error; it can be increased to a higher multiple if necessary.
|
|
70
|
+
//
|
|
71
|
+
// Details: Let n=3*(4**min_level) and k=(max_level-min_level+1). Each of
|
|
72
|
+
// the "n" edges at min_level stops subdividing at that level with
|
|
73
|
+
// probability (1/k). This gives a binomial distribution with mean u=(n/k)
|
|
74
|
+
// and standard deviation s=sqrt((n/k)(1-1/k)). The relative error (s/u)
|
|
75
|
+
// can be simplified to sqrt((k-1)/n).
|
|
76
|
+
int num_levels = max_level - min_level + 1;
|
|
77
|
+
int min_vertices = NumVerticesAtLevel(min_level);
|
|
78
|
+
double relative_error = sqrt((num_levels - 1.0) / min_vertices);
|
|
79
|
+
|
|
80
|
+
// "expansion_factor" is the total fractal length at level "n+1" divided by
|
|
81
|
+
// the total fractal length at level "n".
|
|
82
|
+
double expansion_factor = pow(4, 1 - 1/dimension);
|
|
83
|
+
double expected_num_vertices = 0;
|
|
84
|
+
double expected_length_sum = 0;
|
|
85
|
+
|
|
86
|
+
// "triangle_perim" is the perimeter of the original equilateral triangle
|
|
87
|
+
// before any subdivision occurs.
|
|
88
|
+
double triangle_perim = 3 * sqrt(3) * tan(nominal_radius);
|
|
89
|
+
double min_length_sum = triangle_perim * pow(expansion_factor, min_level);
|
|
90
|
+
for (int level = min_level; level <= max_level; ++level) {
|
|
91
|
+
expected_num_vertices += NumVerticesAtLevel(level);
|
|
92
|
+
expected_length_sum += pow(expansion_factor, level);
|
|
93
|
+
}
|
|
94
|
+
expected_num_vertices /= num_levels;
|
|
95
|
+
expected_length_sum *= triangle_perim / num_levels;
|
|
96
|
+
|
|
97
|
+
EXPECT_GE(loop->num_vertices(), min_vertices);
|
|
98
|
+
EXPECT_LE(loop->num_vertices(), NumVerticesAtLevel(max_level));
|
|
99
|
+
EXPECT_NEAR(expected_num_vertices, loop->num_vertices(),
|
|
100
|
+
relative_error * (expected_num_vertices - min_vertices));
|
|
101
|
+
|
|
102
|
+
S2Point center = frame.Col(2);
|
|
103
|
+
double min_radius = 2 * M_PI;
|
|
104
|
+
double max_radius = 0;
|
|
105
|
+
double length_sum = 0;
|
|
106
|
+
for (int i = 0; i < loop->num_vertices(); ++i) {
|
|
107
|
+
// Measure the radius of the fractal in the tangent plane at "center".
|
|
108
|
+
double r = tan(center.Angle(loop->vertex(i)));
|
|
109
|
+
min_radius = min(min_radius, r);
|
|
110
|
+
max_radius = max(max_radius, r);
|
|
111
|
+
length_sum += loop->vertex(i).Angle(loop->vertex(i+1));
|
|
112
|
+
}
|
|
113
|
+
// kVertexError is an approximate bound on the error when computing vertex
|
|
114
|
+
// positions of the fractal (due to S2::FromFrame, trig calculations, etc).
|
|
115
|
+
const double kVertexError = 1e-14;
|
|
116
|
+
|
|
117
|
+
// Although min_radius_factor() is only a lower bound in general, it happens
|
|
118
|
+
// to be exact (to within numerical errors) unless the dimension is in the
|
|
119
|
+
// range (1.0, 1.09).
|
|
120
|
+
if (dimension == 1.0 || dimension >= 1.09) {
|
|
121
|
+
// Expect the min radius to match very closely.
|
|
122
|
+
EXPECT_NEAR(min_radius, fractal.min_radius_factor() * nominal_radius,
|
|
123
|
+
kVertexError);
|
|
124
|
+
} else {
|
|
125
|
+
// Expect the min radius to satisfy the lower bound.
|
|
126
|
+
EXPECT_GE(min_radius,
|
|
127
|
+
fractal.min_radius_factor() * nominal_radius - kVertexError);
|
|
128
|
+
}
|
|
129
|
+
// max_radius_factor() is exact (modulo errors) for all dimensions.
|
|
130
|
+
EXPECT_NEAR(max_radius, fractal.max_radius_factor() * nominal_radius,
|
|
131
|
+
kVertexError);
|
|
132
|
+
|
|
133
|
+
EXPECT_NEAR(expected_length_sum, length_sum,
|
|
134
|
+
relative_error * (expected_length_sum - min_length_sum) +
|
|
135
|
+
kDistortionError * length_sum);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
TEST(S2Testing, TriangleFractal) {
|
|
139
|
+
TestFractal(7, 7, 1.0);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
TEST(S2Testing, TriangleMultiFractal) {
|
|
143
|
+
TestFractal(2, 6, 1.0);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
TEST(S2Testing, SpaceFillingFractal) {
|
|
147
|
+
TestFractal(4, 4, 1.999);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
TEST(S2Testing, KochCurveFractal) {
|
|
151
|
+
TestFractal(7, 7, log(4)/log(3));
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
TEST(S2Testing, KochCurveMultiFractal) {
|
|
155
|
+
TestFractal(4, 8, log(4)/log(3));
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
TEST(S2Testing, CesaroFractal) {
|
|
159
|
+
TestFractal(7, 7, 1.8);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
TEST(S2Testing, CesaroMultiFractal) {
|
|
163
|
+
TestFractal(3, 6, 1.8);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
} // namespace
|