@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,417 @@
1
+ // Copyright Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+
16
+ #include "s2/s2text_format.h"
17
+
18
+ #include <vector>
19
+ #include <gtest/gtest.h>
20
+ #include "s2/third_party/absl/strings/str_split.h"
21
+ #include "s2/mutable_s2shape_index.h"
22
+ #include "s2/s1angle.h"
23
+ #include "s2/s2latlng.h"
24
+ #include "s2/s2lax_polygon_shape.h"
25
+ #include "s2/s2lax_polyline_shape.h"
26
+ #include "s2/s2loop.h"
27
+ #include "s2/s2polygon.h"
28
+ #include "s2/s2polyline.h"
29
+ #include "s2/s2testing.h"
30
+
31
+ using std::unique_ptr;
32
+ using std::vector;
33
+
34
+ namespace {
35
+
36
+ static const int kIters = 10000;
37
+
38
+ // Verify that s2textformat::ToString() formats the given lat/lng with at most
39
+ // "max_digits" after the decimal point and has no trailing zeros.
40
+ void ExpectMaxDigits(const S2LatLng& ll, int max_digits) {
41
+ string result = s2textformat::ToString(ll.ToPoint());
42
+ vector<string> values = absl::StrSplit(result, ':', absl::SkipEmpty());
43
+ EXPECT_EQ(2, values.size()) << result;
44
+ for (const auto& value : values) {
45
+ int num_digits = 0;
46
+ if (value.find('.') != string::npos) {
47
+ num_digits = value.size() - value.find('.') - 1;
48
+ EXPECT_NE('0', value.back());
49
+ }
50
+ EXPECT_LE(num_digits, max_digits) << value;
51
+ }
52
+ }
53
+
54
+ void ExpectString(const string& expected, const S2LatLng& ll) {
55
+ EXPECT_EQ(expected, s2textformat::ToString(ll.ToPoint()));
56
+ }
57
+
58
+ TEST(ToString, SpecialCases) {
59
+ ExpectString("0:0", S2LatLng::FromDegrees(0, 0));
60
+ ExpectString("1e-20:1e-30", S2LatLng::FromDegrees(1e-20, 1e-30));
61
+ }
62
+
63
+ TEST(ToString, MinimalDigitsE5) {
64
+ for (int iter = 0; iter < kIters; ++iter) {
65
+ S2LatLng ll(S2Testing::RandomPoint());
66
+ S2LatLng ll_e5 = S2LatLng::FromE5(ll.lat().e5(), ll.lng().e5());
67
+ ExpectMaxDigits(ll_e5, 5);
68
+ }
69
+ }
70
+
71
+ TEST(ToString, MinimalDigitsE6) {
72
+ for (int iter = 0; iter < kIters; ++iter) {
73
+ S2LatLng ll(S2Testing::RandomPoint());
74
+ S2LatLng ll_e6 = S2LatLng::FromE6(ll.lat().e6(), ll.lng().e6());
75
+ ExpectMaxDigits(ll_e6, 6);
76
+ }
77
+ }
78
+
79
+ TEST(ToString, MinimalDigitsE7) {
80
+ ExpectMaxDigits(S2LatLng::FromDegrees(0, 0), 7);
81
+ for (int iter = 0; iter < kIters; ++iter) {
82
+ S2LatLng ll(S2Testing::RandomPoint());
83
+ S2LatLng ll_e7 = S2LatLng::FromE7(ll.lat().e7(), ll.lng().e7());
84
+ ExpectMaxDigits(ll_e7, 7);
85
+ }
86
+ }
87
+
88
+ TEST(ToString, MinimalDigitsDoubleConstants) {
89
+ // Verify that points specified as floating-point literals in degrees using
90
+ // up to 10 digits after the decimal point are formatted with the minimal
91
+ // number of digits.
92
+ for (int iter = 0; iter < kIters; ++iter) {
93
+ int max_digits = S2Testing::rnd.Uniform(11);
94
+ int64 scale = MathUtil::FastInt64Round(pow(10, max_digits));
95
+ int64 lat = MathUtil::FastInt64Round(
96
+ S2Testing::rnd.UniformDouble(-90 * scale, 90 * scale));
97
+ int64 lng = MathUtil::FastInt64Round(
98
+ S2Testing::rnd.UniformDouble(-180 * scale, 180 * scale));
99
+ S2LatLng ll = S2LatLng::FromDegrees(lat / static_cast<double>(scale),
100
+ lng / static_cast<double>(scale));
101
+ ExpectMaxDigits(ll, max_digits);
102
+ }
103
+ }
104
+
105
+ TEST(ToString, UninitializedLoop) {
106
+ S2Loop loop;
107
+ EXPECT_EQ("", s2textformat::ToString(loop));
108
+ }
109
+
110
+ TEST(ToString, EmptyLoop) {
111
+ S2Loop empty(S2Loop::kEmpty());
112
+ EXPECT_EQ("empty", s2textformat::ToString(empty));
113
+ }
114
+
115
+ TEST(ToString, FullLoop) {
116
+ S2Loop full(S2Loop::kFull());
117
+ EXPECT_EQ("full", s2textformat::ToString(full));
118
+ }
119
+
120
+ TEST(ToString, FullLoopSpan) {
121
+ vector<S2Point> points;
122
+ EXPECT_EQ("full", s2textformat::ToString(S2PointLoopSpan(points)));
123
+ }
124
+
125
+ TEST(ToString, EmptyPolyline) {
126
+ S2Polyline polyline;
127
+ EXPECT_EQ("", s2textformat::ToString(polyline));
128
+ }
129
+
130
+ TEST(ToString, EmptyPointVector) {
131
+ vector<S2Point> points;
132
+ EXPECT_EQ("", s2textformat::ToString(points));
133
+ }
134
+
135
+ TEST(ToString, EmptyPolygon) {
136
+ S2Polygon empty;
137
+ EXPECT_EQ("empty", s2textformat::ToString(empty));
138
+ }
139
+
140
+ TEST(ToString, FullPolygon) {
141
+ S2Polygon full(absl::make_unique<S2Loop>(S2Loop::kFull()));
142
+ EXPECT_EQ("full", s2textformat::ToString(full));
143
+ }
144
+
145
+ TEST(ToString, S2PolygonLoopSeparator) {
146
+ const string kLoop1 = "0:0, 0:5, 5:0";
147
+ const string kLoop2 = "1:1, 1:4, 4:1"; // Shells and holes same direction.
148
+ auto polygon = s2textformat::MakePolygonOrDie(kLoop1 + "; " + kLoop2);
149
+ EXPECT_EQ(kLoop1 + ";\n" + kLoop2, s2textformat::ToString(*polygon));
150
+ EXPECT_EQ(kLoop1 + "; " + kLoop2, s2textformat::ToString(*polygon, "; "));
151
+ }
152
+
153
+ TEST(ToString, LaxPolygonLoopSeparator) {
154
+ const string kLoop1 = "0:0, 0:5, 5:0";
155
+ const string kLoop2 = "1:1, 4:1, 1:4"; // Interior on left of all loops.
156
+ auto polygon = s2textformat::MakeLaxPolygonOrDie(kLoop1 + "; " + kLoop2);
157
+ EXPECT_EQ(kLoop1 + ";\n" + kLoop2, s2textformat::ToString(*polygon));
158
+ EXPECT_EQ(kLoop1 + "; " + kLoop2, s2textformat::ToString(*polygon, "; "));
159
+ }
160
+
161
+ TEST(MakeLaxPolygon, Empty) {
162
+ // Verify that "" and "empty" both create empty polygons.
163
+ auto shape = s2textformat::MakeLaxPolygonOrDie("");
164
+ EXPECT_EQ(0, shape->num_loops());
165
+ shape = s2textformat::MakeLaxPolygonOrDie("empty");
166
+ EXPECT_EQ(0, shape->num_loops());
167
+ }
168
+
169
+ TEST(MakeLaxPolygon, Full) {
170
+ auto shape = s2textformat::MakeLaxPolygonOrDie("full");
171
+ EXPECT_EQ(1, shape->num_loops());
172
+ EXPECT_EQ(0, shape->num_loop_vertices(0));
173
+ }
174
+
175
+ TEST(MakeLaxPolygon, FullWithHole) {
176
+ auto shape = s2textformat::MakeLaxPolygonOrDie("full; 0:0");
177
+ EXPECT_EQ(2, shape->num_loops());
178
+ EXPECT_EQ(0, shape->num_loop_vertices(0));
179
+ EXPECT_EQ(1, shape->num_loop_vertices(1));
180
+ EXPECT_EQ(1, shape->num_edges());
181
+ }
182
+
183
+ void TestS2ShapeIndex(const string& str) {
184
+ EXPECT_EQ(str, s2textformat::ToString(*s2textformat::MakeIndexOrDie(str)));
185
+ }
186
+
187
+ TEST(ToString, S2ShapeIndex) {
188
+ TestS2ShapeIndex("# #");
189
+ TestS2ShapeIndex("0:0 # #");
190
+ TestS2ShapeIndex("0:0 | 1:0 # #");
191
+ TestS2ShapeIndex("0:0 | 1:0 # #");
192
+ TestS2ShapeIndex("# 0:0, 0:0 #");
193
+ TestS2ShapeIndex("# 0:0, 0:0 | 1:0, 2:0 #");
194
+ TestS2ShapeIndex("# # 0:0");
195
+ TestS2ShapeIndex("# # 0:0, 0:1");
196
+ TestS2ShapeIndex("# # 0:0, 0:1, 1:0");
197
+ TestS2ShapeIndex("# # 0:0, 0:1, 1:0; 2:2");
198
+ TestS2ShapeIndex("# # full");
199
+ }
200
+
201
+ TEST(MakePoint, ValidInput) {
202
+ S2Point point;
203
+ EXPECT_TRUE(s2textformat::MakePoint("-20:150", &point));
204
+ EXPECT_EQ(S2LatLng::FromDegrees(-20, 150).ToPoint(), point);
205
+ }
206
+
207
+ TEST(MakePoint, InvalidInput) {
208
+ S2Point point;
209
+ EXPECT_FALSE(s2textformat::MakePoint("blah", &point));
210
+ }
211
+
212
+ TEST(SafeParseLatLngs, ValidInput) {
213
+ std::vector<S2LatLng> latlngs;
214
+ EXPECT_TRUE(
215
+ s2textformat::ParseLatLngs("-20:150, -20:151, -19:150", &latlngs));
216
+ ASSERT_EQ(3, latlngs.size());
217
+ EXPECT_EQ(latlngs[0], S2LatLng::FromDegrees(-20, 150));
218
+ EXPECT_EQ(latlngs[1], S2LatLng::FromDegrees(-20, 151));
219
+ EXPECT_EQ(latlngs[2], S2LatLng::FromDegrees(-19, 150));
220
+ }
221
+
222
+ TEST(SafeParseLatLngs, InvalidInput) {
223
+ std::vector<S2LatLng> latlngs;
224
+ EXPECT_FALSE(s2textformat::ParseLatLngs("blah", &latlngs));
225
+ }
226
+
227
+ TEST(SafeParsePoints, ValidInput) {
228
+ std::vector<S2Point> vertices;
229
+ EXPECT_TRUE(
230
+ s2textformat::ParsePoints("-20:150, -20:151, -19:150", &vertices));
231
+ ASSERT_EQ(3, vertices.size());
232
+ EXPECT_EQ(vertices[0], S2LatLng::FromDegrees(-20, 150).ToPoint());
233
+ EXPECT_EQ(vertices[1], S2LatLng::FromDegrees(-20, 151).ToPoint());
234
+ EXPECT_EQ(vertices[2], S2LatLng::FromDegrees(-19, 150).ToPoint());
235
+ }
236
+
237
+ TEST(SafeParsePoints, InvalidInput) {
238
+ std::vector<S2Point> vertices;
239
+ EXPECT_FALSE(s2textformat::ParsePoints("blah", &vertices));
240
+ }
241
+
242
+ TEST(SafeMakeLatLngRect, ValidInput) {
243
+ S2LatLngRect rect;
244
+ EXPECT_TRUE(s2textformat::MakeLatLngRect("-10:-10, 10:10", &rect));
245
+ EXPECT_EQ(rect, S2LatLngRect(S2LatLng::FromDegrees(-10, -10),
246
+ S2LatLng::FromDegrees(10, 10)));
247
+ }
248
+
249
+ TEST(SafeMakeLatLngRect, InvalidInput) {
250
+ S2LatLngRect rect;
251
+ EXPECT_FALSE(s2textformat::MakeLatLngRect("blah", &rect));
252
+ }
253
+
254
+ TEST(SafeMakeLatLng, ValidInput) {
255
+ S2LatLng latlng;
256
+ EXPECT_TRUE(s2textformat::MakeLatLng("-12.3:45.6", &latlng));
257
+ EXPECT_EQ(latlng, S2LatLng(S2LatLng::FromDegrees(-12.3, 45.6)));
258
+ }
259
+
260
+ TEST(SafeMakeLatLng, InvalidInput) {
261
+ S2LatLng latlng;
262
+ EXPECT_FALSE(s2textformat::MakeLatLng("blah", &latlng));
263
+ }
264
+
265
+ TEST(SafeMakeCellId, ValidInput) {
266
+ S2CellId cell_id;
267
+ EXPECT_TRUE(s2textformat::MakeCellId("3/", &cell_id));
268
+ EXPECT_EQ(cell_id, S2CellId::FromFace(3));
269
+ }
270
+
271
+ TEST(SafeMakeCellId, InvalidInput) {
272
+ S2CellId cell_id;
273
+ EXPECT_FALSE(s2textformat::MakeCellId("blah", &cell_id));
274
+ EXPECT_FALSE(s2textformat::MakeCellId("6/0", &cell_id));
275
+ EXPECT_FALSE(s2textformat::MakeCellId("3/04", &cell_id));
276
+ }
277
+
278
+ TEST(SafeMakeCellUnion, ValidInput) {
279
+ S2CellUnion cell_union;
280
+ EXPECT_TRUE(s2textformat::MakeCellUnion("1/3, 4/", &cell_union));
281
+ S2CellUnion expected({S2CellId::FromFace(1).child(3), S2CellId::FromFace(4)});
282
+ EXPECT_EQ(cell_union, expected);
283
+ }
284
+
285
+ TEST(SafeMakeCellUnion, InvalidInput) {
286
+ S2CellUnion cell_union;
287
+ EXPECT_FALSE(s2textformat::MakeCellUnion("abc", &cell_union));
288
+ EXPECT_FALSE(s2textformat::MakeCellUnion("3/1 4/1", &cell_union));
289
+ }
290
+
291
+ TEST(SafeMakeLoop, ValidInput) {
292
+ std::unique_ptr<S2Loop> loop;
293
+ EXPECT_TRUE(s2textformat::MakeLoop("-20:150, -20:151, -19:150", &loop));
294
+ EXPECT_TRUE(loop->BoundaryApproxEquals(
295
+ S2Loop({S2LatLng::FromDegrees(-20, 150).ToPoint(),
296
+ S2LatLng::FromDegrees(-20, 151).ToPoint(),
297
+ S2LatLng::FromDegrees(-19, 150).ToPoint()})));
298
+ }
299
+
300
+ TEST(SafeMakeLoop, InvalidInput) {
301
+ std::unique_ptr<S2Loop> loop;
302
+ EXPECT_FALSE(s2textformat::MakeLoop("blah", &loop));
303
+ }
304
+
305
+ TEST(SafeMakePolyline, ValidInput) {
306
+ std::unique_ptr<S2Polyline> polyline;
307
+ EXPECT_TRUE(
308
+ s2textformat::MakePolyline("-20:150, -20:151, -19:150", &polyline));
309
+ S2Polyline expected({S2LatLng::FromDegrees(-20, 150).ToPoint(),
310
+ S2LatLng::FromDegrees(-20, 151).ToPoint(),
311
+ S2LatLng::FromDegrees(-19, 150).ToPoint()});
312
+ EXPECT_TRUE(polyline->Equals(&expected));
313
+ }
314
+
315
+ TEST(SafeMakePolyline, InvalidInput) {
316
+ std::unique_ptr<S2Polyline> polyline;
317
+ EXPECT_FALSE(s2textformat::MakePolyline("blah", &polyline));
318
+ }
319
+
320
+ TEST(SafeMakeLaxPolyline, ValidInput) {
321
+ std::unique_ptr<S2LaxPolylineShape> lax_polyline;
322
+ EXPECT_TRUE(s2textformat::MakeLaxPolyline("-20:150, -20:151, -19:150",
323
+ &lax_polyline));
324
+ // No easy equality check for LaxPolylines; check vertices instead.
325
+ ASSERT_EQ(3, lax_polyline->num_vertices());
326
+ EXPECT_TRUE(S2LatLng(lax_polyline->vertex(0))
327
+ .ApproxEquals(S2LatLng::FromDegrees(-20, 150)));
328
+ EXPECT_TRUE(S2LatLng(lax_polyline->vertex(1))
329
+ .ApproxEquals(S2LatLng::FromDegrees(-20, 151)));
330
+ EXPECT_TRUE(S2LatLng(lax_polyline->vertex(2))
331
+ .ApproxEquals(S2LatLng::FromDegrees(-19, 150)));
332
+ }
333
+
334
+ TEST(SafeMakeLaxPolyline, InvalidInput) {
335
+ std::unique_ptr<S2LaxPolylineShape> lax_polyline;
336
+ EXPECT_FALSE(s2textformat::MakeLaxPolyline("blah", &lax_polyline));
337
+ }
338
+
339
+ TEST(SafeMakePolygon, ValidInput) {
340
+ std::unique_ptr<S2Polygon> polygon;
341
+ EXPECT_TRUE(s2textformat::MakePolygon("-20:150, -20:151, -19:150", &polygon));
342
+ std::vector<S2Point> vertices({S2LatLng::FromDegrees(-20, 150).ToPoint(),
343
+ S2LatLng::FromDegrees(-20, 151).ToPoint(),
344
+ S2LatLng::FromDegrees(-19, 150).ToPoint()});
345
+ S2Polygon expected(absl::make_unique<S2Loop>(vertices));
346
+ EXPECT_TRUE(polygon->Equals(&expected));
347
+ }
348
+
349
+ TEST(SafeMakePolygon, InvalidInput) {
350
+ std::unique_ptr<S2Polygon> polygon;
351
+ EXPECT_FALSE(s2textformat::MakePolygon("blah", &polygon));
352
+ }
353
+
354
+ TEST(SafeMakePolygon, Empty) {
355
+ // Verify that "" and "empty" both create empty polygons.
356
+ std::unique_ptr<S2Polygon> polygon;
357
+ EXPECT_TRUE(s2textformat::MakePolygon("", &polygon));
358
+ EXPECT_TRUE(polygon->is_empty());
359
+ EXPECT_TRUE(s2textformat::MakePolygon("empty", &polygon));
360
+ EXPECT_TRUE(polygon->is_empty());
361
+ }
362
+
363
+ TEST(SafeMakePolygon, Full) {
364
+ // Verify that "full" creates the full polygon.
365
+ std::unique_ptr<S2Polygon> polygon;
366
+ EXPECT_TRUE(s2textformat::MakePolygon("full", &polygon));
367
+ EXPECT_TRUE(polygon->is_full());
368
+ }
369
+
370
+ TEST(SafeMakeVerbatimPolygon, ValidInput) {
371
+ std::unique_ptr<S2Polygon> polygon;
372
+ EXPECT_TRUE(
373
+ s2textformat::MakeVerbatimPolygon("-20:150, -20:151, -19:150", &polygon));
374
+ std::vector<S2Point> vertices({S2LatLng::FromDegrees(-20, 150).ToPoint(),
375
+ S2LatLng::FromDegrees(-20, 151).ToPoint(),
376
+ S2LatLng::FromDegrees(-19, 150).ToPoint()});
377
+ S2Polygon expected(absl::make_unique<S2Loop>(vertices));
378
+ EXPECT_TRUE(polygon->Equals(&expected));
379
+ }
380
+
381
+ TEST(SafeMakeVerbatimPolygon, InvalidInput) {
382
+ std::unique_ptr<S2Polygon> polygon;
383
+ EXPECT_FALSE(s2textformat::MakeVerbatimPolygon("blah", &polygon));
384
+ }
385
+
386
+ TEST(SafeMakeLaxPolygon, ValidInput) {
387
+ std::unique_ptr<S2LaxPolygonShape> lax_polygon;
388
+ EXPECT_TRUE(
389
+ s2textformat::MakeLaxPolygon("-20:150, -20:151, -19:150", &lax_polygon));
390
+ // No easy equality check for LaxPolygons; check vertices instead.
391
+ ASSERT_EQ(1, lax_polygon->num_loops());
392
+ ASSERT_EQ(3, lax_polygon->num_vertices());
393
+ EXPECT_TRUE(S2LatLng(lax_polygon->loop_vertex(0, 0))
394
+ .ApproxEquals(S2LatLng::FromDegrees(-20, 150)));
395
+ EXPECT_TRUE(S2LatLng(lax_polygon->loop_vertex(0, 1))
396
+ .ApproxEquals(S2LatLng::FromDegrees(-20, 151)));
397
+ EXPECT_TRUE(S2LatLng(lax_polygon->loop_vertex(0, 2))
398
+ .ApproxEquals(S2LatLng::FromDegrees(-19, 150)));
399
+ }
400
+
401
+ TEST(SafeMakeLaxPolygon, InvalidInput) {
402
+ std::unique_ptr<S2LaxPolygonShape> lax_polygon;
403
+ EXPECT_FALSE(s2textformat::MakeLaxPolygon("blah", &lax_polygon));
404
+ }
405
+
406
+ TEST(SafeMakeIndex, ValidInput) {
407
+ auto index = absl::make_unique<MutableS2ShapeIndex>();
408
+ EXPECT_TRUE(s2textformat::MakeIndex("# 0:0, 0:0 | 1:0, 2:0 #", &index));
409
+ EXPECT_EQ("# 0:0, 0:0 | 1:0, 2:0 #", s2textformat::ToString(*index));
410
+ }
411
+
412
+ TEST(SafeMakeIndex, InvalidInput) {
413
+ auto index = absl::make_unique<MutableS2ShapeIndex>();
414
+ EXPECT_FALSE(s2textformat::MakeIndex("# blah #", &index));
415
+ }
416
+
417
+ } // namespace
@@ -0,0 +1,80 @@
1
+ // Copyright 2005 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+
16
+ // Author: ericv@google.com (Eric Veach)
17
+
18
+ #include "s2/s2wedge_relations.h"
19
+
20
+ #include "s2/s2predicates.h"
21
+
22
+ namespace S2 {
23
+
24
+ bool WedgeContains(
25
+ const S2Point& a0, const S2Point& ab1, const S2Point& a2,
26
+ const S2Point& b0, const S2Point& b2) {
27
+ // For A to contain B (where each loop interior is defined to be its left
28
+ // side), the CCW edge order around ab1 must be a2 b2 b0 a0. We split
29
+ // this test into two parts that test three vertices each.
30
+ return (s2pred::OrderedCCW(a2, b2, b0, ab1) &&
31
+ s2pred::OrderedCCW(b0, a0, a2, ab1));
32
+ }
33
+
34
+ bool WedgeIntersects(
35
+ const S2Point& a0, const S2Point& ab1, const S2Point& a2,
36
+ const S2Point& b0, const S2Point& b2) {
37
+ // For A not to intersect B (where each loop interior is defined to be
38
+ // its left side), the CCW edge order around ab1 must be a0 b2 b0 a2.
39
+ // Note that it's important to write these conditions as negatives
40
+ // (!OrderedCCW(a,b,c,o) rather than Ordered(c,b,a,o)) to get correct
41
+ // results when two vertices are the same.
42
+ return !(s2pred::OrderedCCW(a0, b2, b0, ab1) &&
43
+ s2pred::OrderedCCW(b0, a2, a0, ab1));
44
+ }
45
+
46
+ WedgeRelation GetWedgeRelation(
47
+ const S2Point& a0, const S2Point& ab1, const S2Point& a2,
48
+ const S2Point& b0, const S2Point& b2) {
49
+ // There are 6 possible edge orderings at a shared vertex (all
50
+ // of these orderings are circular, i.e. abcd == bcda):
51
+ //
52
+ // (1) a2 b2 b0 a0: A contains B
53
+ // (2) a2 a0 b0 b2: B contains A
54
+ // (3) a2 a0 b2 b0: A and B are disjoint
55
+ // (4) a2 b0 a0 b2: A and B intersect in one wedge
56
+ // (5) a2 b2 a0 b0: A and B intersect in one wedge
57
+ // (6) a2 b0 b2 a0: A and B intersect in two wedges
58
+ //
59
+ // We do not distinguish between 4, 5, and 6.
60
+ // We pay extra attention when some of the edges overlap. When edges
61
+ // overlap, several of these orderings can be satisfied, and we take
62
+ // the most specific.
63
+ if (a0 == b0 && a2 == b2) return WEDGE_EQUALS;
64
+
65
+ if (s2pred::OrderedCCW(a0, a2, b2, ab1)) {
66
+ // The cases with this vertex ordering are 1, 5, and 6,
67
+ // although case 2 is also possible if a2 == b2.
68
+ if (s2pred::OrderedCCW(b2, b0, a0, ab1)) return WEDGE_PROPERLY_CONTAINS;
69
+
70
+ // We are in case 5 or 6, or case 2 if a2 == b2.
71
+ return (a2 == b2) ? WEDGE_IS_PROPERLY_CONTAINED : WEDGE_PROPERLY_OVERLAPS;
72
+ }
73
+
74
+ // We are in case 2, 3, or 4.
75
+ if (s2pred::OrderedCCW(a0, b0, b2, ab1)) return WEDGE_IS_PROPERLY_CONTAINED;
76
+ return s2pred::OrderedCCW(a0, b0, a2, ab1) ?
77
+ WEDGE_IS_DISJOINT : WEDGE_PROPERLY_OVERLAPS;
78
+ }
79
+
80
+ } // namespace S2
@@ -0,0 +1,64 @@
1
+ // Copyright 2005 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+
16
+ // Author: ericv@google.com (Eric Veach)
17
+ //
18
+ // Defines functions for determining the relationship between two angles
19
+ // ("wedges") that share a common vertex.
20
+
21
+ #ifndef S2_S2WEDGE_RELATIONS_H_
22
+ #define S2_S2WEDGE_RELATIONS_H_
23
+
24
+ #include "s2/s2point.h"
25
+
26
+ namespace S2 {
27
+
28
+ // Given an edge chain (x0, x1, x2), the wedge at x1 is the region to the
29
+ // left of the edges. More precisely, it is the set of all rays from x1x0
30
+ // (inclusive) to x1x2 (exclusive) in the *clockwise* direction.
31
+ //
32
+ // The following functions compare two *non-empty* wedges that share the
33
+ // same middle vertex: A=(a0, ab1, a2) and B=(b0, ab1, b2).
34
+
35
+ // Detailed relation from one wedge A to another wedge B.
36
+ enum WedgeRelation {
37
+ WEDGE_EQUALS, // A and B are equal.
38
+ WEDGE_PROPERLY_CONTAINS, // A is a strict superset of B.
39
+ WEDGE_IS_PROPERLY_CONTAINED, // A is a strict subset of B.
40
+ WEDGE_PROPERLY_OVERLAPS, // A-B, B-A, and A intersect B are non-empty.
41
+ WEDGE_IS_DISJOINT, // A and B are disjoint.
42
+ };
43
+
44
+ // Returns the relation from wedge A to B.
45
+ // REQUIRES: A and B are non-empty.
46
+ WedgeRelation GetWedgeRelation(
47
+ const S2Point& a0, const S2Point& ab1, const S2Point& a2,
48
+ const S2Point& b0, const S2Point& b2);
49
+
50
+ // Returns true if wedge A contains wedge B. Equivalent to but faster than
51
+ // GetWedgeRelation() == WEDGE_PROPERLY_CONTAINS || WEDGE_EQUALS.
52
+ // REQUIRES: A and B are non-empty.
53
+ bool WedgeContains(const S2Point& a0, const S2Point& ab1, const S2Point& a2,
54
+ const S2Point& b0, const S2Point& b2);
55
+
56
+ // Returns true if wedge A intersects wedge B. Equivalent to but faster
57
+ // than GetWedgeRelation() != WEDGE_IS_DISJOINT.
58
+ // REQUIRES: A and B are non-empty.
59
+ bool WedgeIntersects(const S2Point& a0, const S2Point& ab1, const S2Point& a2,
60
+ const S2Point& b0, const S2Point& b2);
61
+
62
+ } // namespace S2
63
+
64
+ #endif // S2_S2WEDGE_RELATIONS_H_
@@ -0,0 +1,89 @@
1
+ // Copyright 2005 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+
16
+ // Author: ericv@google.com (Eric Veach)
17
+
18
+ #include "s2/s2wedge_relations.h"
19
+
20
+ #include <gtest/gtest.h>
21
+ #include "s2/s2point.h"
22
+
23
+ void TestWedge(S2Point a0, S2Point ab1, S2Point a2, S2Point b0, S2Point b2,
24
+ bool contains, bool intersects,
25
+ S2::WedgeRelation wedge_relation) {
26
+ a0 = a0.Normalize();
27
+ ab1 = ab1.Normalize();
28
+ a2 = a2.Normalize();
29
+ b0 = b0.Normalize();
30
+ b2 = b2.Normalize();
31
+ EXPECT_EQ(contains, S2::WedgeContains(a0, ab1, a2, b0, b2));
32
+ EXPECT_EQ(intersects, S2::WedgeIntersects(a0, ab1, a2, b0, b2));
33
+ EXPECT_EQ(wedge_relation, S2::GetWedgeRelation(a0, ab1, a2, b0, b2));
34
+ }
35
+
36
+ TEST(S2WedgeRelations, Wedges) {
37
+ // For simplicity, all of these tests use an origin of (0, 0, 1).
38
+ // This shouldn't matter as long as the lower-level primitives are
39
+ // implemented correctly.
40
+
41
+ // Intersection in one wedge.
42
+ TestWedge(S2Point(-1, 0, 10), S2Point(0, 0, 1), S2Point(1, 2, 10),
43
+ S2Point(0, 1, 10), S2Point(1, -2, 10),
44
+ false, true, S2::WEDGE_PROPERLY_OVERLAPS);
45
+ // Intersection in two wedges.
46
+ TestWedge(S2Point(-1, -1, 10), S2Point(0, 0, 1), S2Point(1, -1, 10),
47
+ S2Point(1, 0, 10), S2Point(-1, 1, 10),
48
+ false, true, S2::WEDGE_PROPERLY_OVERLAPS);
49
+
50
+ // Normal containment.
51
+ TestWedge(S2Point(-1, -1, 10), S2Point(0, 0, 1), S2Point(1, -1, 10),
52
+ S2Point(-1, 0, 10), S2Point(1, 0, 10),
53
+ true, true, S2::WEDGE_PROPERLY_CONTAINS);
54
+ // Containment with equality on one side.
55
+ TestWedge(S2Point(2, 1, 10), S2Point(0, 0, 1), S2Point(-1, -1, 10),
56
+ S2Point(2, 1, 10), S2Point(1, -5, 10),
57
+ true, true, S2::WEDGE_PROPERLY_CONTAINS);
58
+ // Containment with equality on the other side.
59
+ TestWedge(S2Point(2, 1, 10), S2Point(0, 0, 1), S2Point(-1, -1, 10),
60
+ S2Point(1, -2, 10), S2Point(-1, -1, 10),
61
+ true, true, S2::WEDGE_PROPERLY_CONTAINS);
62
+
63
+ // Containment with equality on both sides.
64
+ TestWedge(S2Point(-2, 3, 10), S2Point(0, 0, 1), S2Point(4, -5, 10),
65
+ S2Point(-2, 3, 10), S2Point(4, -5, 10),
66
+ true, true, S2::WEDGE_EQUALS);
67
+
68
+ // Disjoint with equality on one side.
69
+ TestWedge(S2Point(-2, 3, 10), S2Point(0, 0, 1), S2Point(4, -5, 10),
70
+ S2Point(4, -5, 10), S2Point(-2, -3, 10),
71
+ false, false, S2::WEDGE_IS_DISJOINT);
72
+ // Disjoint with equality on the other side.
73
+ TestWedge(S2Point(-2, 3, 10), S2Point(0, 0, 1), S2Point(0, 5, 10),
74
+ S2Point(4, -5, 10), S2Point(-2, 3, 10),
75
+ false, false, S2::WEDGE_IS_DISJOINT);
76
+ // Disjoint with equality on both sides.
77
+ TestWedge(S2Point(-2, 3, 10), S2Point(0, 0, 1), S2Point(4, -5, 10),
78
+ S2Point(4, -5, 10), S2Point(-2, 3, 10),
79
+ false, false, S2::WEDGE_IS_DISJOINT);
80
+
81
+ // B contains A with equality on one side.
82
+ TestWedge(S2Point(2, 1, 10), S2Point(0, 0, 1), S2Point(1, -5, 10),
83
+ S2Point(2, 1, 10), S2Point(-1, -1, 10),
84
+ false, true, S2::WEDGE_IS_PROPERLY_CONTAINED);
85
+ // B contains A with equality on the other side.
86
+ TestWedge(S2Point(2, 1, 10), S2Point(0, 0, 1), S2Point(1, -5, 10),
87
+ S2Point(-2, 1, 10), S2Point(1, -5, 10),
88
+ false, true, S2::WEDGE_IS_PROPERLY_CONTAINED);
89
+ }