@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.
Files changed (471) hide show
  1. package/.circleci/config.yml +45 -0
  2. package/.dockerignore +1 -0
  3. package/.gitmodules +3 -0
  4. package/CHANGELOG.md +33 -0
  5. package/LICENSE +201 -0
  6. package/README.md +147 -0
  7. package/binding.gyp +170 -0
  8. package/docker/Dockerfile.node20.test +8 -0
  9. package/docker/Dockerfile.node22.test +8 -0
  10. package/docker/Dockerfile.node24.test +8 -0
  11. package/index.d.ts +117 -0
  12. package/index.js +6 -0
  13. package/jest.config.js +184 -0
  14. package/package.json +43 -0
  15. package/publish-linux.sh +18 -0
  16. package/publish-osx.sh +19 -0
  17. package/src/builder.cc +84 -0
  18. package/src/builder.h +29 -0
  19. package/src/cell.cc +71 -0
  20. package/src/cell.h +26 -0
  21. package/src/cell_id.cc +210 -0
  22. package/src/cell_id.h +44 -0
  23. package/src/cell_union.cc +237 -0
  24. package/src/cell_union.h +34 -0
  25. package/src/earth.cc +185 -0
  26. package/src/earth.h +33 -0
  27. package/src/latlng.cc +132 -0
  28. package/src/latlng.h +28 -0
  29. package/src/loop.cc +51 -0
  30. package/src/loop.h +21 -0
  31. package/src/point.cc +69 -0
  32. package/src/point.h +23 -0
  33. package/src/polygon.cc +36 -0
  34. package/src/polygon.h +20 -0
  35. package/src/polyline.cc +186 -0
  36. package/src/polyline.h +34 -0
  37. package/src/region_coverer.cc +450 -0
  38. package/src/region_coverer.h +56 -0
  39. package/src/s2.cc +27 -0
  40. package/test/Cell.test.js +37 -0
  41. package/test/CellId.test.js +135 -0
  42. package/test/CellUnion.test.js +150 -0
  43. package/test/Earth.test.js +62 -0
  44. package/test/LatLng.test.js +45 -0
  45. package/test/Point.test.js +14 -0
  46. package/test/Polyline.test.js +78 -0
  47. package/test/RegionCoverer.test.js +301 -0
  48. package/test.sh +16 -0
  49. package/third_party/s2geometry/.travis.yml +163 -0
  50. package/third_party/s2geometry/AUTHORS +13 -0
  51. package/third_party/s2geometry/CONTRIBUTING.md +65 -0
  52. package/third_party/s2geometry/CONTRIBUTORS +30 -0
  53. package/third_party/s2geometry/LICENSE +202 -0
  54. package/third_party/s2geometry/NOTICE +5 -0
  55. package/third_party/s2geometry/README.md +127 -0
  56. package/third_party/s2geometry/doc/examples/point_index.cc +44 -0
  57. package/third_party/s2geometry/doc/examples/term_index.cc +99 -0
  58. package/third_party/s2geometry/doc/examples/term_index.py +101 -0
  59. package/third_party/s2geometry/src/python/coder.i +125 -0
  60. package/third_party/s2geometry/src/python/pywraps2_test.py +786 -0
  61. package/third_party/s2geometry/src/python/s2.i +37 -0
  62. package/third_party/s2geometry/src/python/s2_common.i +756 -0
  63. package/third_party/s2geometry/src/s2/_fp_contract_off.h +60 -0
  64. package/third_party/s2geometry/src/s2/base/casts.h +318 -0
  65. package/third_party/s2geometry/src/s2/base/commandlineflags.h +67 -0
  66. package/third_party/s2geometry/src/s2/base/integral_types.h +31 -0
  67. package/third_party/s2geometry/src/s2/base/log_severity.h +40 -0
  68. package/third_party/s2geometry/src/s2/base/logging.h +173 -0
  69. package/third_party/s2geometry/src/s2/base/mutex.h +61 -0
  70. package/third_party/s2geometry/src/s2/base/port.h +999 -0
  71. package/third_party/s2geometry/src/s2/base/spinlock.h +60 -0
  72. package/third_party/s2geometry/src/s2/base/stringprintf.cc +107 -0
  73. package/third_party/s2geometry/src/s2/base/stringprintf.h +53 -0
  74. package/third_party/s2geometry/src/s2/base/strtoint.cc +65 -0
  75. package/third_party/s2geometry/src/s2/base/strtoint.h +106 -0
  76. package/third_party/s2geometry/src/s2/base/timer.h +50 -0
  77. package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.cc +164 -0
  78. package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.h +110 -0
  79. package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector_test.cc +232 -0
  80. package/third_party/s2geometry/src/s2/encoded_s2point_vector.cc +838 -0
  81. package/third_party/s2geometry/src/s2/encoded_s2point_vector.h +140 -0
  82. package/third_party/s2geometry/src/s2/encoded_s2point_vector_test.cc +344 -0
  83. package/third_party/s2geometry/src/s2/encoded_s2shape_index.cc +181 -0
  84. package/third_party/s2geometry/src/s2/encoded_s2shape_index.h +276 -0
  85. package/third_party/s2geometry/src/s2/encoded_s2shape_index_test.cc +244 -0
  86. package/third_party/s2geometry/src/s2/encoded_string_vector.cc +66 -0
  87. package/third_party/s2geometry/src/s2/encoded_string_vector.h +164 -0
  88. package/third_party/s2geometry/src/s2/encoded_string_vector_test.cc +69 -0
  89. package/third_party/s2geometry/src/s2/encoded_uint_vector.h +299 -0
  90. package/third_party/s2geometry/src/s2/encoded_uint_vector_test.cc +124 -0
  91. package/third_party/s2geometry/src/s2/id_set_lexicon.cc +81 -0
  92. package/third_party/s2geometry/src/s2/id_set_lexicon.h +199 -0
  93. package/third_party/s2geometry/src/s2/id_set_lexicon_test.cc +70 -0
  94. package/third_party/s2geometry/src/s2/mutable_s2shape_index.cc +1585 -0
  95. package/third_party/s2geometry/src/s2/mutable_s2shape_index.h +600 -0
  96. package/third_party/s2geometry/src/s2/mutable_s2shape_index_test.cc +589 -0
  97. package/third_party/s2geometry/src/s2/r1interval.h +220 -0
  98. package/third_party/s2geometry/src/s2/r1interval_test.cc +185 -0
  99. package/third_party/s2geometry/src/s2/r2.h +26 -0
  100. package/third_party/s2geometry/src/s2/r2rect.cc +93 -0
  101. package/third_party/s2geometry/src/s2/r2rect.h +234 -0
  102. package/third_party/s2geometry/src/s2/r2rect_test.cc +228 -0
  103. package/third_party/s2geometry/src/s2/s1angle.cc +54 -0
  104. package/third_party/s2geometry/src/s2/s1angle.h +336 -0
  105. package/third_party/s2geometry/src/s2/s1angle_test.cc +185 -0
  106. package/third_party/s2geometry/src/s2/s1chord_angle.cc +159 -0
  107. package/third_party/s2geometry/src/s2/s1chord_angle.h +369 -0
  108. package/third_party/s2geometry/src/s2/s1chord_angle_test.cc +207 -0
  109. package/third_party/s2geometry/src/s2/s1interval.cc +296 -0
  110. package/third_party/s2geometry/src/s2/s1interval.h +266 -0
  111. package/third_party/s2geometry/src/s2/s1interval_test.cc +469 -0
  112. package/third_party/s2geometry/src/s2/s2boolean_operation.cc +2391 -0
  113. package/third_party/s2geometry/src/s2/s2boolean_operation.h +501 -0
  114. package/third_party/s2geometry/src/s2/s2boolean_operation_test.cc +1400 -0
  115. package/third_party/s2geometry/src/s2/s2builder.cc +1828 -0
  116. package/third_party/s2geometry/src/s2/s2builder.h +1057 -0
  117. package/third_party/s2geometry/src/s2/s2builder_graph.cc +1084 -0
  118. package/third_party/s2geometry/src/s2/s2builder_graph.h +799 -0
  119. package/third_party/s2geometry/src/s2/s2builder_graph_test.cc +462 -0
  120. package/third_party/s2geometry/src/s2/s2builder_layer.h +50 -0
  121. package/third_party/s2geometry/src/s2/s2builder_test.cc +1329 -0
  122. package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.cc +313 -0
  123. package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.h +221 -0
  124. package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer_test.cc +261 -0
  125. package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.cc +392 -0
  126. package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.h +86 -0
  127. package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies_test.cc +182 -0
  128. package/third_party/s2geometry/src/s2/s2builderutil_graph_shape.h +57 -0
  129. package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.cc +212 -0
  130. package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.h +218 -0
  131. package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer_test.cc +367 -0
  132. package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.cc +74 -0
  133. package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.h +122 -0
  134. package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer_test.cc +167 -0
  135. package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.cc +191 -0
  136. package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.h +211 -0
  137. package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer_test.cc +312 -0
  138. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.cc +105 -0
  139. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.h +174 -0
  140. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer_test.cc +220 -0
  141. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.cc +98 -0
  142. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.h +292 -0
  143. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer_test.cc +233 -0
  144. package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.cc +354 -0
  145. package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.h +239 -0
  146. package/third_party/s2geometry/src/s2/s2builderutil_snap_functions_test.cc +716 -0
  147. package/third_party/s2geometry/src/s2/s2builderutil_testing.cc +37 -0
  148. package/third_party/s2geometry/src/s2/s2builderutil_testing.h +100 -0
  149. package/third_party/s2geometry/src/s2/s2builderutil_testing_test.cc +85 -0
  150. package/third_party/s2geometry/src/s2/s2cap.cc +347 -0
  151. package/third_party/s2geometry/src/s2/s2cap.h +286 -0
  152. package/third_party/s2geometry/src/s2/s2cap_test.cc +379 -0
  153. package/third_party/s2geometry/src/s2/s2cell.cc +552 -0
  154. package/third_party/s2geometry/src/s2/s2cell.h +249 -0
  155. package/third_party/s2geometry/src/s2/s2cell_id.cc +619 -0
  156. package/third_party/s2geometry/src/s2/s2cell_id.h +705 -0
  157. package/third_party/s2geometry/src/s2/s2cell_id_test.cc +633 -0
  158. package/third_party/s2geometry/src/s2/s2cell_index.cc +149 -0
  159. package/third_party/s2geometry/src/s2/s2cell_index.h +660 -0
  160. package/third_party/s2geometry/src/s2/s2cell_index_test.cc +411 -0
  161. package/third_party/s2geometry/src/s2/s2cell_test.cc +687 -0
  162. package/third_party/s2geometry/src/s2/s2cell_union.cc +515 -0
  163. package/third_party/s2geometry/src/s2/s2cell_union.h +399 -0
  164. package/third_party/s2geometry/src/s2/s2cell_union_test.cc +598 -0
  165. package/third_party/s2geometry/src/s2/s2centroids.cc +84 -0
  166. package/third_party/s2geometry/src/s2/s2centroids.h +87 -0
  167. package/third_party/s2geometry/src/s2/s2centroids_test.cc +82 -0
  168. package/third_party/s2geometry/src/s2/s2closest_cell_query.cc +123 -0
  169. package/third_party/s2geometry/src/s2/s2closest_cell_query.h +385 -0
  170. package/third_party/s2geometry/src/s2/s2closest_cell_query_base.h +841 -0
  171. package/third_party/s2geometry/src/s2/s2closest_cell_query_base_test.cc +63 -0
  172. package/third_party/s2geometry/src/s2/s2closest_cell_query_test.cc +412 -0
  173. package/third_party/s2geometry/src/s2/s2closest_edge_query.cc +106 -0
  174. package/third_party/s2geometry/src/s2/s2closest_edge_query.h +421 -0
  175. package/third_party/s2geometry/src/s2/s2closest_edge_query_base.h +946 -0
  176. package/third_party/s2geometry/src/s2/s2closest_edge_query_base_test.cc +59 -0
  177. package/third_party/s2geometry/src/s2/s2closest_edge_query_test.cc +505 -0
  178. package/third_party/s2geometry/src/s2/s2closest_edge_query_testing.h +91 -0
  179. package/third_party/s2geometry/src/s2/s2closest_point_query.cc +66 -0
  180. package/third_party/s2geometry/src/s2/s2closest_point_query.h +465 -0
  181. package/third_party/s2geometry/src/s2/s2closest_point_query_base.h +767 -0
  182. package/third_party/s2geometry/src/s2/s2closest_point_query_base_test.cc +63 -0
  183. package/third_party/s2geometry/src/s2/s2closest_point_query_test.cc +312 -0
  184. package/third_party/s2geometry/src/s2/s2contains_point_query.h +328 -0
  185. package/third_party/s2geometry/src/s2/s2contains_point_query_test.cc +159 -0
  186. package/third_party/s2geometry/src/s2/s2contains_vertex_query.cc +39 -0
  187. package/third_party/s2geometry/src/s2/s2contains_vertex_query.h +66 -0
  188. package/third_party/s2geometry/src/s2/s2contains_vertex_query_test.cc +67 -0
  189. package/third_party/s2geometry/src/s2/s2convex_hull_query.cc +198 -0
  190. package/third_party/s2geometry/src/s2/s2convex_hull_query.h +110 -0
  191. package/third_party/s2geometry/src/s2/s2convex_hull_query_test.cc +208 -0
  192. package/third_party/s2geometry/src/s2/s2coords.cc +146 -0
  193. package/third_party/s2geometry/src/s2/s2coords.h +459 -0
  194. package/third_party/s2geometry/src/s2/s2coords_internal.h +71 -0
  195. package/third_party/s2geometry/src/s2/s2coords_test.cc +218 -0
  196. package/third_party/s2geometry/src/s2/s2crossing_edge_query.cc +380 -0
  197. package/third_party/s2geometry/src/s2/s2crossing_edge_query.h +220 -0
  198. package/third_party/s2geometry/src/s2/s2crossing_edge_query_test.cc +382 -0
  199. package/third_party/s2geometry/src/s2/s2debug.cc +23 -0
  200. package/third_party/s2geometry/src/s2/s2debug.h +69 -0
  201. package/third_party/s2geometry/src/s2/s2distance_target.h +165 -0
  202. package/third_party/s2geometry/src/s2/s2earth.cc +52 -0
  203. package/third_party/s2geometry/src/s2/s2earth.h +268 -0
  204. package/third_party/s2geometry/src/s2/s2earth_test.cc +146 -0
  205. package/third_party/s2geometry/src/s2/s2edge_clipping.cc +462 -0
  206. package/third_party/s2geometry/src/s2/s2edge_clipping.h +183 -0
  207. package/third_party/s2geometry/src/s2/s2edge_clipping_test.cc +335 -0
  208. package/third_party/s2geometry/src/s2/s2edge_crosser.cc +85 -0
  209. package/third_party/s2geometry/src/s2/s2edge_crosser.h +343 -0
  210. package/third_party/s2geometry/src/s2/s2edge_crosser_test.cc +264 -0
  211. package/third_party/s2geometry/src/s2/s2edge_crossings.cc +515 -0
  212. package/third_party/s2geometry/src/s2/s2edge_crossings.h +138 -0
  213. package/third_party/s2geometry/src/s2/s2edge_crossings_internal.h +59 -0
  214. package/third_party/s2geometry/src/s2/s2edge_crossings_test.cc +246 -0
  215. package/third_party/s2geometry/src/s2/s2edge_distances.cc +419 -0
  216. package/third_party/s2geometry/src/s2/s2edge_distances.h +192 -0
  217. package/third_party/s2geometry/src/s2/s2edge_distances_test.cc +539 -0
  218. package/third_party/s2geometry/src/s2/s2edge_tessellator.cc +276 -0
  219. package/third_party/s2geometry/src/s2/s2edge_tessellator.h +101 -0
  220. package/third_party/s2geometry/src/s2/s2edge_tessellator_test.cc +492 -0
  221. package/third_party/s2geometry/src/s2/s2edge_vector_shape.h +85 -0
  222. package/third_party/s2geometry/src/s2/s2edge_vector_shape_test.cc +66 -0
  223. package/third_party/s2geometry/src/s2/s2error.cc +29 -0
  224. package/third_party/s2geometry/src/s2/s2error.h +147 -0
  225. package/third_party/s2geometry/src/s2/s2error_test.cc +31 -0
  226. package/third_party/s2geometry/src/s2/s2furthest_edge_query.cc +117 -0
  227. package/third_party/s2geometry/src/s2/s2furthest_edge_query.h +439 -0
  228. package/third_party/s2geometry/src/s2/s2furthest_edge_query_test.cc +487 -0
  229. package/third_party/s2geometry/src/s2/s2latlng.cc +90 -0
  230. package/third_party/s2geometry/src/s2/s2latlng.h +234 -0
  231. package/third_party/s2geometry/src/s2/s2latlng_rect.cc +727 -0
  232. package/third_party/s2geometry/src/s2/s2latlng_rect.h +434 -0
  233. package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.cc +344 -0
  234. package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.h +89 -0
  235. package/third_party/s2geometry/src/s2/s2latlng_rect_bounder_test.cc +306 -0
  236. package/third_party/s2geometry/src/s2/s2latlng_rect_test.cc +1030 -0
  237. package/third_party/s2geometry/src/s2/s2latlng_test.cc +165 -0
  238. package/third_party/s2geometry/src/s2/s2lax_loop_shape.cc +104 -0
  239. package/third_party/s2geometry/src/s2/s2lax_loop_shape.h +153 -0
  240. package/third_party/s2geometry/src/s2/s2lax_loop_shape_test.cc +101 -0
  241. package/third_party/s2geometry/src/s2/s2lax_polygon_shape.cc +348 -0
  242. package/third_party/s2geometry/src/s2/s2lax_polygon_shape.h +183 -0
  243. package/third_party/s2geometry/src/s2/s2lax_polygon_shape_test.cc +234 -0
  244. package/third_party/s2geometry/src/s2/s2lax_polyline_shape.cc +118 -0
  245. package/third_party/s2geometry/src/s2/s2lax_polyline_shape.h +124 -0
  246. package/third_party/s2geometry/src/s2/s2lax_polyline_shape_test.cc +62 -0
  247. package/third_party/s2geometry/src/s2/s2loop.cc +1509 -0
  248. package/third_party/s2geometry/src/s2/s2loop.h +711 -0
  249. package/third_party/s2geometry/src/s2/s2loop_measures.cc +313 -0
  250. package/third_party/s2geometry/src/s2/s2loop_measures.h +280 -0
  251. package/third_party/s2geometry/src/s2/s2loop_measures_test.cc +367 -0
  252. package/third_party/s2geometry/src/s2/s2loop_test.cc +1371 -0
  253. package/third_party/s2geometry/src/s2/s2max_distance_targets.cc +265 -0
  254. package/third_party/s2geometry/src/s2/s2max_distance_targets.h +241 -0
  255. package/third_party/s2geometry/src/s2/s2max_distance_targets_test.cc +367 -0
  256. package/third_party/s2geometry/src/s2/s2measures.cc +128 -0
  257. package/third_party/s2geometry/src/s2/s2measures.h +78 -0
  258. package/third_party/s2geometry/src/s2/s2measures_test.cc +135 -0
  259. package/third_party/s2geometry/src/s2/s2metrics.cc +122 -0
  260. package/third_party/s2geometry/src/s2/s2metrics.h +199 -0
  261. package/third_party/s2geometry/src/s2/s2metrics_test.cc +127 -0
  262. package/third_party/s2geometry/src/s2/s2min_distance_targets.cc +295 -0
  263. package/third_party/s2geometry/src/s2/s2min_distance_targets.h +273 -0
  264. package/third_party/s2geometry/src/s2/s2min_distance_targets_test.cc +239 -0
  265. package/third_party/s2geometry/src/s2/s2padded_cell.cc +162 -0
  266. package/third_party/s2geometry/src/s2/s2padded_cell.h +108 -0
  267. package/third_party/s2geometry/src/s2/s2padded_cell_test.cc +138 -0
  268. package/third_party/s2geometry/src/s2/s2point.h +38 -0
  269. package/third_party/s2geometry/src/s2/s2point_compression.cc +388 -0
  270. package/third_party/s2geometry/src/s2/s2point_compression.h +78 -0
  271. package/third_party/s2geometry/src/s2/s2point_compression_test.cc +305 -0
  272. package/third_party/s2geometry/src/s2/s2point_index.h +345 -0
  273. package/third_party/s2geometry/src/s2/s2point_index_test.cc +147 -0
  274. package/third_party/s2geometry/src/s2/s2point_region.cc +72 -0
  275. package/third_party/s2geometry/src/s2/s2point_region.h +76 -0
  276. package/third_party/s2geometry/src/s2/s2point_region_test.cc +100 -0
  277. package/third_party/s2geometry/src/s2/s2point_span.h +57 -0
  278. package/third_party/s2geometry/src/s2/s2point_test.cc +47 -0
  279. package/third_party/s2geometry/src/s2/s2point_vector_shape.h +127 -0
  280. package/third_party/s2geometry/src/s2/s2point_vector_shape_test.cc +59 -0
  281. package/third_party/s2geometry/src/s2/s2pointutil.cc +131 -0
  282. package/third_party/s2geometry/src/s2/s2pointutil.h +138 -0
  283. package/third_party/s2geometry/src/s2/s2pointutil_test.cc +157 -0
  284. package/third_party/s2geometry/src/s2/s2polygon.cc +1569 -0
  285. package/third_party/s2geometry/src/s2/s2polygon.h +934 -0
  286. package/third_party/s2geometry/src/s2/s2polygon_test.cc +3025 -0
  287. package/third_party/s2geometry/src/s2/s2polyline.cc +645 -0
  288. package/third_party/s2geometry/src/s2/s2polyline.h +379 -0
  289. package/third_party/s2geometry/src/s2/s2polyline_alignment.cc +414 -0
  290. package/third_party/s2geometry/src/s2/s2polyline_alignment.h +245 -0
  291. package/third_party/s2geometry/src/s2/s2polyline_alignment_internal.h +158 -0
  292. package/third_party/s2geometry/src/s2/s2polyline_alignment_test.cc +610 -0
  293. package/third_party/s2geometry/src/s2/s2polyline_measures.cc +42 -0
  294. package/third_party/s2geometry/src/s2/s2polyline_measures.h +53 -0
  295. package/third_party/s2geometry/src/s2/s2polyline_measures_test.cc +57 -0
  296. package/third_party/s2geometry/src/s2/s2polyline_simplifier.cc +187 -0
  297. package/third_party/s2geometry/src/s2/s2polyline_simplifier.h +109 -0
  298. package/third_party/s2geometry/src/s2/s2polyline_simplifier_test.cc +165 -0
  299. package/third_party/s2geometry/src/s2/s2polyline_test.cc +554 -0
  300. package/third_party/s2geometry/src/s2/s2predicates.cc +1486 -0
  301. package/third_party/s2geometry/src/s2/s2predicates.h +282 -0
  302. package/third_party/s2geometry/src/s2/s2predicates_internal.h +135 -0
  303. package/third_party/s2geometry/src/s2/s2predicates_test.cc +1427 -0
  304. package/third_party/s2geometry/src/s2/s2projections.cc +109 -0
  305. package/third_party/s2geometry/src/s2/s2projections.h +161 -0
  306. package/third_party/s2geometry/src/s2/s2projections_test.cc +78 -0
  307. package/third_party/s2geometry/src/s2/s2r2rect.cc +88 -0
  308. package/third_party/s2geometry/src/s2/s2r2rect.h +292 -0
  309. package/third_party/s2geometry/src/s2/s2r2rect_test.cc +312 -0
  310. package/third_party/s2geometry/src/s2/s2region.cc +26 -0
  311. package/third_party/s2geometry/src/s2/s2region.h +142 -0
  312. package/third_party/s2geometry/src/s2/s2region_coverer.cc +514 -0
  313. package/third_party/s2geometry/src/s2/s2region_coverer.h +356 -0
  314. package/third_party/s2geometry/src/s2/s2region_coverer_test.cc +509 -0
  315. package/third_party/s2geometry/src/s2/s2region_intersection.cc +84 -0
  316. package/third_party/s2geometry/src/s2/s2region_intersection.h +79 -0
  317. package/third_party/s2geometry/src/s2/s2region_term_indexer.cc +270 -0
  318. package/third_party/s2geometry/src/s2/s2region_term_indexer.h +299 -0
  319. package/third_party/s2geometry/src/s2/s2region_term_indexer_test.cc +209 -0
  320. package/third_party/s2geometry/src/s2/s2region_test.cc +370 -0
  321. package/third_party/s2geometry/src/s2/s2region_union.cc +90 -0
  322. package/third_party/s2geometry/src/s2/s2region_union.h +83 -0
  323. package/third_party/s2geometry/src/s2/s2region_union_test.cc +89 -0
  324. package/third_party/s2geometry/src/s2/s2shape.h +283 -0
  325. package/third_party/s2geometry/src/s2/s2shape_index.cc +321 -0
  326. package/third_party/s2geometry/src/s2/s2shape_index.h +781 -0
  327. package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.cc +113 -0
  328. package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.h +135 -0
  329. package/third_party/s2geometry/src/s2/s2shape_index_buffered_region_test.cc +162 -0
  330. package/third_party/s2geometry/src/s2/s2shape_index_measures.cc +92 -0
  331. package/third_party/s2geometry/src/s2/s2shape_index_measures.h +100 -0
  332. package/third_party/s2geometry/src/s2/s2shape_index_measures_test.cc +136 -0
  333. package/third_party/s2geometry/src/s2/s2shape_index_region.h +350 -0
  334. package/third_party/s2geometry/src/s2/s2shape_index_region_test.cc +161 -0
  335. package/third_party/s2geometry/src/s2/s2shape_index_test.cc +24 -0
  336. package/third_party/s2geometry/src/s2/s2shape_measures.cc +138 -0
  337. package/third_party/s2geometry/src/s2/s2shape_measures.h +95 -0
  338. package/third_party/s2geometry/src/s2/s2shape_measures_test.cc +139 -0
  339. package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.cc +120 -0
  340. package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.h +66 -0
  341. package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries_test.cc +170 -0
  342. package/third_party/s2geometry/src/s2/s2shapeutil_coding.cc +253 -0
  343. package/third_party/s2geometry/src/s2/s2shapeutil_coding.h +283 -0
  344. package/third_party/s2geometry/src/s2/s2shapeutil_coding_test.cc +54 -0
  345. package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.cc +40 -0
  346. package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.h +41 -0
  347. package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force_test.cc +55 -0
  348. package/third_party/s2geometry/src/s2/s2shapeutil_count_edges.h +57 -0
  349. package/third_party/s2geometry/src/s2/s2shapeutil_count_edges_test.cc +43 -0
  350. package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.cc +45 -0
  351. package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.h +72 -0
  352. package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator_test.cc +116 -0
  353. package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.cc +107 -0
  354. package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.h +48 -0
  355. package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point_test.cc +104 -0
  356. package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.cc +58 -0
  357. package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.h +65 -0
  358. package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator_test.cc +61 -0
  359. package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge.h +58 -0
  360. package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge_id.h +97 -0
  361. package/third_party/s2geometry/src/s2/s2shapeutil_testing.cc +104 -0
  362. package/third_party/s2geometry/src/s2/s2shapeutil_testing.h +36 -0
  363. package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.cc +440 -0
  364. package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.h +72 -0
  365. package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs_test.cc +184 -0
  366. package/third_party/s2geometry/src/s2/s2testing.cc +464 -0
  367. package/third_party/s2geometry/src/s2/s2testing.h +385 -0
  368. package/third_party/s2geometry/src/s2/s2testing_test.cc +166 -0
  369. package/third_party/s2geometry/src/s2/s2text_format.cc +506 -0
  370. package/third_party/s2geometry/src/s2/s2text_format.h +289 -0
  371. package/third_party/s2geometry/src/s2/s2text_format_test.cc +417 -0
  372. package/third_party/s2geometry/src/s2/s2wedge_relations.cc +80 -0
  373. package/third_party/s2geometry/src/s2/s2wedge_relations.h +64 -0
  374. package/third_party/s2geometry/src/s2/s2wedge_relations_test.cc +89 -0
  375. package/third_party/s2geometry/src/s2/sequence_lexicon.h +296 -0
  376. package/third_party/s2geometry/src/s2/sequence_lexicon_test.cc +113 -0
  377. package/third_party/s2geometry/src/s2/strings/ostringstream.cc +35 -0
  378. package/third_party/s2geometry/src/s2/strings/ostringstream.h +105 -0
  379. package/third_party/s2geometry/src/s2/strings/serialize.cc +46 -0
  380. package/third_party/s2geometry/src/s2/strings/serialize.h +40 -0
  381. package/third_party/s2geometry/src/s2/third_party/absl/algorithm/algorithm.h +187 -0
  382. package/third_party/s2geometry/src/s2/third_party/absl/base/attributes.h +666 -0
  383. package/third_party/s2geometry/src/s2/third_party/absl/base/casts.h +189 -0
  384. package/third_party/s2geometry/src/s2/third_party/absl/base/config.h +462 -0
  385. package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.cc +129 -0
  386. package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.h +394 -0
  387. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/atomic_hook.h +168 -0
  388. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/identity.h +33 -0
  389. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/inline_variable.h +117 -0
  390. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/invoke.h +188 -0
  391. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.cc +254 -0
  392. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.h +205 -0
  393. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.cc +106 -0
  394. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.h +71 -0
  395. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/unaligned_access.h +322 -0
  396. package/third_party/s2geometry/src/s2/third_party/absl/base/log_severity.h +77 -0
  397. package/third_party/s2geometry/src/s2/third_party/absl/base/macros.h +236 -0
  398. package/third_party/s2geometry/src/s2/third_party/absl/base/optimization.h +177 -0
  399. package/third_party/s2geometry/src/s2/third_party/absl/base/policy_checks.h +124 -0
  400. package/third_party/s2geometry/src/s2/third_party/absl/base/port.h +97 -0
  401. package/third_party/s2geometry/src/s2/third_party/absl/base/thread_annotations.h +277 -0
  402. package/third_party/s2geometry/src/s2/third_party/absl/container/fixed_array.h +523 -0
  403. package/third_party/s2geometry/src/s2/third_party/absl/container/inlined_vector.h +1453 -0
  404. package/third_party/s2geometry/src/s2/third_party/absl/container/internal/compressed_tuple.h +191 -0
  405. package/third_party/s2geometry/src/s2/third_party/absl/container/internal/container_memory.h +424 -0
  406. package/third_party/s2geometry/src/s2/third_party/absl/container/internal/layout.h +739 -0
  407. package/third_party/s2geometry/src/s2/third_party/absl/memory/memory.h +755 -0
  408. package/third_party/s2geometry/src/s2/third_party/absl/meta/type_traits.h +436 -0
  409. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.cc +232 -0
  410. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.h +656 -0
  411. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_have_intrinsic.inc +3 -0
  412. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_no_intrinsic.inc +3 -0
  413. package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.cc +198 -0
  414. package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.h +239 -0
  415. package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii_ctype.h +66 -0
  416. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/bits.h +53 -0
  417. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.cc +110 -0
  418. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.h +146 -0
  419. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/resize_uninitialized.h +72 -0
  420. package/third_party/s2geometry/src/s2/third_party/absl/strings/match.cc +38 -0
  421. package/third_party/s2geometry/src/s2/third_party/absl/strings/match.h +89 -0
  422. package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.cc +909 -0
  423. package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.h +187 -0
  424. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.cc +240 -0
  425. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.h +398 -0
  426. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_join.h +22 -0
  427. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.cc +47 -0
  428. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.h +43 -0
  429. package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.cc +245 -0
  430. package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.h +602 -0
  431. package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.cc +42 -0
  432. package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.h +130 -0
  433. package/third_party/s2geometry/src/s2/third_party/absl/types/span.h +793 -0
  434. package/third_party/s2geometry/src/s2/third_party/absl/utility/utility.h +299 -0
  435. package/third_party/s2geometry/src/s2/util/bits/bit-interleave.cc +274 -0
  436. package/third_party/s2geometry/src/s2/util/bits/bit-interleave.h +53 -0
  437. package/third_party/s2geometry/src/s2/util/bits/bits.cc +155 -0
  438. package/third_party/s2geometry/src/s2/util/bits/bits.h +745 -0
  439. package/third_party/s2geometry/src/s2/util/coding/coder.cc +83 -0
  440. package/third_party/s2geometry/src/s2/util/coding/coder.h +553 -0
  441. package/third_party/s2geometry/src/s2/util/coding/nth-derivative.h +134 -0
  442. package/third_party/s2geometry/src/s2/util/coding/transforms.h +62 -0
  443. package/third_party/s2geometry/src/s2/util/coding/varint.cc +289 -0
  444. package/third_party/s2geometry/src/s2/util/coding/varint.h +476 -0
  445. package/third_party/s2geometry/src/s2/util/endian/endian.h +859 -0
  446. package/third_party/s2geometry/src/s2/util/gtl/btree.h +2471 -0
  447. package/third_party/s2geometry/src/s2/util/gtl/btree_container.h +411 -0
  448. package/third_party/s2geometry/src/s2/util/gtl/btree_map.h +79 -0
  449. package/third_party/s2geometry/src/s2/util/gtl/btree_set.h +73 -0
  450. package/third_party/s2geometry/src/s2/util/gtl/compact_array.h +653 -0
  451. package/third_party/s2geometry/src/s2/util/gtl/container_logging.h +291 -0
  452. package/third_party/s2geometry/src/s2/util/gtl/dense_hash_set.h +358 -0
  453. package/third_party/s2geometry/src/s2/util/gtl/densehashtable.h +1493 -0
  454. package/third_party/s2geometry/src/s2/util/gtl/hashtable_common.h +253 -0
  455. package/third_party/s2geometry/src/s2/util/gtl/layout.h +28 -0
  456. package/third_party/s2geometry/src/s2/util/gtl/legacy_random_shuffle.h +77 -0
  457. package/third_party/s2geometry/src/s2/util/hash/mix.h +76 -0
  458. package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.cc +832 -0
  459. package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.h +646 -0
  460. package/third_party/s2geometry/src/s2/util/math/mathutil.cc +75 -0
  461. package/third_party/s2geometry/src/s2/util/math/mathutil.h +189 -0
  462. package/third_party/s2geometry/src/s2/util/math/matrix3x3.h +574 -0
  463. package/third_party/s2geometry/src/s2/util/math/vector.h +569 -0
  464. package/third_party/s2geometry/src/s2/util/math/vector3_hash.h +54 -0
  465. package/third_party/s2geometry/src/s2/util/units/length-units.cc +21 -0
  466. package/third_party/s2geometry/src/s2/util/units/length-units.h +135 -0
  467. package/third_party/s2geometry/src/s2/util/units/physical-units.h +313 -0
  468. package/third_party/s2geometry/src/s2/value_lexicon.h +234 -0
  469. package/third_party/s2geometry/src/s2/value_lexicon_test.cc +121 -0
  470. package/third_party/s2geometry/third_party/cmake/FindGFlags.cmake +48 -0
  471. package/third_party/s2geometry/third_party/cmake/FindGlog.cmake +48 -0
@@ -0,0 +1,234 @@
1
+ // Copyright 2013 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/s2lax_polygon_shape.h"
19
+
20
+ #include <vector>
21
+
22
+ #include <gtest/gtest.h>
23
+ #include "s2/third_party/absl/memory/memory.h"
24
+ #include "s2/mutable_s2shape_index.h"
25
+ #include "s2/s2cap.h"
26
+ #include "s2/s2contains_point_query.h"
27
+ #include "s2/s2lax_loop_shape.h"
28
+ #include "s2/s2polygon.h"
29
+ #include "s2/s2shapeutil_contains_brute_force.h"
30
+ #include "s2/s2testing.h"
31
+ #include "s2/s2text_format.h"
32
+
33
+ using absl::make_unique;
34
+ using s2textformat::MakePolygonOrDie;
35
+ using std::unique_ptr;
36
+ using std::vector;
37
+
38
+ TEST(S2LaxPolygonShape, EmptyPolygon) {
39
+ S2LaxPolygonShape shape((S2Polygon()));
40
+ EXPECT_EQ(0, shape.num_loops());
41
+ EXPECT_EQ(0, shape.num_vertices());
42
+ EXPECT_EQ(0, shape.num_edges());
43
+ EXPECT_EQ(0, shape.num_chains());
44
+ EXPECT_EQ(2, shape.dimension());
45
+ EXPECT_TRUE(shape.is_empty());
46
+ EXPECT_FALSE(shape.is_full());
47
+ EXPECT_FALSE(shape.GetReferencePoint().contained);
48
+ }
49
+
50
+ TEST(S2LaxPolygonShape, FullPolygon) {
51
+ S2LaxPolygonShape shape(S2Polygon(s2textformat::MakeLoopOrDie("full")));
52
+ EXPECT_EQ(1, shape.num_loops());
53
+ EXPECT_EQ(0, shape.num_vertices());
54
+ EXPECT_EQ(0, shape.num_edges());
55
+ EXPECT_EQ(1, shape.num_chains());
56
+ EXPECT_EQ(2, shape.dimension());
57
+ EXPECT_FALSE(shape.is_empty());
58
+ EXPECT_TRUE(shape.is_full());
59
+ EXPECT_TRUE(shape.GetReferencePoint().contained);
60
+ }
61
+
62
+ TEST(S2LaxPolygonShape, SingleVertexPolygon) {
63
+ // S2Polygon doesn't support single-vertex loops, so we need to construct
64
+ // the S2LaxPolygonShape directly.
65
+ vector<vector<S2Point>> loops;
66
+ loops.push_back(s2textformat::ParsePoints("0:0"));
67
+ S2LaxPolygonShape shape(loops);
68
+ EXPECT_EQ(1, shape.num_loops());
69
+ EXPECT_EQ(1, shape.num_vertices());
70
+ EXPECT_EQ(1, shape.num_edges());
71
+ EXPECT_EQ(1, shape.num_chains());
72
+ EXPECT_EQ(0, shape.chain(0).start);
73
+ EXPECT_EQ(1, shape.chain(0).length);
74
+ auto edge = shape.edge(0);
75
+ EXPECT_EQ(loops[0][0], edge.v0);
76
+ EXPECT_EQ(loops[0][0], edge.v1);
77
+ EXPECT_TRUE(edge == shape.chain_edge(0, 0));
78
+ EXPECT_EQ(2, shape.dimension());
79
+ EXPECT_FALSE(shape.is_empty());
80
+ EXPECT_FALSE(shape.is_full());
81
+ EXPECT_FALSE(shape.GetReferencePoint().contained);
82
+ }
83
+
84
+ TEST(S2LaxPolygonShape, SingleLoopPolygon) {
85
+ // Test S2Polygon constructor.
86
+ vector<S2Point> vertices = s2textformat::ParsePoints("0:0, 0:1, 1:1, 1:0");
87
+ S2LaxPolygonShape shape(S2Polygon(make_unique<S2Loop>(vertices)));
88
+ EXPECT_EQ(1, shape.num_loops());
89
+ EXPECT_EQ(vertices.size(), shape.num_vertices());
90
+ EXPECT_EQ(vertices.size(), shape.num_loop_vertices(0));
91
+ EXPECT_EQ(vertices.size(), shape.num_edges());
92
+ EXPECT_EQ(1, shape.num_chains());
93
+ EXPECT_EQ(0, shape.chain(0).start);
94
+ EXPECT_EQ(vertices.size(), shape.chain(0).length);
95
+ for (int i = 0; i < vertices.size(); ++i) {
96
+ EXPECT_EQ(vertices[i], shape.loop_vertex(0, i));
97
+ auto edge = shape.edge(i);
98
+ EXPECT_EQ(vertices[i], edge.v0);
99
+ EXPECT_EQ(vertices[(i + 1) % vertices.size()], edge.v1);
100
+ EXPECT_EQ(edge.v0, shape.chain_edge(0, i).v0);
101
+ EXPECT_EQ(edge.v1, shape.chain_edge(0, i).v1);
102
+ }
103
+ EXPECT_EQ(2, shape.dimension());
104
+ EXPECT_FALSE(shape.is_empty());
105
+ EXPECT_FALSE(shape.is_full());
106
+ EXPECT_FALSE(s2shapeutil::ContainsBruteForce(shape, S2::Origin()));
107
+ }
108
+
109
+ TEST(S2LaxPolygonShape, MultiLoopPolygon) {
110
+ // Test vector<vector<S2Point>> constructor. Make sure that the loops are
111
+ // oriented so that the interior of the polygon is always on the left.
112
+ vector<S2LaxPolygonShape::Loop> loops = {
113
+ s2textformat::ParsePoints("0:0, 0:3, 3:3"), // CCW
114
+ s2textformat::ParsePoints("1:1, 2:2, 1:2") // CW
115
+ };
116
+ S2LaxPolygonShape shape(loops);
117
+
118
+ EXPECT_EQ(loops.size(), shape.num_loops());
119
+ int num_vertices = 0;
120
+ EXPECT_EQ(loops.size(), shape.num_chains());
121
+ for (int i = 0; i < loops.size(); ++i) {
122
+ EXPECT_EQ(loops[i].size(), shape.num_loop_vertices(i));
123
+ EXPECT_EQ(num_vertices, shape.chain(i).start);
124
+ EXPECT_EQ(loops[i].size(), shape.chain(i).length);
125
+ for (int j = 0; j < loops[i].size(); ++j) {
126
+ EXPECT_EQ(loops[i][j], shape.loop_vertex(i, j));
127
+ auto edge = shape.edge(num_vertices + j);
128
+ EXPECT_EQ(loops[i][j], edge.v0);
129
+ EXPECT_EQ(loops[i][(j + 1) % loops[i].size()], edge.v1);
130
+ }
131
+ num_vertices += loops[i].size();
132
+ }
133
+ EXPECT_EQ(num_vertices, shape.num_vertices());
134
+ EXPECT_EQ(num_vertices, shape.num_edges());
135
+ EXPECT_EQ(2, shape.dimension());
136
+ EXPECT_FALSE(shape.is_empty());
137
+ EXPECT_FALSE(shape.is_full());
138
+ EXPECT_FALSE(s2shapeutil::ContainsBruteForce(shape, S2::Origin()));
139
+ }
140
+
141
+ TEST(S2LaxPolygonShape, MultiLoopS2Polygon) {
142
+ // Verify that the orientation of loops representing holes is reversed when
143
+ // converting from an S2Polygon to an S2LaxPolygonShape.
144
+ auto polygon = MakePolygonOrDie("0:0, 0:3, 3:3; 1:1, 1:2, 2:2");
145
+ S2LaxPolygonShape shape(*polygon);
146
+ for (int i = 0; i < polygon->num_loops(); ++i) {
147
+ S2Loop* loop = polygon->loop(i);
148
+ for (int j = 0; j < loop->num_vertices(); ++j) {
149
+ EXPECT_EQ(loop->oriented_vertex(j),
150
+ shape.loop_vertex(i, j));
151
+ }
152
+ }
153
+ }
154
+
155
+ TEST(S2LaxPolygonShape, ManyLoopPolygon) {
156
+ // Test a polygon with enough loops so that cumulative_vertices_ is used.
157
+ vector<vector<S2Point>> loops;
158
+ for (int i = 0; i < 100; ++i) {
159
+ S2Point center(S2LatLng::FromDegrees(0, i));
160
+ loops.push_back(
161
+ S2Testing::MakeRegularPoints(center, S1Angle::Degrees(0.1),
162
+ S2Testing::rnd.Uniform(3)));
163
+ }
164
+ S2LaxPolygonShape shape(loops);
165
+
166
+ EXPECT_EQ(loops.size(), shape.num_loops());
167
+ int num_vertices = 0;
168
+ EXPECT_EQ(loops.size(), shape.num_chains());
169
+ for (int i = 0; i < loops.size(); ++i) {
170
+ EXPECT_EQ(loops[i].size(), shape.num_loop_vertices(i));
171
+ EXPECT_EQ(num_vertices, shape.chain(i).start);
172
+ EXPECT_EQ(loops[i].size(), shape.chain(i).length);
173
+ for (int j = 0; j < loops[i].size(); ++j) {
174
+ EXPECT_EQ(loops[i][j], shape.loop_vertex(i, j));
175
+ auto edge = shape.edge(num_vertices + j);
176
+ EXPECT_EQ(loops[i][j], edge.v0);
177
+ EXPECT_EQ(loops[i][(j + 1) % loops[i].size()], edge.v1);
178
+ }
179
+ num_vertices += loops[i].size();
180
+ }
181
+ EXPECT_EQ(num_vertices, shape.num_vertices());
182
+ EXPECT_EQ(num_vertices, shape.num_edges());
183
+ }
184
+
185
+ TEST(S2LaxPolygonShape, DegenerateLoops) {
186
+ vector<S2LaxPolygonShape::Loop> loops = {
187
+ s2textformat::ParsePoints("1:1, 1:2, 2:2, 1:2, 1:3, 1:2, 1:1"),
188
+ s2textformat::ParsePoints("0:0, 0:3, 0:6, 0:9, 0:6, 0:3, 0:0"),
189
+ s2textformat::ParsePoints("5:5, 6:6")
190
+ };
191
+ S2LaxPolygonShape shape(loops);
192
+ EXPECT_FALSE(shape.GetReferencePoint().contained);
193
+ }
194
+
195
+ TEST(S2LaxPolygonShape, InvertedLoops) {
196
+ vector<S2LaxPolygonShape::Loop> loops = {
197
+ s2textformat::ParsePoints("1:2, 1:1, 2:2"),
198
+ s2textformat::ParsePoints("3:4, 3:3, 4:4")
199
+ };
200
+ S2LaxPolygonShape shape(loops);
201
+ EXPECT_TRUE(s2shapeutil::ContainsBruteForce(shape, S2::Origin()));
202
+ }
203
+
204
+ void CompareS2LoopToShape(const S2Loop& loop, unique_ptr<S2Shape> shape) {
205
+ MutableS2ShapeIndex index;
206
+ index.Add(std::move(shape));
207
+ S2Cap cap = loop.GetCapBound();
208
+ auto query = MakeS2ContainsPointQuery(&index);
209
+ for (int iter = 0; iter < 100; ++iter) {
210
+ S2Point point = S2Testing::SamplePoint(cap);
211
+ EXPECT_EQ(loop.Contains(point),
212
+ query.ShapeContains(*index.shape(0), point));
213
+ }
214
+ }
215
+
216
+ TEST(S2LaxPolygonShape, CompareToS2Loop) {
217
+ for (int iter = 0; iter < 100; ++iter) {
218
+ S2Testing::Fractal fractal;
219
+ fractal.set_max_level(S2Testing::rnd.Uniform(5));
220
+ fractal.set_fractal_dimension(1 + S2Testing::rnd.RandDouble());
221
+ S2Point center = S2Testing::RandomPoint();
222
+ unique_ptr<S2Loop> loop(fractal.MakeLoop(
223
+ S2Testing::GetRandomFrameAt(center), S1Angle::Degrees(5)));
224
+
225
+ // Compare S2Loop to S2LaxLoopShape.
226
+ CompareS2LoopToShape(*loop, make_unique<S2LaxLoopShape>(*loop));
227
+
228
+ // Compare S2Loop to S2LaxPolygonShape.
229
+ vector<S2LaxPolygonShape::Loop> loops(
230
+ 1, vector<S2Point>(&loop->vertex(0),
231
+ &loop->vertex(0) + loop->num_vertices()));
232
+ CompareS2LoopToShape(*loop, make_unique<S2LaxPolygonShape>(loops));
233
+ }
234
+ }
@@ -0,0 +1,118 @@
1
+ // Copyright 2013 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/s2lax_polyline_shape.h"
19
+
20
+ #include <algorithm>
21
+ #include "s2/base/logging.h"
22
+ #include "s2/s2polyline.h"
23
+
24
+ using absl::make_unique;
25
+ using absl::MakeSpan;
26
+ using std::vector;
27
+
28
+ S2LaxPolylineShape::S2LaxPolylineShape(const vector<S2Point>& vertices) {
29
+ Init(vertices);
30
+ }
31
+
32
+ S2LaxPolylineShape::S2LaxPolylineShape(const S2Polyline& polyline) {
33
+ Init(polyline);
34
+ }
35
+
36
+ void S2LaxPolylineShape::Init(const vector<S2Point>& vertices) {
37
+ num_vertices_ = vertices.size();
38
+ S2_LOG_IF(WARNING, num_vertices_ == 1)
39
+ << "s2shapeutil::S2LaxPolylineShape with one vertex has no edges";
40
+ vertices_.reset(new S2Point[num_vertices_]);
41
+ std::copy(vertices.begin(), vertices.end(), vertices_.get());
42
+ }
43
+
44
+ void S2LaxPolylineShape::Init(const S2Polyline& polyline) {
45
+ num_vertices_ = polyline.num_vertices();
46
+ S2_LOG_IF(WARNING, num_vertices_ == 1)
47
+ << "s2shapeutil::S2LaxPolylineShape with one vertex has no edges";
48
+ vertices_.reset(new S2Point[num_vertices_]);
49
+ std::copy(&polyline.vertex(0), &polyline.vertex(0) + num_vertices_,
50
+ vertices_.get());
51
+ }
52
+
53
+ void S2LaxPolylineShape::Encode(Encoder* encoder,
54
+ s2coding::CodingHint hint) const {
55
+ s2coding::EncodeS2PointVector(MakeSpan(vertices_.get(), num_vertices_),
56
+ hint, encoder);
57
+ }
58
+
59
+ bool S2LaxPolylineShape::Init(Decoder* decoder) {
60
+ s2coding::EncodedS2PointVector vertices;
61
+ if (!vertices.Init(decoder)) return false;
62
+ num_vertices_ = vertices.size();
63
+ vertices_ = make_unique<S2Point[]>(vertices.size());
64
+ for (int i = 0; i < num_vertices_; ++i) {
65
+ vertices_[i] = vertices[i];
66
+ }
67
+ return true;
68
+ }
69
+
70
+ S2Shape::Edge S2LaxPolylineShape::edge(int e) const {
71
+ S2_DCHECK_LT(e, num_edges());
72
+ return Edge(vertex(e), vertex(e + 1));
73
+ }
74
+
75
+ int S2LaxPolylineShape::num_chains() const {
76
+ return std::min(1, S2LaxPolylineShape::num_edges()); // Avoid virtual call.
77
+ }
78
+
79
+ S2Shape::Chain S2LaxPolylineShape::chain(int i) const {
80
+ return Chain(0, S2LaxPolylineShape::num_edges()); // Avoid virtual call.
81
+ }
82
+
83
+ S2Shape::Edge S2LaxPolylineShape::chain_edge(int i, int j) const {
84
+ S2_DCHECK_EQ(i, 0);
85
+ S2_DCHECK_LT(j, num_edges());
86
+ return Edge(vertex(j), vertex(j + 1));
87
+ }
88
+
89
+ S2Shape::ChainPosition S2LaxPolylineShape::chain_position(int e) const {
90
+ return S2Shape::ChainPosition(0, e);
91
+ }
92
+
93
+ bool EncodedS2LaxPolylineShape::Init(Decoder* decoder) {
94
+ return vertices_.Init(decoder);
95
+ }
96
+
97
+ S2Shape::Edge EncodedS2LaxPolylineShape::edge(int e) const {
98
+ S2_DCHECK_LT(e, num_edges());
99
+ return Edge(vertex(e), vertex(e + 1));
100
+ }
101
+
102
+ int EncodedS2LaxPolylineShape::num_chains() const {
103
+ return std::min(1, EncodedS2LaxPolylineShape::num_edges());
104
+ }
105
+
106
+ S2Shape::Chain EncodedS2LaxPolylineShape::chain(int i) const {
107
+ return Chain(0, EncodedS2LaxPolylineShape::num_edges());
108
+ }
109
+
110
+ S2Shape::Edge EncodedS2LaxPolylineShape::chain_edge(int i, int j) const {
111
+ S2_DCHECK_EQ(i, 0);
112
+ S2_DCHECK_LT(j, num_edges());
113
+ return Edge(vertex(j), vertex(j + 1));
114
+ }
115
+
116
+ S2Shape::ChainPosition EncodedS2LaxPolylineShape::chain_position(int e) const {
117
+ return S2Shape::ChainPosition(0, e);
118
+ }
@@ -0,0 +1,124 @@
1
+ // Copyright 2013 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_S2LAX_POLYLINE_SHAPE_H_
19
+ #define S2_S2LAX_POLYLINE_SHAPE_H_
20
+
21
+ #include <memory>
22
+ #include <vector>
23
+ #include "s2/encoded_s2point_vector.h"
24
+ #include "s2/s2polyline.h"
25
+ #include "s2/s2shape.h"
26
+
27
+ // S2LaxPolylineShape represents a polyline. It is similar to
28
+ // S2Polyline::Shape except that duplicate vertices are allowed, and the
29
+ // representation is slightly more compact.
30
+ //
31
+ // Polylines may have any number of vertices, but note that polylines with
32
+ // fewer than 2 vertices do not define any edges. (To create a polyline
33
+ // consisting of a single degenerate edge, either repeat the same vertex twice
34
+ // or use S2LaxClosedPolylineShape defined in s2_lax_loop_shape.h.)
35
+ class S2LaxPolylineShape : public S2Shape {
36
+ public:
37
+ static constexpr TypeTag kTypeTag = 4;
38
+
39
+ // Constructs an empty polyline.
40
+ S2LaxPolylineShape() : num_vertices_(0) {}
41
+
42
+ // Constructs an S2LaxPolylineShape with the given vertices.
43
+ explicit S2LaxPolylineShape(const std::vector<S2Point>& vertices);
44
+
45
+ // Constructs an S2LaxPolylineShape from the given S2Polyline, by copying
46
+ // its data.
47
+ explicit S2LaxPolylineShape(const S2Polyline& polyline);
48
+
49
+ // Initializes an S2LaxPolylineShape with the given vertices.
50
+ void Init(const std::vector<S2Point>& vertices);
51
+
52
+ // Initializes an S2LaxPolylineShape from the given S2Polyline, by copying
53
+ // its data.
54
+ void Init(const S2Polyline& polyline);
55
+
56
+ int num_vertices() const { return num_vertices_; }
57
+ const S2Point& vertex(int i) const { return vertices_[i]; }
58
+
59
+ // Appends an encoded representation of the S2LaxPolylineShape to "encoder".
60
+ //
61
+ // REQUIRES: "encoder" uses the default constructor, so that its buffer
62
+ // can be enlarged as necessary by calling Ensure(int).
63
+ void Encode(Encoder* encoder,
64
+ s2coding::CodingHint hint = s2coding::CodingHint::COMPACT) const;
65
+
66
+ // Decodes an S2LaxPolylineShape, returning true on success. (The method
67
+ // name is chosen for compatibility with EncodedS2LaxPolylineShape below.)
68
+ bool Init(Decoder* decoder);
69
+
70
+ // S2Shape interface:
71
+ int num_edges() const final { return std::max(0, num_vertices() - 1); }
72
+ Edge edge(int e) const final;
73
+ int dimension() const final { return 1; }
74
+ ReferencePoint GetReferencePoint() const final {
75
+ return ReferencePoint::Contained(false);
76
+ }
77
+ int num_chains() const final;
78
+ Chain chain(int i) const final;
79
+ Edge chain_edge(int i, int j) const final;
80
+ ChainPosition chain_position(int e) const final;
81
+ TypeTag type_tag() const override { return kTypeTag; }
82
+
83
+ private:
84
+ // For clients that have many small polylines, we save some memory by
85
+ // representing the vertices as an array rather than using std::vector.
86
+ int32 num_vertices_;
87
+ std::unique_ptr<S2Point[]> vertices_;
88
+ };
89
+
90
+ // Exactly like S2LaxPolylineShape, except that the vertices are kept in an
91
+ // encoded form and are decoded only as they are accessed. This allows for
92
+ // very fast initialization and no additional memory use beyond the encoded
93
+ // data. The encoded data is not owned by this class; typically it points
94
+ // into a large contiguous buffer that contains other encoded data as well.
95
+ class EncodedS2LaxPolylineShape : public S2Shape {
96
+ public:
97
+ // Constructs an uninitialized object; requires Init() to be called.
98
+ EncodedS2LaxPolylineShape() {}
99
+
100
+ // Initializes an EncodedS2LaxPolylineShape.
101
+ //
102
+ // REQUIRES: The Decoder data buffer must outlive this object.
103
+ bool Init(Decoder* decoder);
104
+
105
+ int num_vertices() const { return vertices_.size(); }
106
+ S2Point vertex(int i) const { return vertices_[i]; }
107
+
108
+ // S2Shape interface:
109
+ int num_edges() const final { return std::max(0, num_vertices() - 1); }
110
+ Edge edge(int e) const final;
111
+ int dimension() const final { return 1; }
112
+ ReferencePoint GetReferencePoint() const final {
113
+ return ReferencePoint::Contained(false);
114
+ }
115
+ int num_chains() const final;
116
+ Chain chain(int i) const final;
117
+ Edge chain_edge(int i, int j) const final;
118
+ ChainPosition chain_position(int e) const final;
119
+
120
+ private:
121
+ s2coding::EncodedS2PointVector vertices_;
122
+ };
123
+
124
+ #endif // S2_S2LAX_POLYLINE_SHAPE_H_
@@ -0,0 +1,62 @@
1
+ // Copyright 2013 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/s2lax_polyline_shape.h"
19
+
20
+ #include <gtest/gtest.h>
21
+ #include "s2/s2text_format.h"
22
+
23
+ using std::vector;
24
+
25
+ TEST(S2LaxPolylineShape, NoVertices) {
26
+ vector<S2Point> vertices;
27
+ S2LaxPolylineShape shape(vertices);
28
+ EXPECT_EQ(0, shape.num_edges());
29
+ EXPECT_EQ(0, shape.num_chains());
30
+ EXPECT_EQ(1, shape.dimension());
31
+ EXPECT_TRUE(shape.is_empty());
32
+ EXPECT_FALSE(shape.is_full());
33
+ EXPECT_FALSE(shape.GetReferencePoint().contained);
34
+ }
35
+
36
+ TEST(S2LaxPolylineShape, OneVertex) {
37
+ vector<S2Point> vertices = {S2Point(1, 0, 0)};
38
+ S2LaxPolylineShape shape(vertices);
39
+ EXPECT_EQ(0, shape.num_edges());
40
+ EXPECT_EQ(0, shape.num_chains());
41
+ EXPECT_EQ(1, shape.dimension());
42
+ EXPECT_TRUE(shape.is_empty());
43
+ EXPECT_FALSE(shape.is_full());
44
+ }
45
+
46
+ TEST(S2LaxPolylineShape, EdgeAccess) {
47
+ vector<S2Point> vertices = s2textformat::ParsePoints("0:0, 0:1, 1:1");
48
+ S2LaxPolylineShape shape(vertices);
49
+ EXPECT_EQ(2, shape.num_edges());
50
+ EXPECT_EQ(1, shape.num_chains());
51
+ EXPECT_EQ(0, shape.chain(0).start);
52
+ EXPECT_EQ(2, shape.chain(0).length);
53
+ EXPECT_EQ(1, shape.dimension());
54
+ EXPECT_FALSE(shape.is_empty());
55
+ EXPECT_FALSE(shape.is_full());
56
+ auto edge0 = shape.edge(0);
57
+ EXPECT_EQ(vertices[0], edge0.v0);
58
+ EXPECT_EQ(vertices[1], edge0.v1);
59
+ auto edge1 = shape.edge(1);
60
+ EXPECT_EQ(vertices[1], edge1.v0);
61
+ EXPECT_EQ(vertices[2], edge1.v1);
62
+ }