@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,462 @@
1
+ // Copyright 2017 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+
16
+ // Author: ericv@google.com (Eric Veach)
17
+ //
18
+ // Most of S2Builder::Graph is tested by the S2Builder::Layer implementations
19
+ // rather than here.
20
+
21
+ #include "s2/s2builder_graph.h"
22
+
23
+ #include <iosfwd>
24
+ #include <memory>
25
+ #include <vector>
26
+
27
+ #include <gtest/gtest.h>
28
+ #include "s2/third_party/absl/memory/memory.h"
29
+ #include "s2/id_set_lexicon.h"
30
+ #include "s2/s2builderutil_testing.h"
31
+ #include "s2/s2lax_polyline_shape.h"
32
+ #include "s2/s2text_format.h"
33
+
34
+ using absl::make_unique;
35
+ using s2builderutil::GraphClone;
36
+ using s2builderutil::GraphCloningLayer;
37
+ using s2textformat::MakeLaxPolylineOrDie;
38
+ using std::vector;
39
+
40
+ using EdgeType = S2Builder::EdgeType;
41
+ using Graph = S2Builder::Graph;
42
+ using GraphOptions = S2Builder::GraphOptions;
43
+
44
+ using DegenerateEdges = GraphOptions::DegenerateEdges;
45
+ using DuplicateEdges = GraphOptions::DuplicateEdges;
46
+ using SiblingPairs = GraphOptions::SiblingPairs;
47
+
48
+ using DegenerateBoundaries = Graph::DegenerateBoundaries;
49
+ using Edge = Graph::Edge;
50
+ using EdgeId = Graph::EdgeId;
51
+ using InputEdgeId = Graph::InputEdgeId;
52
+ using InputEdgeIdSetId = Graph::InputEdgeIdSetId;
53
+ using LoopType = Graph::LoopType;
54
+ using PolylineType = Graph::PolylineType;
55
+ using VertexId = Graph::VertexId;
56
+
57
+ namespace s2builder {
58
+
59
+ TEST(GetDirectedLoops, DegenerateEdges) {
60
+ GraphClone gc;
61
+ S2Builder builder{S2Builder::Options()};
62
+ GraphOptions graph_options(
63
+ EdgeType::DIRECTED, DegenerateEdges::DISCARD_EXCESS,
64
+ DuplicateEdges::KEEP, SiblingPairs::KEEP);
65
+ builder.StartLayer(make_unique<GraphCloningLayer>(graph_options, &gc));
66
+ builder.AddShape(*MakeLaxPolylineOrDie("1:1, 1:1"));
67
+ builder.AddShape(*MakeLaxPolylineOrDie("0:0, 0:2, 2:2, 2:0, 0:0"));
68
+ builder.AddShape(*MakeLaxPolylineOrDie("0:3, 3:3, 0:3"));
69
+ S2Error error;
70
+ EXPECT_TRUE(builder.Build(&error));
71
+ const Graph& g = gc.graph();
72
+ vector<vector<EdgeId>> loops;
73
+ ASSERT_TRUE(g.GetDirectedLoops(LoopType::SIMPLE, &loops, &error));
74
+ ASSERT_EQ(loops.size(), 3);
75
+ EXPECT_EQ(loops[0].size(), 1);
76
+ EXPECT_EQ(loops[1].size(), 4);
77
+ EXPECT_EQ(loops[2].size(), 2);
78
+ }
79
+
80
+ TEST(GetDirectedComponents, DegenerateEdges) {
81
+ GraphClone gc;
82
+ S2Builder builder{S2Builder::Options()};
83
+ GraphOptions graph_options(
84
+ EdgeType::DIRECTED, DegenerateEdges::DISCARD_EXCESS,
85
+ DuplicateEdges::MERGE, SiblingPairs::CREATE);
86
+ builder.StartLayer(make_unique<GraphCloningLayer>(graph_options, &gc));
87
+ builder.AddShape(*MakeLaxPolylineOrDie("1:1, 1:1"));
88
+ builder.AddShape(*MakeLaxPolylineOrDie("0:0, 0:2, 2:2, 2:0, 0:0"));
89
+ S2Error error;
90
+ EXPECT_TRUE(builder.Build(&error));
91
+ const Graph& g = gc.graph();
92
+ vector<Graph::DirectedComponent> components;
93
+ ASSERT_TRUE(g.GetDirectedComponents(DegenerateBoundaries::KEEP, &components,
94
+ &error));
95
+ ASSERT_EQ(components.size(), 2);
96
+ EXPECT_EQ(components[0].size(), 1);
97
+ EXPECT_EQ(components[0][0].size(), 1);
98
+ EXPECT_EQ(components[1].size(), 2);
99
+ EXPECT_EQ(components[1][0].size(), 4);
100
+ EXPECT_EQ(components[1][1].size(), 4);
101
+ }
102
+
103
+ TEST(GetUndirectedComponents, DegenerateEdges) {
104
+ GraphClone gc;
105
+ S2Builder builder{S2Builder::Options()};
106
+ GraphOptions graph_options(
107
+ EdgeType::UNDIRECTED, DegenerateEdges::DISCARD_EXCESS,
108
+ DuplicateEdges::KEEP, SiblingPairs::DISCARD_EXCESS);
109
+ builder.StartLayer(make_unique<GraphCloningLayer>(graph_options, &gc));
110
+ builder.AddShape(*MakeLaxPolylineOrDie("1:1, 1:1"));
111
+ builder.AddShape(*MakeLaxPolylineOrDie("0:0, 0:2, 2:2, 2:0, 0:0"));
112
+ S2Error error;
113
+ EXPECT_TRUE(builder.Build(&error));
114
+ const Graph& g = gc.graph();
115
+ vector<Graph::UndirectedComponent> components;
116
+ ASSERT_TRUE(g.GetUndirectedComponents(LoopType::CIRCUIT, &components,
117
+ &error));
118
+ // The result consists of two components, each with two complements. Each
119
+ // complement in this example has exactly one loop. The loops in both
120
+ // complements of the first component have 1 vertex, while the loops in both
121
+ // complements of the second component have 4 vertices.
122
+ ASSERT_EQ(components.size(), 2);
123
+ EXPECT_EQ(components[0][0].size(), 1);
124
+ EXPECT_EQ(components[0][0][0].size(), 1);
125
+ EXPECT_EQ(components[0][1].size(), 1);
126
+ EXPECT_EQ(components[0][1][0].size(), 1);
127
+ EXPECT_EQ(components[1][0].size(), 1);
128
+ EXPECT_EQ(components[1][0][0].size(), 4);
129
+ EXPECT_EQ(components[1][1].size(), 1);
130
+ EXPECT_EQ(components[1][1][0].size(), 4);
131
+ }
132
+
133
+ TEST(GetPolylines, UndirectedDegeneratePaths) {
134
+ GraphClone gc;
135
+ S2Builder builder{S2Builder::Options()};
136
+ GraphOptions graph_options(
137
+ EdgeType::UNDIRECTED, DegenerateEdges::KEEP,
138
+ DuplicateEdges::KEEP, SiblingPairs::KEEP);
139
+ builder.StartLayer(make_unique<GraphCloningLayer>(graph_options, &gc));
140
+ builder.AddShape(*MakeLaxPolylineOrDie("1:1, 1:1"));
141
+ builder.AddShape(*MakeLaxPolylineOrDie("0:0, 0:0, 0:1, 0:1, 0:2, 0:2"));
142
+ builder.AddShape(*MakeLaxPolylineOrDie("1:1, 1:1"));
143
+ S2Error error;
144
+ EXPECT_TRUE(builder.Build(&error));
145
+ const Graph& g = gc.graph();
146
+ auto polylines = g.GetPolylines(PolylineType::PATH);
147
+ EXPECT_EQ(polylines.size(), 7);
148
+ }
149
+
150
+ TEST(GetPolylines, UndirectedDegenerateWalks) {
151
+ GraphClone gc;
152
+ S2Builder builder{S2Builder::Options()};
153
+ GraphOptions graph_options(
154
+ EdgeType::UNDIRECTED, DegenerateEdges::KEEP,
155
+ DuplicateEdges::KEEP, SiblingPairs::KEEP);
156
+ builder.StartLayer(make_unique<GraphCloningLayer>(graph_options, &gc));
157
+ builder.AddShape(*MakeLaxPolylineOrDie("1:1, 1:1"));
158
+ builder.AddShape(*MakeLaxPolylineOrDie("0:0, 0:0, 0:1, 0:1, 0:2, 0:2"));
159
+ builder.AddShape(*MakeLaxPolylineOrDie("1:1, 1:1"));
160
+ S2Error error;
161
+ EXPECT_TRUE(builder.Build(&error));
162
+ const Graph& g = gc.graph();
163
+ auto polylines = g.GetPolylines(PolylineType::WALK);
164
+ EXPECT_EQ(polylines.size(), 2);
165
+ EXPECT_EQ(polylines[0].size(), 2);
166
+ EXPECT_EQ(polylines[1].size(), 5);
167
+ }
168
+
169
+ struct TestEdge {
170
+ VertexId first;
171
+ VertexId second;
172
+ vector<InputEdgeId> input_ids;
173
+ };
174
+
175
+ namespace {
176
+
177
+ std::ostream& operator<<(std::ostream& os, const Edge& edge) {
178
+ return os << "(" << edge.first << ", " << edge.second << ")";
179
+ }
180
+
181
+ std::ostream& operator<<(std::ostream& os, const vector<InputEdgeId>& v) {
182
+ os << "{";
183
+ for (int i = 0; i < v.size(); ++i) {
184
+ if (i > 0) os << ", ";
185
+ os << v[i];
186
+ }
187
+ return os << "}";
188
+ }
189
+
190
+ void TestProcessEdges(const vector<TestEdge>& input,
191
+ const vector<TestEdge>& expected,
192
+ GraphOptions* options,
193
+ S2Error::Code expected_code = S2Error::OK) {
194
+ vector<Edge> edges;
195
+ vector<InputEdgeIdSetId> input_id_set_ids;
196
+ IdSetLexicon id_set_lexicon;
197
+ for (const auto& e : input) {
198
+ edges.push_back(Edge(e.first, e.second));
199
+ input_id_set_ids.push_back(id_set_lexicon.Add(e.input_ids));
200
+ }
201
+ S2Error error;
202
+ Graph::ProcessEdges(options, &edges, &input_id_set_ids, &id_set_lexicon,
203
+ &error);
204
+ EXPECT_EQ(expected_code, error.code());
205
+ EXPECT_EQ(edges.size(), input_id_set_ids.size());
206
+ for (int i = 0; i < expected.size(); ++i) {
207
+ const auto& e = expected[i];
208
+ ASSERT_LT(i, edges.size()) << "Not enough output edges";
209
+ ASSERT_EQ(Edge(e.first, e.second), edges[i]) << "(edge " << i << ")";
210
+ auto id_set = id_set_lexicon.id_set(input_id_set_ids[i]);
211
+ vector<InputEdgeId> actual_ids(id_set.begin(), id_set.end());
212
+ ASSERT_EQ(e.input_ids, actual_ids) << "(edge " << i << ")";
213
+ }
214
+ ASSERT_EQ(expected.size(), edges.size()) << "Too many output edges";
215
+ }
216
+
217
+ } // namespace
218
+
219
+ TEST(ProcessEdges, DiscardDegenerateEdges) {
220
+ GraphOptions options(EdgeType::DIRECTED, DegenerateEdges::DISCARD,
221
+ DuplicateEdges::KEEP, SiblingPairs::KEEP);
222
+ TestProcessEdges({{0, 0}, {0, 0}}, {}, &options);
223
+ }
224
+
225
+ TEST(ProcessEdges, KeepDuplicateDegenerateEdges) {
226
+ GraphOptions options(EdgeType::DIRECTED, DegenerateEdges::KEEP,
227
+ DuplicateEdges::KEEP, SiblingPairs::KEEP);
228
+ TestProcessEdges({{0, 0}, {0, 0}}, {{0, 0}, {0, 0}}, &options);
229
+ }
230
+
231
+ TEST(ProcessEdges, MergeDuplicateDegenerateEdges) {
232
+ GraphOptions options(EdgeType::DIRECTED, DegenerateEdges::KEEP,
233
+ DuplicateEdges::MERGE, SiblingPairs::KEEP);
234
+ TestProcessEdges({{0, 0, {1}}, {0, 0, {2}}}, {{0, 0, {1, 2}}}, &options);
235
+ }
236
+
237
+ TEST(ProcessEdges, MergeUndirectedDuplicateDegenerateEdges) {
238
+ // Edge count should be reduced to 2 (i.e., one undirected edge), and all
239
+ // labels should be merged.
240
+ GraphOptions options(EdgeType::UNDIRECTED, DegenerateEdges::KEEP,
241
+ DuplicateEdges::MERGE, SiblingPairs::KEEP);
242
+ TestProcessEdges({{0, 0, {1}}, {0, 0}, {0, 0}, {0, 0, {2}}},
243
+ {{0, 0, {1, 2}}, {0, 0, {1, 2}}}, &options);
244
+ }
245
+
246
+ TEST(ProcessEdges, ConvertedUndirectedDegenerateEdges) {
247
+ // Converting from UNDIRECTED to DIRECTED cuts the edge count in half and
248
+ // merges any edge labels.
249
+ GraphOptions options(EdgeType::UNDIRECTED, DegenerateEdges::KEEP,
250
+ DuplicateEdges::KEEP, SiblingPairs::REQUIRE);
251
+ TestProcessEdges({{0, 0, {1}}, {0, 0}, {0, 0}, {0, 0, {2}}},
252
+ {{0, 0, {1, 2}}, {0, 0, {1, 2}}}, &options);
253
+ EXPECT_EQ(EdgeType::DIRECTED, options.edge_type());
254
+ }
255
+
256
+ TEST(ProcessEdges, MergeConvertedUndirectedDuplicateDegenerateEdges) {
257
+ // Like the test above, except that we also merge duplicates.
258
+ GraphOptions options(EdgeType::UNDIRECTED, DegenerateEdges::KEEP,
259
+ DuplicateEdges::MERGE, SiblingPairs::REQUIRE);
260
+ TestProcessEdges({{0, 0, {1}}, {0, 0}, {0, 0}, {0, 0, {2}}},
261
+ {{0, 0, {1, 2}}}, &options);
262
+ EXPECT_EQ(EdgeType::DIRECTED, options.edge_type());
263
+ }
264
+
265
+ TEST(ProcessEdges, DiscardExcessConnectedDegenerateEdges) {
266
+ GraphOptions options(EdgeType::DIRECTED, DegenerateEdges::DISCARD_EXCESS,
267
+ DuplicateEdges::KEEP, SiblingPairs::KEEP);
268
+ // Test that degenerate edges are discarded if they are connnected to any
269
+ // non-degenerate edges (whether they are incoming or outgoing, and whether
270
+ // they are lexicographically before or after the degenerate edge).
271
+ TestProcessEdges({{0, 0}, {0, 1}}, {{0, 1}}, &options);
272
+ TestProcessEdges({{0, 0}, {1, 0}}, {{1, 0}}, &options);
273
+ TestProcessEdges({{0, 1}, {1, 1}}, {{0, 1}}, &options);
274
+ TestProcessEdges({{1, 0}, {1, 1}}, {{1, 0}}, &options);
275
+ }
276
+
277
+ TEST(ProcessEdges, DiscardExcessIsolatedDegenerateEdges) {
278
+ GraphOptions options(EdgeType::DIRECTED, DegenerateEdges::DISCARD_EXCESS,
279
+ DuplicateEdges::KEEP, SiblingPairs::KEEP);
280
+ // Test that DISCARD_EXCESS does not merge any remaining duplicate
281
+ // degenerate edges together.
282
+ TestProcessEdges({{0, 0, {1}}, {0, 0, {2}}},
283
+ {{0, 0, {1}}, {0, 0, {2}}}, &options);
284
+ }
285
+
286
+ TEST(ProcessEdges, DiscardExcessUndirectedIsolatedDegenerateEdges) {
287
+ GraphOptions options(EdgeType::UNDIRECTED, DegenerateEdges::DISCARD_EXCESS,
288
+ DuplicateEdges::KEEP, SiblingPairs::KEEP);
289
+ // Test that DISCARD_EXCESS does not merge any remaining duplicate
290
+ // undirected degenerate edges together.
291
+ TestProcessEdges({{0, 0, {1}}, {0, 0}, {0, 0, {2}}, {0, 0}},
292
+ {{0, 0, {1}}, {0, 0}, {0, 0, {2}}, {0, 0}}, &options);
293
+ }
294
+
295
+ TEST(ProcessEdges, DiscardExcessConvertedUndirectedIsolatedDegenerateEdges) {
296
+ GraphOptions options(EdgeType::UNDIRECTED, DegenerateEdges::DISCARD_EXCESS,
297
+ DuplicateEdges::KEEP, SiblingPairs::REQUIRE);
298
+ // Converting from UNDIRECTED to DIRECTED cuts the edge count in half and
299
+ // merges edge labels.
300
+ TestProcessEdges({{0, 0, {1}}, {0, 0, {2}}, {0, 0, {3}}, {0, 0}},
301
+ {{0, 0, {1, 2, 3}}, {0, 0, {1, 2, 3}}}, &options);
302
+ EXPECT_EQ(EdgeType::DIRECTED, options.edge_type());
303
+ }
304
+
305
+ TEST(ProcessEdges, SiblingPairsDiscardMergesDegenerateEdgeLabels) {
306
+ // Test that when SiblingPairs::DISCARD or SiblingPairs::DISCARD_EXCESS
307
+ // is specified, the edge labels of degenerate edges are merged together
308
+ // (for consistency, since these options merge the labels of all
309
+ // non-degenerate edges as well).
310
+ GraphOptions options(EdgeType::DIRECTED, DegenerateEdges::KEEP,
311
+ DuplicateEdges::KEEP, SiblingPairs::DISCARD);
312
+ TestProcessEdges({{0, 0, {1}}, {0, 0, {2}}, {0, 0, {3}}},
313
+ {{0, 0, {1, 2, 3}}, {0, 0, {1, 2, 3}}, {0, 0, {1, 2, 3}}},
314
+ &options);
315
+ options.set_sibling_pairs(SiblingPairs::DISCARD_EXCESS);
316
+ TestProcessEdges({{0, 0, {1}}, {0, 0, {2}}, {0, 0, {3}}},
317
+ {{0, 0, {1, 2, 3}}, {0, 0, {1, 2, 3}}, {0, 0, {1, 2, 3}}},
318
+ &options);
319
+ }
320
+
321
+ TEST(ProcessEdges, KeepSiblingPairs) {
322
+ GraphOptions options(EdgeType::DIRECTED, DegenerateEdges::DISCARD,
323
+ DuplicateEdges::KEEP, SiblingPairs::KEEP);
324
+ TestProcessEdges({{0, 1}, {1, 0}}, {{0, 1}, {1, 0}}, &options);
325
+ }
326
+
327
+ TEST(ProcessEdges, MergeDuplicateSiblingPairs) {
328
+ GraphOptions options(EdgeType::DIRECTED, DegenerateEdges::DISCARD,
329
+ DuplicateEdges::MERGE, SiblingPairs::KEEP);
330
+ TestProcessEdges({{0, 1}, {0, 1}, {1, 0}}, {{0, 1}, {1, 0}}, &options);
331
+ }
332
+
333
+ TEST(ProcessEdges, DiscardSiblingPairs) {
334
+ // Check that matched pairs are discarded, leaving behind any excess edges.
335
+ GraphOptions options(EdgeType::DIRECTED, DegenerateEdges::DISCARD,
336
+ DuplicateEdges::KEEP, SiblingPairs::DISCARD);
337
+ TestProcessEdges({{0, 1}, {1, 0}}, {}, &options);
338
+ TestProcessEdges({{0, 1}, {0, 1}, {1, 0}, {1, 0}}, {}, &options);
339
+ TestProcessEdges({{0, 1}, {0, 1}, {0, 1}, {1, 0}},
340
+ {{0, 1}, {0, 1}}, &options);
341
+ TestProcessEdges({{0, 1}, {1, 0}, {1, 0}, {1, 0}},
342
+ {{1, 0}, {1, 0}}, &options);
343
+ }
344
+
345
+ TEST(ProcessEdges, DiscardSiblingPairsMergeDuplicates) {
346
+ // Check that matched pairs are discarded, and then any remaining edges
347
+ // are merged.
348
+ GraphOptions options(EdgeType::DIRECTED, DegenerateEdges::DISCARD,
349
+ DuplicateEdges::MERGE, SiblingPairs::DISCARD);
350
+ TestProcessEdges({{0, 1}, {0, 1}, {1, 0}, {1, 0}}, {}, &options);
351
+ TestProcessEdges({{0, 1}, {0, 1}, {0, 1}, {1, 0}}, {{0, 1}}, &options);
352
+ TestProcessEdges({{0, 1}, {1, 0}, {1, 0}, {1, 0}}, {{1, 0}}, &options);
353
+ }
354
+
355
+ TEST(ProcessEdges, DiscardUndirectedSiblingPairs) {
356
+ // An undirected sibling pair consists of four edges, two in each direction
357
+ // (see s2builder.h). Since undirected edges always come in pairs, this
358
+ // means that the result always consists of either 0 or 2 edges.
359
+ GraphOptions options(EdgeType::UNDIRECTED, DegenerateEdges::DISCARD,
360
+ DuplicateEdges::KEEP, SiblingPairs::DISCARD);
361
+ TestProcessEdges({{0, 1}, {1, 0}}, {{0, 1}, {1, 0}}, &options);
362
+ TestProcessEdges({{0, 1}, {0, 1}, {1, 0}, {1, 0}}, {}, &options);
363
+ TestProcessEdges({{0, 1}, {0, 1}, {0, 1}, {1, 0}, {1, 0}, {1, 0}},
364
+ {{0, 1}, {1, 0}}, &options);
365
+ }
366
+
367
+ TEST(ProcessEdges, DiscardExcessSiblingPairs) {
368
+ // Like SiblingPairs::DISCARD, except that one sibling pair is kept if the
369
+ // result would otherwise be empty.
370
+ GraphOptions options(EdgeType::DIRECTED, DegenerateEdges::DISCARD,
371
+ DuplicateEdges::KEEP, SiblingPairs::DISCARD_EXCESS);
372
+ TestProcessEdges({{0, 1}, {1, 0}}, {{0, 1}, {1, 0}}, &options);
373
+ TestProcessEdges({{0, 1}, {0, 1}, {1, 0}, {1, 0}},
374
+ {{0, 1}, {1, 0}}, &options);
375
+ TestProcessEdges({{0, 1}, {0, 1}, {0, 1}, {1, 0}},
376
+ {{0, 1}, {0, 1}}, &options);
377
+ TestProcessEdges({{0, 1}, {1, 0}, {1, 0}, {1, 0}},
378
+ {{1, 0}, {1, 0}}, &options);
379
+ }
380
+
381
+ TEST(ProcessEdges, DiscardExcessSiblingPairsMergeDuplicates) {
382
+ // Like SiblingPairs::DISCARD, except that one sibling pair is kept if the
383
+ // result would otherwise be empty.
384
+ GraphOptions options(EdgeType::DIRECTED, DegenerateEdges::DISCARD,
385
+ DuplicateEdges::MERGE, SiblingPairs::DISCARD_EXCESS);
386
+ TestProcessEdges({{0, 1}, {0, 1}, {1, 0}, {1, 0}},
387
+ {{0, 1}, {1, 0}}, &options);
388
+ TestProcessEdges({{0, 1}, {0, 1}, {0, 1}, {1, 0}}, {{0, 1}}, &options);
389
+ TestProcessEdges({{0, 1}, {1, 0}, {1, 0}, {1, 0}}, {{1, 0}}, &options);
390
+ }
391
+
392
+ TEST(ProcessEdges, DiscardExcessUndirectedSiblingPairs) {
393
+ // Like SiblingPairs::DISCARD, except that one undirected sibling pair
394
+ // (4 edges) is kept if the result would otherwise be empty.
395
+ GraphOptions options(EdgeType::UNDIRECTED, DegenerateEdges::DISCARD,
396
+ DuplicateEdges::KEEP, SiblingPairs::DISCARD_EXCESS);
397
+ TestProcessEdges({{0, 1}, {1, 0}}, {{0, 1}, {1, 0}}, &options);
398
+ TestProcessEdges({{0, 1}, {0, 1}, {1, 0}, {1, 0}},
399
+ {{0, 1}, {0, 1}, {1, 0}, {1, 0}}, &options);
400
+ TestProcessEdges({{0, 1}, {0, 1}, {0, 1}, {1, 0}, {1, 0}, {1, 0}},
401
+ {{0, 1}, {1, 0}}, &options);
402
+ }
403
+
404
+ TEST(ProcessEdges, CreateSiblingPairs) {
405
+ GraphOptions options(EdgeType::DIRECTED, DegenerateEdges::DISCARD,
406
+ DuplicateEdges::KEEP, SiblingPairs::CREATE);
407
+ TestProcessEdges({{0, 1}}, {{0, 1}, {1, 0}}, &options);
408
+ TestProcessEdges({{0, 1}, {0, 1}},
409
+ {{0, 1}, {0, 1}, {1, 0}, {1, 0}}, &options);
410
+ }
411
+
412
+ TEST(ProcessEdges, RequireSiblingPairs) {
413
+ // Like SiblingPairs::CREATE, but generates an error.
414
+ GraphOptions options(EdgeType::DIRECTED, DegenerateEdges::DISCARD,
415
+ DuplicateEdges::KEEP, SiblingPairs::REQUIRE);
416
+ TestProcessEdges({{0, 1}, {1, 0}}, {{0, 1}, {1, 0}}, &options);
417
+ TestProcessEdges({{0, 1}}, {{0, 1}, {1, 0}}, &options,
418
+ S2Error::BUILDER_MISSING_EXPECTED_SIBLING_EDGES);
419
+ }
420
+
421
+ TEST(ProcessEdges, CreateUndirectedSiblingPairs) {
422
+ // An undirected sibling pair consists of 4 edges, but SiblingPairs::CREATE
423
+ // also converts the graph to EdgeType::DIRECTED and cuts the number of
424
+ // edges in half.
425
+ GraphOptions options(EdgeType::DIRECTED, DegenerateEdges::DISCARD,
426
+ DuplicateEdges::KEEP, SiblingPairs::CREATE);
427
+ TestProcessEdges({{0, 1}, {1, 0}},
428
+ {{0, 1}, {1, 0}}, &options);
429
+ EXPECT_EQ(EdgeType::DIRECTED, options.edge_type());
430
+
431
+ options.set_edge_type(EdgeType::UNDIRECTED);
432
+ TestProcessEdges({{0, 1}, {0, 1}, {1, 0}, {1, 0}},
433
+ {{0, 1}, {1, 0}}, &options);
434
+ EXPECT_EQ(EdgeType::DIRECTED, options.edge_type());
435
+
436
+ options.set_edge_type(EdgeType::UNDIRECTED);
437
+ TestProcessEdges({{0, 1}, {0, 1}, {0, 1}, {1, 0}, {1, 0}, {1, 0}},
438
+ {{0, 1}, {0, 1}, {1, 0}, {1, 0}}, &options);
439
+ EXPECT_EQ(EdgeType::DIRECTED, options.edge_type());
440
+ }
441
+
442
+ TEST(ProcessEdges, CreateSiblingPairsMergeDuplicates) {
443
+ GraphOptions options(EdgeType::DIRECTED, DegenerateEdges::DISCARD,
444
+ DuplicateEdges::MERGE, SiblingPairs::CREATE);
445
+ TestProcessEdges({{0, 1}}, {{0, 1}, {1, 0}}, &options);
446
+ TestProcessEdges({{0, 1}, {0, 1}}, {{0, 1}, {1, 0}}, &options);
447
+ }
448
+
449
+ TEST(ProcessEdges, CreateUndirectedSiblingPairsMergeDuplicates) {
450
+ GraphOptions options(EdgeType::DIRECTED, DegenerateEdges::DISCARD,
451
+ DuplicateEdges::MERGE, SiblingPairs::CREATE);
452
+ TestProcessEdges({{0, 1}, {1, 0}},
453
+ {{0, 1}, {1, 0}}, &options);
454
+ EXPECT_EQ(EdgeType::DIRECTED, options.edge_type());
455
+
456
+ options.set_edge_type(EdgeType::UNDIRECTED);
457
+ TestProcessEdges({{0, 1}, {0, 1}, {0, 1}, {1, 0}, {1, 0}, {1, 0}},
458
+ {{0, 1}, {1, 0}}, &options);
459
+ EXPECT_EQ(EdgeType::DIRECTED, options.edge_type());
460
+ }
461
+
462
+ } // namespace s2builder
@@ -0,0 +1,50 @@
1
+ // Copyright 2016 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_S2BUILDER_LAYER_H_
19
+ #define S2_S2BUILDER_LAYER_H_
20
+
21
+ #include "s2/s2builder_graph.h"
22
+
23
+ // This class is not needed by ordinary S2Builder clients. It is only
24
+ // necessary if you wish to implement a new S2Builder::Layer subtype.
25
+ class S2Builder::Layer {
26
+ public:
27
+ // Convenience declarations for layer subtypes.
28
+ using EdgeType = S2Builder::EdgeType;
29
+ using GraphOptions = S2Builder::GraphOptions;
30
+ using Graph = S2Builder::Graph;
31
+ using Label = S2Builder::Label;
32
+ using LabelSetId = S2Builder::LabelSetId;
33
+
34
+ virtual ~Layer() {}
35
+
36
+ // Defines options for building the edge graph that is passed to Build().
37
+ virtual GraphOptions graph_options() const = 0;
38
+
39
+ // Assembles a graph of snapped edges into the geometry type implemented by
40
+ // this layer. If an error is encountered, sets "error" appropriately.
41
+ //
42
+ // Note that when there are multiple layers, the Graph objects passed to all
43
+ // layers are guaranteed to be valid until the last Build() method returns.
44
+ // This makes it easier to write algorithms that gather the output graphs
45
+ // from several layers and process them all at once (such as
46
+ // s2builderutil::ClosedSetNormalizer).
47
+ virtual void Build(const Graph& g, S2Error* error) = 0;
48
+ };
49
+
50
+ #endif // S2_S2BUILDER_LAYER_H_