@nxtedition/rocksdb 15.1.5 → 15.2.1

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 (1705) hide show
  1. package/.claude/settings.local.json +5 -1
  2. package/binding.cc +84 -47
  3. package/binding.gyp +102 -2
  4. package/deps/abseil-cpp/BUILD.bazel +35 -0
  5. package/deps/abseil-cpp/CMake/AbseilDll.cmake +938 -0
  6. package/deps/abseil-cpp/CMake/AbseilHelpers.cmake +465 -0
  7. package/deps/abseil-cpp/CMake/Googletest/CMakeLists.txt.in +14 -0
  8. package/deps/abseil-cpp/CMake/Googletest/DownloadGTest.cmake +41 -0
  9. package/deps/abseil-cpp/CMake/abslConfig.cmake.in +8 -0
  10. package/deps/abseil-cpp/CMake/install_test_project/CMakeLists.txt +25 -0
  11. package/deps/abseil-cpp/CMake/install_test_project/simple.cc +32 -0
  12. package/deps/abseil-cpp/CMake/install_test_project/test.sh +113 -0
  13. package/deps/abseil-cpp/CMakeLists.txt +280 -0
  14. package/deps/abseil-cpp/LICENSE +203 -0
  15. package/deps/abseil-cpp/MODULE.bazel +43 -0
  16. package/deps/abseil-cpp/PrivacyInfo.xcprivacy +14 -0
  17. package/deps/abseil-cpp/absl/BUILD.bazel +62 -0
  18. package/deps/abseil-cpp/absl/CMakeLists.txt +45 -0
  19. package/deps/abseil-cpp/absl/abseil.podspec.gen.py +245 -0
  20. package/deps/abseil-cpp/absl/algorithm/BUILD.bazel +92 -0
  21. package/deps/abseil-cpp/absl/algorithm/CMakeLists.txt +72 -0
  22. package/deps/abseil-cpp/absl/algorithm/algorithm.h +64 -0
  23. package/deps/abseil-cpp/absl/algorithm/algorithm_test.cc +60 -0
  24. package/deps/abseil-cpp/absl/algorithm/container.h +1864 -0
  25. package/deps/abseil-cpp/absl/algorithm/container_test.cc +2232 -0
  26. package/deps/abseil-cpp/absl/base/BUILD.bazel +1036 -0
  27. package/deps/abseil-cpp/absl/base/CMakeLists.txt +881 -0
  28. package/deps/abseil-cpp/absl/base/attributes.h +1081 -0
  29. package/deps/abseil-cpp/absl/base/attributes_test.cc +43 -0
  30. package/deps/abseil-cpp/absl/base/bit_cast_test.cc +109 -0
  31. package/deps/abseil-cpp/absl/base/c_header_test.c +30 -0
  32. package/deps/abseil-cpp/absl/base/call_once.h +228 -0
  33. package/deps/abseil-cpp/absl/base/call_once_test.cc +107 -0
  34. package/deps/abseil-cpp/absl/base/casts.cc +61 -0
  35. package/deps/abseil-cpp/absl/base/casts.h +313 -0
  36. package/deps/abseil-cpp/absl/base/casts_test.cc +148 -0
  37. package/deps/abseil-cpp/absl/base/config.h +854 -0
  38. package/deps/abseil-cpp/absl/base/config_test.cc +60 -0
  39. package/deps/abseil-cpp/absl/base/const_init.h +76 -0
  40. package/deps/abseil-cpp/absl/base/dynamic_annotations.h +480 -0
  41. package/deps/abseil-cpp/absl/base/exception_safety_testing_test.cc +958 -0
  42. package/deps/abseil-cpp/absl/base/fast_type_id.h +73 -0
  43. package/deps/abseil-cpp/absl/base/fast_type_id_test.cc +130 -0
  44. package/deps/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
  45. package/deps/abseil-cpp/absl/base/internal/atomic_hook_test.cc +97 -0
  46. package/deps/abseil-cpp/absl/base/internal/atomic_hook_test_helper.cc +32 -0
  47. package/deps/abseil-cpp/absl/base/internal/atomic_hook_test_helper.h +34 -0
  48. package/deps/abseil-cpp/absl/base/internal/cmake_thread_test.cc +22 -0
  49. package/deps/abseil-cpp/absl/base/internal/cycleclock.cc +72 -0
  50. package/deps/abseil-cpp/absl/base/internal/cycleclock.h +144 -0
  51. package/deps/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  52. package/deps/abseil-cpp/absl/base/internal/direct_mmap.h +170 -0
  53. package/deps/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  54. package/deps/abseil-cpp/absl/base/internal/endian.h +279 -0
  55. package/deps/abseil-cpp/absl/base/internal/endian_test.cc +263 -0
  56. package/deps/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
  57. package/deps/abseil-cpp/absl/base/internal/errno_saver_test.cc +45 -0
  58. package/deps/abseil-cpp/absl/base/internal/exception_safety_testing.cc +79 -0
  59. package/deps/abseil-cpp/absl/base/internal/exception_safety_testing.h +1109 -0
  60. package/deps/abseil-cpp/absl/base/internal/exception_testing.h +42 -0
  61. package/deps/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
  62. package/deps/abseil-cpp/absl/base/internal/iterator_traits.h +75 -0
  63. package/deps/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
  64. package/deps/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
  65. package/deps/abseil-cpp/absl/base/internal/low_level_alloc.cc +661 -0
  66. package/deps/abseil-cpp/absl/base/internal/low_level_alloc.h +133 -0
  67. package/deps/abseil-cpp/absl/base/internal/low_level_alloc_test.cc +180 -0
  68. package/deps/abseil-cpp/absl/base/internal/low_level_scheduling.h +134 -0
  69. package/deps/abseil-cpp/absl/base/internal/nullability_traits.h +71 -0
  70. package/deps/abseil-cpp/absl/base/internal/nullability_traits_test.cc +98 -0
  71. package/deps/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
  72. package/deps/abseil-cpp/absl/base/internal/poison.cc +85 -0
  73. package/deps/abseil-cpp/absl/base/internal/poison.h +59 -0
  74. package/deps/abseil-cpp/absl/base/internal/poison_test.cc +41 -0
  75. package/deps/abseil-cpp/absl/base/internal/pretty_function.h +33 -0
  76. package/deps/abseil-cpp/absl/base/internal/raw_logging.cc +279 -0
  77. package/deps/abseil-cpp/absl/base/internal/raw_logging.h +217 -0
  78. package/deps/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
  79. package/deps/abseil-cpp/absl/base/internal/scoped_set_env.cc +81 -0
  80. package/deps/abseil-cpp/absl/base/internal/scoped_set_env.h +45 -0
  81. package/deps/abseil-cpp/absl/base/internal/scoped_set_env_test.cc +99 -0
  82. package/deps/abseil-cpp/absl/base/internal/spinlock.cc +225 -0
  83. package/deps/abseil-cpp/absl/base/internal/spinlock.h +310 -0
  84. package/deps/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
  85. package/deps/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +80 -0
  86. package/deps/abseil-cpp/absl/base/internal/spinlock_linux.inc +71 -0
  87. package/deps/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
  88. package/deps/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
  89. package/deps/abseil-cpp/absl/base/internal/spinlock_wait.h +95 -0
  90. package/deps/abseil-cpp/absl/base/internal/spinlock_win32.inc +40 -0
  91. package/deps/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  92. package/deps/abseil-cpp/absl/base/internal/strerror.h +39 -0
  93. package/deps/abseil-cpp/absl/base/internal/strerror_benchmark.cc +29 -0
  94. package/deps/abseil-cpp/absl/base/internal/strerror_test.cc +89 -0
  95. package/deps/abseil-cpp/absl/base/internal/sysinfo.cc +494 -0
  96. package/deps/abseil-cpp/absl/base/internal/sysinfo.h +74 -0
  97. package/deps/abseil-cpp/absl/base/internal/sysinfo_test.cc +82 -0
  98. package/deps/abseil-cpp/absl/base/internal/thread_identity.cc +163 -0
  99. package/deps/abseil-cpp/absl/base/internal/thread_identity.h +273 -0
  100. package/deps/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +38 -0
  101. package/deps/abseil-cpp/absl/base/internal/thread_identity_test.cc +129 -0
  102. package/deps/abseil-cpp/absl/base/internal/throw_delegate.cc +203 -0
  103. package/deps/abseil-cpp/absl/base/internal/throw_delegate.h +75 -0
  104. package/deps/abseil-cpp/absl/base/internal/tracing.cc +39 -0
  105. package/deps/abseil-cpp/absl/base/internal/tracing.h +81 -0
  106. package/deps/abseil-cpp/absl/base/internal/tracing_strong_test.cc +117 -0
  107. package/deps/abseil-cpp/absl/base/internal/tracing_weak_test.cc +34 -0
  108. package/deps/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +68 -0
  109. package/deps/abseil-cpp/absl/base/internal/unaligned_access.h +89 -0
  110. package/deps/abseil-cpp/absl/base/internal/unique_small_name_test.cc +77 -0
  111. package/deps/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +134 -0
  112. package/deps/abseil-cpp/absl/base/internal/unscaledcycleclock.h +113 -0
  113. package/deps/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  114. package/deps/abseil-cpp/absl/base/log_severity.cc +56 -0
  115. package/deps/abseil-cpp/absl/base/log_severity.h +185 -0
  116. package/deps/abseil-cpp/absl/base/log_severity_test.cc +251 -0
  117. package/deps/abseil-cpp/absl/base/macros.h +243 -0
  118. package/deps/abseil-cpp/absl/base/no_destructor.h +191 -0
  119. package/deps/abseil-cpp/absl/base/no_destructor_benchmark.cc +165 -0
  120. package/deps/abseil-cpp/absl/base/no_destructor_test.cc +205 -0
  121. package/deps/abseil-cpp/absl/base/nullability.h +317 -0
  122. package/deps/abseil-cpp/absl/base/nullability_default_nonnull_test.cc +44 -0
  123. package/deps/abseil-cpp/absl/base/nullability_test.cc +90 -0
  124. package/deps/abseil-cpp/absl/base/optimization.h +310 -0
  125. package/deps/abseil-cpp/absl/base/optimization_test.cc +141 -0
  126. package/deps/abseil-cpp/absl/base/options.h +158 -0
  127. package/deps/abseil-cpp/absl/base/policy_checks.h +115 -0
  128. package/deps/abseil-cpp/absl/base/port.h +25 -0
  129. package/deps/abseil-cpp/absl/base/prefetch.h +209 -0
  130. package/deps/abseil-cpp/absl/base/prefetch_test.cc +64 -0
  131. package/deps/abseil-cpp/absl/base/raw_logging_test.cc +98 -0
  132. package/deps/abseil-cpp/absl/base/spinlock_test_common.cc +302 -0
  133. package/deps/abseil-cpp/absl/base/thread_annotations.h +333 -0
  134. package/deps/abseil-cpp/absl/base/throw_delegate_test.cc +175 -0
  135. package/deps/abseil-cpp/absl/cleanup/BUILD.bazel +74 -0
  136. package/deps/abseil-cpp/absl/cleanup/CMakeLists.txt +55 -0
  137. package/deps/abseil-cpp/absl/cleanup/cleanup.h +142 -0
  138. package/deps/abseil-cpp/absl/cleanup/cleanup_test.cc +309 -0
  139. package/deps/abseil-cpp/absl/cleanup/internal/cleanup.h +99 -0
  140. package/deps/abseil-cpp/absl/container/BUILD.bazel +1394 -0
  141. package/deps/abseil-cpp/absl/container/CMakeLists.txt +1239 -0
  142. package/deps/abseil-cpp/absl/container/btree_benchmark.cc +806 -0
  143. package/deps/abseil-cpp/absl/container/btree_map.h +941 -0
  144. package/deps/abseil-cpp/absl/container/btree_set.h +872 -0
  145. package/deps/abseil-cpp/absl/container/btree_test.cc +3653 -0
  146. package/deps/abseil-cpp/absl/container/btree_test.h +166 -0
  147. package/deps/abseil-cpp/absl/container/chunked_queue.h +755 -0
  148. package/deps/abseil-cpp/absl/container/chunked_queue_benchmark.cc +386 -0
  149. package/deps/abseil-cpp/absl/container/chunked_queue_test.cc +768 -0
  150. package/deps/abseil-cpp/absl/container/fixed_array.h +547 -0
  151. package/deps/abseil-cpp/absl/container/fixed_array_benchmark.cc +67 -0
  152. package/deps/abseil-cpp/absl/container/fixed_array_exception_safety_test.cc +201 -0
  153. package/deps/abseil-cpp/absl/container/fixed_array_test.cc +874 -0
  154. package/deps/abseil-cpp/absl/container/flat_hash_map.h +702 -0
  155. package/deps/abseil-cpp/absl/container/flat_hash_map_test.cc +451 -0
  156. package/deps/abseil-cpp/absl/container/flat_hash_set.h +590 -0
  157. package/deps/abseil-cpp/absl/container/flat_hash_set_test.cc +401 -0
  158. package/deps/abseil-cpp/absl/container/hash_container_defaults.h +45 -0
  159. package/deps/abseil-cpp/absl/container/inlined_vector.h +1025 -0
  160. package/deps/abseil-cpp/absl/container/inlined_vector_benchmark.cc +829 -0
  161. package/deps/abseil-cpp/absl/container/inlined_vector_exception_safety_test.cc +508 -0
  162. package/deps/abseil-cpp/absl/container/inlined_vector_test.cc +2278 -0
  163. package/deps/abseil-cpp/absl/container/internal/btree.h +3149 -0
  164. package/deps/abseil-cpp/absl/container/internal/btree_container.h +876 -0
  165. package/deps/abseil-cpp/absl/container/internal/chunked_queue.h +173 -0
  166. package/deps/abseil-cpp/absl/container/internal/common.h +301 -0
  167. package/deps/abseil-cpp/absl/container/internal/common_policy_traits.h +151 -0
  168. package/deps/abseil-cpp/absl/container/internal/common_policy_traits_test.cc +157 -0
  169. package/deps/abseil-cpp/absl/container/internal/compressed_tuple.h +275 -0
  170. package/deps/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +469 -0
  171. package/deps/abseil-cpp/absl/container/internal/container_memory.h +561 -0
  172. package/deps/abseil-cpp/absl/container/internal/container_memory_test.cc +359 -0
  173. package/deps/abseil-cpp/absl/container/internal/hash_function_defaults.h +281 -0
  174. package/deps/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +633 -0
  175. package/deps/abseil-cpp/absl/container/internal/hash_generator_testing.cc +54 -0
  176. package/deps/abseil-cpp/absl/container/internal/hash_generator_testing.h +172 -0
  177. package/deps/abseil-cpp/absl/container/internal/hash_policy_testing.h +173 -0
  178. package/deps/abseil-cpp/absl/container/internal/hash_policy_testing_test.cc +45 -0
  179. package/deps/abseil-cpp/absl/container/internal/hash_policy_traits.h +195 -0
  180. package/deps/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +149 -0
  181. package/deps/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
  182. package/deps/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
  183. package/deps/abseil-cpp/absl/container/internal/hashtable_debug.h +102 -0
  184. package/deps/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  185. package/deps/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +316 -0
  186. package/deps/abseil-cpp/absl/container/internal/hashtablez_sampler.h +311 -0
  187. package/deps/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +31 -0
  188. package/deps/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +534 -0
  189. package/deps/abseil-cpp/absl/container/internal/heterogeneous_lookup_testing.h +80 -0
  190. package/deps/abseil-cpp/absl/container/internal/inlined_vector.h +1094 -0
  191. package/deps/abseil-cpp/absl/container/internal/layout.h +828 -0
  192. package/deps/abseil-cpp/absl/container/internal/layout_benchmark.cc +295 -0
  193. package/deps/abseil-cpp/absl/container/internal/layout_test.cc +2034 -0
  194. package/deps/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
  195. package/deps/abseil-cpp/absl/container/internal/node_slot_policy_test.cc +71 -0
  196. package/deps/abseil-cpp/absl/container/internal/raw_hash_map.h +382 -0
  197. package/deps/abseil-cpp/absl/container/internal/raw_hash_set.cc +2090 -0
  198. package/deps/abseil-cpp/absl/container/internal/raw_hash_set.h +3763 -0
  199. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +525 -0
  200. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +696 -0
  201. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +583 -0
  202. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
  203. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
  204. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +4184 -0
  205. package/deps/abseil-cpp/absl/container/internal/test_allocator.h +387 -0
  206. package/deps/abseil-cpp/absl/container/internal/test_instance_tracker.cc +29 -0
  207. package/deps/abseil-cpp/absl/container/internal/test_instance_tracker.h +274 -0
  208. package/deps/abseil-cpp/absl/container/internal/test_instance_tracker_test.cc +184 -0
  209. package/deps/abseil-cpp/absl/container/internal/tracked.h +83 -0
  210. package/deps/abseil-cpp/absl/container/internal/unordered_map_constructor_test.h +435 -0
  211. package/deps/abseil-cpp/absl/container/internal/unordered_map_lookup_test.h +112 -0
  212. package/deps/abseil-cpp/absl/container/internal/unordered_map_members_test.h +87 -0
  213. package/deps/abseil-cpp/absl/container/internal/unordered_map_modifiers_test.h +336 -0
  214. package/deps/abseil-cpp/absl/container/internal/unordered_map_test.cc +50 -0
  215. package/deps/abseil-cpp/absl/container/internal/unordered_set_constructor_test.h +437 -0
  216. package/deps/abseil-cpp/absl/container/internal/unordered_set_lookup_test.h +88 -0
  217. package/deps/abseil-cpp/absl/container/internal/unordered_set_members_test.h +86 -0
  218. package/deps/abseil-cpp/absl/container/internal/unordered_set_modifiers_test.h +215 -0
  219. package/deps/abseil-cpp/absl/container/internal/unordered_set_test.cc +41 -0
  220. package/deps/abseil-cpp/absl/container/linked_hash_map.h +666 -0
  221. package/deps/abseil-cpp/absl/container/linked_hash_map_benchmark.cc +140 -0
  222. package/deps/abseil-cpp/absl/container/linked_hash_map_test.cc +987 -0
  223. package/deps/abseil-cpp/absl/container/linked_hash_set.h +527 -0
  224. package/deps/abseil-cpp/absl/container/linked_hash_set_benchmark.cc +84 -0
  225. package/deps/abseil-cpp/absl/container/linked_hash_set_test.cc +947 -0
  226. package/deps/abseil-cpp/absl/container/node_hash_map.h +698 -0
  227. package/deps/abseil-cpp/absl/container/node_hash_map_test.cc +348 -0
  228. package/deps/abseil-cpp/absl/container/node_hash_set.h +589 -0
  229. package/deps/abseil-cpp/absl/container/node_hash_set_test.cc +188 -0
  230. package/deps/abseil-cpp/absl/container/sample_element_size_test.cc +118 -0
  231. package/deps/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +106 -0
  232. package/deps/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +303 -0
  233. package/deps/abseil-cpp/absl/copts/GENERATED_copts.bzl +304 -0
  234. package/deps/abseil-cpp/absl/copts/configure_copts.bzl +39 -0
  235. package/deps/abseil-cpp/absl/copts/copts.py +205 -0
  236. package/deps/abseil-cpp/absl/copts/generate_copts.py +109 -0
  237. package/deps/abseil-cpp/absl/crc/BUILD.bazel +228 -0
  238. package/deps/abseil-cpp/absl/crc/CMakeLists.txt +177 -0
  239. package/deps/abseil-cpp/absl/crc/crc32c.cc +95 -0
  240. package/deps/abseil-cpp/absl/crc/crc32c.h +192 -0
  241. package/deps/abseil-cpp/absl/crc/crc32c_benchmark.cc +196 -0
  242. package/deps/abseil-cpp/absl/crc/crc32c_test.cc +257 -0
  243. package/deps/abseil-cpp/absl/crc/internal/cpu_detect.cc +359 -0
  244. package/deps/abseil-cpp/absl/crc/internal/cpu_detect.h +69 -0
  245. package/deps/abseil-cpp/absl/crc/internal/crc.cc +435 -0
  246. package/deps/abseil-cpp/absl/crc/internal/crc.h +83 -0
  247. package/deps/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +278 -0
  248. package/deps/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  249. package/deps/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  250. package/deps/abseil-cpp/absl/crc/internal/crc_cord_state.cc +131 -0
  251. package/deps/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  252. package/deps/abseil-cpp/absl/crc/internal/crc_cord_state_test.cc +124 -0
  253. package/deps/abseil-cpp/absl/crc/internal/crc_internal.h +161 -0
  254. package/deps/abseil-cpp/absl/crc/internal/crc_memcpy.h +122 -0
  255. package/deps/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +78 -0
  256. package/deps/abseil-cpp/absl/crc/internal/crc_memcpy_test.cc +177 -0
  257. package/deps/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +459 -0
  258. package/deps/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  259. package/deps/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +762 -0
  260. package/deps/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
  261. package/deps/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +81 -0
  262. package/deps/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +195 -0
  263. package/deps/abseil-cpp/absl/crc/internal/non_temporal_memcpy_test.cc +90 -0
  264. package/deps/abseil-cpp/absl/debugging/BUILD.bazel +483 -0
  265. package/deps/abseil-cpp/absl/debugging/CMakeLists.txt +448 -0
  266. package/deps/abseil-cpp/absl/debugging/failure_signal_handler.cc +434 -0
  267. package/deps/abseil-cpp/absl/debugging/failure_signal_handler.h +121 -0
  268. package/deps/abseil-cpp/absl/debugging/failure_signal_handler_test.cc +166 -0
  269. package/deps/abseil-cpp/absl/debugging/internal/address_is_readable.cc +98 -0
  270. package/deps/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  271. package/deps/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  272. package/deps/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +118 -0
  273. package/deps/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +71 -0
  274. package/deps/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +97 -0
  275. package/deps/abseil-cpp/absl/debugging/internal/bounded_utf8_length_sequence.h +126 -0
  276. package/deps/abseil-cpp/absl/debugging/internal/bounded_utf8_length_sequence_test.cc +126 -0
  277. package/deps/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +258 -0
  278. package/deps/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +55 -0
  279. package/deps/abseil-cpp/absl/debugging/internal/decode_rust_punycode_test.cc +606 -0
  280. package/deps/abseil-cpp/absl/debugging/internal/demangle.cc +2958 -0
  281. package/deps/abseil-cpp/absl/debugging/internal/demangle.h +76 -0
  282. package/deps/abseil-cpp/absl/debugging/internal/demangle_rust.cc +925 -0
  283. package/deps/abseil-cpp/absl/debugging/internal/demangle_rust.h +42 -0
  284. package/deps/abseil-cpp/absl/debugging/internal/demangle_rust_test.cc +584 -0
  285. package/deps/abseil-cpp/absl/debugging/internal/demangle_test.cc +2050 -0
  286. package/deps/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +413 -0
  287. package/deps/abseil-cpp/absl/debugging/internal/elf_mem_image.h +141 -0
  288. package/deps/abseil-cpp/absl/debugging/internal/examine_stack.cc +334 -0
  289. package/deps/abseil-cpp/absl/debugging/internal/examine_stack.h +70 -0
  290. package/deps/abseil-cpp/absl/debugging/internal/stack_consumption.cc +206 -0
  291. package/deps/abseil-cpp/absl/debugging/internal/stack_consumption.h +50 -0
  292. package/deps/abseil-cpp/absl/debugging/internal/stack_consumption_test.cc +50 -0
  293. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +288 -0
  294. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +148 -0
  295. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_config.h +96 -0
  296. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +112 -0
  297. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +114 -0
  298. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +270 -0
  299. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +204 -0
  300. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +25 -0
  301. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +81 -0
  302. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +410 -0
  303. package/deps/abseil-cpp/absl/debugging/internal/symbolize.h +153 -0
  304. package/deps/abseil-cpp/absl/debugging/internal/utf8_for_code_point.cc +70 -0
  305. package/deps/abseil-cpp/absl/debugging/internal/utf8_for_code_point.h +47 -0
  306. package/deps/abseil-cpp/absl/debugging/internal/utf8_for_code_point_test.cc +175 -0
  307. package/deps/abseil-cpp/absl/debugging/internal/vdso_support.cc +209 -0
  308. package/deps/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  309. package/deps/abseil-cpp/absl/debugging/leak_check.cc +73 -0
  310. package/deps/abseil-cpp/absl/debugging/leak_check.h +150 -0
  311. package/deps/abseil-cpp/absl/debugging/leak_check_fail_test.cc +41 -0
  312. package/deps/abseil-cpp/absl/debugging/leak_check_test.cc +41 -0
  313. package/deps/abseil-cpp/absl/debugging/stacktrace.cc +244 -0
  314. package/deps/abseil-cpp/absl/debugging/stacktrace.h +302 -0
  315. package/deps/abseil-cpp/absl/debugging/stacktrace_benchmark.cc +78 -0
  316. package/deps/abseil-cpp/absl/debugging/stacktrace_test.cc +505 -0
  317. package/deps/abseil-cpp/absl/debugging/symbolize.cc +44 -0
  318. package/deps/abseil-cpp/absl/debugging/symbolize.h +99 -0
  319. package/deps/abseil-cpp/absl/debugging/symbolize_darwin.inc +102 -0
  320. package/deps/abseil-cpp/absl/debugging/symbolize_elf.inc +1756 -0
  321. package/deps/abseil-cpp/absl/debugging/symbolize_emscripten.inc +63 -0
  322. package/deps/abseil-cpp/absl/debugging/symbolize_test.cc +619 -0
  323. package/deps/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  324. package/deps/abseil-cpp/absl/debugging/symbolize_win32.inc +99 -0
  325. package/deps/abseil-cpp/absl/extend/CMakeLists.txt +140 -0
  326. package/deps/abseil-cpp/absl/extend/internal/BUILD.bazel +127 -0
  327. package/deps/abseil-cpp/absl/extend/internal/aggregate.h +1687 -0
  328. package/deps/abseil-cpp/absl/extend/internal/aggregate_test.cc +867 -0
  329. package/deps/abseil-cpp/absl/extend/internal/dependencies.h +83 -0
  330. package/deps/abseil-cpp/absl/extend/internal/dependencies_test.cc +117 -0
  331. package/deps/abseil-cpp/absl/extend/internal/is_tuple_hashable.h +45 -0
  332. package/deps/abseil-cpp/absl/extend/internal/num_bases.h +87 -0
  333. package/deps/abseil-cpp/absl/extend/internal/num_bases_test.cc +91 -0
  334. package/deps/abseil-cpp/absl/extend/internal/num_initializers.h +113 -0
  335. package/deps/abseil-cpp/absl/extend/internal/num_initializers_test.cc +250 -0
  336. package/deps/abseil-cpp/absl/extend/internal/reflection.cc +112 -0
  337. package/deps/abseil-cpp/absl/extend/internal/reflection.h +75 -0
  338. package/deps/abseil-cpp/absl/extend/internal/tuple.h +51 -0
  339. package/deps/abseil-cpp/absl/flags/BUILD.bazel +618 -0
  340. package/deps/abseil-cpp/absl/flags/CMakeLists.txt +482 -0
  341. package/deps/abseil-cpp/absl/flags/commandlineflag.cc +35 -0
  342. package/deps/abseil-cpp/absl/flags/commandlineflag.h +219 -0
  343. package/deps/abseil-cpp/absl/flags/commandlineflag_test.cc +236 -0
  344. package/deps/abseil-cpp/absl/flags/config.h +68 -0
  345. package/deps/abseil-cpp/absl/flags/config_test.cc +61 -0
  346. package/deps/abseil-cpp/absl/flags/declare.h +77 -0
  347. package/deps/abseil-cpp/absl/flags/flag.h +307 -0
  348. package/deps/abseil-cpp/absl/flags/flag_benchmark.cc +251 -0
  349. package/deps/abseil-cpp/absl/flags/flag_benchmark.lds +13 -0
  350. package/deps/abseil-cpp/absl/flags/flag_test.cc +1381 -0
  351. package/deps/abseil-cpp/absl/flags/flag_test_defs.cc +24 -0
  352. package/deps/abseil-cpp/absl/flags/internal/commandlineflag.cc +26 -0
  353. package/deps/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
  354. package/deps/abseil-cpp/absl/flags/internal/flag.cc +712 -0
  355. package/deps/abseil-cpp/absl/flags/internal/flag.h +969 -0
  356. package/deps/abseil-cpp/absl/flags/internal/parse.h +70 -0
  357. package/deps/abseil-cpp/absl/flags/internal/path_util.h +62 -0
  358. package/deps/abseil-cpp/absl/flags/internal/path_util_test.cc +46 -0
  359. package/deps/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +69 -0
  360. package/deps/abseil-cpp/absl/flags/internal/private_handle_accessor.h +64 -0
  361. package/deps/abseil-cpp/absl/flags/internal/program_name.cc +61 -0
  362. package/deps/abseil-cpp/absl/flags/internal/program_name.h +50 -0
  363. package/deps/abseil-cpp/absl/flags/internal/program_name_test.cc +61 -0
  364. package/deps/abseil-cpp/absl/flags/internal/registry.h +98 -0
  365. package/deps/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
  366. package/deps/abseil-cpp/absl/flags/internal/sequence_lock_test.cc +169 -0
  367. package/deps/abseil-cpp/absl/flags/internal/usage.cc +558 -0
  368. package/deps/abseil-cpp/absl/flags/internal/usage.h +106 -0
  369. package/deps/abseil-cpp/absl/flags/internal/usage_test.cc +550 -0
  370. package/deps/abseil-cpp/absl/flags/marshalling.cc +276 -0
  371. package/deps/abseil-cpp/absl/flags/marshalling.h +361 -0
  372. package/deps/abseil-cpp/absl/flags/marshalling_test.cc +1220 -0
  373. package/deps/abseil-cpp/absl/flags/parse.cc +952 -0
  374. package/deps/abseil-cpp/absl/flags/parse.h +130 -0
  375. package/deps/abseil-cpp/absl/flags/parse_test.cc +1094 -0
  376. package/deps/abseil-cpp/absl/flags/reflection.cc +368 -0
  377. package/deps/abseil-cpp/absl/flags/reflection.h +90 -0
  378. package/deps/abseil-cpp/absl/flags/reflection_test.cc +268 -0
  379. package/deps/abseil-cpp/absl/flags/usage.cc +66 -0
  380. package/deps/abseil-cpp/absl/flags/usage.h +43 -0
  381. package/deps/abseil-cpp/absl/flags/usage_config.cc +170 -0
  382. package/deps/abseil-cpp/absl/flags/usage_config.h +135 -0
  383. package/deps/abseil-cpp/absl/flags/usage_config_test.cc +205 -0
  384. package/deps/abseil-cpp/absl/functional/BUILD.bazel +173 -0
  385. package/deps/abseil-cpp/absl/functional/CMakeLists.txt +140 -0
  386. package/deps/abseil-cpp/absl/functional/any_invocable.h +336 -0
  387. package/deps/abseil-cpp/absl/functional/any_invocable_test.cc +1687 -0
  388. package/deps/abseil-cpp/absl/functional/bind_front.h +200 -0
  389. package/deps/abseil-cpp/absl/functional/bind_front_test.cc +227 -0
  390. package/deps/abseil-cpp/absl/functional/function_ref.h +249 -0
  391. package/deps/abseil-cpp/absl/functional/function_ref_test.cc +416 -0
  392. package/deps/abseil-cpp/absl/functional/function_type_benchmark.cc +176 -0
  393. package/deps/abseil-cpp/absl/functional/internal/any_invocable.h +787 -0
  394. package/deps/abseil-cpp/absl/functional/internal/front_binder.h +93 -0
  395. package/deps/abseil-cpp/absl/functional/internal/function_ref.h +151 -0
  396. package/deps/abseil-cpp/absl/functional/overload.h +72 -0
  397. package/deps/abseil-cpp/absl/functional/overload_test.cc +207 -0
  398. package/deps/abseil-cpp/absl/hash/BUILD.bazel +220 -0
  399. package/deps/abseil-cpp/absl/hash/CMakeLists.txt +179 -0
  400. package/deps/abseil-cpp/absl/hash/hash.h +466 -0
  401. package/deps/abseil-cpp/absl/hash/hash_benchmark.cc +398 -0
  402. package/deps/abseil-cpp/absl/hash/hash_instantiated_test.cc +224 -0
  403. package/deps/abseil-cpp/absl/hash/hash_test.cc +1320 -0
  404. package/deps/abseil-cpp/absl/hash/hash_testing.h +380 -0
  405. package/deps/abseil-cpp/absl/hash/internal/city.cc +337 -0
  406. package/deps/abseil-cpp/absl/hash/internal/city.h +78 -0
  407. package/deps/abseil-cpp/absl/hash/internal/city_test.cc +597 -0
  408. package/deps/abseil-cpp/absl/hash/internal/hash.cc +430 -0
  409. package/deps/abseil-cpp/absl/hash/internal/hash.h +1563 -0
  410. package/deps/abseil-cpp/absl/hash/internal/hash_test.h +87 -0
  411. package/deps/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +509 -0
  412. package/deps/abseil-cpp/absl/hash/internal/print_hash_of.cc +23 -0
  413. package/deps/abseil-cpp/absl/hash/internal/spy_hash_state.h +286 -0
  414. package/deps/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
  415. package/deps/abseil-cpp/absl/log/BUILD.bazel +686 -0
  416. package/deps/abseil-cpp/absl/log/CMakeLists.txt +1239 -0
  417. package/deps/abseil-cpp/absl/log/absl_check.h +117 -0
  418. package/deps/abseil-cpp/absl/log/absl_check_test.cc +58 -0
  419. package/deps/abseil-cpp/absl/log/absl_log.h +115 -0
  420. package/deps/abseil-cpp/absl/log/absl_log_basic_test.cc +22 -0
  421. package/deps/abseil-cpp/absl/log/absl_vlog_is_on.h +95 -0
  422. package/deps/abseil-cpp/absl/log/check.h +210 -0
  423. package/deps/abseil-cpp/absl/log/check_test.cc +58 -0
  424. package/deps/abseil-cpp/absl/log/check_test_impl.inc +1035 -0
  425. package/deps/abseil-cpp/absl/log/die_if_null.cc +34 -0
  426. package/deps/abseil-cpp/absl/log/die_if_null.h +97 -0
  427. package/deps/abseil-cpp/absl/log/die_if_null_test.cc +107 -0
  428. package/deps/abseil-cpp/absl/log/flags.cc +143 -0
  429. package/deps/abseil-cpp/absl/log/flags.h +43 -0
  430. package/deps/abseil-cpp/absl/log/flags_test.cc +195 -0
  431. package/deps/abseil-cpp/absl/log/globals.cc +178 -0
  432. package/deps/abseil-cpp/absl/log/globals.h +230 -0
  433. package/deps/abseil-cpp/absl/log/globals_test.cc +156 -0
  434. package/deps/abseil-cpp/absl/log/initialize.cc +38 -0
  435. package/deps/abseil-cpp/absl/log/initialize.h +45 -0
  436. package/deps/abseil-cpp/absl/log/internal/BUILD.bazel +581 -0
  437. package/deps/abseil-cpp/absl/log/internal/append_truncated.h +75 -0
  438. package/deps/abseil-cpp/absl/log/internal/check_impl.h +151 -0
  439. package/deps/abseil-cpp/absl/log/internal/check_op.cc +147 -0
  440. package/deps/abseil-cpp/absl/log/internal/check_op.h +565 -0
  441. package/deps/abseil-cpp/absl/log/internal/conditions.cc +85 -0
  442. package/deps/abseil-cpp/absl/log/internal/conditions.h +247 -0
  443. package/deps/abseil-cpp/absl/log/internal/config.h +45 -0
  444. package/deps/abseil-cpp/absl/log/internal/container.h +312 -0
  445. package/deps/abseil-cpp/absl/log/internal/container_test.cc +254 -0
  446. package/deps/abseil-cpp/absl/log/internal/flags.h +59 -0
  447. package/deps/abseil-cpp/absl/log/internal/fnmatch.cc +73 -0
  448. package/deps/abseil-cpp/absl/log/internal/fnmatch.h +35 -0
  449. package/deps/abseil-cpp/absl/log/internal/fnmatch_benchmark.cc +29 -0
  450. package/deps/abseil-cpp/absl/log/internal/fnmatch_test.cc +60 -0
  451. package/deps/abseil-cpp/absl/log/internal/globals.cc +145 -0
  452. package/deps/abseil-cpp/absl/log/internal/globals.h +101 -0
  453. package/deps/abseil-cpp/absl/log/internal/log_format.cc +205 -0
  454. package/deps/abseil-cpp/absl/log/internal/log_format.h +78 -0
  455. package/deps/abseil-cpp/absl/log/internal/log_impl.h +280 -0
  456. package/deps/abseil-cpp/absl/log/internal/log_message.cc +787 -0
  457. package/deps/abseil-cpp/absl/log/internal/log_message.h +455 -0
  458. package/deps/abseil-cpp/absl/log/internal/log_sink_set.cc +296 -0
  459. package/deps/abseil-cpp/absl/log/internal/log_sink_set.h +54 -0
  460. package/deps/abseil-cpp/absl/log/internal/nullguard.cc +35 -0
  461. package/deps/abseil-cpp/absl/log/internal/nullguard.h +88 -0
  462. package/deps/abseil-cpp/absl/log/internal/nullstream.h +128 -0
  463. package/deps/abseil-cpp/absl/log/internal/proto.cc +218 -0
  464. package/deps/abseil-cpp/absl/log/internal/proto.h +298 -0
  465. package/deps/abseil-cpp/absl/log/internal/stderr_log_sink_test.cc +105 -0
  466. package/deps/abseil-cpp/absl/log/internal/strip.h +99 -0
  467. package/deps/abseil-cpp/absl/log/internal/structured.h +160 -0
  468. package/deps/abseil-cpp/absl/log/internal/structured_proto.cc +115 -0
  469. package/deps/abseil-cpp/absl/log/internal/structured_proto.h +107 -0
  470. package/deps/abseil-cpp/absl/log/internal/structured_proto_test.cc +120 -0
  471. package/deps/abseil-cpp/absl/log/internal/test_actions.cc +75 -0
  472. package/deps/abseil-cpp/absl/log/internal/test_actions.h +90 -0
  473. package/deps/abseil-cpp/absl/log/internal/test_helpers.cc +82 -0
  474. package/deps/abseil-cpp/absl/log/internal/test_helpers.h +71 -0
  475. package/deps/abseil-cpp/absl/log/internal/test_matchers.cc +216 -0
  476. package/deps/abseil-cpp/absl/log/internal/test_matchers.h +94 -0
  477. package/deps/abseil-cpp/absl/log/internal/vlog_config.cc +347 -0
  478. package/deps/abseil-cpp/absl/log/internal/vlog_config.h +164 -0
  479. package/deps/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +187 -0
  480. package/deps/abseil-cpp/absl/log/internal/voidify.h +50 -0
  481. package/deps/abseil-cpp/absl/log/log.h +378 -0
  482. package/deps/abseil-cpp/absl/log/log_basic_test.cc +22 -0
  483. package/deps/abseil-cpp/absl/log/log_basic_test_impl.inc +654 -0
  484. package/deps/abseil-cpp/absl/log/log_benchmark.cc +164 -0
  485. package/deps/abseil-cpp/absl/log/log_entry.cc +263 -0
  486. package/deps/abseil-cpp/absl/log/log_entry.h +223 -0
  487. package/deps/abseil-cpp/absl/log/log_entry_test.cc +468 -0
  488. package/deps/abseil-cpp/absl/log/log_format_test.cc +2261 -0
  489. package/deps/abseil-cpp/absl/log/log_macro_hygiene_test.cc +187 -0
  490. package/deps/abseil-cpp/absl/log/log_modifier_methods_test.cc +244 -0
  491. package/deps/abseil-cpp/absl/log/log_sink.cc +23 -0
  492. package/deps/abseil-cpp/absl/log/log_sink.h +71 -0
  493. package/deps/abseil-cpp/absl/log/log_sink_registry.h +64 -0
  494. package/deps/abseil-cpp/absl/log/log_sink_test.cc +418 -0
  495. package/deps/abseil-cpp/absl/log/log_streamer.h +181 -0
  496. package/deps/abseil-cpp/absl/log/log_streamer_test.cc +451 -0
  497. package/deps/abseil-cpp/absl/log/scoped_mock_log.cc +86 -0
  498. package/deps/abseil-cpp/absl/log/scoped_mock_log.h +203 -0
  499. package/deps/abseil-cpp/absl/log/scoped_mock_log_test.cc +295 -0
  500. package/deps/abseil-cpp/absl/log/stripping_test.cc +502 -0
  501. package/deps/abseil-cpp/absl/log/structured.h +75 -0
  502. package/deps/abseil-cpp/absl/log/structured_test.cc +64 -0
  503. package/deps/abseil-cpp/absl/log/vlog_is_on.h +74 -0
  504. package/deps/abseil-cpp/absl/log/vlog_is_on_test.cc +233 -0
  505. package/deps/abseil-cpp/absl/memory/BUILD.bazel +62 -0
  506. package/deps/abseil-cpp/absl/memory/CMakeLists.txt +41 -0
  507. package/deps/abseil-cpp/absl/memory/memory.h +278 -0
  508. package/deps/abseil-cpp/absl/memory/memory_test.cc +222 -0
  509. package/deps/abseil-cpp/absl/meta/BUILD.bazel +112 -0
  510. package/deps/abseil-cpp/absl/meta/CMakeLists.txt +100 -0
  511. package/deps/abseil-cpp/absl/meta/internal/constexpr_testing.h +73 -0
  512. package/deps/abseil-cpp/absl/meta/internal/constexpr_testing_test.cc +40 -0
  513. package/deps/abseil-cpp/absl/meta/internal/requires.h +67 -0
  514. package/deps/abseil-cpp/absl/meta/internal/requires_test.cc +66 -0
  515. package/deps/abseil-cpp/absl/meta/type_traits.h +582 -0
  516. package/deps/abseil-cpp/absl/meta/type_traits_test.cc +378 -0
  517. package/deps/abseil-cpp/absl/numeric/BUILD.bazel +145 -0
  518. package/deps/abseil-cpp/absl/numeric/CMakeLists.txt +104 -0
  519. package/deps/abseil-cpp/absl/numeric/bits.h +262 -0
  520. package/deps/abseil-cpp/absl/numeric/bits_benchmark.cc +73 -0
  521. package/deps/abseil-cpp/absl/numeric/bits_test.cc +724 -0
  522. package/deps/abseil-cpp/absl/numeric/int128.cc +344 -0
  523. package/deps/abseil-cpp/absl/numeric/int128.h +1224 -0
  524. package/deps/abseil-cpp/absl/numeric/int128_benchmark.cc +281 -0
  525. package/deps/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +303 -0
  526. package/deps/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +347 -0
  527. package/deps/abseil-cpp/absl/numeric/int128_stream_test.cc +1400 -0
  528. package/deps/abseil-cpp/absl/numeric/int128_test.cc +1407 -0
  529. package/deps/abseil-cpp/absl/numeric/internal/bits.h +394 -0
  530. package/deps/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  531. package/deps/abseil-cpp/absl/profiling/BUILD.bazel +188 -0
  532. package/deps/abseil-cpp/absl/profiling/CMakeLists.txt +132 -0
  533. package/deps/abseil-cpp/absl/profiling/hashtable.cc +135 -0
  534. package/deps/abseil-cpp/absl/profiling/hashtable.h +40 -0
  535. package/deps/abseil-cpp/absl/profiling/internal/exponential_biased.cc +93 -0
  536. package/deps/abseil-cpp/absl/profiling/internal/exponential_biased.h +130 -0
  537. package/deps/abseil-cpp/absl/profiling/internal/exponential_biased_test.cc +203 -0
  538. package/deps/abseil-cpp/absl/profiling/internal/periodic_sampler.cc +53 -0
  539. package/deps/abseil-cpp/absl/profiling/internal/periodic_sampler.h +211 -0
  540. package/deps/abseil-cpp/absl/profiling/internal/periodic_sampler_benchmark.cc +79 -0
  541. package/deps/abseil-cpp/absl/profiling/internal/periodic_sampler_test.cc +177 -0
  542. package/deps/abseil-cpp/absl/profiling/internal/profile_builder.cc +463 -0
  543. package/deps/abseil-cpp/absl/profiling/internal/profile_builder.h +161 -0
  544. package/deps/abseil-cpp/absl/profiling/internal/sample_recorder.h +253 -0
  545. package/deps/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +188 -0
  546. package/deps/abseil-cpp/absl/random/BUILD.bazel +550 -0
  547. package/deps/abseil-cpp/absl/random/CMakeLists.txt +1250 -0
  548. package/deps/abseil-cpp/absl/random/benchmarks.cc +376 -0
  549. package/deps/abseil-cpp/absl/random/bernoulli_distribution.h +202 -0
  550. package/deps/abseil-cpp/absl/random/bernoulli_distribution_test.cc +217 -0
  551. package/deps/abseil-cpp/absl/random/beta_distribution.h +429 -0
  552. package/deps/abseil-cpp/absl/random/beta_distribution_test.cc +615 -0
  553. package/deps/abseil-cpp/absl/random/bit_gen_ref.h +187 -0
  554. package/deps/abseil-cpp/absl/random/bit_gen_ref_test.cc +107 -0
  555. package/deps/abseil-cpp/absl/random/discrete_distribution.cc +108 -0
  556. package/deps/abseil-cpp/absl/random/discrete_distribution.h +249 -0
  557. package/deps/abseil-cpp/absl/random/discrete_distribution_test.cc +251 -0
  558. package/deps/abseil-cpp/absl/random/distributions.h +450 -0
  559. package/deps/abseil-cpp/absl/random/distributions_test.cc +516 -0
  560. package/deps/abseil-cpp/absl/random/examples_test.cc +98 -0
  561. package/deps/abseil-cpp/absl/random/exponential_distribution.h +166 -0
  562. package/deps/abseil-cpp/absl/random/exponential_distribution_test.cc +426 -0
  563. package/deps/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  564. package/deps/abseil-cpp/absl/random/gaussian_distribution.h +276 -0
  565. package/deps/abseil-cpp/absl/random/gaussian_distribution_test.cc +561 -0
  566. package/deps/abseil-cpp/absl/random/generators_test.cc +185 -0
  567. package/deps/abseil-cpp/absl/random/internal/BUILD.bazel +863 -0
  568. package/deps/abseil-cpp/absl/random/internal/chi_square.cc +230 -0
  569. package/deps/abseil-cpp/absl/random/internal/chi_square.h +89 -0
  570. package/deps/abseil-cpp/absl/random/internal/chi_square_test.cc +364 -0
  571. package/deps/abseil-cpp/absl/random/internal/distribution_caller.h +96 -0
  572. package/deps/abseil-cpp/absl/random/internal/distribution_test_util.cc +418 -0
  573. package/deps/abseil-cpp/absl/random/internal/distribution_test_util.h +113 -0
  574. package/deps/abseil-cpp/absl/random/internal/distribution_test_util_test.cc +193 -0
  575. package/deps/abseil-cpp/absl/random/internal/entropy_pool.cc +185 -0
  576. package/deps/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
  577. package/deps/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
  578. package/deps/abseil-cpp/absl/random/internal/explicit_seed_seq.h +92 -0
  579. package/deps/abseil-cpp/absl/random/internal/explicit_seed_seq_test.cc +241 -0
  580. package/deps/abseil-cpp/absl/random/internal/fast_uniform_bits.h +271 -0
  581. package/deps/abseil-cpp/absl/random/internal/fast_uniform_bits_test.cc +336 -0
  582. package/deps/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  583. package/deps/abseil-cpp/absl/random/internal/fastmath_test.cc +95 -0
  584. package/deps/abseil-cpp/absl/random/internal/gaussian_distribution_gentables.cc +142 -0
  585. package/deps/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  586. package/deps/abseil-cpp/absl/random/internal/generate_real_test.cc +496 -0
  587. package/deps/abseil-cpp/absl/random/internal/iostream_state_saver.h +248 -0
  588. package/deps/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +373 -0
  589. package/deps/abseil-cpp/absl/random/internal/mock_helpers.h +160 -0
  590. package/deps/abseil-cpp/absl/random/internal/mock_overload_set.h +122 -0
  591. package/deps/abseil-cpp/absl/random/internal/mock_validators.h +98 -0
  592. package/deps/abseil-cpp/absl/random/internal/nanobenchmark.cc +804 -0
  593. package/deps/abseil-cpp/absl/random/internal/nanobenchmark.h +172 -0
  594. package/deps/abseil-cpp/absl/random/internal/nanobenchmark_test.cc +79 -0
  595. package/deps/abseil-cpp/absl/random/internal/nonsecure_base.h +160 -0
  596. package/deps/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +267 -0
  597. package/deps/abseil-cpp/absl/random/internal/pcg_engine.h +287 -0
  598. package/deps/abseil-cpp/absl/random/internal/pcg_engine_test.cc +638 -0
  599. package/deps/abseil-cpp/absl/random/internal/platform.h +158 -0
  600. package/deps/abseil-cpp/absl/random/internal/randen.cc +91 -0
  601. package/deps/abseil-cpp/absl/random/internal/randen.h +96 -0
  602. package/deps/abseil-cpp/absl/random/internal/randen_benchmarks.cc +177 -0
  603. package/deps/abseil-cpp/absl/random/internal/randen_detect.cc +280 -0
  604. package/deps/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  605. package/deps/abseil-cpp/absl/random/internal/randen_engine.h +265 -0
  606. package/deps/abseil-cpp/absl/random/internal/randen_engine_test.cc +654 -0
  607. package/deps/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  608. package/deps/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  609. package/deps/abseil-cpp/absl/random/internal/randen_hwaes_test.cc +99 -0
  610. package/deps/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  611. package/deps/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  612. package/deps/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  613. package/deps/abseil-cpp/absl/random/internal/randen_slow_test.cc +61 -0
  614. package/deps/abseil-cpp/absl/random/internal/randen_test.cc +75 -0
  615. package/deps/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  616. package/deps/abseil-cpp/absl/random/internal/salted_seed_seq.h +165 -0
  617. package/deps/abseil-cpp/absl/random/internal/salted_seed_seq_test.cc +172 -0
  618. package/deps/abseil-cpp/absl/random/internal/seed_material.cc +249 -0
  619. package/deps/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  620. package/deps/abseil-cpp/absl/random/internal/seed_material_test.cc +205 -0
  621. package/deps/abseil-cpp/absl/random/internal/sequence_urbg.h +60 -0
  622. package/deps/abseil-cpp/absl/random/internal/traits.h +149 -0
  623. package/deps/abseil-cpp/absl/random/internal/traits_test.cc +123 -0
  624. package/deps/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  625. package/deps/abseil-cpp/absl/random/internal/uniform_helper_test.cc +279 -0
  626. package/deps/abseil-cpp/absl/random/internal/wide_multiply.h +95 -0
  627. package/deps/abseil-cpp/absl/random/internal/wide_multiply_test.cc +119 -0
  628. package/deps/abseil-cpp/absl/random/log_uniform_int_distribution.h +253 -0
  629. package/deps/abseil-cpp/absl/random/log_uniform_int_distribution_test.cc +277 -0
  630. package/deps/abseil-cpp/absl/random/mock_distributions.h +269 -0
  631. package/deps/abseil-cpp/absl/random/mock_distributions_test.cc +281 -0
  632. package/deps/abseil-cpp/absl/random/mocking_bit_gen.h +237 -0
  633. package/deps/abseil-cpp/absl/random/mocking_bit_gen_test.cc +403 -0
  634. package/deps/abseil-cpp/absl/random/poisson_distribution.h +262 -0
  635. package/deps/abseil-cpp/absl/random/poisson_distribution_test.cc +569 -0
  636. package/deps/abseil-cpp/absl/random/random.h +224 -0
  637. package/deps/abseil-cpp/absl/random/seed_gen_exception.cc +45 -0
  638. package/deps/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  639. package/deps/abseil-cpp/absl/random/seed_sequences.cc +33 -0
  640. package/deps/abseil-cpp/absl/random/seed_sequences.h +112 -0
  641. package/deps/abseil-cpp/absl/random/seed_sequences_test.cc +126 -0
  642. package/deps/abseil-cpp/absl/random/uniform_int_distribution.h +276 -0
  643. package/deps/abseil-cpp/absl/random/uniform_int_distribution_test.cc +259 -0
  644. package/deps/abseil-cpp/absl/random/uniform_real_distribution.h +204 -0
  645. package/deps/abseil-cpp/absl/random/uniform_real_distribution_test.cc +394 -0
  646. package/deps/abseil-cpp/absl/random/zipf_distribution.h +273 -0
  647. package/deps/abseil-cpp/absl/random/zipf_distribution_test.cc +423 -0
  648. package/deps/abseil-cpp/absl/status/BUILD.bazel +211 -0
  649. package/deps/abseil-cpp/absl/status/CMakeLists.txt +159 -0
  650. package/deps/abseil-cpp/absl/status/internal/status_internal.cc +251 -0
  651. package/deps/abseil-cpp/absl/status/internal/status_internal.h +133 -0
  652. package/deps/abseil-cpp/absl/status/internal/status_matchers.cc +69 -0
  653. package/deps/abseil-cpp/absl/status/internal/status_matchers.h +246 -0
  654. package/deps/abseil-cpp/absl/status/internal/statusor_internal.h +657 -0
  655. package/deps/abseil-cpp/absl/status/status.cc +421 -0
  656. package/deps/abseil-cpp/absl/status/status.h +948 -0
  657. package/deps/abseil-cpp/absl/status/status_benchmark.cc +37 -0
  658. package/deps/abseil-cpp/absl/status/status_matchers.h +166 -0
  659. package/deps/abseil-cpp/absl/status/status_matchers_test.cc +211 -0
  660. package/deps/abseil-cpp/absl/status/status_payload_printer.cc +36 -0
  661. package/deps/abseil-cpp/absl/status/status_payload_printer.h +52 -0
  662. package/deps/abseil-cpp/absl/status/status_test.cc +580 -0
  663. package/deps/abseil-cpp/absl/status/statusor.cc +106 -0
  664. package/deps/abseil-cpp/absl/status/statusor.h +743 -0
  665. package/deps/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
  666. package/deps/abseil-cpp/absl/status/statusor_test.cc +2124 -0
  667. package/deps/abseil-cpp/absl/strings/BUILD.bazel +1593 -0
  668. package/deps/abseil-cpp/absl/strings/CMakeLists.txt +1295 -0
  669. package/deps/abseil-cpp/absl/strings/ascii.cc +296 -0
  670. package/deps/abseil-cpp/absl/strings/ascii.h +289 -0
  671. package/deps/abseil-cpp/absl/strings/ascii_benchmark.cc +157 -0
  672. package/deps/abseil-cpp/absl/strings/ascii_test.cc +374 -0
  673. package/deps/abseil-cpp/absl/strings/atod_manual_test.cc +193 -0
  674. package/deps/abseil-cpp/absl/strings/char_formatting_test.cc +169 -0
  675. package/deps/abseil-cpp/absl/strings/charconv.cc +1442 -0
  676. package/deps/abseil-cpp/absl/strings/charconv.h +123 -0
  677. package/deps/abseil-cpp/absl/strings/charconv_benchmark.cc +203 -0
  678. package/deps/abseil-cpp/absl/strings/charconv_test.cc +787 -0
  679. package/deps/abseil-cpp/absl/strings/charset.h +163 -0
  680. package/deps/abseil-cpp/absl/strings/charset_benchmark.cc +57 -0
  681. package/deps/abseil-cpp/absl/strings/charset_test.cc +181 -0
  682. package/deps/abseil-cpp/absl/strings/cord.cc +1582 -0
  683. package/deps/abseil-cpp/absl/strings/cord.h +1763 -0
  684. package/deps/abseil-cpp/absl/strings/cord_analysis.cc +196 -0
  685. package/deps/abseil-cpp/absl/strings/cord_analysis.h +63 -0
  686. package/deps/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  687. package/deps/abseil-cpp/absl/strings/cord_buffer_test.cc +322 -0
  688. package/deps/abseil-cpp/absl/strings/cord_test.cc +3421 -0
  689. package/deps/abseil-cpp/absl/strings/cord_test_helpers.h +122 -0
  690. package/deps/abseil-cpp/absl/strings/cordz_test.cc +468 -0
  691. package/deps/abseil-cpp/absl/strings/cordz_test_helpers.h +152 -0
  692. package/deps/abseil-cpp/absl/strings/escaping.cc +1035 -0
  693. package/deps/abseil-cpp/absl/strings/escaping.h +185 -0
  694. package/deps/abseil-cpp/absl/strings/escaping_benchmark.cc +124 -0
  695. package/deps/abseil-cpp/absl/strings/escaping_test.cc +760 -0
  696. package/deps/abseil-cpp/absl/strings/has_absl_stringify.h +64 -0
  697. package/deps/abseil-cpp/absl/strings/has_absl_stringify_test.cc +40 -0
  698. package/deps/abseil-cpp/absl/strings/has_ostream_operator.h +42 -0
  699. package/deps/abseil-cpp/absl/strings/has_ostream_operator_test.cc +41 -0
  700. package/deps/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  701. package/deps/abseil-cpp/absl/strings/internal/append_and_overwrite_test.cc +95 -0
  702. package/deps/abseil-cpp/absl/strings/internal/charconv_bigint.cc +357 -0
  703. package/deps/abseil-cpp/absl/strings/internal/charconv_bigint.h +433 -0
  704. package/deps/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +260 -0
  705. package/deps/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
  706. package/deps/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
  707. package/deps/abseil-cpp/absl/strings/internal/charconv_parse_test.cc +357 -0
  708. package/deps/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  709. package/deps/abseil-cpp/absl/strings/internal/cord_data_edge_test.cc +130 -0
  710. package/deps/abseil-cpp/absl/strings/internal/cord_internal.cc +70 -0
  711. package/deps/abseil-cpp/absl/strings/internal/cord_internal.h +942 -0
  712. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1237 -0
  713. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree.h +944 -0
  714. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +187 -0
  715. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +267 -0
  716. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator_test.cc +346 -0
  717. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +69 -0
  718. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +212 -0
  719. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_reader_test.cc +293 -0
  720. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_test.cc +1568 -0
  721. package/deps/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +64 -0
  722. package/deps/abseil-cpp/absl/strings/internal/cord_rep_consume.h +47 -0
  723. package/deps/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +56 -0
  724. package/deps/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -0
  725. package/deps/abseil-cpp/absl/strings/internal/cord_rep_crc_test.cc +130 -0
  726. package/deps/abseil-cpp/absl/strings/internal/cord_rep_flat.h +195 -0
  727. package/deps/abseil-cpp/absl/strings/internal/cord_rep_test_util.h +205 -0
  728. package/deps/abseil-cpp/absl/strings/internal/cordz_functions.cc +102 -0
  729. package/deps/abseil-cpp/absl/strings/internal/cordz_functions.h +87 -0
  730. package/deps/abseil-cpp/absl/strings/internal/cordz_functions_test.cc +147 -0
  731. package/deps/abseil-cpp/absl/strings/internal/cordz_handle.cc +165 -0
  732. package/deps/abseil-cpp/absl/strings/internal/cordz_handle.h +98 -0
  733. package/deps/abseil-cpp/absl/strings/internal/cordz_handle_test.cc +265 -0
  734. package/deps/abseil-cpp/absl/strings/internal/cordz_info.cc +424 -0
  735. package/deps/abseil-cpp/absl/strings/internal/cordz_info.h +295 -0
  736. package/deps/abseil-cpp/absl/strings/internal/cordz_info_statistics_test.cc +510 -0
  737. package/deps/abseil-cpp/absl/strings/internal/cordz_info_test.cc +342 -0
  738. package/deps/abseil-cpp/absl/strings/internal/cordz_sample_token.cc +64 -0
  739. package/deps/abseil-cpp/absl/strings/internal/cordz_sample_token.h +97 -0
  740. package/deps/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +208 -0
  741. package/deps/abseil-cpp/absl/strings/internal/cordz_statistics.h +88 -0
  742. package/deps/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  743. package/deps/abseil-cpp/absl/strings/internal/cordz_update_scope_test.cc +49 -0
  744. package/deps/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +123 -0
  745. package/deps/abseil-cpp/absl/strings/internal/cordz_update_tracker_test.cc +147 -0
  746. package/deps/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +99 -0
  747. package/deps/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +35 -0
  748. package/deps/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
  749. package/deps/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_test.cc +99 -0
  750. package/deps/abseil-cpp/absl/strings/internal/escaping.cc +209 -0
  751. package/deps/abseil-cpp/absl/strings/internal/escaping.h +59 -0
  752. package/deps/abseil-cpp/absl/strings/internal/escaping_test_common.h +133 -0
  753. package/deps/abseil-cpp/absl/strings/internal/generic_printer.cc +107 -0
  754. package/deps/abseil-cpp/absl/strings/internal/generic_printer.h +115 -0
  755. package/deps/abseil-cpp/absl/strings/internal/generic_printer_internal.h +423 -0
  756. package/deps/abseil-cpp/absl/strings/internal/generic_printer_test.cc +685 -0
  757. package/deps/abseil-cpp/absl/strings/internal/memutil.cc +48 -0
  758. package/deps/abseil-cpp/absl/strings/internal/memutil.h +40 -0
  759. package/deps/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +127 -0
  760. package/deps/abseil-cpp/absl/strings/internal/memutil_test.cc +41 -0
  761. package/deps/abseil-cpp/absl/strings/internal/numbers_test_common.h +184 -0
  762. package/deps/abseil-cpp/absl/strings/internal/ostringstream.cc +43 -0
  763. package/deps/abseil-cpp/absl/strings/internal/ostringstream.h +114 -0
  764. package/deps/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +105 -0
  765. package/deps/abseil-cpp/absl/strings/internal/ostringstream_test.cc +131 -0
  766. package/deps/abseil-cpp/absl/strings/internal/pow10_helper.cc +122 -0
  767. package/deps/abseil-cpp/absl/strings/internal/pow10_helper.h +40 -0
  768. package/deps/abseil-cpp/absl/strings/internal/pow10_helper_test.cc +122 -0
  769. package/deps/abseil-cpp/absl/strings/internal/resize_uninitialized.h +119 -0
  770. package/deps/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +108 -0
  771. package/deps/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
  772. package/deps/abseil-cpp/absl/strings/internal/str_format/arg.cc +615 -0
  773. package/deps/abseil-cpp/absl/strings/internal/str_format/arg.h +661 -0
  774. package/deps/abseil-cpp/absl/strings/internal/str_format/arg_test.cc +162 -0
  775. package/deps/abseil-cpp/absl/strings/internal/str_format/bind.cc +275 -0
  776. package/deps/abseil-cpp/absl/strings/internal/str_format/bind.h +237 -0
  777. package/deps/abseil-cpp/absl/strings/internal/str_format/bind_test.cc +157 -0
  778. package/deps/abseil-cpp/absl/strings/internal/str_format/checker.h +98 -0
  779. package/deps/abseil-cpp/absl/strings/internal/str_format/checker_test.cc +176 -0
  780. package/deps/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +357 -0
  781. package/deps/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1471 -0
  782. package/deps/abseil-cpp/absl/strings/internal/str_format/extension.cc +53 -0
  783. package/deps/abseil-cpp/absl/strings/internal/str_format/extension.h +456 -0
  784. package/deps/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +110 -0
  785. package/deps/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +1945 -0
  786. package/deps/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +37 -0
  787. package/deps/abseil-cpp/absl/strings/internal/str_format/output.cc +74 -0
  788. package/deps/abseil-cpp/absl/strings/internal/str_format/output.h +97 -0
  789. package/deps/abseil-cpp/absl/strings/internal/str_format/output_test.cc +79 -0
  790. package/deps/abseil-cpp/absl/strings/internal/str_format/parser.cc +140 -0
  791. package/deps/abseil-cpp/absl/strings/internal/str_format/parser.h +271 -0
  792. package/deps/abseil-cpp/absl/strings/internal/str_format/parser_test.cc +446 -0
  793. package/deps/abseil-cpp/absl/strings/internal/str_join_internal.h +341 -0
  794. package/deps/abseil-cpp/absl/strings/internal/str_split_internal.h +525 -0
  795. package/deps/abseil-cpp/absl/strings/internal/string_constant.h +67 -0
  796. package/deps/abseil-cpp/absl/strings/internal/string_constant_test.cc +60 -0
  797. package/deps/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  798. package/deps/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
  799. package/deps/abseil-cpp/absl/strings/internal/utf8.cc +148 -0
  800. package/deps/abseil-cpp/absl/strings/internal/utf8.h +64 -0
  801. package/deps/abseil-cpp/absl/strings/internal/utf8_test.cc +259 -0
  802. package/deps/abseil-cpp/absl/strings/match.cc +133 -0
  803. package/deps/abseil-cpp/absl/strings/match.h +129 -0
  804. package/deps/abseil-cpp/absl/strings/match_test.cc +291 -0
  805. package/deps/abseil-cpp/absl/strings/numbers.cc +1230 -0
  806. package/deps/abseil-cpp/absl/strings/numbers.h +359 -0
  807. package/deps/abseil-cpp/absl/strings/numbers_benchmark.cc +288 -0
  808. package/deps/abseil-cpp/absl/strings/numbers_test.cc +2324 -0
  809. package/deps/abseil-cpp/absl/strings/resize_and_overwrite.h +194 -0
  810. package/deps/abseil-cpp/absl/strings/resize_and_overwrite_test.cc +154 -0
  811. package/deps/abseil-cpp/absl/strings/str_cat.cc +247 -0
  812. package/deps/abseil-cpp/absl/strings/str_cat.h +633 -0
  813. package/deps/abseil-cpp/absl/strings/str_cat_benchmark.cc +288 -0
  814. package/deps/abseil-cpp/absl/strings/str_cat_test.cc +692 -0
  815. package/deps/abseil-cpp/absl/strings/str_format.h +887 -0
  816. package/deps/abseil-cpp/absl/strings/str_format_test.cc +1230 -0
  817. package/deps/abseil-cpp/absl/strings/str_join.h +301 -0
  818. package/deps/abseil-cpp/absl/strings/str_join_benchmark.cc +106 -0
  819. package/deps/abseil-cpp/absl/strings/str_join_test.cc +645 -0
  820. package/deps/abseil-cpp/absl/strings/str_replace.cc +91 -0
  821. package/deps/abseil-cpp/absl/strings/str_replace.h +222 -0
  822. package/deps/abseil-cpp/absl/strings/str_replace_benchmark.cc +121 -0
  823. package/deps/abseil-cpp/absl/strings/str_replace_test.cc +345 -0
  824. package/deps/abseil-cpp/absl/strings/str_split.cc +144 -0
  825. package/deps/abseil-cpp/absl/strings/str_split.h +582 -0
  826. package/deps/abseil-cpp/absl/strings/str_split_benchmark.cc +180 -0
  827. package/deps/abseil-cpp/absl/strings/str_split_test.cc +1069 -0
  828. package/deps/abseil-cpp/absl/strings/string_view.h +60 -0
  829. package/deps/abseil-cpp/absl/strings/string_view_test.cc +86 -0
  830. package/deps/abseil-cpp/absl/strings/strip.h +99 -0
  831. package/deps/abseil-cpp/absl/strings/strip_test.cc +198 -0
  832. package/deps/abseil-cpp/absl/strings/substitute.cc +187 -0
  833. package/deps/abseil-cpp/absl/strings/substitute.h +769 -0
  834. package/deps/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
  835. package/deps/abseil-cpp/absl/strings/substitute_test.cc +288 -0
  836. package/deps/abseil-cpp/absl/synchronization/BUILD.bazel +410 -0
  837. package/deps/abseil-cpp/absl/synchronization/CMakeLists.txt +293 -0
  838. package/deps/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  839. package/deps/abseil-cpp/absl/synchronization/barrier.h +79 -0
  840. package/deps/abseil-cpp/absl/synchronization/barrier_test.cc +75 -0
  841. package/deps/abseil-cpp/absl/synchronization/blocking_counter.cc +73 -0
  842. package/deps/abseil-cpp/absl/synchronization/blocking_counter.h +107 -0
  843. package/deps/abseil-cpp/absl/synchronization/blocking_counter_benchmark.cc +84 -0
  844. package/deps/abseil-cpp/absl/synchronization/blocking_counter_test.cc +146 -0
  845. package/deps/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +152 -0
  846. package/deps/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +56 -0
  847. package/deps/abseil-cpp/absl/synchronization/internal/futex.h +177 -0
  848. package/deps/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +107 -0
  849. package/deps/abseil-cpp/absl/synchronization/internal/futex_waiter.h +63 -0
  850. package/deps/abseil-cpp/absl/synchronization/internal/graphcycles.cc +714 -0
  851. package/deps/abseil-cpp/absl/synchronization/internal/graphcycles.h +146 -0
  852. package/deps/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +43 -0
  853. package/deps/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +483 -0
  854. package/deps/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +220 -0
  855. package/deps/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +178 -0
  856. package/deps/abseil-cpp/absl/synchronization/internal/kernel_timeout_test.cc +406 -0
  857. package/deps/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  858. package/deps/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +119 -0
  859. package/deps/abseil-cpp/absl/synchronization/internal/per_thread_sem_test.cc +194 -0
  860. package/deps/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +163 -0
  861. package/deps/abseil-cpp/absl/synchronization/internal/pthread_waiter.h +60 -0
  862. package/deps/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +118 -0
  863. package/deps/abseil-cpp/absl/synchronization/internal/sem_waiter.h +65 -0
  864. package/deps/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +87 -0
  865. package/deps/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.h +56 -0
  866. package/deps/abseil-cpp/absl/synchronization/internal/thread_pool.h +96 -0
  867. package/deps/abseil-cpp/absl/synchronization/internal/waiter.h +69 -0
  868. package/deps/abseil-cpp/absl/synchronization/internal/waiter_base.cc +38 -0
  869. package/deps/abseil-cpp/absl/synchronization/internal/waiter_base.h +90 -0
  870. package/deps/abseil-cpp/absl/synchronization/internal/waiter_test.cc +192 -0
  871. package/deps/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +147 -0
  872. package/deps/abseil-cpp/absl/synchronization/internal/win32_waiter.h +72 -0
  873. package/deps/abseil-cpp/absl/synchronization/lifetime_test.cc +180 -0
  874. package/deps/abseil-cpp/absl/synchronization/mutex.cc +2820 -0
  875. package/deps/abseil-cpp/absl/synchronization/mutex.h +1352 -0
  876. package/deps/abseil-cpp/absl/synchronization/mutex_benchmark.cc +321 -0
  877. package/deps/abseil-cpp/absl/synchronization/mutex_method_pointer_test.cc +138 -0
  878. package/deps/abseil-cpp/absl/synchronization/mutex_test.cc +2065 -0
  879. package/deps/abseil-cpp/absl/synchronization/notification.cc +85 -0
  880. package/deps/abseil-cpp/absl/synchronization/notification.h +133 -0
  881. package/deps/abseil-cpp/absl/synchronization/notification_test.cc +230 -0
  882. package/deps/abseil-cpp/absl/time/BUILD.bazel +244 -0
  883. package/deps/abseil-cpp/absl/time/CMakeLists.txt +218 -0
  884. package/deps/abseil-cpp/absl/time/civil_time.cc +200 -0
  885. package/deps/abseil-cpp/absl/time/civil_time.h +589 -0
  886. package/deps/abseil-cpp/absl/time/civil_time_benchmark.cc +129 -0
  887. package/deps/abseil-cpp/absl/time/civil_time_test.cc +1351 -0
  888. package/deps/abseil-cpp/absl/time/clock.cc +603 -0
  889. package/deps/abseil-cpp/absl/time/clock.h +78 -0
  890. package/deps/abseil-cpp/absl/time/clock_benchmark.cc +74 -0
  891. package/deps/abseil-cpp/absl/time/clock_interface.cc +71 -0
  892. package/deps/abseil-cpp/absl/time/clock_interface.h +91 -0
  893. package/deps/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
  894. package/deps/abseil-cpp/absl/time/clock_test.cc +122 -0
  895. package/deps/abseil-cpp/absl/time/duration.cc +918 -0
  896. package/deps/abseil-cpp/absl/time/duration_benchmark.cc +608 -0
  897. package/deps/abseil-cpp/absl/time/duration_test.cc +1901 -0
  898. package/deps/abseil-cpp/absl/time/flag_test.cc +147 -0
  899. package/deps/abseil-cpp/absl/time/format.cc +162 -0
  900. package/deps/abseil-cpp/absl/time/format_benchmark.cc +64 -0
  901. package/deps/abseil-cpp/absl/time/format_test.cc +441 -0
  902. package/deps/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +195 -0
  903. package/deps/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  904. package/deps/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +644 -0
  905. package/deps/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +460 -0
  906. package/deps/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  907. package/deps/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +436 -0
  908. package/deps/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  909. package/deps/abseil-cpp/absl/time/internal/cctz/src/civil_time_test.cc +1066 -0
  910. package/deps/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
  911. package/deps/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
  912. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  913. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  914. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1068 -0
  915. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +1773 -0
  916. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +47 -0
  917. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +80 -0
  918. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +115 -0
  919. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +97 -0
  920. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +1070 -0
  921. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +128 -0
  922. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +333 -0
  923. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +60 -0
  924. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +217 -0
  925. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +918 -0
  926. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +186 -0
  927. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  928. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  929. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  930. package/deps/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +120 -0
  931. package/deps/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +116 -0
  932. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/README.zoneinfo +38 -0
  933. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -0
  934. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Abidjan +0 -0
  935. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Accra +0 -0
  936. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Addis_Ababa +0 -0
  937. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Algiers +0 -0
  938. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Asmara +0 -0
  939. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Asmera +0 -0
  940. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Bamako +0 -0
  941. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Bangui +0 -0
  942. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Banjul +0 -0
  943. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Bissau +0 -0
  944. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Blantyre +0 -0
  945. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Brazzaville +0 -0
  946. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Bujumbura +0 -0
  947. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Cairo +0 -0
  948. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Casablanca +0 -0
  949. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Ceuta +0 -0
  950. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Conakry +0 -0
  951. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Dakar +0 -0
  952. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Dar_es_Salaam +0 -0
  953. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Djibouti +0 -0
  954. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Douala +0 -0
  955. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/El_Aaiun +0 -0
  956. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Freetown +0 -0
  957. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Gaborone +0 -0
  958. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Harare +0 -0
  959. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Johannesburg +0 -0
  960. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Juba +0 -0
  961. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Kampala +0 -0
  962. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Khartoum +0 -0
  963. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Kigali +0 -0
  964. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Kinshasa +0 -0
  965. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Lagos +0 -0
  966. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Libreville +0 -0
  967. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Lome +0 -0
  968. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Luanda +0 -0
  969. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Lubumbashi +0 -0
  970. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Lusaka +0 -0
  971. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Malabo +0 -0
  972. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Maputo +0 -0
  973. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Maseru +0 -0
  974. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Mbabane +0 -0
  975. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Mogadishu +0 -0
  976. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Monrovia +0 -0
  977. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Nairobi +0 -0
  978. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Ndjamena +0 -0
  979. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Niamey +0 -0
  980. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Nouakchott +0 -0
  981. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Ouagadougou +0 -0
  982. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Porto-Novo +0 -0
  983. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Sao_Tome +0 -0
  984. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Timbuktu +0 -0
  985. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Tripoli +0 -0
  986. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Tunis +0 -0
  987. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Windhoek +0 -0
  988. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Adak +0 -0
  989. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Anchorage +0 -0
  990. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Anguilla +0 -0
  991. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Antigua +0 -0
  992. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Araguaina +0 -0
  993. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Buenos_Aires +0 -0
  994. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Catamarca +0 -0
  995. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/ComodRivadavia +0 -0
  996. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Cordoba +0 -0
  997. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Jujuy +0 -0
  998. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/La_Rioja +0 -0
  999. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Mendoza +0 -0
  1000. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Rio_Gallegos +0 -0
  1001. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Salta +0 -0
  1002. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/San_Juan +0 -0
  1003. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/San_Luis +0 -0
  1004. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Tucuman +0 -0
  1005. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Ushuaia +0 -0
  1006. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Aruba +0 -0
  1007. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Asuncion +0 -0
  1008. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Atikokan +0 -0
  1009. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Atka +0 -0
  1010. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Bahia +0 -0
  1011. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Bahia_Banderas +0 -0
  1012. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Barbados +0 -0
  1013. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Belem +0 -0
  1014. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Belize +0 -0
  1015. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Blanc-Sablon +0 -0
  1016. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Boa_Vista +0 -0
  1017. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Bogota +0 -0
  1018. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Boise +0 -0
  1019. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Buenos_Aires +0 -0
  1020. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cambridge_Bay +0 -0
  1021. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Campo_Grande +0 -0
  1022. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cancun +0 -0
  1023. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Caracas +0 -0
  1024. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Catamarca +0 -0
  1025. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cayenne +0 -0
  1026. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cayman +0 -0
  1027. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Chicago +0 -0
  1028. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Chihuahua +0 -0
  1029. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ciudad_Juarez +0 -0
  1030. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coral_Harbour +0 -0
  1031. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cordoba +0 -0
  1032. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Costa_Rica +0 -0
  1033. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
  1034. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Creston +0 -0
  1035. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cuiaba +0 -0
  1036. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Curacao +0 -0
  1037. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Danmarkshavn +0 -0
  1038. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Dawson +0 -0
  1039. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Dawson_Creek +0 -0
  1040. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Denver +0 -0
  1041. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Detroit +0 -0
  1042. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Dominica +0 -0
  1043. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Edmonton +0 -0
  1044. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Eirunepe +0 -0
  1045. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/El_Salvador +0 -0
  1046. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ensenada +0 -0
  1047. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Fort_Nelson +0 -0
  1048. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Fort_Wayne +0 -0
  1049. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Fortaleza +0 -0
  1050. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Glace_Bay +0 -0
  1051. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Godthab +0 -0
  1052. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Goose_Bay +0 -0
  1053. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Grand_Turk +0 -0
  1054. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Grenada +0 -0
  1055. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Guadeloupe +0 -0
  1056. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Guatemala +0 -0
  1057. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Guayaquil +0 -0
  1058. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Guyana +0 -0
  1059. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Halifax +0 -0
  1060. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Havana +0 -0
  1061. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Hermosillo +0 -0
  1062. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Indianapolis +0 -0
  1063. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Knox +0 -0
  1064. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Marengo +0 -0
  1065. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Petersburg +0 -0
  1066. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Tell_City +0 -0
  1067. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Vevay +0 -0
  1068. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Vincennes +0 -0
  1069. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Winamac +0 -0
  1070. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indianapolis +0 -0
  1071. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Inuvik +0 -0
  1072. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Iqaluit +0 -0
  1073. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Jamaica +0 -0
  1074. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Jujuy +0 -0
  1075. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Juneau +0 -0
  1076. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Kentucky/Louisville +0 -0
  1077. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Kentucky/Monticello +0 -0
  1078. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Knox_IN +0 -0
  1079. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Kralendijk +0 -0
  1080. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/La_Paz +0 -0
  1081. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Lima +0 -0
  1082. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Los_Angeles +0 -0
  1083. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Louisville +0 -0
  1084. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Lower_Princes +0 -0
  1085. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Maceio +0 -0
  1086. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Managua +0 -0
  1087. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Manaus +0 -0
  1088. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Marigot +0 -0
  1089. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Martinique +0 -0
  1090. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Matamoros +0 -0
  1091. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mazatlan +0 -0
  1092. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mendoza +0 -0
  1093. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Menominee +0 -0
  1094. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Merida +0 -0
  1095. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Metlakatla +0 -0
  1096. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mexico_City +0 -0
  1097. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Miquelon +0 -0
  1098. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Moncton +0 -0
  1099. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Monterrey +0 -0
  1100. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Montevideo +0 -0
  1101. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Montreal +0 -0
  1102. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Montserrat +0 -0
  1103. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nassau +0 -0
  1104. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/New_York +0 -0
  1105. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nipigon +0 -0
  1106. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nome +0 -0
  1107. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Noronha +0 -0
  1108. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/North_Dakota/Beulah +0 -0
  1109. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/North_Dakota/Center +0 -0
  1110. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/North_Dakota/New_Salem +0 -0
  1111. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nuuk +0 -0
  1112. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ojinaga +0 -0
  1113. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Panama +0 -0
  1114. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Pangnirtung +0 -0
  1115. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Paramaribo +0 -0
  1116. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Phoenix +0 -0
  1117. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Port-au-Prince +0 -0
  1118. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Port_of_Spain +0 -0
  1119. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Porto_Acre +0 -0
  1120. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Porto_Velho +0 -0
  1121. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Puerto_Rico +0 -0
  1122. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Punta_Arenas +0 -0
  1123. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rainy_River +0 -0
  1124. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rankin_Inlet +0 -0
  1125. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Recife +0 -0
  1126. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Regina +0 -0
  1127. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Resolute +0 -0
  1128. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rio_Branco +0 -0
  1129. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rosario +0 -0
  1130. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santa_Isabel +0 -0
  1131. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santarem +0 -0
  1132. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santiago +0 -0
  1133. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santo_Domingo +0 -0
  1134. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Sao_Paulo +0 -0
  1135. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Scoresbysund +0 -0
  1136. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Shiprock +0 -0
  1137. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Sitka +0 -0
  1138. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Barthelemy +0 -0
  1139. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Johns +0 -0
  1140. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Kitts +0 -0
  1141. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Lucia +0 -0
  1142. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Thomas +0 -0
  1143. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Vincent +0 -0
  1144. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Swift_Current +0 -0
  1145. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tegucigalpa +0 -0
  1146. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Thule +0 -0
  1147. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Thunder_Bay +0 -0
  1148. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tijuana +0 -0
  1149. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Toronto +0 -0
  1150. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tortola +0 -0
  1151. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
  1152. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Virgin +0 -0
  1153. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Whitehorse +0 -0
  1154. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Winnipeg +0 -0
  1155. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Yakutat +0 -0
  1156. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Yellowknife +0 -0
  1157. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Casey +0 -0
  1158. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Davis +0 -0
  1159. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/DumontDUrville +0 -0
  1160. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Macquarie +0 -0
  1161. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Mawson +0 -0
  1162. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/McMurdo +0 -0
  1163. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Palmer +0 -0
  1164. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Rothera +0 -0
  1165. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/South_Pole +0 -0
  1166. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Syowa +0 -0
  1167. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Troll +0 -0
  1168. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Vostok +0 -0
  1169. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Arctic/Longyearbyen +0 -0
  1170. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Aden +0 -0
  1171. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Almaty +0 -0
  1172. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Amman +0 -0
  1173. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Anadyr +0 -0
  1174. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Aqtau +0 -0
  1175. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Aqtobe +0 -0
  1176. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ashgabat +0 -0
  1177. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ashkhabad +0 -0
  1178. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Atyrau +0 -0
  1179. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Baghdad +0 -0
  1180. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Bahrain +0 -0
  1181. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Baku +0 -0
  1182. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Bangkok +0 -0
  1183. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Barnaul +0 -0
  1184. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Beirut +0 -0
  1185. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Bishkek +0 -0
  1186. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Brunei +0 -0
  1187. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Calcutta +0 -0
  1188. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Chita +0 -0
  1189. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Choibalsan +0 -0
  1190. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Chongqing +0 -0
  1191. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Chungking +0 -0
  1192. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Colombo +0 -0
  1193. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dacca +0 -0
  1194. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Damascus +0 -0
  1195. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dhaka +0 -0
  1196. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dili +0 -0
  1197. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dubai +0 -0
  1198. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dushanbe +0 -0
  1199. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Famagusta +0 -0
  1200. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Gaza +0 -0
  1201. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Harbin +0 -0
  1202. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hebron +0 -0
  1203. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
  1204. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hong_Kong +0 -0
  1205. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hovd +0 -0
  1206. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Irkutsk +0 -0
  1207. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Istanbul +0 -0
  1208. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Jakarta +0 -0
  1209. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Jayapura +0 -0
  1210. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Jerusalem +0 -0
  1211. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kabul +0 -0
  1212. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kamchatka +0 -0
  1213. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Karachi +0 -0
  1214. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kashgar +0 -0
  1215. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kathmandu +0 -0
  1216. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Katmandu +0 -0
  1217. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Khandyga +0 -0
  1218. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kolkata +0 -0
  1219. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Krasnoyarsk +0 -0
  1220. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kuala_Lumpur +0 -0
  1221. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kuching +0 -0
  1222. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kuwait +0 -0
  1223. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Macao +0 -0
  1224. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Macau +0 -0
  1225. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Magadan +0 -0
  1226. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Makassar +0 -0
  1227. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Manila +0 -0
  1228. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Muscat +0 -0
  1229. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Nicosia +0 -0
  1230. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Novokuznetsk +0 -0
  1231. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Novosibirsk +0 -0
  1232. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Omsk +0 -0
  1233. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Oral +0 -0
  1234. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
  1235. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Pontianak +0 -0
  1236. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Pyongyang +0 -0
  1237. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Qatar +0 -0
  1238. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Qostanay +0 -0
  1239. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Qyzylorda +0 -0
  1240. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Rangoon +0 -0
  1241. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Riyadh +0 -0
  1242. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
  1243. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Sakhalin +0 -0
  1244. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Samarkand +0 -0
  1245. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Seoul +0 -0
  1246. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Shanghai +0 -0
  1247. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Singapore +0 -0
  1248. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Srednekolymsk +0 -0
  1249. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Taipei +0 -0
  1250. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tashkent +0 -0
  1251. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
  1252. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
  1253. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tel_Aviv +0 -0
  1254. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Thimbu +0 -0
  1255. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Thimphu +0 -0
  1256. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tokyo +0 -0
  1257. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tomsk +0 -0
  1258. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ujung_Pandang +0 -0
  1259. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ulaanbaatar +0 -0
  1260. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ulan_Bator +0 -0
  1261. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Urumqi +0 -0
  1262. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ust-Nera +0 -0
  1263. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
  1264. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vladivostok +0 -0
  1265. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Yakutsk +0 -0
  1266. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Yangon +0 -0
  1267. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Yekaterinburg +0 -0
  1268. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Yerevan +0 -0
  1269. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Azores +0 -0
  1270. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Bermuda +0 -0
  1271. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Canary +0 -0
  1272. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Cape_Verde +0 -0
  1273. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Faeroe +0 -0
  1274. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Faroe +0 -0
  1275. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Jan_Mayen +0 -0
  1276. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Madeira +0 -0
  1277. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Reykjavik +0 -0
  1278. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/South_Georgia +0 -0
  1279. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/St_Helena +0 -0
  1280. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Stanley +0 -0
  1281. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/ACT +0 -0
  1282. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Adelaide +0 -0
  1283. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Brisbane +0 -0
  1284. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Broken_Hill +0 -0
  1285. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Canberra +0 -0
  1286. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Currie +0 -0
  1287. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Darwin +0 -0
  1288. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Eucla +0 -0
  1289. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Hobart +0 -0
  1290. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/LHI +0 -0
  1291. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Lindeman +0 -0
  1292. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Lord_Howe +0 -0
  1293. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Melbourne +0 -0
  1294. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/NSW +0 -0
  1295. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/North +0 -0
  1296. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Perth +0 -0
  1297. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Queensland +0 -0
  1298. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/South +0 -0
  1299. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Sydney +0 -0
  1300. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Tasmania +0 -0
  1301. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Victoria +0 -0
  1302. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/West +0 -0
  1303. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Yancowinna +0 -0
  1304. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Brazil/Acre +0 -0
  1305. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Brazil/DeNoronha +0 -0
  1306. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Brazil/East +0 -0
  1307. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Brazil/West +0 -0
  1308. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/CET +0 -0
  1309. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/CST6CDT +0 -0
  1310. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Atlantic +0 -0
  1311. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Central +0 -0
  1312. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Eastern +0 -0
  1313. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Mountain +0 -0
  1314. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Newfoundland +0 -0
  1315. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
  1316. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Saskatchewan +0 -0
  1317. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Yukon +0 -0
  1318. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Chile/Continental +0 -0
  1319. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Chile/EasterIsland +0 -0
  1320. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Cuba +0 -0
  1321. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/EET +0 -0
  1322. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/EST +0 -0
  1323. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/EST5EDT +0 -0
  1324. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Egypt +0 -0
  1325. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Eire +0 -0
  1326. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT +0 -0
  1327. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+0 +0 -0
  1328. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+1 +0 -0
  1329. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+10 +0 -0
  1330. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+11 +0 -0
  1331. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+12 +0 -0
  1332. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+2 +0 -0
  1333. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+3 +0 -0
  1334. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+4 +0 -0
  1335. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+5 +0 -0
  1336. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+6 +0 -0
  1337. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+7 +0 -0
  1338. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+8 +0 -0
  1339. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+9 +0 -0
  1340. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-0 +0 -0
  1341. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-1 +0 -0
  1342. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-10 +0 -0
  1343. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-11 +0 -0
  1344. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-12 +0 -0
  1345. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-13 +0 -0
  1346. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-14 +0 -0
  1347. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-2 +0 -0
  1348. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-3 +0 -0
  1349. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-4 +0 -0
  1350. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-5 +0 -0
  1351. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-6 +0 -0
  1352. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-7 +0 -0
  1353. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-8 +0 -0
  1354. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-9 +0 -0
  1355. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT0 +0 -0
  1356. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/Greenwich +0 -0
  1357. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/UCT +0 -0
  1358. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/UTC +0 -0
  1359. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/Universal +0 -0
  1360. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/Zulu +0 -0
  1361. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Amsterdam +0 -0
  1362. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Andorra +0 -0
  1363. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Astrakhan +0 -0
  1364. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Athens +0 -0
  1365. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Belfast +0 -0
  1366. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Belgrade +0 -0
  1367. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Berlin +0 -0
  1368. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Bratislava +0 -0
  1369. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Brussels +0 -0
  1370. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Bucharest +0 -0
  1371. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Budapest +0 -0
  1372. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Busingen +0 -0
  1373. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
  1374. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Copenhagen +0 -0
  1375. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Dublin +0 -0
  1376. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Gibraltar +0 -0
  1377. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Guernsey +0 -0
  1378. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Helsinki +0 -0
  1379. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Isle_of_Man +0 -0
  1380. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Istanbul +0 -0
  1381. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Jersey +0 -0
  1382. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Kaliningrad +0 -0
  1383. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Kiev +0 -0
  1384. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Kirov +0 -0
  1385. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Kyiv +0 -0
  1386. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Lisbon +0 -0
  1387. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Ljubljana +0 -0
  1388. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/London +0 -0
  1389. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Luxembourg +0 -0
  1390. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Madrid +0 -0
  1391. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Malta +0 -0
  1392. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Mariehamn +0 -0
  1393. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Minsk +0 -0
  1394. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Monaco +0 -0
  1395. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Moscow +0 -0
  1396. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Nicosia +0 -0
  1397. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Oslo +0 -0
  1398. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Paris +0 -0
  1399. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Podgorica +0 -0
  1400. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Prague +0 -0
  1401. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Riga +0 -0
  1402. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Rome +0 -0
  1403. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Samara +0 -0
  1404. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/San_Marino +0 -0
  1405. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Sarajevo +0 -0
  1406. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Saratov +0 -0
  1407. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Simferopol +0 -0
  1408. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Skopje +0 -0
  1409. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Sofia +0 -0
  1410. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Stockholm +0 -0
  1411. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tallinn +0 -0
  1412. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tirane +0 -0
  1413. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
  1414. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Ulyanovsk +0 -0
  1415. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Uzhgorod +0 -0
  1416. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Vaduz +0 -0
  1417. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Vatican +0 -0
  1418. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Vienna +0 -0
  1419. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Vilnius +0 -0
  1420. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Volgograd +0 -0
  1421. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Warsaw +0 -0
  1422. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Zagreb +0 -0
  1423. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Zaporozhye +0 -0
  1424. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Zurich +0 -0
  1425. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Factory +0 -0
  1426. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GB +0 -0
  1427. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GB-Eire +0 -0
  1428. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GMT +0 -0
  1429. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GMT+0 +0 -0
  1430. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GMT-0 +0 -0
  1431. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GMT0 +0 -0
  1432. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Greenwich +0 -0
  1433. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/HST +0 -0
  1434. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Hongkong +0 -0
  1435. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iceland +0 -0
  1436. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Antananarivo +0 -0
  1437. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Chagos +0 -0
  1438. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Christmas +0 -0
  1439. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Cocos +0 -0
  1440. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Comoro +0 -0
  1441. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Kerguelen +0 -0
  1442. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Mahe +0 -0
  1443. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Maldives +0 -0
  1444. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Mauritius +0 -0
  1445. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Mayotte +0 -0
  1446. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Reunion +0 -0
  1447. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
  1448. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Israel +0 -0
  1449. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Jamaica +0 -0
  1450. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Japan +0 -0
  1451. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Kwajalein +0 -0
  1452. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Libya +0 -0
  1453. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/MET +0 -0
  1454. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/MST +0 -0
  1455. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/MST7MDT +0 -0
  1456. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaNorte +0 -0
  1457. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaSur +0 -0
  1458. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/General +0 -0
  1459. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/NZ +0 -0
  1460. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/NZ-CHAT +0 -0
  1461. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Navajo +0 -0
  1462. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/PRC +0 -0
  1463. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/PST8PDT +0 -0
  1464. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Apia +0 -0
  1465. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Auckland +0 -0
  1466. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Bougainville +0 -0
  1467. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Chatham +0 -0
  1468. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Chuuk +0 -0
  1469. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Easter +0 -0
  1470. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Efate +0 -0
  1471. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Enderbury +0 -0
  1472. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Fakaofo +0 -0
  1473. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Fiji +0 -0
  1474. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Funafuti +0 -0
  1475. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Galapagos +0 -0
  1476. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Gambier +0 -0
  1477. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Guadalcanal +0 -0
  1478. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Guam +0 -0
  1479. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Honolulu +0 -0
  1480. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Johnston +0 -0
  1481. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kanton +0 -0
  1482. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kiritimati +0 -0
  1483. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kosrae +0 -0
  1484. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kwajalein +0 -0
  1485. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Majuro +0 -0
  1486. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Marquesas +0 -0
  1487. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Midway +0 -0
  1488. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Nauru +0 -0
  1489. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Niue +0 -0
  1490. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Norfolk +0 -0
  1491. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Noumea +0 -0
  1492. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Pago_Pago +0 -0
  1493. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Palau +0 -0
  1494. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Pitcairn +0 -0
  1495. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Pohnpei +0 -0
  1496. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Ponape +0 -0
  1497. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Port_Moresby +0 -0
  1498. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Rarotonga +0 -0
  1499. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Saipan +0 -0
  1500. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Samoa +0 -0
  1501. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Tahiti +0 -0
  1502. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Tarawa +0 -0
  1503. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Tongatapu +0 -0
  1504. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Truk +0 -0
  1505. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Wake +0 -0
  1506. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Wallis +0 -0
  1507. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Yap +0 -0
  1508. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Poland +0 -0
  1509. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Portugal +0 -0
  1510. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/ROC +0 -0
  1511. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/ROK +0 -0
  1512. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Singapore +0 -0
  1513. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Turkey +0 -0
  1514. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/UCT +0 -0
  1515. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Alaska +0 -0
  1516. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Aleutian +0 -0
  1517. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Arizona +0 -0
  1518. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Central +0 -0
  1519. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/East-Indiana +0 -0
  1520. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Eastern +0 -0
  1521. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Hawaii +0 -0
  1522. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Indiana-Starke +0 -0
  1523. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Michigan +0 -0
  1524. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Mountain +0 -0
  1525. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Pacific +0 -0
  1526. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Samoa +0 -0
  1527. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/UTC +0 -0
  1528. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Universal +0 -0
  1529. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/W-SU +0 -0
  1530. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/WET +0 -0
  1531. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Zulu +0 -0
  1532. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/iso3166.tab +279 -0
  1533. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +375 -0
  1534. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +296 -0
  1535. package/deps/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  1536. package/deps/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  1537. package/deps/abseil-cpp/absl/time/internal/test_util.cc +32 -0
  1538. package/deps/abseil-cpp/absl/time/internal/test_util.h +33 -0
  1539. package/deps/abseil-cpp/absl/time/simulated_clock.cc +225 -0
  1540. package/deps/abseil-cpp/absl/time/simulated_clock.h +108 -0
  1541. package/deps/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
  1542. package/deps/abseil-cpp/absl/time/time.cc +507 -0
  1543. package/deps/abseil-cpp/absl/time/time.h +1926 -0
  1544. package/deps/abseil-cpp/absl/time/time_benchmark.cc +321 -0
  1545. package/deps/abseil-cpp/absl/time/time_test.cc +1365 -0
  1546. package/deps/abseil-cpp/absl/time/time_zone_test.cc +97 -0
  1547. package/deps/abseil-cpp/absl/types/BUILD.bazel +166 -0
  1548. package/deps/abseil-cpp/absl/types/CMakeLists.txt +179 -0
  1549. package/deps/abseil-cpp/absl/types/any.h +44 -0
  1550. package/deps/abseil-cpp/absl/types/compare.h +506 -0
  1551. package/deps/abseil-cpp/absl/types/compare_test.cc +300 -0
  1552. package/deps/abseil-cpp/absl/types/internal/span.h +141 -0
  1553. package/deps/abseil-cpp/absl/types/optional.h +41 -0
  1554. package/deps/abseil-cpp/absl/types/span.h +830 -0
  1555. package/deps/abseil-cpp/absl/types/span_test.cc +915 -0
  1556. package/deps/abseil-cpp/absl/types/variant.h +82 -0
  1557. package/deps/abseil-cpp/absl/types/variant_test.cc +164 -0
  1558. package/deps/abseil-cpp/absl/utility/BUILD.bazel +46 -0
  1559. package/deps/abseil-cpp/absl/utility/CMakeLists.txt +28 -0
  1560. package/deps/abseil-cpp/absl/utility/utility.h +68 -0
  1561. package/deps/abseil-cpp/ci/absl_alternate_options.h +28 -0
  1562. package/deps/abseil-cpp/ci/cmake_common.sh +19 -0
  1563. package/deps/abseil-cpp/ci/cmake_install_test.sh +64 -0
  1564. package/deps/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +106 -0
  1565. package/deps/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +114 -0
  1566. package/deps/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +107 -0
  1567. package/deps/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +106 -0
  1568. package/deps/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +104 -0
  1569. package/deps/abseil-cpp/ci/linux_docker_containers.sh +22 -0
  1570. package/deps/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +100 -0
  1571. package/deps/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +105 -0
  1572. package/deps/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +85 -0
  1573. package/deps/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +85 -0
  1574. package/deps/abseil-cpp/ci/macos_xcode_bazel.sh +70 -0
  1575. package/deps/abseil-cpp/ci/macos_xcode_cmake.sh +78 -0
  1576. package/deps/abseil-cpp/ci/windows_clangcl_bazel.bat +70 -0
  1577. package/deps/abseil-cpp/ci/windows_msvc_bazel.bat +61 -0
  1578. package/deps/abseil-cpp/ci/windows_msvc_cmake.bat +69 -0
  1579. package/deps/abseil-cpp/conanfile.py +51 -0
  1580. package/deps/abseil-cpp/create_lts.py +139 -0
  1581. package/deps/re2/.bazelrc +20 -0
  1582. package/deps/re2/.bcr/metadata.template.json +16 -0
  1583. package/deps/re2/.bcr/presubmit.yml +57 -0
  1584. package/deps/re2/.bcr/source.template.json +5 -0
  1585. package/deps/re2/BUILD.bazel +463 -0
  1586. package/deps/re2/CMakeLists.txt +283 -0
  1587. package/deps/re2/LICENSE +27 -0
  1588. package/deps/re2/MODULE.bazel +29 -0
  1589. package/deps/re2/Makefile +408 -0
  1590. package/deps/re2/WORKSPACE.bazel +7 -0
  1591. package/deps/re2/WORKSPACE.bzlmod +7 -0
  1592. package/deps/re2/app/BUILD.bazel +24 -0
  1593. package/deps/re2/app/_re2.cc +94 -0
  1594. package/deps/re2/app/_re2.d.ts +23 -0
  1595. package/deps/re2/app/app.ts +111 -0
  1596. package/deps/re2/app/build.sh +32 -0
  1597. package/deps/re2/app/index.html +5 -0
  1598. package/deps/re2/app/package.json +14 -0
  1599. package/deps/re2/app/rollup.config.js +28 -0
  1600. package/deps/re2/app/tsconfig.json +17 -0
  1601. package/deps/re2/benchlog/benchplot.py +98 -0
  1602. package/deps/re2/benchlog/mktable +155 -0
  1603. package/deps/re2/doc/mksyntaxgo +42 -0
  1604. package/deps/re2/doc/mksyntaxhtml +42 -0
  1605. package/deps/re2/doc/mksyntaxwiki +36 -0
  1606. package/deps/re2/doc/syntax.html +477 -0
  1607. package/deps/re2/doc/syntax.txt +463 -0
  1608. package/deps/re2/lib/git/commit-msg.hook +104 -0
  1609. package/deps/re2/libre2.symbols +16 -0
  1610. package/deps/re2/libre2.symbols.darwin +12 -0
  1611. package/deps/re2/python/BUILD.bazel +80 -0
  1612. package/deps/re2/python/_re2.cc +352 -0
  1613. package/deps/re2/python/re2.py +583 -0
  1614. package/deps/re2/python/re2_test.py +495 -0
  1615. package/deps/re2/python/setup.py +159 -0
  1616. package/deps/re2/python/toolchains/generate.py +100 -0
  1617. package/deps/re2/re2/bitmap256.cc +43 -0
  1618. package/deps/re2/re2/bitmap256.h +88 -0
  1619. package/deps/re2/re2/bitstate.cc +389 -0
  1620. package/deps/re2/re2/compile.cc +1265 -0
  1621. package/deps/re2/re2/dfa.cc +2135 -0
  1622. package/deps/re2/re2/filtered_re2.cc +138 -0
  1623. package/deps/re2/re2/filtered_re2.h +115 -0
  1624. package/deps/re2/re2/fuzzing/re2_fuzzer.cc +284 -0
  1625. package/deps/re2/re2/make_perl_groups.pl +116 -0
  1626. package/deps/re2/re2/make_unicode_casefold.py +151 -0
  1627. package/deps/re2/re2/make_unicode_groups.py +117 -0
  1628. package/deps/re2/re2/mimics_pcre.cc +196 -0
  1629. package/deps/re2/re2/nfa.cc +714 -0
  1630. package/deps/re2/re2/onepass.cc +623 -0
  1631. package/deps/re2/re2/parse.cc +2529 -0
  1632. package/deps/re2/re2/perl_groups.cc +119 -0
  1633. package/deps/re2/re2/pod_array.h +55 -0
  1634. package/deps/re2/re2/prefilter.cc +711 -0
  1635. package/deps/re2/re2/prefilter.h +168 -0
  1636. package/deps/re2/re2/prefilter_tree.cc +376 -0
  1637. package/deps/re2/re2/prefilter_tree.h +153 -0
  1638. package/deps/re2/re2/prog.cc +1181 -0
  1639. package/deps/re2/re2/prog.h +493 -0
  1640. package/deps/re2/re2/re2.cc +1355 -0
  1641. package/deps/re2/re2/re2.h +1074 -0
  1642. package/deps/re2/re2/regexp.cc +1004 -0
  1643. package/deps/re2/re2/regexp.h +693 -0
  1644. package/deps/re2/re2/set.cc +185 -0
  1645. package/deps/re2/re2/set.h +91 -0
  1646. package/deps/re2/re2/simplify.cc +689 -0
  1647. package/deps/re2/re2/sparse_array.h +394 -0
  1648. package/deps/re2/re2/sparse_set.h +266 -0
  1649. package/deps/re2/re2/stringpiece.h +18 -0
  1650. package/deps/re2/re2/testing/backtrack.cc +274 -0
  1651. package/deps/re2/re2/testing/charclass_test.cc +228 -0
  1652. package/deps/re2/re2/testing/compile_test.cc +431 -0
  1653. package/deps/re2/re2/testing/dfa_test.cc +376 -0
  1654. package/deps/re2/re2/testing/dump.cc +172 -0
  1655. package/deps/re2/re2/testing/exhaustive1_test.cc +40 -0
  1656. package/deps/re2/re2/testing/exhaustive2_test.cc +72 -0
  1657. package/deps/re2/re2/testing/exhaustive3_test.cc +100 -0
  1658. package/deps/re2/re2/testing/exhaustive_test.cc +35 -0
  1659. package/deps/re2/re2/testing/exhaustive_tester.cc +204 -0
  1660. package/deps/re2/re2/testing/exhaustive_tester.h +105 -0
  1661. package/deps/re2/re2/testing/filtered_re2_test.cc +343 -0
  1662. package/deps/re2/re2/testing/mimics_pcre_test.cc +79 -0
  1663. package/deps/re2/re2/testing/null_walker.cc +48 -0
  1664. package/deps/re2/re2/testing/parse_test.cc +586 -0
  1665. package/deps/re2/re2/testing/possible_match_test.cc +251 -0
  1666. package/deps/re2/re2/testing/random_test.cc +102 -0
  1667. package/deps/re2/re2/testing/re2_arg_test.cc +182 -0
  1668. package/deps/re2/re2/testing/re2_test.cc +1699 -0
  1669. package/deps/re2/re2/testing/regexp_benchmark.cc +1605 -0
  1670. package/deps/re2/re2/testing/regexp_generator.cc +284 -0
  1671. package/deps/re2/re2/testing/regexp_generator.h +77 -0
  1672. package/deps/re2/re2/testing/regexp_test.cc +87 -0
  1673. package/deps/re2/re2/testing/required_prefix_test.cc +201 -0
  1674. package/deps/re2/re2/testing/search_test.cc +338 -0
  1675. package/deps/re2/re2/testing/set_test.cc +235 -0
  1676. package/deps/re2/re2/testing/simplify_test.cc +289 -0
  1677. package/deps/re2/re2/testing/string_generator.cc +144 -0
  1678. package/deps/re2/re2/testing/string_generator.h +76 -0
  1679. package/deps/re2/re2/testing/string_generator_test.cc +114 -0
  1680. package/deps/re2/re2/testing/tester.cc +690 -0
  1681. package/deps/re2/re2/testing/tester.h +121 -0
  1682. package/deps/re2/re2/tostring.cc +351 -0
  1683. package/deps/re2/re2/unicode.py +284 -0
  1684. package/deps/re2/re2/unicode_casefold.cc +604 -0
  1685. package/deps/re2/re2/unicode_casefold.h +77 -0
  1686. package/deps/re2/re2/unicode_groups.cc +6517 -0
  1687. package/deps/re2/re2/unicode_groups.h +66 -0
  1688. package/deps/re2/re2/walker-inl.h +249 -0
  1689. package/deps/re2/re2.pc.in +9 -0
  1690. package/deps/re2/re2Config.cmake.in +26 -0
  1691. package/deps/re2/runtests +33 -0
  1692. package/deps/re2/testinstall.cc +27 -0
  1693. package/deps/re2/ucs2.diff +567 -0
  1694. package/deps/re2/util/malloc_counter.h +19 -0
  1695. package/deps/re2/util/pcre.cc +957 -0
  1696. package/deps/re2/util/pcre.h +671 -0
  1697. package/deps/re2/util/rune.cc +260 -0
  1698. package/deps/re2/util/strutil.cc +26 -0
  1699. package/deps/re2/util/strutil.h +16 -0
  1700. package/deps/re2/util/utf.h +44 -0
  1701. package/index.js +14 -5
  1702. package/package.json +1 -1
  1703. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  1704. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  1705. package/util.h +10 -16
@@ -0,0 +1,3653 @@
1
+ // Copyright 2018 The Abseil Authors.
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
+ // https://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
+ #include "absl/container/btree_test.h"
16
+
17
+ #include <algorithm>
18
+ #include <array>
19
+ #include <cstdint>
20
+ #include <functional>
21
+ #include <iostream>
22
+ #include <iterator>
23
+ #include <limits>
24
+ #include <map>
25
+ #include <memory>
26
+ #include <numeric>
27
+ #include <stdexcept>
28
+ #include <string>
29
+ #include <type_traits>
30
+ #include <utility>
31
+ #include <vector>
32
+
33
+ #include "gmock/gmock.h"
34
+ #include "gtest/gtest.h"
35
+ #include "absl/algorithm/container.h"
36
+ #include "absl/base/internal/raw_logging.h"
37
+ #include "absl/base/macros.h"
38
+ #include "absl/container/btree_map.h"
39
+ #include "absl/container/btree_set.h"
40
+ #include "absl/container/internal/test_allocator.h"
41
+ #include "absl/container/internal/test_instance_tracker.h"
42
+ #include "absl/flags/flag.h"
43
+ #include "absl/hash/hash_testing.h"
44
+ #include "absl/memory/memory.h"
45
+ #include "absl/random/random.h"
46
+ #include "absl/strings/str_cat.h"
47
+ #include "absl/strings/str_split.h"
48
+ #include "absl/strings/string_view.h"
49
+ #include "absl/types/compare.h"
50
+ #include "absl/types/optional.h"
51
+
52
+ ABSL_FLAG(int, test_values, 10000, "The number of values to use for tests");
53
+
54
+ namespace absl {
55
+ ABSL_NAMESPACE_BEGIN
56
+ namespace container_internal {
57
+ namespace {
58
+
59
+ using ::absl::test_internal::CopyableMovableInstance;
60
+ using ::absl::test_internal::InstanceTracker;
61
+ using ::absl::test_internal::MovableOnlyInstance;
62
+ using ::testing::ElementsAre;
63
+ using ::testing::ElementsAreArray;
64
+ using ::testing::IsEmpty;
65
+ using ::testing::IsNull;
66
+ using ::testing::Pair;
67
+ using ::testing::SizeIs;
68
+
69
+ template <typename T, typename U>
70
+ void CheckPairEquals(const T &x, const U &y) {
71
+ ABSL_INTERNAL_CHECK(x == y, "Values are unequal.");
72
+ }
73
+
74
+ template <typename T, typename U, typename V, typename W>
75
+ void CheckPairEquals(const std::pair<T, U> &x, const std::pair<V, W> &y) {
76
+ CheckPairEquals(x.first, y.first);
77
+ CheckPairEquals(x.second, y.second);
78
+ }
79
+ } // namespace
80
+
81
+ // The base class for a sorted associative container checker. TreeType is the
82
+ // container type to check and CheckerType is the container type to check
83
+ // against. TreeType is expected to be btree_{set,map,multiset,multimap} and
84
+ // CheckerType is expected to be {set,map,multiset,multimap}.
85
+ template <typename TreeType, typename CheckerType>
86
+ class base_checker {
87
+ public:
88
+ using key_type = typename TreeType::key_type;
89
+ using value_type = typename TreeType::value_type;
90
+ using key_compare = typename TreeType::key_compare;
91
+ using pointer = typename TreeType::pointer;
92
+ using const_pointer = typename TreeType::const_pointer;
93
+ using reference = typename TreeType::reference;
94
+ using const_reference = typename TreeType::const_reference;
95
+ using size_type = typename TreeType::size_type;
96
+ using difference_type = typename TreeType::difference_type;
97
+ using iterator = typename TreeType::iterator;
98
+ using const_iterator = typename TreeType::const_iterator;
99
+ using reverse_iterator = typename TreeType::reverse_iterator;
100
+ using const_reverse_iterator = typename TreeType::const_reverse_iterator;
101
+
102
+ public:
103
+ base_checker() : const_tree_(tree_) {}
104
+ base_checker(const base_checker &other)
105
+ : tree_(other.tree_), const_tree_(tree_), checker_(other.checker_) {}
106
+ template <typename InputIterator>
107
+ base_checker(InputIterator b, InputIterator e)
108
+ : tree_(b, e), const_tree_(tree_), checker_(b, e) {}
109
+
110
+ iterator begin() { return tree_.begin(); }
111
+ const_iterator begin() const { return tree_.begin(); }
112
+ iterator end() { return tree_.end(); }
113
+ const_iterator end() const { return tree_.end(); }
114
+ reverse_iterator rbegin() { return tree_.rbegin(); }
115
+ const_reverse_iterator rbegin() const { return tree_.rbegin(); }
116
+ reverse_iterator rend() { return tree_.rend(); }
117
+ const_reverse_iterator rend() const { return tree_.rend(); }
118
+
119
+ template <typename IterType, typename CheckerIterType>
120
+ IterType iter_check(IterType tree_iter, CheckerIterType checker_iter) const {
121
+ if (tree_iter == tree_.end()) {
122
+ ABSL_INTERNAL_CHECK(checker_iter == checker_.end(),
123
+ "Checker iterator not at end.");
124
+ } else {
125
+ CheckPairEquals(*tree_iter, *checker_iter);
126
+ }
127
+ return tree_iter;
128
+ }
129
+ template <typename IterType, typename CheckerIterType>
130
+ IterType riter_check(IterType tree_iter, CheckerIterType checker_iter) const {
131
+ if (tree_iter == tree_.rend()) {
132
+ ABSL_INTERNAL_CHECK(checker_iter == checker_.rend(),
133
+ "Checker iterator not at rend.");
134
+ } else {
135
+ CheckPairEquals(*tree_iter, *checker_iter);
136
+ }
137
+ return tree_iter;
138
+ }
139
+ void value_check(const value_type &v) {
140
+ typename KeyOfValue<typename TreeType::key_type,
141
+ typename TreeType::value_type>::type key_of_value;
142
+ const key_type &key = key_of_value(v);
143
+ CheckPairEquals(*find(key), v);
144
+ lower_bound(key);
145
+ upper_bound(key);
146
+ equal_range(key);
147
+ contains(key);
148
+ count(key);
149
+ }
150
+ void erase_check(const key_type &key) {
151
+ EXPECT_FALSE(tree_.contains(key));
152
+ EXPECT_EQ(tree_.find(key), const_tree_.end());
153
+ EXPECT_FALSE(const_tree_.contains(key));
154
+ EXPECT_EQ(const_tree_.find(key), tree_.end());
155
+ EXPECT_EQ(tree_.equal_range(key).first,
156
+ const_tree_.equal_range(key).second);
157
+ }
158
+
159
+ iterator lower_bound(const key_type &key) {
160
+ return iter_check(tree_.lower_bound(key), checker_.lower_bound(key));
161
+ }
162
+ const_iterator lower_bound(const key_type &key) const {
163
+ return iter_check(tree_.lower_bound(key), checker_.lower_bound(key));
164
+ }
165
+ iterator upper_bound(const key_type &key) {
166
+ return iter_check(tree_.upper_bound(key), checker_.upper_bound(key));
167
+ }
168
+ const_iterator upper_bound(const key_type &key) const {
169
+ return iter_check(tree_.upper_bound(key), checker_.upper_bound(key));
170
+ }
171
+ std::pair<iterator, iterator> equal_range(const key_type &key) {
172
+ std::pair<typename CheckerType::iterator, typename CheckerType::iterator>
173
+ checker_res = checker_.equal_range(key);
174
+ std::pair<iterator, iterator> tree_res = tree_.equal_range(key);
175
+ iter_check(tree_res.first, checker_res.first);
176
+ iter_check(tree_res.second, checker_res.second);
177
+ return tree_res;
178
+ }
179
+ std::pair<const_iterator, const_iterator> equal_range(
180
+ const key_type &key) const {
181
+ std::pair<typename CheckerType::const_iterator,
182
+ typename CheckerType::const_iterator>
183
+ checker_res = checker_.equal_range(key);
184
+ std::pair<const_iterator, const_iterator> tree_res = tree_.equal_range(key);
185
+ iter_check(tree_res.first, checker_res.first);
186
+ iter_check(tree_res.second, checker_res.second);
187
+ return tree_res;
188
+ }
189
+ iterator find(const key_type &key) {
190
+ return iter_check(tree_.find(key), checker_.find(key));
191
+ }
192
+ const_iterator find(const key_type &key) const {
193
+ return iter_check(tree_.find(key), checker_.find(key));
194
+ }
195
+ bool contains(const key_type &key) const { return find(key) != end(); }
196
+ size_type count(const key_type &key) const {
197
+ size_type res = checker_.count(key);
198
+ EXPECT_EQ(res, tree_.count(key));
199
+ return res;
200
+ }
201
+
202
+ base_checker &operator=(const base_checker &other) {
203
+ tree_ = other.tree_;
204
+ checker_ = other.checker_;
205
+ return *this;
206
+ }
207
+
208
+ int erase(const key_type &key) {
209
+ int size = tree_.size();
210
+ int res = checker_.erase(key);
211
+ EXPECT_EQ(res, tree_.count(key));
212
+ EXPECT_EQ(res, tree_.erase(key));
213
+ EXPECT_EQ(tree_.count(key), 0);
214
+ EXPECT_EQ(tree_.size(), size - res);
215
+ erase_check(key);
216
+ return res;
217
+ }
218
+ iterator erase(iterator iter) {
219
+ key_type key = iter.key();
220
+ int size = tree_.size();
221
+ int count = tree_.count(key);
222
+ auto checker_iter = checker_.lower_bound(key);
223
+ for (iterator tmp(tree_.lower_bound(key)); tmp != iter; ++tmp) {
224
+ ++checker_iter;
225
+ }
226
+ auto checker_next = checker_iter;
227
+ ++checker_next;
228
+ checker_.erase(checker_iter);
229
+ iter = tree_.erase(iter);
230
+ EXPECT_EQ(tree_.size(), checker_.size());
231
+ EXPECT_EQ(tree_.size(), size - 1);
232
+ EXPECT_EQ(tree_.count(key), count - 1);
233
+ if (count == 1) {
234
+ erase_check(key);
235
+ }
236
+ return iter_check(iter, checker_next);
237
+ }
238
+
239
+ void erase(iterator begin, iterator end) {
240
+ int size = tree_.size();
241
+ int count = std::distance(begin, end);
242
+ auto checker_begin = checker_.lower_bound(begin.key());
243
+ for (iterator tmp(tree_.lower_bound(begin.key())); tmp != begin; ++tmp) {
244
+ ++checker_begin;
245
+ }
246
+ auto checker_end =
247
+ end == tree_.end() ? checker_.end() : checker_.lower_bound(end.key());
248
+ if (end != tree_.end()) {
249
+ for (iterator tmp(tree_.lower_bound(end.key())); tmp != end; ++tmp) {
250
+ ++checker_end;
251
+ }
252
+ }
253
+ const auto checker_ret = checker_.erase(checker_begin, checker_end);
254
+ const auto tree_ret = tree_.erase(begin, end);
255
+ EXPECT_EQ(std::distance(checker_.begin(), checker_ret),
256
+ std::distance(tree_.begin(), tree_ret));
257
+ EXPECT_EQ(tree_.size(), checker_.size());
258
+ EXPECT_EQ(tree_.size(), size - count);
259
+ }
260
+
261
+ void clear() {
262
+ tree_.clear();
263
+ checker_.clear();
264
+ }
265
+ void swap(base_checker &other) {
266
+ tree_.swap(other.tree_);
267
+ checker_.swap(other.checker_);
268
+ }
269
+
270
+ void verify() const {
271
+ tree_.verify();
272
+ EXPECT_EQ(tree_.size(), checker_.size());
273
+
274
+ // Move through the forward iterators using increment.
275
+ auto checker_iter = checker_.begin();
276
+ const_iterator tree_iter(tree_.begin());
277
+ for (; tree_iter != tree_.end(); ++tree_iter, ++checker_iter) {
278
+ CheckPairEquals(*tree_iter, *checker_iter);
279
+ }
280
+
281
+ // Move through the forward iterators using decrement.
282
+ for (int n = tree_.size() - 1; n >= 0; --n) {
283
+ iter_check(tree_iter, checker_iter);
284
+ --tree_iter;
285
+ --checker_iter;
286
+ }
287
+ EXPECT_EQ(tree_iter, tree_.begin());
288
+ EXPECT_EQ(checker_iter, checker_.begin());
289
+
290
+ // Move through the reverse iterators using increment.
291
+ auto checker_riter = checker_.rbegin();
292
+ const_reverse_iterator tree_riter(tree_.rbegin());
293
+ for (; tree_riter != tree_.rend(); ++tree_riter, ++checker_riter) {
294
+ CheckPairEquals(*tree_riter, *checker_riter);
295
+ }
296
+
297
+ // Move through the reverse iterators using decrement.
298
+ for (int n = tree_.size() - 1; n >= 0; --n) {
299
+ riter_check(tree_riter, checker_riter);
300
+ --tree_riter;
301
+ --checker_riter;
302
+ }
303
+ EXPECT_EQ(tree_riter, tree_.rbegin());
304
+ EXPECT_EQ(checker_riter, checker_.rbegin());
305
+ }
306
+
307
+ const TreeType &tree() const { return tree_; }
308
+
309
+ size_type size() const {
310
+ EXPECT_EQ(tree_.size(), checker_.size());
311
+ return tree_.size();
312
+ }
313
+ size_type max_size() const { return tree_.max_size(); }
314
+ bool empty() const {
315
+ EXPECT_EQ(tree_.empty(), checker_.empty());
316
+ return tree_.empty();
317
+ }
318
+
319
+ protected:
320
+ TreeType tree_;
321
+ const TreeType &const_tree_;
322
+ CheckerType checker_;
323
+ };
324
+
325
+ namespace {
326
+ // A checker for unique sorted associative containers. TreeType is expected to
327
+ // be btree_{set,map} and CheckerType is expected to be {set,map}.
328
+ template <typename TreeType, typename CheckerType>
329
+ class unique_checker : public base_checker<TreeType, CheckerType> {
330
+ using super_type = base_checker<TreeType, CheckerType>;
331
+
332
+ public:
333
+ using iterator = typename super_type::iterator;
334
+ using value_type = typename super_type::value_type;
335
+
336
+ public:
337
+ unique_checker() : super_type() {}
338
+ unique_checker(const unique_checker &other) : super_type(other) {}
339
+ template <class InputIterator>
340
+ unique_checker(InputIterator b, InputIterator e) : super_type(b, e) {}
341
+ unique_checker &operator=(const unique_checker &) = default;
342
+
343
+ // Insertion routines.
344
+ std::pair<iterator, bool> insert(const value_type &v) {
345
+ int size = this->tree_.size();
346
+ std::pair<typename CheckerType::iterator, bool> checker_res =
347
+ this->checker_.insert(v);
348
+ std::pair<iterator, bool> tree_res = this->tree_.insert(v);
349
+ CheckPairEquals(*tree_res.first, *checker_res.first);
350
+ EXPECT_EQ(tree_res.second, checker_res.second);
351
+ EXPECT_EQ(this->tree_.size(), this->checker_.size());
352
+ EXPECT_EQ(this->tree_.size(), size + tree_res.second);
353
+ return tree_res;
354
+ }
355
+ iterator insert(iterator position, const value_type &v) {
356
+ int size = this->tree_.size();
357
+ std::pair<typename CheckerType::iterator, bool> checker_res =
358
+ this->checker_.insert(v);
359
+ iterator tree_res = this->tree_.insert(position, v);
360
+ CheckPairEquals(*tree_res, *checker_res.first);
361
+ EXPECT_EQ(this->tree_.size(), this->checker_.size());
362
+ EXPECT_EQ(this->tree_.size(), size + checker_res.second);
363
+ return tree_res;
364
+ }
365
+ template <typename InputIterator>
366
+ void insert(InputIterator b, InputIterator e) {
367
+ for (; b != e; ++b) {
368
+ insert(*b);
369
+ }
370
+ }
371
+ };
372
+
373
+ // A checker for multiple sorted associative containers. TreeType is expected
374
+ // to be btree_{multiset,multimap} and CheckerType is expected to be
375
+ // {multiset,multimap}.
376
+ template <typename TreeType, typename CheckerType>
377
+ class multi_checker : public base_checker<TreeType, CheckerType> {
378
+ using super_type = base_checker<TreeType, CheckerType>;
379
+
380
+ public:
381
+ using iterator = typename super_type::iterator;
382
+ using value_type = typename super_type::value_type;
383
+
384
+ public:
385
+ multi_checker() : super_type() {}
386
+ multi_checker(const multi_checker &other) : super_type(other) {}
387
+ template <class InputIterator>
388
+ multi_checker(InputIterator b, InputIterator e) : super_type(b, e) {}
389
+ multi_checker &operator=(const multi_checker &) = default;
390
+
391
+ // Insertion routines.
392
+ iterator insert(const value_type &v) {
393
+ int size = this->tree_.size();
394
+ auto checker_res = this->checker_.insert(v);
395
+ iterator tree_res = this->tree_.insert(v);
396
+ CheckPairEquals(*tree_res, *checker_res);
397
+ EXPECT_EQ(this->tree_.size(), this->checker_.size());
398
+ EXPECT_EQ(this->tree_.size(), size + 1);
399
+ return tree_res;
400
+ }
401
+ iterator insert(iterator position, const value_type &v) {
402
+ int size = this->tree_.size();
403
+ auto checker_res = this->checker_.insert(v);
404
+ iterator tree_res = this->tree_.insert(position, v);
405
+ CheckPairEquals(*tree_res, *checker_res);
406
+ EXPECT_EQ(this->tree_.size(), this->checker_.size());
407
+ EXPECT_EQ(this->tree_.size(), size + 1);
408
+ return tree_res;
409
+ }
410
+ template <typename InputIterator>
411
+ void insert(InputIterator b, InputIterator e) {
412
+ for (; b != e; ++b) {
413
+ insert(*b);
414
+ }
415
+ }
416
+ };
417
+
418
+ template <typename T, typename V>
419
+ void DoTest(const char *name, T *b, const std::vector<V> &values) {
420
+ typename KeyOfValue<typename T::key_type, V>::type key_of_value;
421
+
422
+ T &mutable_b = *b;
423
+ const T &const_b = *b;
424
+
425
+ // Test insert.
426
+ for (int i = 0; i < values.size(); ++i) {
427
+ mutable_b.insert(values[i]);
428
+ mutable_b.value_check(values[i]);
429
+ }
430
+ ASSERT_EQ(mutable_b.size(), values.size());
431
+
432
+ const_b.verify();
433
+
434
+ // Test copy constructor.
435
+ T b_copy(const_b);
436
+ EXPECT_EQ(b_copy.size(), const_b.size());
437
+ for (int i = 0; i < values.size(); ++i) {
438
+ CheckPairEquals(*b_copy.find(key_of_value(values[i])), values[i]);
439
+ }
440
+
441
+ // Test range constructor.
442
+ T b_range(const_b.begin(), const_b.end());
443
+ EXPECT_EQ(b_range.size(), const_b.size());
444
+ for (int i = 0; i < values.size(); ++i) {
445
+ CheckPairEquals(*b_range.find(key_of_value(values[i])), values[i]);
446
+ }
447
+
448
+ // Test range insertion for values that already exist.
449
+ b_range.insert(b_copy.begin(), b_copy.end());
450
+ b_range.verify();
451
+
452
+ // Test range insertion for new values.
453
+ b_range.clear();
454
+ b_range.insert(b_copy.begin(), b_copy.end());
455
+ EXPECT_EQ(b_range.size(), b_copy.size());
456
+ for (int i = 0; i < values.size(); ++i) {
457
+ CheckPairEquals(*b_range.find(key_of_value(values[i])), values[i]);
458
+ }
459
+
460
+ // Test assignment to self. Nothing should change.
461
+ b_range.operator=(b_range);
462
+ EXPECT_EQ(b_range.size(), b_copy.size());
463
+
464
+ // Test assignment of new values.
465
+ b_range.clear();
466
+ b_range = b_copy;
467
+ EXPECT_EQ(b_range.size(), b_copy.size());
468
+
469
+ // Test swap.
470
+ b_range.clear();
471
+ b_range.swap(b_copy);
472
+ EXPECT_EQ(b_copy.size(), 0);
473
+ EXPECT_EQ(b_range.size(), const_b.size());
474
+ for (int i = 0; i < values.size(); ++i) {
475
+ CheckPairEquals(*b_range.find(key_of_value(values[i])), values[i]);
476
+ }
477
+ b_range.swap(b_copy);
478
+
479
+ // Test non-member function swap.
480
+ swap(b_range, b_copy);
481
+ EXPECT_EQ(b_copy.size(), 0);
482
+ EXPECT_EQ(b_range.size(), const_b.size());
483
+ for (int i = 0; i < values.size(); ++i) {
484
+ CheckPairEquals(*b_range.find(key_of_value(values[i])), values[i]);
485
+ }
486
+ swap(b_range, b_copy);
487
+
488
+ // Test erase via values.
489
+ for (int i = 0; i < values.size(); ++i) {
490
+ mutable_b.erase(key_of_value(values[i]));
491
+ // Erasing a non-existent key should have no effect.
492
+ ASSERT_EQ(mutable_b.erase(key_of_value(values[i])), 0);
493
+ }
494
+
495
+ const_b.verify();
496
+ EXPECT_EQ(const_b.size(), 0);
497
+
498
+ // Test erase via iterators.
499
+ mutable_b = b_copy;
500
+ for (int i = 0; i < values.size(); ++i) {
501
+ mutable_b.erase(mutable_b.find(key_of_value(values[i])));
502
+ }
503
+
504
+ const_b.verify();
505
+ EXPECT_EQ(const_b.size(), 0);
506
+
507
+ // Test insert with hint.
508
+ for (int i = 0; i < values.size(); i++) {
509
+ mutable_b.insert(mutable_b.upper_bound(key_of_value(values[i])), values[i]);
510
+ }
511
+
512
+ const_b.verify();
513
+
514
+ // Test range erase.
515
+ mutable_b.erase(mutable_b.begin(), mutable_b.end());
516
+ EXPECT_EQ(mutable_b.size(), 0);
517
+ const_b.verify();
518
+
519
+ // First half.
520
+ mutable_b = b_copy;
521
+ typename T::iterator mutable_iter_end = mutable_b.begin();
522
+ for (int i = 0; i < values.size() / 2; ++i) ++mutable_iter_end;
523
+ mutable_b.erase(mutable_b.begin(), mutable_iter_end);
524
+ EXPECT_EQ(mutable_b.size(), values.size() - values.size() / 2);
525
+ const_b.verify();
526
+
527
+ // Second half.
528
+ mutable_b = b_copy;
529
+ typename T::iterator mutable_iter_begin = mutable_b.begin();
530
+ for (int i = 0; i < values.size() / 2; ++i) ++mutable_iter_begin;
531
+ mutable_b.erase(mutable_iter_begin, mutable_b.end());
532
+ EXPECT_EQ(mutable_b.size(), values.size() / 2);
533
+ const_b.verify();
534
+
535
+ // Second quarter.
536
+ mutable_b = b_copy;
537
+ mutable_iter_begin = mutable_b.begin();
538
+ for (int i = 0; i < values.size() / 4; ++i) ++mutable_iter_begin;
539
+ mutable_iter_end = mutable_iter_begin;
540
+ for (int i = 0; i < values.size() / 4; ++i) ++mutable_iter_end;
541
+ mutable_b.erase(mutable_iter_begin, mutable_iter_end);
542
+ EXPECT_EQ(mutable_b.size(), values.size() - values.size() / 4);
543
+ const_b.verify();
544
+
545
+ mutable_b.clear();
546
+ }
547
+
548
+ template <typename T>
549
+ void ConstTest() {
550
+ using value_type = typename T::value_type;
551
+ typename KeyOfValue<typename T::key_type, value_type>::type key_of_value;
552
+
553
+ T mutable_b;
554
+ const T &const_b = mutable_b;
555
+
556
+ // Insert a single value into the container and test looking it up.
557
+ value_type value = Generator<value_type>(2)(2);
558
+ mutable_b.insert(value);
559
+ EXPECT_TRUE(mutable_b.contains(key_of_value(value)));
560
+ EXPECT_NE(mutable_b.find(key_of_value(value)), const_b.end());
561
+ EXPECT_TRUE(const_b.contains(key_of_value(value)));
562
+ EXPECT_NE(const_b.find(key_of_value(value)), mutable_b.end());
563
+ EXPECT_EQ(*const_b.lower_bound(key_of_value(value)), value);
564
+ EXPECT_EQ(const_b.upper_bound(key_of_value(value)), const_b.end());
565
+ EXPECT_EQ(*const_b.equal_range(key_of_value(value)).first, value);
566
+
567
+ // We can only create a non-const iterator from a non-const container.
568
+ typename T::iterator mutable_iter(mutable_b.begin());
569
+ EXPECT_EQ(mutable_iter, const_b.begin());
570
+ EXPECT_NE(mutable_iter, const_b.end());
571
+ EXPECT_EQ(const_b.begin(), mutable_iter);
572
+ EXPECT_NE(const_b.end(), mutable_iter);
573
+ typename T::reverse_iterator mutable_riter(mutable_b.rbegin());
574
+ EXPECT_EQ(mutable_riter, const_b.rbegin());
575
+ EXPECT_NE(mutable_riter, const_b.rend());
576
+ EXPECT_EQ(const_b.rbegin(), mutable_riter);
577
+ EXPECT_NE(const_b.rend(), mutable_riter);
578
+
579
+ // We can create a const iterator from a non-const iterator.
580
+ typename T::const_iterator const_iter(mutable_iter);
581
+ EXPECT_EQ(const_iter, mutable_b.begin());
582
+ EXPECT_NE(const_iter, mutable_b.end());
583
+ EXPECT_EQ(mutable_b.begin(), const_iter);
584
+ EXPECT_NE(mutable_b.end(), const_iter);
585
+ typename T::const_reverse_iterator const_riter(mutable_riter);
586
+ EXPECT_EQ(const_riter, mutable_b.rbegin());
587
+ EXPECT_NE(const_riter, mutable_b.rend());
588
+ EXPECT_EQ(mutable_b.rbegin(), const_riter);
589
+ EXPECT_NE(mutable_b.rend(), const_riter);
590
+
591
+ // Make sure various methods can be invoked on a const container.
592
+ const_b.verify();
593
+ ASSERT_TRUE(!const_b.empty());
594
+ EXPECT_EQ(const_b.size(), 1);
595
+ EXPECT_GT(const_b.max_size(), 0);
596
+ EXPECT_TRUE(const_b.contains(key_of_value(value)));
597
+ EXPECT_EQ(const_b.count(key_of_value(value)), 1);
598
+ }
599
+
600
+ template <typename T, typename C>
601
+ void BtreeTest() {
602
+ ConstTest<T>();
603
+
604
+ using V = typename remove_pair_const<typename T::value_type>::type;
605
+ const std::vector<V> random_values = GenerateValuesWithSeed<V>(
606
+ absl::GetFlag(FLAGS_test_values), 4 * absl::GetFlag(FLAGS_test_values),
607
+ GTEST_FLAG_GET(random_seed));
608
+
609
+ unique_checker<T, C> container;
610
+
611
+ // Test key insertion/deletion in sorted order.
612
+ std::vector<V> sorted_values(random_values);
613
+ std::sort(sorted_values.begin(), sorted_values.end());
614
+ DoTest("sorted: ", &container, sorted_values);
615
+
616
+ // Test key insertion/deletion in reverse sorted order.
617
+ std::reverse(sorted_values.begin(), sorted_values.end());
618
+ DoTest("rsorted: ", &container, sorted_values);
619
+
620
+ // Test key insertion/deletion in random order.
621
+ DoTest("random: ", &container, random_values);
622
+ }
623
+
624
+ template <typename T, typename C>
625
+ void BtreeMultiTest() {
626
+ ConstTest<T>();
627
+
628
+ using V = typename remove_pair_const<typename T::value_type>::type;
629
+ const std::vector<V> random_values = GenerateValuesWithSeed<V>(
630
+ absl::GetFlag(FLAGS_test_values), 4 * absl::GetFlag(FLAGS_test_values),
631
+ GTEST_FLAG_GET(random_seed));
632
+
633
+ multi_checker<T, C> container;
634
+
635
+ // Test keys in sorted order.
636
+ std::vector<V> sorted_values(random_values);
637
+ std::sort(sorted_values.begin(), sorted_values.end());
638
+ DoTest("sorted: ", &container, sorted_values);
639
+
640
+ // Test keys in reverse sorted order.
641
+ std::reverse(sorted_values.begin(), sorted_values.end());
642
+ DoTest("rsorted: ", &container, sorted_values);
643
+
644
+ // Test keys in random order.
645
+ DoTest("random: ", &container, random_values);
646
+
647
+ // Test keys in random order w/ duplicates.
648
+ std::vector<V> duplicate_values(random_values);
649
+ duplicate_values.insert(duplicate_values.end(), random_values.begin(),
650
+ random_values.end());
651
+ DoTest("duplicates:", &container, duplicate_values);
652
+
653
+ // Test all identical keys.
654
+ std::vector<V> identical_values(100);
655
+ std::fill(identical_values.begin(), identical_values.end(),
656
+ Generator<V>(2)(2));
657
+ DoTest("identical: ", &container, identical_values);
658
+ }
659
+
660
+ template <typename T>
661
+ void BtreeMapTest() {
662
+ using value_type = typename T::value_type;
663
+ using mapped_type = typename T::mapped_type;
664
+
665
+ mapped_type m = Generator<mapped_type>(0)(0);
666
+ (void)m;
667
+
668
+ T b;
669
+
670
+ // Verify we can insert using operator[].
671
+ for (int i = 0; i < 1000; i++) {
672
+ value_type v = Generator<value_type>(1000)(i);
673
+ b[v.first] = v.second;
674
+ }
675
+ EXPECT_EQ(b.size(), 1000);
676
+
677
+ // Test whether we can use the "->" operator on iterators and
678
+ // reverse_iterators. This stresses the btree_map_params::pair_pointer
679
+ // mechanism.
680
+ EXPECT_EQ(b.begin()->first, Generator<value_type>(1000)(0).first);
681
+ EXPECT_EQ(b.begin()->second, Generator<value_type>(1000)(0).second);
682
+ EXPECT_EQ(b.rbegin()->first, Generator<value_type>(1000)(999).first);
683
+ EXPECT_EQ(b.rbegin()->second, Generator<value_type>(1000)(999).second);
684
+ }
685
+
686
+ template <typename T>
687
+ void BtreeMultiMapTest() {
688
+ using mapped_type = typename T::mapped_type;
689
+ mapped_type m = Generator<mapped_type>(0)(0);
690
+ (void)m;
691
+ }
692
+
693
+ template <typename K, int N = 256>
694
+ void SetTest() {
695
+ EXPECT_EQ(
696
+ sizeof(absl::btree_set<K>),
697
+ 2 * sizeof(void *) + sizeof(typename absl::btree_set<K>::size_type));
698
+ using BtreeSet = absl::btree_set<K>;
699
+ BtreeTest<BtreeSet, std::set<K>>();
700
+ }
701
+
702
+ template <typename K, int N = 256>
703
+ void MapTest() {
704
+ EXPECT_EQ(
705
+ sizeof(absl::btree_map<K, K>),
706
+ 2 * sizeof(void *) + sizeof(typename absl::btree_map<K, K>::size_type));
707
+ using BtreeMap = absl::btree_map<K, K>;
708
+ BtreeTest<BtreeMap, std::map<K, K>>();
709
+ BtreeMapTest<BtreeMap>();
710
+ }
711
+
712
+ TEST(Btree, set_int32) { SetTest<int32_t>(); }
713
+ TEST(Btree, set_string) { SetTest<std::string>(); }
714
+ TEST(Btree, set_cord) { SetTest<absl::Cord>(); }
715
+ TEST(Btree, map_int32) { MapTest<int32_t>(); }
716
+ TEST(Btree, map_string) { MapTest<std::string>(); }
717
+ TEST(Btree, map_cord) { MapTest<absl::Cord>(); }
718
+
719
+ template <typename K, int N = 256>
720
+ void MultiSetTest() {
721
+ EXPECT_EQ(
722
+ sizeof(absl::btree_multiset<K>),
723
+ 2 * sizeof(void *) + sizeof(typename absl::btree_multiset<K>::size_type));
724
+ using BtreeMSet = absl::btree_multiset<K>;
725
+ BtreeMultiTest<BtreeMSet, std::multiset<K>>();
726
+ }
727
+
728
+ template <typename K, int N = 256>
729
+ void MultiMapTest() {
730
+ EXPECT_EQ(sizeof(absl::btree_multimap<K, K>),
731
+ 2 * sizeof(void *) +
732
+ sizeof(typename absl::btree_multimap<K, K>::size_type));
733
+ using BtreeMMap = absl::btree_multimap<K, K>;
734
+ BtreeMultiTest<BtreeMMap, std::multimap<K, K>>();
735
+ BtreeMultiMapTest<BtreeMMap>();
736
+ }
737
+
738
+ TEST(Btree, multiset_int32) { MultiSetTest<int32_t>(); }
739
+ TEST(Btree, multiset_string) { MultiSetTest<std::string>(); }
740
+ TEST(Btree, multiset_cord) { MultiSetTest<absl::Cord>(); }
741
+ TEST(Btree, multimap_int32) { MultiMapTest<int32_t>(); }
742
+ TEST(Btree, multimap_string) { MultiMapTest<std::string>(); }
743
+ TEST(Btree, multimap_cord) { MultiMapTest<absl::Cord>(); }
744
+
745
+ struct CompareIntToString {
746
+ bool operator()(const std::string &a, const std::string &b) const {
747
+ return a < b;
748
+ }
749
+ bool operator()(const std::string &a, int b) const {
750
+ return a < absl::StrCat(b);
751
+ }
752
+ bool operator()(int a, const std::string &b) const {
753
+ return absl::StrCat(a) < b;
754
+ }
755
+ using is_transparent = void;
756
+ };
757
+
758
+ struct NonTransparentCompare {
759
+ template <typename T, typename U>
760
+ bool operator()(const T &t, const U &u) const {
761
+ // Treating all comparators as transparent can cause inefficiencies (see
762
+ // N3657 C++ proposal). Test that for comparators without 'is_transparent'
763
+ // alias (like this one), we do not attempt heterogeneous lookup.
764
+ EXPECT_TRUE((std::is_same<T, U>()));
765
+ return t < u;
766
+ }
767
+ };
768
+
769
+ template <typename T>
770
+ bool CanEraseWithEmptyBrace(T t, decltype(t.erase({})) *) {
771
+ return true;
772
+ }
773
+
774
+ template <typename T>
775
+ bool CanEraseWithEmptyBrace(T, ...) {
776
+ return false;
777
+ }
778
+
779
+ template <typename T>
780
+ void TestHeterogeneous(T table) {
781
+ auto lb = table.lower_bound("3");
782
+ EXPECT_EQ(lb, table.lower_bound(3));
783
+ EXPECT_NE(lb, table.lower_bound(4));
784
+ EXPECT_EQ(lb, table.lower_bound({"3"}));
785
+ EXPECT_NE(lb, table.lower_bound({}));
786
+
787
+ auto ub = table.upper_bound("3");
788
+ EXPECT_EQ(ub, table.upper_bound(3));
789
+ EXPECT_NE(ub, table.upper_bound(5));
790
+ EXPECT_EQ(ub, table.upper_bound({"3"}));
791
+ EXPECT_NE(ub, table.upper_bound({}));
792
+
793
+ auto er = table.equal_range("3");
794
+ EXPECT_EQ(er, table.equal_range(3));
795
+ EXPECT_NE(er, table.equal_range(4));
796
+ EXPECT_EQ(er, table.equal_range({"3"}));
797
+ EXPECT_NE(er, table.equal_range({}));
798
+
799
+ auto it = table.find("3");
800
+ EXPECT_EQ(it, table.find(3));
801
+ EXPECT_NE(it, table.find(4));
802
+ EXPECT_EQ(it, table.find({"3"}));
803
+ EXPECT_NE(it, table.find({}));
804
+
805
+ EXPECT_TRUE(table.contains(3));
806
+ EXPECT_FALSE(table.contains(4));
807
+ EXPECT_TRUE(table.count({"3"}));
808
+ EXPECT_FALSE(table.contains({}));
809
+
810
+ EXPECT_EQ(1, table.count(3));
811
+ EXPECT_EQ(0, table.count(4));
812
+ EXPECT_EQ(1, table.count({"3"}));
813
+ EXPECT_EQ(0, table.count({}));
814
+
815
+ auto copy = table;
816
+ copy.erase(3);
817
+ EXPECT_EQ(table.size() - 1, copy.size());
818
+ copy.erase(4);
819
+ EXPECT_EQ(table.size() - 1, copy.size());
820
+ copy.erase({"5"});
821
+ EXPECT_EQ(table.size() - 2, copy.size());
822
+ EXPECT_FALSE(CanEraseWithEmptyBrace(table, nullptr));
823
+
824
+ // Also run it with const T&.
825
+ if (std::is_class<T>()) TestHeterogeneous<const T &>(table);
826
+ }
827
+
828
+ TEST(Btree, HeterogeneousLookup) {
829
+ TestHeterogeneous(btree_set<std::string, CompareIntToString>{"1", "3", "5"});
830
+ TestHeterogeneous(btree_map<std::string, int, CompareIntToString>{
831
+ {"1", 1}, {"3", 3}, {"5", 5}});
832
+ TestHeterogeneous(
833
+ btree_multiset<std::string, CompareIntToString>{"1", "3", "5"});
834
+ TestHeterogeneous(btree_multimap<std::string, int, CompareIntToString>{
835
+ {"1", 1}, {"3", 3}, {"5", 5}});
836
+
837
+ // Only maps have .at()
838
+ btree_map<std::string, int, CompareIntToString> map{
839
+ {"", -1}, {"1", 1}, {"3", 3}, {"5", 5}};
840
+ EXPECT_EQ(1, map.at(1));
841
+ EXPECT_EQ(3, map.at({"3"}));
842
+ EXPECT_EQ(-1, map.at({}));
843
+ const auto &cmap = map;
844
+ EXPECT_EQ(1, cmap.at(1));
845
+ EXPECT_EQ(3, cmap.at({"3"}));
846
+ EXPECT_EQ(-1, cmap.at({}));
847
+ }
848
+
849
+ TEST(Btree, NoHeterogeneousLookupWithoutAlias) {
850
+ using StringSet = absl::btree_set<std::string, NonTransparentCompare>;
851
+ StringSet s;
852
+ ASSERT_TRUE(s.insert("hello").second);
853
+ ASSERT_TRUE(s.insert("world").second);
854
+ EXPECT_TRUE(s.end() == s.find("blah"));
855
+ EXPECT_TRUE(s.begin() == s.lower_bound("hello"));
856
+ EXPECT_EQ(1, s.count("world"));
857
+ EXPECT_TRUE(s.contains("hello"));
858
+ EXPECT_TRUE(s.contains("world"));
859
+ EXPECT_FALSE(s.contains("blah"));
860
+
861
+ using StringMultiSet =
862
+ absl::btree_multiset<std::string, NonTransparentCompare>;
863
+ StringMultiSet ms;
864
+ ms.insert("hello");
865
+ ms.insert("world");
866
+ ms.insert("world");
867
+ EXPECT_TRUE(ms.end() == ms.find("blah"));
868
+ EXPECT_TRUE(ms.begin() == ms.lower_bound("hello"));
869
+ EXPECT_EQ(2, ms.count("world"));
870
+ EXPECT_TRUE(ms.contains("hello"));
871
+ EXPECT_TRUE(ms.contains("world"));
872
+ EXPECT_FALSE(ms.contains("blah"));
873
+ }
874
+
875
+ TEST(Btree, DefaultTransparent) {
876
+ {
877
+ // `int` does not have a default transparent comparator.
878
+ // The input value is converted to key_type.
879
+ btree_set<int> s = {1};
880
+ double d = 1.1;
881
+ EXPECT_EQ(s.begin(), s.find(d));
882
+ EXPECT_TRUE(s.contains(d));
883
+ }
884
+
885
+ {
886
+ // `std::string` has heterogeneous support.
887
+ btree_set<std::string> s = {"A"};
888
+ EXPECT_EQ(s.begin(), s.find(absl::string_view("A")));
889
+ EXPECT_TRUE(s.contains(absl::string_view("A")));
890
+ }
891
+ }
892
+
893
+ class StringLike {
894
+ public:
895
+ StringLike() = default;
896
+
897
+ StringLike(const char *s) : s_(s) { // NOLINT
898
+ ++constructor_calls_;
899
+ }
900
+
901
+ bool operator<(const StringLike &a) const { return s_ < a.s_; }
902
+
903
+ static void clear_constructor_call_count() { constructor_calls_ = 0; }
904
+
905
+ static int constructor_calls() { return constructor_calls_; }
906
+
907
+ private:
908
+ static int constructor_calls_;
909
+ std::string s_;
910
+ };
911
+
912
+ int StringLike::constructor_calls_ = 0;
913
+
914
+ TEST(Btree, HeterogeneousLookupDoesntDegradePerformance) {
915
+ using StringSet = absl::btree_set<StringLike>;
916
+ StringSet s;
917
+ for (int i = 0; i < 100; ++i) {
918
+ ASSERT_TRUE(s.insert(absl::StrCat(i).c_str()).second);
919
+ }
920
+ StringLike::clear_constructor_call_count();
921
+ s.find("50");
922
+ ASSERT_EQ(1, StringLike::constructor_calls());
923
+
924
+ StringLike::clear_constructor_call_count();
925
+ s.contains("50");
926
+ ASSERT_EQ(1, StringLike::constructor_calls());
927
+
928
+ StringLike::clear_constructor_call_count();
929
+ s.count("50");
930
+ ASSERT_EQ(1, StringLike::constructor_calls());
931
+
932
+ StringLike::clear_constructor_call_count();
933
+ s.lower_bound("50");
934
+ ASSERT_EQ(1, StringLike::constructor_calls());
935
+
936
+ StringLike::clear_constructor_call_count();
937
+ s.upper_bound("50");
938
+ ASSERT_EQ(1, StringLike::constructor_calls());
939
+
940
+ StringLike::clear_constructor_call_count();
941
+ s.equal_range("50");
942
+ ASSERT_EQ(1, StringLike::constructor_calls());
943
+
944
+ StringLike::clear_constructor_call_count();
945
+ s.erase("50");
946
+ ASSERT_EQ(1, StringLike::constructor_calls());
947
+ }
948
+
949
+ // Verify that swapping btrees swaps the key comparison functors and that we can
950
+ // use non-default constructible comparators.
951
+ struct SubstringLess {
952
+ SubstringLess() = delete;
953
+ explicit SubstringLess(int length) : n(length) {}
954
+ bool operator()(const std::string &a, const std::string &b) const {
955
+ return absl::string_view(a).substr(0, n) <
956
+ absl::string_view(b).substr(0, n);
957
+ }
958
+ int n;
959
+ };
960
+
961
+ TEST(Btree, SwapKeyCompare) {
962
+ using SubstringSet = absl::btree_set<std::string, SubstringLess>;
963
+ SubstringSet s1(SubstringLess(1), SubstringSet::allocator_type());
964
+ SubstringSet s2(SubstringLess(2), SubstringSet::allocator_type());
965
+
966
+ ASSERT_TRUE(s1.insert("a").second);
967
+ ASSERT_FALSE(s1.insert("aa").second);
968
+
969
+ ASSERT_TRUE(s2.insert("a").second);
970
+ ASSERT_TRUE(s2.insert("aa").second);
971
+ ASSERT_FALSE(s2.insert("aaa").second);
972
+
973
+ swap(s1, s2);
974
+
975
+ ASSERT_TRUE(s1.insert("b").second);
976
+ ASSERT_TRUE(s1.insert("bb").second);
977
+ ASSERT_FALSE(s1.insert("bbb").second);
978
+
979
+ ASSERT_TRUE(s2.insert("b").second);
980
+ ASSERT_FALSE(s2.insert("bb").second);
981
+ }
982
+
983
+ TEST(Btree, UpperBoundRegression) {
984
+ // Regress a bug where upper_bound would default-construct a new key_compare
985
+ // instead of copying the existing one.
986
+ using SubstringSet = absl::btree_set<std::string, SubstringLess>;
987
+ SubstringSet my_set(SubstringLess(3));
988
+ my_set.insert("aab");
989
+ my_set.insert("abb");
990
+ // We call upper_bound("aaa"). If this correctly uses the length 3
991
+ // comparator, aaa < aab < abb, so we should get aab as the result.
992
+ // If it instead uses the default-constructed length 2 comparator,
993
+ // aa == aa < ab, so we'll get abb as our result.
994
+ SubstringSet::iterator it = my_set.upper_bound("aaa");
995
+ ASSERT_TRUE(it != my_set.end());
996
+ EXPECT_EQ("aab", *it);
997
+ }
998
+
999
+ TEST(Btree, Comparison) {
1000
+ const int kSetSize = 1201;
1001
+ absl::btree_set<int64_t> my_set;
1002
+ for (int i = 0; i < kSetSize; ++i) {
1003
+ my_set.insert(i);
1004
+ }
1005
+ absl::btree_set<int64_t> my_set_copy(my_set);
1006
+ EXPECT_TRUE(my_set_copy == my_set);
1007
+ EXPECT_TRUE(my_set == my_set_copy);
1008
+ EXPECT_FALSE(my_set_copy != my_set);
1009
+ EXPECT_FALSE(my_set != my_set_copy);
1010
+
1011
+ my_set.insert(kSetSize);
1012
+ EXPECT_FALSE(my_set_copy == my_set);
1013
+ EXPECT_FALSE(my_set == my_set_copy);
1014
+ EXPECT_TRUE(my_set_copy != my_set);
1015
+ EXPECT_TRUE(my_set != my_set_copy);
1016
+
1017
+ my_set.erase(kSetSize - 1);
1018
+ EXPECT_FALSE(my_set_copy == my_set);
1019
+ EXPECT_FALSE(my_set == my_set_copy);
1020
+ EXPECT_TRUE(my_set_copy != my_set);
1021
+ EXPECT_TRUE(my_set != my_set_copy);
1022
+
1023
+ absl::btree_map<std::string, int64_t> my_map;
1024
+ for (int i = 0; i < kSetSize; ++i) {
1025
+ my_map[std::string(i, 'a')] = i;
1026
+ }
1027
+ absl::btree_map<std::string, int64_t> my_map_copy(my_map);
1028
+ EXPECT_TRUE(my_map_copy == my_map);
1029
+ EXPECT_TRUE(my_map == my_map_copy);
1030
+ EXPECT_FALSE(my_map_copy != my_map);
1031
+ EXPECT_FALSE(my_map != my_map_copy);
1032
+
1033
+ ++my_map_copy[std::string(7, 'a')];
1034
+ EXPECT_FALSE(my_map_copy == my_map);
1035
+ EXPECT_FALSE(my_map == my_map_copy);
1036
+ EXPECT_TRUE(my_map_copy != my_map);
1037
+ EXPECT_TRUE(my_map != my_map_copy);
1038
+
1039
+ my_map_copy = my_map;
1040
+ my_map["hello"] = kSetSize;
1041
+ EXPECT_FALSE(my_map_copy == my_map);
1042
+ EXPECT_FALSE(my_map == my_map_copy);
1043
+ EXPECT_TRUE(my_map_copy != my_map);
1044
+ EXPECT_TRUE(my_map != my_map_copy);
1045
+
1046
+ my_map.erase(std::string(kSetSize - 1, 'a'));
1047
+ EXPECT_FALSE(my_map_copy == my_map);
1048
+ EXPECT_FALSE(my_map == my_map_copy);
1049
+ EXPECT_TRUE(my_map_copy != my_map);
1050
+ EXPECT_TRUE(my_map != my_map_copy);
1051
+ }
1052
+
1053
+ TEST(Btree, RangeCtorSanity) {
1054
+ std::vector<int> ivec;
1055
+ ivec.push_back(1);
1056
+ std::map<int, int> imap;
1057
+ imap.insert(std::make_pair(1, 2));
1058
+ absl::btree_multiset<int> tmset(ivec.begin(), ivec.end());
1059
+ absl::btree_multimap<int, int> tmmap(imap.begin(), imap.end());
1060
+ absl::btree_set<int> tset(ivec.begin(), ivec.end());
1061
+ absl::btree_map<int, int> tmap(imap.begin(), imap.end());
1062
+ EXPECT_EQ(1, tmset.size());
1063
+ EXPECT_EQ(1, tmmap.size());
1064
+ EXPECT_EQ(1, tset.size());
1065
+ EXPECT_EQ(1, tmap.size());
1066
+ }
1067
+
1068
+ } // namespace
1069
+
1070
+ class BtreeNodePeer {
1071
+ public:
1072
+ // Yields the size of a leaf node with a specific number of values.
1073
+ template <typename ValueType>
1074
+ constexpr static size_t GetTargetNodeSize(size_t target_values_per_node) {
1075
+ return btree_node<
1076
+ set_params<ValueType, std::less<ValueType>, std::allocator<ValueType>,
1077
+ /*TargetNodeSize=*/256, // This parameter isn't used here.
1078
+ /*Multi=*/false>>::SizeWithNSlots(target_values_per_node);
1079
+ }
1080
+
1081
+ // Yields the number of slots in a (non-root) leaf node for this btree.
1082
+ template <typename Btree>
1083
+ constexpr static size_t GetNumSlotsPerNode() {
1084
+ return btree_node<typename Btree::params_type>::kNodeSlots;
1085
+ }
1086
+
1087
+ template <typename Btree>
1088
+ constexpr static size_t GetMaxFieldType() {
1089
+ return std::numeric_limits<
1090
+ typename btree_node<typename Btree::params_type>::field_type>::max();
1091
+ }
1092
+
1093
+ template <typename Btree>
1094
+ constexpr static bool UsesLinearNodeSearch() {
1095
+ return btree_node<typename Btree::params_type>::use_linear_search::value;
1096
+ }
1097
+
1098
+ template <typename Btree>
1099
+ constexpr static bool FieldTypeEqualsSlotType() {
1100
+ return std::is_same<
1101
+ typename btree_node<typename Btree::params_type>::field_type,
1102
+ typename btree_node<typename Btree::params_type>::slot_type>::value;
1103
+ }
1104
+ };
1105
+
1106
+ namespace {
1107
+
1108
+ class BtreeMapTest : public ::testing::Test {
1109
+ public:
1110
+ struct Key {};
1111
+ struct Cmp {
1112
+ template <typename T>
1113
+ bool operator()(T, T) const {
1114
+ return false;
1115
+ }
1116
+ };
1117
+
1118
+ struct KeyLin {
1119
+ using absl_btree_prefer_linear_node_search = std::true_type;
1120
+ };
1121
+ struct CmpLin : Cmp {
1122
+ using absl_btree_prefer_linear_node_search = std::true_type;
1123
+ };
1124
+
1125
+ struct KeyBin {
1126
+ using absl_btree_prefer_linear_node_search = std::false_type;
1127
+ };
1128
+ struct CmpBin : Cmp {
1129
+ using absl_btree_prefer_linear_node_search = std::false_type;
1130
+ };
1131
+
1132
+ template <typename K, typename C>
1133
+ static bool IsLinear() {
1134
+ return BtreeNodePeer::UsesLinearNodeSearch<absl::btree_map<K, int, C>>();
1135
+ }
1136
+ };
1137
+
1138
+ TEST_F(BtreeMapTest, TestLinearSearchPreferredForKeyLinearViaAlias) {
1139
+ // Test requesting linear search by directly exporting an alias.
1140
+ EXPECT_FALSE((IsLinear<Key, Cmp>()));
1141
+ EXPECT_TRUE((IsLinear<KeyLin, Cmp>()));
1142
+ EXPECT_TRUE((IsLinear<Key, CmpLin>()));
1143
+ EXPECT_TRUE((IsLinear<KeyLin, CmpLin>()));
1144
+ }
1145
+
1146
+ TEST_F(BtreeMapTest, LinearChoiceTree) {
1147
+ // Cmp has precedence, and is forcing binary
1148
+ EXPECT_FALSE((IsLinear<Key, CmpBin>()));
1149
+ EXPECT_FALSE((IsLinear<KeyLin, CmpBin>()));
1150
+ EXPECT_FALSE((IsLinear<KeyBin, CmpBin>()));
1151
+ EXPECT_FALSE((IsLinear<int, CmpBin>()));
1152
+ EXPECT_FALSE((IsLinear<std::string, CmpBin>()));
1153
+ // Cmp has precedence, and is forcing linear
1154
+ EXPECT_TRUE((IsLinear<Key, CmpLin>()));
1155
+ EXPECT_TRUE((IsLinear<KeyLin, CmpLin>()));
1156
+ EXPECT_TRUE((IsLinear<KeyBin, CmpLin>()));
1157
+ EXPECT_TRUE((IsLinear<int, CmpLin>()));
1158
+ EXPECT_TRUE((IsLinear<std::string, CmpLin>()));
1159
+ // Cmp has no preference, Key determines linear vs binary.
1160
+ EXPECT_FALSE((IsLinear<Key, Cmp>()));
1161
+ EXPECT_TRUE((IsLinear<KeyLin, Cmp>()));
1162
+ EXPECT_FALSE((IsLinear<KeyBin, Cmp>()));
1163
+ // arithmetic key w/ std::less or std::greater: linear
1164
+ EXPECT_TRUE((IsLinear<int, std::less<int>>()));
1165
+ EXPECT_TRUE((IsLinear<double, std::greater<double>>()));
1166
+ // arithmetic key w/ custom compare: binary
1167
+ EXPECT_FALSE((IsLinear<int, Cmp>()));
1168
+ // non-arithmetic key: binary
1169
+ EXPECT_FALSE((IsLinear<std::string, std::less<std::string>>()));
1170
+ }
1171
+
1172
+ TEST(Btree, BtreeMapCanHoldMoveOnlyTypes) {
1173
+ absl::btree_map<std::string, std::unique_ptr<std::string>> m;
1174
+
1175
+ std::unique_ptr<std::string> &v = m["A"];
1176
+ EXPECT_TRUE(v == nullptr);
1177
+ v = absl::make_unique<std::string>("X");
1178
+
1179
+ auto iter = m.find("A");
1180
+ EXPECT_EQ("X", *iter->second);
1181
+ }
1182
+
1183
+ TEST(Btree, InitializerListConstructor) {
1184
+ absl::btree_set<std::string> set({"a", "b"});
1185
+ EXPECT_EQ(set.count("a"), 1);
1186
+ EXPECT_EQ(set.count("b"), 1);
1187
+
1188
+ absl::btree_multiset<int> mset({1, 1, 4});
1189
+ EXPECT_EQ(mset.count(1), 2);
1190
+ EXPECT_EQ(mset.count(4), 1);
1191
+
1192
+ absl::btree_map<int, int> map({{1, 5}, {2, 10}});
1193
+ EXPECT_EQ(map[1], 5);
1194
+ EXPECT_EQ(map[2], 10);
1195
+
1196
+ absl::btree_multimap<int, int> mmap({{1, 5}, {1, 10}});
1197
+ auto range = mmap.equal_range(1);
1198
+ auto it = range.first;
1199
+ ASSERT_NE(it, range.second);
1200
+ EXPECT_EQ(it->second, 5);
1201
+ ASSERT_NE(++it, range.second);
1202
+ EXPECT_EQ(it->second, 10);
1203
+ EXPECT_EQ(++it, range.second);
1204
+ }
1205
+
1206
+ TEST(Btree, InitializerListInsert) {
1207
+ absl::btree_set<std::string> set;
1208
+ set.insert({"a", "b"});
1209
+ EXPECT_EQ(set.count("a"), 1);
1210
+ EXPECT_EQ(set.count("b"), 1);
1211
+
1212
+ absl::btree_multiset<int> mset;
1213
+ mset.insert({1, 1, 4});
1214
+ EXPECT_EQ(mset.count(1), 2);
1215
+ EXPECT_EQ(mset.count(4), 1);
1216
+
1217
+ absl::btree_map<int, int> map;
1218
+ map.insert({{1, 5}, {2, 10}});
1219
+ // Test that inserting one element using an initializer list also works.
1220
+ map.insert({3, 15});
1221
+ EXPECT_EQ(map[1], 5);
1222
+ EXPECT_EQ(map[2], 10);
1223
+ EXPECT_EQ(map[3], 15);
1224
+
1225
+ absl::btree_multimap<int, int> mmap;
1226
+ mmap.insert({{1, 5}, {1, 10}});
1227
+ auto range = mmap.equal_range(1);
1228
+ auto it = range.first;
1229
+ ASSERT_NE(it, range.second);
1230
+ EXPECT_EQ(it->second, 5);
1231
+ ASSERT_NE(++it, range.second);
1232
+ EXPECT_EQ(it->second, 10);
1233
+ EXPECT_EQ(++it, range.second);
1234
+ }
1235
+
1236
+ template <typename Compare, typename Key>
1237
+ void AssertKeyCompareStringAdapted() {
1238
+ using Adapted = typename key_compare_adapter<Compare, Key>::type;
1239
+ static_assert(
1240
+ std::is_same<Adapted, StringBtreeDefaultLess>::value ||
1241
+ std::is_same<Adapted, StringBtreeDefaultGreater>::value,
1242
+ "key_compare_adapter should have string-adapted this comparator.");
1243
+ }
1244
+ template <typename Compare, typename Key>
1245
+ void AssertKeyCompareNotStringAdapted() {
1246
+ using Adapted = typename key_compare_adapter<Compare, Key>::type;
1247
+ static_assert(
1248
+ !std::is_same<Adapted, StringBtreeDefaultLess>::value &&
1249
+ !std::is_same<Adapted, StringBtreeDefaultGreater>::value,
1250
+ "key_compare_adapter shouldn't have string-adapted this comparator.");
1251
+ }
1252
+
1253
+ TEST(Btree, KeyCompareAdapter) {
1254
+ AssertKeyCompareStringAdapted<std::less<std::string>, std::string>();
1255
+ AssertKeyCompareStringAdapted<std::greater<std::string>, std::string>();
1256
+ AssertKeyCompareStringAdapted<std::less<absl::string_view>,
1257
+ absl::string_view>();
1258
+ AssertKeyCompareStringAdapted<std::greater<absl::string_view>,
1259
+ absl::string_view>();
1260
+ AssertKeyCompareStringAdapted<std::less<absl::Cord>, absl::Cord>();
1261
+ AssertKeyCompareStringAdapted<std::greater<absl::Cord>, absl::Cord>();
1262
+ AssertKeyCompareNotStringAdapted<std::less<int>, int>();
1263
+ AssertKeyCompareNotStringAdapted<std::greater<int>, int>();
1264
+ }
1265
+
1266
+ TEST(Btree, RValueInsert) {
1267
+ InstanceTracker tracker;
1268
+
1269
+ absl::btree_set<MovableOnlyInstance> set;
1270
+ set.insert(MovableOnlyInstance(1));
1271
+ set.insert(MovableOnlyInstance(3));
1272
+ MovableOnlyInstance two(2);
1273
+ set.insert(set.find(MovableOnlyInstance(3)), std::move(two));
1274
+ auto it = set.find(MovableOnlyInstance(2));
1275
+ ASSERT_NE(it, set.end());
1276
+ ASSERT_NE(++it, set.end());
1277
+ EXPECT_EQ(it->value(), 3);
1278
+
1279
+ absl::btree_multiset<MovableOnlyInstance> mset;
1280
+ MovableOnlyInstance zero(0);
1281
+ MovableOnlyInstance zero2(0);
1282
+ mset.insert(std::move(zero));
1283
+ mset.insert(mset.find(MovableOnlyInstance(0)), std::move(zero2));
1284
+ EXPECT_EQ(mset.count(MovableOnlyInstance(0)), 2);
1285
+
1286
+ absl::btree_map<int, MovableOnlyInstance> map;
1287
+ std::pair<const int, MovableOnlyInstance> p1 = {1, MovableOnlyInstance(5)};
1288
+ std::pair<const int, MovableOnlyInstance> p2 = {2, MovableOnlyInstance(10)};
1289
+ std::pair<const int, MovableOnlyInstance> p3 = {3, MovableOnlyInstance(15)};
1290
+ map.insert(std::move(p1));
1291
+ map.insert(std::move(p3));
1292
+ map.insert(map.find(3), std::move(p2));
1293
+ ASSERT_NE(map.find(2), map.end());
1294
+ EXPECT_EQ(map.find(2)->second.value(), 10);
1295
+
1296
+ absl::btree_multimap<int, MovableOnlyInstance> mmap;
1297
+ std::pair<const int, MovableOnlyInstance> p4 = {1, MovableOnlyInstance(5)};
1298
+ std::pair<const int, MovableOnlyInstance> p5 = {1, MovableOnlyInstance(10)};
1299
+ mmap.insert(std::move(p4));
1300
+ mmap.insert(mmap.find(1), std::move(p5));
1301
+ auto range = mmap.equal_range(1);
1302
+ auto it1 = range.first;
1303
+ ASSERT_NE(it1, range.second);
1304
+ EXPECT_EQ(it1->second.value(), 10);
1305
+ ASSERT_NE(++it1, range.second);
1306
+ EXPECT_EQ(it1->second.value(), 5);
1307
+ EXPECT_EQ(++it1, range.second);
1308
+
1309
+ EXPECT_EQ(tracker.copies(), 0);
1310
+ EXPECT_EQ(tracker.swaps(), 0);
1311
+ }
1312
+
1313
+ template <typename Cmp>
1314
+ struct CheckedCompareOptedOutCmp : Cmp, BtreeTestOnlyCheckedCompareOptOutBase {
1315
+ using Cmp::Cmp;
1316
+ CheckedCompareOptedOutCmp() {}
1317
+ CheckedCompareOptedOutCmp(Cmp cmp) : Cmp(std::move(cmp)) {} // NOLINT
1318
+ };
1319
+
1320
+ // A btree set with a specific number of values per node. Opt out of
1321
+ // checked_compare so that we can expect exact numbers of comparisons.
1322
+ template <typename Key, int TargetValuesPerNode, typename Cmp = std::less<Key>>
1323
+ class SizedBtreeSet
1324
+ : public btree_set_container<btree<
1325
+ set_params<Key, CheckedCompareOptedOutCmp<Cmp>, std::allocator<Key>,
1326
+ BtreeNodePeer::GetTargetNodeSize<Key>(TargetValuesPerNode),
1327
+ /*Multi=*/false>>> {
1328
+ using Base = typename SizedBtreeSet::btree_set_container;
1329
+
1330
+ public:
1331
+ SizedBtreeSet() = default;
1332
+ using Base::Base;
1333
+ };
1334
+
1335
+ template <typename Set>
1336
+ void ExpectOperationCounts(const int expected_moves,
1337
+ const int expected_comparisons,
1338
+ const std::vector<int> &values,
1339
+ InstanceTracker *tracker, Set *set) {
1340
+ for (const int v : values) set->insert(MovableOnlyInstance(v));
1341
+ set->clear();
1342
+ EXPECT_EQ(tracker->moves(), expected_moves);
1343
+ EXPECT_EQ(tracker->comparisons(), expected_comparisons);
1344
+ EXPECT_EQ(tracker->copies(), 0);
1345
+ EXPECT_EQ(tracker->swaps(), 0);
1346
+ tracker->ResetCopiesMovesSwaps();
1347
+ }
1348
+
1349
+ #if defined(ABSL_HAVE_ADDRESS_SANITIZER) || \
1350
+ defined(ABSL_HAVE_HWADDRESS_SANITIZER)
1351
+ constexpr bool kAsan = true;
1352
+ #else
1353
+ constexpr bool kAsan = false;
1354
+ #endif
1355
+
1356
+ // Note: when the values in this test change, it is expected to have an impact
1357
+ // on performance.
1358
+ TEST(Btree, MovesComparisonsCopiesSwapsTracking) {
1359
+ if (kAsan) GTEST_SKIP() << "We do extra operations in ASan mode.";
1360
+
1361
+ InstanceTracker tracker;
1362
+ // Note: this is minimum number of values per node.
1363
+ SizedBtreeSet<MovableOnlyInstance, /*TargetValuesPerNode=*/4> set4;
1364
+ // Note: this is the default number of values per node for a set of int32s
1365
+ // (with 64-bit pointers).
1366
+ SizedBtreeSet<MovableOnlyInstance, /*TargetValuesPerNode=*/61> set61;
1367
+ SizedBtreeSet<MovableOnlyInstance, /*TargetValuesPerNode=*/100> set100;
1368
+
1369
+ // Don't depend on flags for random values because then the expectations will
1370
+ // fail if the flags change.
1371
+ std::vector<int> values =
1372
+ GenerateValuesWithSeed<int>(10000, 1 << 22, /*seed=*/23);
1373
+
1374
+ EXPECT_EQ(BtreeNodePeer::GetNumSlotsPerNode<decltype(set4)>(), 4);
1375
+ EXPECT_EQ(BtreeNodePeer::GetNumSlotsPerNode<decltype(set61)>(), 61);
1376
+ EXPECT_EQ(BtreeNodePeer::GetNumSlotsPerNode<decltype(set100)>(), 100);
1377
+ if (sizeof(void *) == 8) {
1378
+ EXPECT_EQ(BtreeNodePeer::GetNumSlotsPerNode<absl::btree_set<int32_t>>(),
1379
+ // When we have generations, there is one fewer slot.
1380
+ BtreeGenerationsEnabled() ? 60 : 61);
1381
+ }
1382
+
1383
+ // Test key insertion/deletion in random order.
1384
+ ExpectOperationCounts(56540, 134212, values, &tracker, &set4);
1385
+ ExpectOperationCounts(386718, 129807, values, &tracker, &set61);
1386
+ ExpectOperationCounts(586761, 130310, values, &tracker, &set100);
1387
+
1388
+ // Test key insertion/deletion in sorted order.
1389
+ std::sort(values.begin(), values.end());
1390
+ ExpectOperationCounts(24972, 85563, values, &tracker, &set4);
1391
+ ExpectOperationCounts(20208, 87757, values, &tracker, &set61);
1392
+ ExpectOperationCounts(20124, 96583, values, &tracker, &set100);
1393
+
1394
+ // Test key insertion/deletion in reverse sorted order.
1395
+ std::reverse(values.begin(), values.end());
1396
+ ExpectOperationCounts(54949, 127531, values, &tracker, &set4);
1397
+ ExpectOperationCounts(338813, 118266, values, &tracker, &set61);
1398
+ ExpectOperationCounts(534529, 125279, values, &tracker, &set100);
1399
+ }
1400
+
1401
+ struct MovableOnlyInstanceThreeWayCompare {
1402
+ absl::weak_ordering operator()(const MovableOnlyInstance &a,
1403
+ const MovableOnlyInstance &b) const {
1404
+ return a.compare(b);
1405
+ }
1406
+ };
1407
+
1408
+ // Note: when the values in this test change, it is expected to have an impact
1409
+ // on performance.
1410
+ TEST(Btree, MovesComparisonsCopiesSwapsTrackingThreeWayCompare) {
1411
+ if (kAsan) GTEST_SKIP() << "We do extra operations in ASan mode.";
1412
+
1413
+ InstanceTracker tracker;
1414
+ // Note: this is minimum number of values per node.
1415
+ SizedBtreeSet<MovableOnlyInstance, /*TargetValuesPerNode=*/4,
1416
+ MovableOnlyInstanceThreeWayCompare>
1417
+ set4;
1418
+ // Note: this is the default number of values per node for a set of int32s
1419
+ // (with 64-bit pointers).
1420
+ SizedBtreeSet<MovableOnlyInstance, /*TargetValuesPerNode=*/61,
1421
+ MovableOnlyInstanceThreeWayCompare>
1422
+ set61;
1423
+ SizedBtreeSet<MovableOnlyInstance, /*TargetValuesPerNode=*/100,
1424
+ MovableOnlyInstanceThreeWayCompare>
1425
+ set100;
1426
+
1427
+ // Don't depend on flags for random values because then the expectations will
1428
+ // fail if the flags change.
1429
+ std::vector<int> values =
1430
+ GenerateValuesWithSeed<int>(10000, 1 << 22, /*seed=*/23);
1431
+
1432
+ EXPECT_EQ(BtreeNodePeer::GetNumSlotsPerNode<decltype(set4)>(), 4);
1433
+ EXPECT_EQ(BtreeNodePeer::GetNumSlotsPerNode<decltype(set61)>(), 61);
1434
+ EXPECT_EQ(BtreeNodePeer::GetNumSlotsPerNode<decltype(set100)>(), 100);
1435
+ if (sizeof(void *) == 8) {
1436
+ EXPECT_EQ(BtreeNodePeer::GetNumSlotsPerNode<absl::btree_set<int32_t>>(),
1437
+ // When we have generations, there is one fewer slot.
1438
+ BtreeGenerationsEnabled() ? 60 : 61);
1439
+ }
1440
+
1441
+ // Test key insertion/deletion in random order.
1442
+ ExpectOperationCounts(56540, 124221, values, &tracker, &set4);
1443
+ ExpectOperationCounts(386718, 119816, values, &tracker, &set61);
1444
+ ExpectOperationCounts(586761, 120319, values, &tracker, &set100);
1445
+
1446
+ // Test key insertion/deletion in sorted order.
1447
+ std::sort(values.begin(), values.end());
1448
+ ExpectOperationCounts(24972, 85563, values, &tracker, &set4);
1449
+ ExpectOperationCounts(20208, 87757, values, &tracker, &set61);
1450
+ ExpectOperationCounts(20124, 96583, values, &tracker, &set100);
1451
+
1452
+ // Test key insertion/deletion in reverse sorted order.
1453
+ std::reverse(values.begin(), values.end());
1454
+ ExpectOperationCounts(54949, 117532, values, &tracker, &set4);
1455
+ ExpectOperationCounts(338813, 108267, values, &tracker, &set61);
1456
+ ExpectOperationCounts(534529, 115280, values, &tracker, &set100);
1457
+ }
1458
+
1459
+ struct NoDefaultCtor {
1460
+ int num;
1461
+ explicit NoDefaultCtor(int i) : num(i) {}
1462
+
1463
+ friend bool operator<(const NoDefaultCtor &a, const NoDefaultCtor &b) {
1464
+ return a.num < b.num;
1465
+ }
1466
+ };
1467
+
1468
+ TEST(Btree, BtreeMapCanHoldNoDefaultCtorTypes) {
1469
+ absl::btree_map<NoDefaultCtor, NoDefaultCtor> m;
1470
+
1471
+ for (int i = 1; i <= 99; ++i) {
1472
+ SCOPED_TRACE(i);
1473
+ EXPECT_TRUE(m.emplace(NoDefaultCtor(i), NoDefaultCtor(100 - i)).second);
1474
+ }
1475
+ EXPECT_FALSE(m.emplace(NoDefaultCtor(78), NoDefaultCtor(0)).second);
1476
+
1477
+ auto iter99 = m.find(NoDefaultCtor(99));
1478
+ ASSERT_NE(iter99, m.end());
1479
+ EXPECT_EQ(iter99->second.num, 1);
1480
+
1481
+ auto iter1 = m.find(NoDefaultCtor(1));
1482
+ ASSERT_NE(iter1, m.end());
1483
+ EXPECT_EQ(iter1->second.num, 99);
1484
+
1485
+ auto iter50 = m.find(NoDefaultCtor(50));
1486
+ ASSERT_NE(iter50, m.end());
1487
+ EXPECT_EQ(iter50->second.num, 50);
1488
+
1489
+ auto iter25 = m.find(NoDefaultCtor(25));
1490
+ ASSERT_NE(iter25, m.end());
1491
+ EXPECT_EQ(iter25->second.num, 75);
1492
+ }
1493
+
1494
+ TEST(Btree, BtreeMultimapCanHoldNoDefaultCtorTypes) {
1495
+ absl::btree_multimap<NoDefaultCtor, NoDefaultCtor> m;
1496
+
1497
+ for (int i = 1; i <= 99; ++i) {
1498
+ SCOPED_TRACE(i);
1499
+ m.emplace(NoDefaultCtor(i), NoDefaultCtor(100 - i));
1500
+ }
1501
+
1502
+ auto iter99 = m.find(NoDefaultCtor(99));
1503
+ ASSERT_NE(iter99, m.end());
1504
+ EXPECT_EQ(iter99->second.num, 1);
1505
+
1506
+ auto iter1 = m.find(NoDefaultCtor(1));
1507
+ ASSERT_NE(iter1, m.end());
1508
+ EXPECT_EQ(iter1->second.num, 99);
1509
+
1510
+ auto iter50 = m.find(NoDefaultCtor(50));
1511
+ ASSERT_NE(iter50, m.end());
1512
+ EXPECT_EQ(iter50->second.num, 50);
1513
+
1514
+ auto iter25 = m.find(NoDefaultCtor(25));
1515
+ ASSERT_NE(iter25, m.end());
1516
+ EXPECT_EQ(iter25->second.num, 75);
1517
+ }
1518
+
1519
+ TEST(Btree, MapAt) {
1520
+ absl::btree_map<int, int> map = {{1, 2}, {2, 4}};
1521
+ EXPECT_EQ(map.at(1), 2);
1522
+ EXPECT_EQ(map.at(2), 4);
1523
+ map.at(2) = 8;
1524
+ const absl::btree_map<int, int> &const_map = map;
1525
+ EXPECT_EQ(const_map.at(1), 2);
1526
+ EXPECT_EQ(const_map.at(2), 8);
1527
+ #ifdef ABSL_HAVE_EXCEPTIONS
1528
+ EXPECT_THROW(map.at(3), std::out_of_range);
1529
+ #else
1530
+ EXPECT_DEATH_IF_SUPPORTED(map.at(3), "absl::btree_map::at");
1531
+ #endif
1532
+ }
1533
+
1534
+ TEST(Btree, BtreeMultisetEmplace) {
1535
+ const int value_to_insert = 123456;
1536
+ absl::btree_multiset<int> s;
1537
+ auto iter = s.emplace(value_to_insert);
1538
+ ASSERT_NE(iter, s.end());
1539
+ EXPECT_EQ(*iter, value_to_insert);
1540
+ iter = s.emplace(value_to_insert);
1541
+ ASSERT_NE(iter, s.end());
1542
+ EXPECT_EQ(*iter, value_to_insert);
1543
+ auto result = s.equal_range(value_to_insert);
1544
+ EXPECT_EQ(std::distance(result.first, result.second), 2);
1545
+ }
1546
+
1547
+ TEST(Btree, BtreeMultisetEmplaceHint) {
1548
+ const int value_to_insert = 123456;
1549
+ absl::btree_multiset<int> s;
1550
+ auto iter = s.emplace(value_to_insert);
1551
+ ASSERT_NE(iter, s.end());
1552
+ EXPECT_EQ(*iter, value_to_insert);
1553
+ iter = s.emplace_hint(iter, value_to_insert);
1554
+ // The new element should be before the previously inserted one.
1555
+ EXPECT_EQ(iter, s.lower_bound(value_to_insert));
1556
+ ASSERT_NE(iter, s.end());
1557
+ EXPECT_EQ(*iter, value_to_insert);
1558
+ }
1559
+
1560
+ TEST(Btree, BtreeMultimapEmplace) {
1561
+ const int key_to_insert = 123456;
1562
+ const char value0[] = "a";
1563
+ absl::btree_multimap<int, std::string> m;
1564
+ auto iter = m.emplace(key_to_insert, value0);
1565
+ ASSERT_NE(iter, m.end());
1566
+ EXPECT_EQ(iter->first, key_to_insert);
1567
+ EXPECT_EQ(iter->second, value0);
1568
+ const char value1[] = "b";
1569
+ iter = m.emplace(key_to_insert, value1);
1570
+ ASSERT_NE(iter, m.end());
1571
+ EXPECT_EQ(iter->first, key_to_insert);
1572
+ EXPECT_EQ(iter->second, value1);
1573
+ auto result = m.equal_range(key_to_insert);
1574
+ EXPECT_EQ(std::distance(result.first, result.second), 2);
1575
+ }
1576
+
1577
+ TEST(Btree, BtreeMultimapEmplaceHint) {
1578
+ const int key_to_insert = 123456;
1579
+ const char value0[] = "a";
1580
+ absl::btree_multimap<int, std::string> m;
1581
+ auto iter = m.emplace(key_to_insert, value0);
1582
+ ASSERT_NE(iter, m.end());
1583
+ EXPECT_EQ(iter->first, key_to_insert);
1584
+ EXPECT_EQ(iter->second, value0);
1585
+ const char value1[] = "b";
1586
+ iter = m.emplace_hint(iter, key_to_insert, value1);
1587
+ // The new element should be before the previously inserted one.
1588
+ EXPECT_EQ(iter, m.lower_bound(key_to_insert));
1589
+ ASSERT_NE(iter, m.end());
1590
+ EXPECT_EQ(iter->first, key_to_insert);
1591
+ EXPECT_EQ(iter->second, value1);
1592
+ }
1593
+
1594
+ TEST(Btree, ConstIteratorAccessors) {
1595
+ absl::btree_set<int> set;
1596
+ for (int i = 0; i < 100; ++i) {
1597
+ set.insert(i);
1598
+ }
1599
+
1600
+ auto it = set.cbegin();
1601
+ auto r_it = set.crbegin();
1602
+ for (int i = 0; i < 100; ++i, ++it, ++r_it) {
1603
+ ASSERT_EQ(*it, i);
1604
+ ASSERT_EQ(*r_it, 99 - i);
1605
+ }
1606
+ EXPECT_EQ(it, set.cend());
1607
+ EXPECT_EQ(r_it, set.crend());
1608
+ }
1609
+
1610
+ TEST(Btree, StrSplitCompatible) {
1611
+ const absl::btree_set<std::string> split_set = absl::StrSplit("a,b,c", ',');
1612
+ const absl::btree_set<std::string> expected_set = {"a", "b", "c"};
1613
+
1614
+ EXPECT_EQ(split_set, expected_set);
1615
+ }
1616
+
1617
+ TEST(Btree, KeyComp) {
1618
+ absl::btree_set<int> s;
1619
+ EXPECT_TRUE(s.key_comp()(1, 2));
1620
+ EXPECT_FALSE(s.key_comp()(2, 2));
1621
+ EXPECT_FALSE(s.key_comp()(2, 1));
1622
+
1623
+ absl::btree_map<int, int> m1;
1624
+ EXPECT_TRUE(m1.key_comp()(1, 2));
1625
+ EXPECT_FALSE(m1.key_comp()(2, 2));
1626
+ EXPECT_FALSE(m1.key_comp()(2, 1));
1627
+
1628
+ // Even though we internally adapt the comparator of `m2` to be three-way and
1629
+ // heterogeneous, the comparator we expose through key_comp() is the original
1630
+ // unadapted comparator.
1631
+ absl::btree_map<std::string, int> m2;
1632
+ EXPECT_TRUE(m2.key_comp()("a", "b"));
1633
+ EXPECT_FALSE(m2.key_comp()("b", "b"));
1634
+ EXPECT_FALSE(m2.key_comp()("b", "a"));
1635
+ }
1636
+
1637
+ TEST(Btree, ValueComp) {
1638
+ absl::btree_set<int> s;
1639
+ EXPECT_TRUE(s.value_comp()(1, 2));
1640
+ EXPECT_FALSE(s.value_comp()(2, 2));
1641
+ EXPECT_FALSE(s.value_comp()(2, 1));
1642
+
1643
+ absl::btree_map<int, int> m1;
1644
+ EXPECT_TRUE(m1.value_comp()(std::make_pair(1, 0), std::make_pair(2, 0)));
1645
+ EXPECT_FALSE(m1.value_comp()(std::make_pair(2, 0), std::make_pair(2, 0)));
1646
+ EXPECT_FALSE(m1.value_comp()(std::make_pair(2, 0), std::make_pair(1, 0)));
1647
+
1648
+ // Even though we internally adapt the comparator of `m2` to be three-way and
1649
+ // heterogeneous, the comparator we expose through value_comp() is based on
1650
+ // the original unadapted comparator.
1651
+ absl::btree_map<std::string, int> m2;
1652
+ EXPECT_TRUE(m2.value_comp()(std::make_pair("a", 0), std::make_pair("b", 0)));
1653
+ EXPECT_FALSE(m2.value_comp()(std::make_pair("b", 0), std::make_pair("b", 0)));
1654
+ EXPECT_FALSE(m2.value_comp()(std::make_pair("b", 0), std::make_pair("a", 0)));
1655
+ }
1656
+
1657
+ // Test that we have the protected members from the std::map::value_compare API.
1658
+ // See https://en.cppreference.com/w/cpp/container/map/value_compare.
1659
+ TEST(Btree, MapValueCompProtected) {
1660
+ struct key_compare {
1661
+ bool operator()(int l, int r) const { return l < r; }
1662
+ int id;
1663
+ };
1664
+ using value_compare = absl::btree_map<int, int, key_compare>::value_compare;
1665
+ struct value_comp_child : public value_compare {
1666
+ explicit value_comp_child(key_compare kc) : value_compare(kc) {}
1667
+ int GetId() const { return comp.id; }
1668
+ };
1669
+ value_comp_child c(key_compare{10});
1670
+ EXPECT_EQ(c.GetId(), 10);
1671
+ }
1672
+
1673
+ TEST(Btree, DefaultConstruction) {
1674
+ absl::btree_set<int> s;
1675
+ absl::btree_map<int, int> m;
1676
+ absl::btree_multiset<int> ms;
1677
+ absl::btree_multimap<int, int> mm;
1678
+
1679
+ EXPECT_TRUE(s.empty());
1680
+ EXPECT_TRUE(m.empty());
1681
+ EXPECT_TRUE(ms.empty());
1682
+ EXPECT_TRUE(mm.empty());
1683
+ }
1684
+
1685
+ TEST(Btree, SwissTableHashable) {
1686
+ static constexpr int kValues = 10000;
1687
+ std::vector<int> values(kValues);
1688
+ std::iota(values.begin(), values.end(), 0);
1689
+ std::vector<std::pair<int, int>> map_values;
1690
+ for (int v : values) map_values.emplace_back(v, -v);
1691
+
1692
+ using set = absl::btree_set<int>;
1693
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly({
1694
+ set{},
1695
+ set{1},
1696
+ set{2},
1697
+ set{1, 2},
1698
+ set{2, 1},
1699
+ set(values.begin(), values.end()),
1700
+ set(values.rbegin(), values.rend()),
1701
+ }));
1702
+
1703
+ using mset = absl::btree_multiset<int>;
1704
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly({
1705
+ mset{},
1706
+ mset{1},
1707
+ mset{1, 1},
1708
+ mset{2},
1709
+ mset{2, 2},
1710
+ mset{1, 2},
1711
+ mset{1, 1, 2},
1712
+ mset{1, 2, 2},
1713
+ mset{1, 1, 2, 2},
1714
+ mset(values.begin(), values.end()),
1715
+ mset(values.rbegin(), values.rend()),
1716
+ }));
1717
+
1718
+ using map = absl::btree_map<int, int>;
1719
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly({
1720
+ map{},
1721
+ map{{1, 0}},
1722
+ map{{1, 1}},
1723
+ map{{2, 0}},
1724
+ map{{2, 2}},
1725
+ map{{1, 0}, {2, 1}},
1726
+ map(map_values.begin(), map_values.end()),
1727
+ map(map_values.rbegin(), map_values.rend()),
1728
+ }));
1729
+
1730
+ using mmap = absl::btree_multimap<int, int>;
1731
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly({
1732
+ mmap{},
1733
+ mmap{{1, 0}},
1734
+ mmap{{1, 1}},
1735
+ mmap{{1, 0}, {1, 1}},
1736
+ mmap{{1, 1}, {1, 0}},
1737
+ mmap{{2, 0}},
1738
+ mmap{{2, 2}},
1739
+ mmap{{1, 0}, {2, 1}},
1740
+ mmap(map_values.begin(), map_values.end()),
1741
+ mmap(map_values.rbegin(), map_values.rend()),
1742
+ }));
1743
+ }
1744
+
1745
+ TEST(Btree, ComparableSet) {
1746
+ absl::btree_set<int> s1 = {1, 2};
1747
+ absl::btree_set<int> s2 = {2, 3};
1748
+ EXPECT_LT(s1, s2);
1749
+ EXPECT_LE(s1, s2);
1750
+ EXPECT_LE(s1, s1);
1751
+ EXPECT_GT(s2, s1);
1752
+ EXPECT_GE(s2, s1);
1753
+ EXPECT_GE(s1, s1);
1754
+ }
1755
+
1756
+ TEST(Btree, ComparableSetsDifferentLength) {
1757
+ absl::btree_set<int> s1 = {1, 2};
1758
+ absl::btree_set<int> s2 = {1, 2, 3};
1759
+ EXPECT_LT(s1, s2);
1760
+ EXPECT_LE(s1, s2);
1761
+ EXPECT_GT(s2, s1);
1762
+ EXPECT_GE(s2, s1);
1763
+ }
1764
+
1765
+ TEST(Btree, ComparableMultiset) {
1766
+ absl::btree_multiset<int> s1 = {1, 2};
1767
+ absl::btree_multiset<int> s2 = {2, 3};
1768
+ EXPECT_LT(s1, s2);
1769
+ EXPECT_LE(s1, s2);
1770
+ EXPECT_LE(s1, s1);
1771
+ EXPECT_GT(s2, s1);
1772
+ EXPECT_GE(s2, s1);
1773
+ EXPECT_GE(s1, s1);
1774
+ }
1775
+
1776
+ TEST(Btree, ComparableMap) {
1777
+ absl::btree_map<int, int> s1 = {{1, 2}};
1778
+ absl::btree_map<int, int> s2 = {{2, 3}};
1779
+ EXPECT_LT(s1, s2);
1780
+ EXPECT_LE(s1, s2);
1781
+ EXPECT_LE(s1, s1);
1782
+ EXPECT_GT(s2, s1);
1783
+ EXPECT_GE(s2, s1);
1784
+ EXPECT_GE(s1, s1);
1785
+ }
1786
+
1787
+ TEST(Btree, ComparableMultimap) {
1788
+ absl::btree_multimap<int, int> s1 = {{1, 2}};
1789
+ absl::btree_multimap<int, int> s2 = {{2, 3}};
1790
+ EXPECT_LT(s1, s2);
1791
+ EXPECT_LE(s1, s2);
1792
+ EXPECT_LE(s1, s1);
1793
+ EXPECT_GT(s2, s1);
1794
+ EXPECT_GE(s2, s1);
1795
+ EXPECT_GE(s1, s1);
1796
+ }
1797
+
1798
+ TEST(Btree, ComparableSetWithCustomComparator) {
1799
+ // As specified by
1800
+ // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf section
1801
+ // [container.requirements.general].12, ordering associative containers always
1802
+ // uses default '<' operator
1803
+ // - even if otherwise the container uses custom functor.
1804
+ absl::btree_set<int, std::greater<int>> s1 = {1, 2};
1805
+ absl::btree_set<int, std::greater<int>> s2 = {2, 3};
1806
+ EXPECT_LT(s1, s2);
1807
+ EXPECT_LE(s1, s2);
1808
+ EXPECT_LE(s1, s1);
1809
+ EXPECT_GT(s2, s1);
1810
+ EXPECT_GE(s2, s1);
1811
+ EXPECT_GE(s1, s1);
1812
+ }
1813
+
1814
+ TEST(Btree, EraseReturnsIterator) {
1815
+ absl::btree_set<int> set = {1, 2, 3, 4, 5};
1816
+ auto result_it = set.erase(set.begin(), set.find(3));
1817
+ EXPECT_EQ(result_it, set.find(3));
1818
+ result_it = set.erase(set.find(5));
1819
+ EXPECT_EQ(result_it, set.end());
1820
+ }
1821
+
1822
+ TEST(Btree, ExtractAndInsertNodeHandleSet) {
1823
+ absl::btree_set<int> src1 = {1, 2, 3, 4, 5};
1824
+ auto nh = src1.extract(src1.find(3));
1825
+ EXPECT_THAT(src1, ElementsAre(1, 2, 4, 5));
1826
+ absl::btree_set<int> other;
1827
+ absl::btree_set<int>::insert_return_type res = other.insert(std::move(nh));
1828
+ EXPECT_THAT(other, ElementsAre(3));
1829
+ EXPECT_EQ(res.position, other.find(3));
1830
+ EXPECT_TRUE(res.inserted);
1831
+ EXPECT_TRUE(res.node.empty());
1832
+
1833
+ absl::btree_set<int> src2 = {3, 4};
1834
+ nh = src2.extract(src2.find(3));
1835
+ EXPECT_THAT(src2, ElementsAre(4));
1836
+ res = other.insert(std::move(nh));
1837
+ EXPECT_THAT(other, ElementsAre(3));
1838
+ EXPECT_EQ(res.position, other.find(3));
1839
+ EXPECT_FALSE(res.inserted);
1840
+ ASSERT_FALSE(res.node.empty());
1841
+ EXPECT_EQ(res.node.value(), 3);
1842
+ }
1843
+
1844
+ template <typename Set>
1845
+ void TestExtractWithTrackingForSet() {
1846
+ InstanceTracker tracker;
1847
+ {
1848
+ Set s;
1849
+ // Add enough elements to make sure we test internal nodes too.
1850
+ const size_t kSize = 1000;
1851
+ while (s.size() < kSize) {
1852
+ s.insert(MovableOnlyInstance(s.size()));
1853
+ }
1854
+ for (int i = 0; i < kSize; ++i) {
1855
+ // Extract with key
1856
+ auto nh = s.extract(MovableOnlyInstance(i));
1857
+ EXPECT_EQ(s.size(), kSize - 1);
1858
+ EXPECT_EQ(nh.value().value(), i);
1859
+ // Insert with node
1860
+ s.insert(std::move(nh));
1861
+ EXPECT_EQ(s.size(), kSize);
1862
+
1863
+ // Extract with iterator
1864
+ auto it = s.find(MovableOnlyInstance(i));
1865
+ nh = s.extract(it);
1866
+ EXPECT_EQ(s.size(), kSize - 1);
1867
+ EXPECT_EQ(nh.value().value(), i);
1868
+ // Insert with node and hint
1869
+ s.insert(s.begin(), std::move(nh));
1870
+ EXPECT_EQ(s.size(), kSize);
1871
+ }
1872
+ }
1873
+ EXPECT_EQ(0, tracker.instances());
1874
+ }
1875
+
1876
+ template <typename Map>
1877
+ void TestExtractWithTrackingForMap() {
1878
+ InstanceTracker tracker;
1879
+ {
1880
+ Map m;
1881
+ // Add enough elements to make sure we test internal nodes too.
1882
+ const size_t kSize = 1000;
1883
+ while (m.size() < kSize) {
1884
+ m.insert(
1885
+ {CopyableMovableInstance(m.size()), MovableOnlyInstance(m.size())});
1886
+ }
1887
+ for (int i = 0; i < kSize; ++i) {
1888
+ // Extract with key
1889
+ auto nh = m.extract(CopyableMovableInstance(i));
1890
+ EXPECT_EQ(m.size(), kSize - 1);
1891
+ EXPECT_EQ(nh.key().value(), i);
1892
+ EXPECT_EQ(nh.mapped().value(), i);
1893
+ // Insert with node
1894
+ m.insert(std::move(nh));
1895
+ EXPECT_EQ(m.size(), kSize);
1896
+
1897
+ // Extract with iterator
1898
+ auto it = m.find(CopyableMovableInstance(i));
1899
+ nh = m.extract(it);
1900
+ EXPECT_EQ(m.size(), kSize - 1);
1901
+ EXPECT_EQ(nh.key().value(), i);
1902
+ EXPECT_EQ(nh.mapped().value(), i);
1903
+ // Insert with node and hint
1904
+ m.insert(m.begin(), std::move(nh));
1905
+ EXPECT_EQ(m.size(), kSize);
1906
+ }
1907
+ }
1908
+ EXPECT_EQ(0, tracker.instances());
1909
+ }
1910
+
1911
+ TEST(Btree, ExtractTracking) {
1912
+ TestExtractWithTrackingForSet<absl::btree_set<MovableOnlyInstance>>();
1913
+ TestExtractWithTrackingForSet<absl::btree_multiset<MovableOnlyInstance>>();
1914
+ TestExtractWithTrackingForMap<
1915
+ absl::btree_map<CopyableMovableInstance, MovableOnlyInstance>>();
1916
+ TestExtractWithTrackingForMap<
1917
+ absl::btree_multimap<CopyableMovableInstance, MovableOnlyInstance>>();
1918
+ }
1919
+
1920
+ TEST(Btree, ExtractAndInsertNodeHandleMultiSet) {
1921
+ absl::btree_multiset<int> src1 = {1, 2, 3, 3, 4, 5};
1922
+ auto nh = src1.extract(src1.find(3));
1923
+ EXPECT_THAT(src1, ElementsAre(1, 2, 3, 4, 5));
1924
+ absl::btree_multiset<int> other;
1925
+ auto res = other.insert(std::move(nh));
1926
+ EXPECT_THAT(other, ElementsAre(3));
1927
+ EXPECT_EQ(res, other.find(3));
1928
+
1929
+ absl::btree_multiset<int> src2 = {3, 4};
1930
+ nh = src2.extract(src2.find(3));
1931
+ EXPECT_THAT(src2, ElementsAre(4));
1932
+ res = other.insert(std::move(nh));
1933
+ EXPECT_THAT(other, ElementsAre(3, 3));
1934
+ EXPECT_EQ(res, ++other.find(3));
1935
+ }
1936
+
1937
+ TEST(Btree, ExtractAndInsertNodeHandleMap) {
1938
+ absl::btree_map<int, int> src1 = {{1, 2}, {3, 4}, {5, 6}};
1939
+ auto nh = src1.extract(src1.find(3));
1940
+ EXPECT_THAT(src1, ElementsAre(Pair(1, 2), Pair(5, 6)));
1941
+ absl::btree_map<int, int> other;
1942
+ absl::btree_map<int, int>::insert_return_type res =
1943
+ other.insert(std::move(nh));
1944
+ EXPECT_THAT(other, ElementsAre(Pair(3, 4)));
1945
+ EXPECT_EQ(res.position, other.find(3));
1946
+ EXPECT_TRUE(res.inserted);
1947
+ EXPECT_TRUE(res.node.empty());
1948
+
1949
+ absl::btree_map<int, int> src2 = {{3, 6}};
1950
+ nh = src2.extract(src2.find(3));
1951
+ EXPECT_TRUE(src2.empty());
1952
+ res = other.insert(std::move(nh));
1953
+ EXPECT_THAT(other, ElementsAre(Pair(3, 4)));
1954
+ EXPECT_EQ(res.position, other.find(3));
1955
+ EXPECT_FALSE(res.inserted);
1956
+ ASSERT_FALSE(res.node.empty());
1957
+ EXPECT_EQ(res.node.key(), 3);
1958
+ EXPECT_EQ(res.node.mapped(), 6);
1959
+ }
1960
+
1961
+ TEST(Btree, ExtractAndInsertNodeHandleMultiMap) {
1962
+ absl::btree_multimap<int, int> src1 = {{1, 2}, {3, 4}, {5, 6}};
1963
+ auto nh = src1.extract(src1.find(3));
1964
+ EXPECT_THAT(src1, ElementsAre(Pair(1, 2), Pair(5, 6)));
1965
+ absl::btree_multimap<int, int> other;
1966
+ auto res = other.insert(std::move(nh));
1967
+ EXPECT_THAT(other, ElementsAre(Pair(3, 4)));
1968
+ EXPECT_EQ(res, other.find(3));
1969
+
1970
+ absl::btree_multimap<int, int> src2 = {{3, 6}};
1971
+ nh = src2.extract(src2.find(3));
1972
+ EXPECT_TRUE(src2.empty());
1973
+ res = other.insert(std::move(nh));
1974
+ EXPECT_THAT(other, ElementsAre(Pair(3, 4), Pair(3, 6)));
1975
+ EXPECT_EQ(res, ++other.begin());
1976
+ }
1977
+
1978
+ TEST(Btree, ExtractMultiMapEquivalentKeys) {
1979
+ // Note: using string keys means a three-way comparator.
1980
+ absl::btree_multimap<std::string, int> map;
1981
+ for (int i = 0; i < 100; ++i) {
1982
+ for (int j = 0; j < 100; ++j) {
1983
+ map.insert({absl::StrCat(i), j});
1984
+ }
1985
+ }
1986
+
1987
+ for (int i = 0; i < 100; ++i) {
1988
+ const std::string key = absl::StrCat(i);
1989
+ auto node_handle = map.extract(key);
1990
+ EXPECT_EQ(node_handle.key(), key);
1991
+ EXPECT_EQ(node_handle.mapped(), 0) << i;
1992
+ }
1993
+
1994
+ for (int i = 0; i < 100; ++i) {
1995
+ const std::string key = absl::StrCat(i);
1996
+ auto node_handle = map.extract(key);
1997
+ EXPECT_EQ(node_handle.key(), key);
1998
+ EXPECT_EQ(node_handle.mapped(), 1) << i;
1999
+ }
2000
+ }
2001
+
2002
+ TEST(Btree, ExtractAndGetNextSet) {
2003
+ absl::btree_set<int> src = {1, 2, 3, 4, 5};
2004
+ auto it = src.find(3);
2005
+ auto extracted_and_next = src.extract_and_get_next(it);
2006
+ EXPECT_THAT(src, ElementsAre(1, 2, 4, 5));
2007
+ EXPECT_EQ(extracted_and_next.node.value(), 3);
2008
+ EXPECT_EQ(*extracted_and_next.next, 4);
2009
+ }
2010
+
2011
+ TEST(Btree, ExtractAndGetNextMultiSet) {
2012
+ absl::btree_multiset<int> src = {1, 2, 3, 4, 5};
2013
+ auto it = src.find(3);
2014
+ auto extracted_and_next = src.extract_and_get_next(it);
2015
+ EXPECT_THAT(src, ElementsAre(1, 2, 4, 5));
2016
+ EXPECT_EQ(extracted_and_next.node.value(), 3);
2017
+ EXPECT_EQ(*extracted_and_next.next, 4);
2018
+ }
2019
+
2020
+ TEST(Btree, ExtractAndGetNextMap) {
2021
+ absl::btree_map<int, int> src = {{1, 2}, {3, 4}, {5, 6}};
2022
+ auto it = src.find(3);
2023
+ auto extracted_and_next = src.extract_and_get_next(it);
2024
+ EXPECT_THAT(src, ElementsAre(Pair(1, 2), Pair(5, 6)));
2025
+ EXPECT_EQ(extracted_and_next.node.key(), 3);
2026
+ EXPECT_EQ(extracted_and_next.node.mapped(), 4);
2027
+ EXPECT_THAT(*extracted_and_next.next, Pair(5, 6));
2028
+ }
2029
+
2030
+ TEST(Btree, ExtractAndGetNextMultiMap) {
2031
+ absl::btree_multimap<int, int> src = {{1, 2}, {3, 4}, {5, 6}};
2032
+ auto it = src.find(3);
2033
+ auto extracted_and_next = src.extract_and_get_next(it);
2034
+ EXPECT_THAT(src, ElementsAre(Pair(1, 2), Pair(5, 6)));
2035
+ EXPECT_EQ(extracted_and_next.node.key(), 3);
2036
+ EXPECT_EQ(extracted_and_next.node.mapped(), 4);
2037
+ EXPECT_THAT(*extracted_and_next.next, Pair(5, 6));
2038
+ }
2039
+
2040
+ TEST(Btree, ExtractAndGetNextEndIter) {
2041
+ absl::btree_set<int> src = {1, 2, 3, 4, 5};
2042
+ auto it = src.find(5);
2043
+ auto extracted_and_next = src.extract_and_get_next(it);
2044
+ EXPECT_THAT(src, ElementsAre(1, 2, 3, 4));
2045
+ EXPECT_EQ(extracted_and_next.node.value(), 5);
2046
+ EXPECT_EQ(extracted_and_next.next, src.end());
2047
+ }
2048
+
2049
+ TEST(Btree, ExtractDoesntCauseExtraMoves) {
2050
+ #ifdef _MSC_VER
2051
+ // This conditional is to avoid an unreachable code warning.
2052
+ if (_MSC_VER > 0) {
2053
+ GTEST_SKIP() << "This test fails on MSVC.";
2054
+ }
2055
+ #endif
2056
+
2057
+ using Set = absl::btree_set<MovableOnlyInstance>;
2058
+ std::array<std::function<void(Set &)>, 3> extracters = {
2059
+ [](Set &s) { auto node = s.extract(s.begin()); },
2060
+ [](Set &s) { auto ret = s.extract_and_get_next(s.begin()); },
2061
+ [](Set &s) { auto node = s.extract(MovableOnlyInstance(0)); }};
2062
+
2063
+ InstanceTracker tracker;
2064
+ for (int i = 0; i < 3; ++i) {
2065
+ Set s;
2066
+ s.insert(MovableOnlyInstance(0));
2067
+ tracker.ResetCopiesMovesSwaps();
2068
+
2069
+ extracters[i](s);
2070
+ // We expect to see exactly 1 move: from the original slot into the
2071
+ // extracted node.
2072
+ EXPECT_EQ(tracker.copies(), 0) << i;
2073
+ EXPECT_EQ(tracker.moves(), 1) << i;
2074
+ EXPECT_EQ(tracker.swaps(), 0) << i;
2075
+ }
2076
+ }
2077
+
2078
+ // For multisets, insert with hint also affects correctness because we need to
2079
+ // insert immediately before the hint if possible.
2080
+ struct InsertMultiHintData {
2081
+ int key;
2082
+ int not_key;
2083
+ bool operator==(const InsertMultiHintData other) const {
2084
+ return key == other.key && not_key == other.not_key;
2085
+ }
2086
+ };
2087
+
2088
+ struct InsertMultiHintDataKeyCompare {
2089
+ using is_transparent = void;
2090
+ bool operator()(const InsertMultiHintData a,
2091
+ const InsertMultiHintData b) const {
2092
+ return a.key < b.key;
2093
+ }
2094
+ bool operator()(const int a, const InsertMultiHintData b) const {
2095
+ return a < b.key;
2096
+ }
2097
+ bool operator()(const InsertMultiHintData a, const int b) const {
2098
+ return a.key < b;
2099
+ }
2100
+ };
2101
+
2102
+ TEST(Btree, InsertHintNodeHandle) {
2103
+ // For unique sets, insert with hint is just a performance optimization.
2104
+ // Test that insert works correctly when the hint is right or wrong.
2105
+ {
2106
+ absl::btree_set<int> src = {1, 2, 3, 4, 5};
2107
+ auto nh = src.extract(src.find(3));
2108
+ EXPECT_THAT(src, ElementsAre(1, 2, 4, 5));
2109
+ absl::btree_set<int> other = {0, 100};
2110
+ // Test a correct hint.
2111
+ auto it = other.insert(other.lower_bound(3), std::move(nh));
2112
+ EXPECT_THAT(other, ElementsAre(0, 3, 100));
2113
+ EXPECT_EQ(it, other.find(3));
2114
+
2115
+ nh = src.extract(src.find(5));
2116
+ // Test an incorrect hint.
2117
+ it = other.insert(other.end(), std::move(nh));
2118
+ EXPECT_THAT(other, ElementsAre(0, 3, 5, 100));
2119
+ EXPECT_EQ(it, other.find(5));
2120
+ }
2121
+
2122
+ absl::btree_multiset<InsertMultiHintData, InsertMultiHintDataKeyCompare> src =
2123
+ {{1, 2}, {3, 4}, {3, 5}};
2124
+ auto nh = src.extract(src.lower_bound(3));
2125
+ EXPECT_EQ(nh.value(), (InsertMultiHintData{3, 4}));
2126
+ absl::btree_multiset<InsertMultiHintData, InsertMultiHintDataKeyCompare>
2127
+ other = {{3, 1}, {3, 2}, {3, 3}};
2128
+ auto it = other.insert(--other.end(), std::move(nh));
2129
+ EXPECT_THAT(
2130
+ other, ElementsAre(InsertMultiHintData{3, 1}, InsertMultiHintData{3, 2},
2131
+ InsertMultiHintData{3, 4}, InsertMultiHintData{3, 3}));
2132
+ EXPECT_EQ(it, --(--other.end()));
2133
+
2134
+ nh = src.extract(src.find(3));
2135
+ EXPECT_EQ(nh.value(), (InsertMultiHintData{3, 5}));
2136
+ it = other.insert(other.begin(), std::move(nh));
2137
+ EXPECT_THAT(other,
2138
+ ElementsAre(InsertMultiHintData{3, 5}, InsertMultiHintData{3, 1},
2139
+ InsertMultiHintData{3, 2}, InsertMultiHintData{3, 4},
2140
+ InsertMultiHintData{3, 3}));
2141
+ EXPECT_EQ(it, other.begin());
2142
+ }
2143
+
2144
+ struct IntCompareToCmp {
2145
+ absl::weak_ordering operator()(int a, int b) const {
2146
+ if (a < b) return absl::weak_ordering::less;
2147
+ if (a > b) return absl::weak_ordering::greater;
2148
+ return absl::weak_ordering::equivalent;
2149
+ }
2150
+ };
2151
+
2152
+ TEST(Btree, MergeIntoUniqueContainers) {
2153
+ absl::btree_set<int, IntCompareToCmp> src1 = {1, 2, 3};
2154
+ absl::btree_multiset<int> src2 = {3, 4, 4, 5};
2155
+ absl::btree_set<int> dst;
2156
+
2157
+ dst.merge(src1);
2158
+ EXPECT_TRUE(src1.empty());
2159
+ EXPECT_THAT(dst, ElementsAre(1, 2, 3));
2160
+ dst.merge(src2);
2161
+ EXPECT_THAT(src2, ElementsAre(3, 4));
2162
+ EXPECT_THAT(dst, ElementsAre(1, 2, 3, 4, 5));
2163
+ }
2164
+
2165
+ TEST(Btree, MergeIntoUniqueContainersWithCompareTo) {
2166
+ absl::btree_set<int, IntCompareToCmp> src1 = {1, 2, 3};
2167
+ absl::btree_multiset<int> src2 = {3, 4, 4, 5};
2168
+ absl::btree_set<int, IntCompareToCmp> dst;
2169
+
2170
+ dst.merge(src1);
2171
+ EXPECT_TRUE(src1.empty());
2172
+ EXPECT_THAT(dst, ElementsAre(1, 2, 3));
2173
+ dst.merge(src2);
2174
+ EXPECT_THAT(src2, ElementsAre(3, 4));
2175
+ EXPECT_THAT(dst, ElementsAre(1, 2, 3, 4, 5));
2176
+ }
2177
+
2178
+ TEST(Btree, MergeIntoMultiContainers) {
2179
+ absl::btree_set<int, IntCompareToCmp> src1 = {1, 2, 3};
2180
+ absl::btree_multiset<int> src2 = {3, 4, 4, 5};
2181
+ absl::btree_multiset<int> dst;
2182
+
2183
+ dst.merge(src1);
2184
+ EXPECT_TRUE(src1.empty());
2185
+ EXPECT_THAT(dst, ElementsAre(1, 2, 3));
2186
+ dst.merge(src2);
2187
+ EXPECT_TRUE(src2.empty());
2188
+ EXPECT_THAT(dst, ElementsAre(1, 2, 3, 3, 4, 4, 5));
2189
+ }
2190
+
2191
+ TEST(Btree, MergeIntoMultiContainersWithCompareTo) {
2192
+ absl::btree_set<int, IntCompareToCmp> src1 = {1, 2, 3};
2193
+ absl::btree_multiset<int> src2 = {3, 4, 4, 5};
2194
+ absl::btree_multiset<int, IntCompareToCmp> dst;
2195
+
2196
+ dst.merge(src1);
2197
+ EXPECT_TRUE(src1.empty());
2198
+ EXPECT_THAT(dst, ElementsAre(1, 2, 3));
2199
+ dst.merge(src2);
2200
+ EXPECT_TRUE(src2.empty());
2201
+ EXPECT_THAT(dst, ElementsAre(1, 2, 3, 3, 4, 4, 5));
2202
+ }
2203
+
2204
+ TEST(Btree, MergeIntoMultiMapsWithDifferentComparators) {
2205
+ absl::btree_map<int, int, IntCompareToCmp> src1 = {{1, 1}, {2, 2}, {3, 3}};
2206
+ absl::btree_multimap<int, int, std::greater<int>> src2 = {
2207
+ {5, 5}, {4, 1}, {4, 4}, {3, 2}};
2208
+ absl::btree_multimap<int, int> dst;
2209
+
2210
+ dst.merge(src1);
2211
+ EXPECT_TRUE(src1.empty());
2212
+ EXPECT_THAT(dst, ElementsAre(Pair(1, 1), Pair(2, 2), Pair(3, 3)));
2213
+ dst.merge(src2);
2214
+ EXPECT_TRUE(src2.empty());
2215
+ EXPECT_THAT(dst, ElementsAre(Pair(1, 1), Pair(2, 2), Pair(3, 3), Pair(3, 2),
2216
+ Pair(4, 1), Pair(4, 4), Pair(5, 5)));
2217
+ }
2218
+
2219
+ TEST(Btree, MergeIntoSetMovableOnly) {
2220
+ absl::btree_set<MovableOnlyInstance> src;
2221
+ src.insert(MovableOnlyInstance(1));
2222
+ absl::btree_multiset<MovableOnlyInstance> dst1;
2223
+ dst1.insert(MovableOnlyInstance(2));
2224
+ absl::btree_set<MovableOnlyInstance> dst2;
2225
+
2226
+ // Test merge into multiset.
2227
+ dst1.merge(src);
2228
+
2229
+ EXPECT_TRUE(src.empty());
2230
+ // ElementsAre/ElementsAreArray don't work with move-only types.
2231
+ ASSERT_THAT(dst1, SizeIs(2));
2232
+ EXPECT_EQ(*dst1.begin(), MovableOnlyInstance(1));
2233
+ EXPECT_EQ(*std::next(dst1.begin()), MovableOnlyInstance(2));
2234
+
2235
+ // Test merge into set.
2236
+ dst2.merge(dst1);
2237
+
2238
+ EXPECT_TRUE(dst1.empty());
2239
+ ASSERT_THAT(dst2, SizeIs(2));
2240
+ EXPECT_EQ(*dst2.begin(), MovableOnlyInstance(1));
2241
+ EXPECT_EQ(*std::next(dst2.begin()), MovableOnlyInstance(2));
2242
+ }
2243
+
2244
+ struct KeyCompareToWeakOrdering {
2245
+ template <typename T>
2246
+ absl::weak_ordering operator()(const T &a, const T &b) const {
2247
+ return a < b ? absl::weak_ordering::less
2248
+ : a == b ? absl::weak_ordering::equivalent
2249
+ : absl::weak_ordering::greater;
2250
+ }
2251
+ };
2252
+
2253
+ struct KeyCompareToStrongOrdering {
2254
+ template <typename T>
2255
+ absl::strong_ordering operator()(const T &a, const T &b) const {
2256
+ return a < b ? absl::strong_ordering::less
2257
+ : a == b ? absl::strong_ordering::equal
2258
+ : absl::strong_ordering::greater;
2259
+ }
2260
+ };
2261
+
2262
+ TEST(Btree, UserProvidedKeyCompareToComparators) {
2263
+ absl::btree_set<int, KeyCompareToWeakOrdering> weak_set = {1, 2, 3};
2264
+ EXPECT_TRUE(weak_set.contains(2));
2265
+ EXPECT_FALSE(weak_set.contains(4));
2266
+
2267
+ absl::btree_set<int, KeyCompareToStrongOrdering> strong_set = {1, 2, 3};
2268
+ EXPECT_TRUE(strong_set.contains(2));
2269
+ EXPECT_FALSE(strong_set.contains(4));
2270
+ }
2271
+
2272
+ TEST(Btree, TryEmplaceBasicTest) {
2273
+ absl::btree_map<int, std::string> m;
2274
+
2275
+ // Should construct a string from the literal.
2276
+ m.try_emplace(1, "one");
2277
+ EXPECT_EQ(1, m.size());
2278
+
2279
+ // Try other string constructors and const lvalue key.
2280
+ const int key(42);
2281
+ m.try_emplace(key, 3, 'a');
2282
+ m.try_emplace(2, std::string("two"));
2283
+
2284
+ EXPECT_TRUE(std::is_sorted(m.begin(), m.end()));
2285
+ EXPECT_THAT(m, ElementsAreArray(std::vector<std::pair<int, std::string>>{
2286
+ {1, "one"}, {2, "two"}, {42, "aaa"}}));
2287
+ }
2288
+
2289
+ TEST(Btree, TryEmplaceWithHintWorks) {
2290
+ // Use a counting comparator here to verify that hint is used.
2291
+ int calls = 0;
2292
+ auto cmp = [&calls](int x, int y) {
2293
+ ++calls;
2294
+ return x < y;
2295
+ };
2296
+ using Cmp = decltype(cmp);
2297
+
2298
+ // Use a map that is opted out of key_compare being adapted so we can expect
2299
+ // strict comparison call limits.
2300
+ absl::btree_map<int, int, CheckedCompareOptedOutCmp<Cmp>> m(cmp);
2301
+ for (int i = 0; i < 128; ++i) {
2302
+ m.emplace(i, i);
2303
+ }
2304
+
2305
+ // Sanity check for the comparator
2306
+ calls = 0;
2307
+ m.emplace(127, 127);
2308
+ EXPECT_GE(calls, 4);
2309
+
2310
+ // Try with begin hint:
2311
+ calls = 0;
2312
+ auto it = m.try_emplace(m.begin(), -1, -1);
2313
+ EXPECT_EQ(129, m.size());
2314
+ EXPECT_EQ(it, m.begin());
2315
+ EXPECT_LE(calls, 2);
2316
+
2317
+ // Try with end hint:
2318
+ calls = 0;
2319
+ std::pair<int, int> pair1024 = {1024, 1024};
2320
+ it = m.try_emplace(m.end(), pair1024.first, pair1024.second);
2321
+ EXPECT_EQ(130, m.size());
2322
+ EXPECT_EQ(it, --m.end());
2323
+ EXPECT_LE(calls, 2);
2324
+
2325
+ // Try value already present, bad hint; ensure no duplicate added:
2326
+ calls = 0;
2327
+ it = m.try_emplace(m.end(), 16, 17);
2328
+ EXPECT_EQ(130, m.size());
2329
+ EXPECT_GE(calls, 4);
2330
+ EXPECT_EQ(it, m.find(16));
2331
+
2332
+ // Try value already present, hint points directly to it:
2333
+ calls = 0;
2334
+ it = m.try_emplace(it, 16, 17);
2335
+ EXPECT_EQ(130, m.size());
2336
+ EXPECT_LE(calls, 2);
2337
+ EXPECT_EQ(it, m.find(16));
2338
+
2339
+ m.erase(2);
2340
+ EXPECT_EQ(129, m.size());
2341
+ auto hint = m.find(3);
2342
+ // Try emplace in the middle of two other elements.
2343
+ calls = 0;
2344
+ m.try_emplace(hint, 2, 2);
2345
+ EXPECT_EQ(130, m.size());
2346
+ EXPECT_LE(calls, 2);
2347
+
2348
+ EXPECT_TRUE(std::is_sorted(m.begin(), m.end()));
2349
+ }
2350
+
2351
+ TEST(Btree, TryEmplaceWithBadHint) {
2352
+ absl::btree_map<int, int> m = {{1, 1}, {9, 9}};
2353
+
2354
+ // Bad hint (too small), should still emplace:
2355
+ auto it = m.try_emplace(m.begin(), 2, 2);
2356
+ EXPECT_EQ(it, ++m.begin());
2357
+ EXPECT_THAT(m, ElementsAreArray(
2358
+ std::vector<std::pair<int, int>>{{1, 1}, {2, 2}, {9, 9}}));
2359
+
2360
+ // Bad hint, too large this time:
2361
+ it = m.try_emplace(++(++m.begin()), 0, 0);
2362
+ EXPECT_EQ(it, m.begin());
2363
+ EXPECT_THAT(m, ElementsAreArray(std::vector<std::pair<int, int>>{
2364
+ {0, 0}, {1, 1}, {2, 2}, {9, 9}}));
2365
+ }
2366
+
2367
+ TEST(Btree, TryEmplaceMaintainsSortedOrder) {
2368
+ absl::btree_map<int, std::string> m;
2369
+ std::pair<int, std::string> pair5 = {5, "five"};
2370
+
2371
+ // Test both lvalue & rvalue emplace.
2372
+ m.try_emplace(10, "ten");
2373
+ m.try_emplace(pair5.first, pair5.second);
2374
+ EXPECT_EQ(2, m.size());
2375
+ EXPECT_TRUE(std::is_sorted(m.begin(), m.end()));
2376
+
2377
+ int int100{100};
2378
+ m.try_emplace(int100, "hundred");
2379
+ m.try_emplace(1, "one");
2380
+ EXPECT_EQ(4, m.size());
2381
+ EXPECT_TRUE(std::is_sorted(m.begin(), m.end()));
2382
+ }
2383
+
2384
+ TEST(Btree, TryEmplaceWithHintAndNoValueArgsWorks) {
2385
+ absl::btree_map<int, int> m;
2386
+ m.try_emplace(m.end(), 1);
2387
+ EXPECT_EQ(0, m[1]);
2388
+ }
2389
+
2390
+ TEST(Btree, TryEmplaceWithHintAndMultipleValueArgsWorks) {
2391
+ absl::btree_map<int, std::string> m;
2392
+ m.try_emplace(m.end(), 1, 10, 'a');
2393
+ EXPECT_EQ(std::string(10, 'a'), m[1]);
2394
+ }
2395
+
2396
+ template <typename Alloc>
2397
+ using BtreeSetAlloc = absl::btree_set<int, std::less<int>, Alloc>;
2398
+
2399
+ TEST(Btree, AllocatorPropagation) {
2400
+ TestAllocPropagation<BtreeSetAlloc>();
2401
+ }
2402
+
2403
+ TEST(Btree, MinimumAlignmentAllocator) {
2404
+ absl::btree_set<int8_t, std::less<int8_t>, MinimumAlignmentAlloc<int8_t>> set;
2405
+
2406
+ // Do some basic operations. Test that everything is fine when allocator uses
2407
+ // minimal alignment.
2408
+ for (int8_t i = 0; i < 100; ++i) set.insert(i);
2409
+ set.erase(set.find(50), set.end());
2410
+ for (int8_t i = 51; i < 101; ++i) set.insert(i);
2411
+
2412
+ EXPECT_EQ(set.size(), 100);
2413
+ }
2414
+
2415
+ TEST(Btree, EmptyTree) {
2416
+ absl::btree_set<int> s;
2417
+ EXPECT_TRUE(s.empty());
2418
+ EXPECT_EQ(s.size(), 0);
2419
+ EXPECT_GT(s.max_size(), 0);
2420
+ }
2421
+
2422
+ bool IsEven(int k) { return k % 2 == 0; }
2423
+
2424
+ TEST(Btree, EraseIf) {
2425
+ // Test that erase_if works with all the container types and supports lambdas.
2426
+ {
2427
+ absl::btree_set<int> s = {1, 3, 5, 6, 100};
2428
+ EXPECT_EQ(erase_if(s, [](int k) { return k > 3; }), 3);
2429
+ EXPECT_THAT(s, ElementsAre(1, 3));
2430
+ }
2431
+ {
2432
+ absl::btree_multiset<int> s = {1, 3, 3, 5, 6, 6, 100};
2433
+ EXPECT_EQ(erase_if(s, [](int k) { return k <= 3; }), 3);
2434
+ EXPECT_THAT(s, ElementsAre(5, 6, 6, 100));
2435
+ }
2436
+ {
2437
+ absl::btree_map<int, int> m = {{1, 1}, {3, 3}, {6, 6}, {100, 100}};
2438
+ EXPECT_EQ(
2439
+ erase_if(m, [](std::pair<const int, int> kv) { return kv.first > 3; }),
2440
+ 2);
2441
+ EXPECT_THAT(m, ElementsAre(Pair(1, 1), Pair(3, 3)));
2442
+ }
2443
+ {
2444
+ absl::btree_multimap<int, int> m = {{1, 1}, {3, 3}, {3, 6},
2445
+ {6, 6}, {6, 7}, {100, 6}};
2446
+ EXPECT_EQ(
2447
+ erase_if(m,
2448
+ [](std::pair<const int, int> kv) { return kv.second == 6; }),
2449
+ 3);
2450
+ EXPECT_THAT(m, ElementsAre(Pair(1, 1), Pair(3, 3), Pair(6, 7)));
2451
+ }
2452
+ // Test that erasing all elements from a large set works and test support for
2453
+ // function pointers.
2454
+ {
2455
+ absl::btree_set<int> s;
2456
+ for (int i = 0; i < 1000; ++i) s.insert(2 * i);
2457
+ EXPECT_EQ(erase_if(s, IsEven), 1000);
2458
+ EXPECT_THAT(s, IsEmpty());
2459
+ }
2460
+ // Test that erase_if supports other format of function pointers.
2461
+ {
2462
+ absl::btree_set<int> s = {1, 3, 5, 6, 100};
2463
+ EXPECT_EQ(erase_if(s, &IsEven), 2);
2464
+ EXPECT_THAT(s, ElementsAre(1, 3, 5));
2465
+ }
2466
+ // Test that erase_if invokes the predicate once per element.
2467
+ {
2468
+ absl::btree_set<int> s;
2469
+ for (int i = 0; i < 1000; ++i) s.insert(i);
2470
+ int pred_calls = 0;
2471
+ EXPECT_EQ(erase_if(s,
2472
+ [&pred_calls](int k) {
2473
+ ++pred_calls;
2474
+ return k % 2;
2475
+ }),
2476
+ 500);
2477
+ EXPECT_THAT(s, SizeIs(500));
2478
+ EXPECT_EQ(pred_calls, 1000);
2479
+ }
2480
+ }
2481
+
2482
+ TEST(Btree, InsertOrAssign) {
2483
+ absl::btree_map<int, int> m = {{1, 1}, {3, 3}};
2484
+ using value_type = typename decltype(m)::value_type;
2485
+
2486
+ auto ret = m.insert_or_assign(4, 4);
2487
+ EXPECT_EQ(*ret.first, value_type(4, 4));
2488
+ EXPECT_TRUE(ret.second);
2489
+ ret = m.insert_or_assign(3, 100);
2490
+ EXPECT_EQ(*ret.first, value_type(3, 100));
2491
+ EXPECT_FALSE(ret.second);
2492
+
2493
+ auto hint_ret = m.insert_or_assign(ret.first, 3, 200);
2494
+ EXPECT_EQ(*hint_ret, value_type(3, 200));
2495
+ hint_ret = m.insert_or_assign(m.find(1), 0, 1);
2496
+ EXPECT_EQ(*hint_ret, value_type(0, 1));
2497
+ // Test with bad hint.
2498
+ hint_ret = m.insert_or_assign(m.end(), -1, 1);
2499
+ EXPECT_EQ(*hint_ret, value_type(-1, 1));
2500
+
2501
+ EXPECT_THAT(m, ElementsAre(Pair(-1, 1), Pair(0, 1), Pair(1, 1), Pair(3, 200),
2502
+ Pair(4, 4)));
2503
+ }
2504
+
2505
+ TEST(Btree, InsertOrAssignMovableOnly) {
2506
+ absl::btree_map<int, MovableOnlyInstance> m;
2507
+ using value_type = typename decltype(m)::value_type;
2508
+
2509
+ auto ret = m.insert_or_assign(4, MovableOnlyInstance(4));
2510
+ EXPECT_EQ(*ret.first, value_type(4, MovableOnlyInstance(4)));
2511
+ EXPECT_TRUE(ret.second);
2512
+ ret = m.insert_or_assign(4, MovableOnlyInstance(100));
2513
+ EXPECT_EQ(*ret.first, value_type(4, MovableOnlyInstance(100)));
2514
+ EXPECT_FALSE(ret.second);
2515
+
2516
+ auto hint_ret = m.insert_or_assign(ret.first, 3, MovableOnlyInstance(200));
2517
+ EXPECT_EQ(*hint_ret, value_type(3, MovableOnlyInstance(200)));
2518
+
2519
+ EXPECT_EQ(m.size(), 2);
2520
+ }
2521
+
2522
+ TEST(Btree, BitfieldArgument) {
2523
+ union {
2524
+ int n : 1;
2525
+ };
2526
+ n = 0;
2527
+ absl::btree_map<int, int> m;
2528
+ m.erase(n);
2529
+ m.count(n);
2530
+ m.find(n);
2531
+ m.contains(n);
2532
+ m.equal_range(n);
2533
+ m.insert_or_assign(n, n);
2534
+ m.insert_or_assign(m.end(), n, n);
2535
+ m.try_emplace(n);
2536
+ m.try_emplace(m.end(), n);
2537
+ m.at(n);
2538
+ m[n];
2539
+ }
2540
+
2541
+ TEST(Btree, SetRangeConstructorAndInsertSupportExplicitConversionComparable) {
2542
+ const absl::string_view names[] = {"n1", "n2"};
2543
+
2544
+ absl::btree_set<std::string> name_set1{std::begin(names), std::end(names)};
2545
+ EXPECT_THAT(name_set1, ElementsAreArray(names));
2546
+
2547
+ absl::btree_set<std::string> name_set2;
2548
+ name_set2.insert(std::begin(names), std::end(names));
2549
+ EXPECT_THAT(name_set2, ElementsAreArray(names));
2550
+ }
2551
+
2552
+ // A type that is explicitly convertible from int and counts constructor calls.
2553
+ struct ConstructorCounted {
2554
+ explicit ConstructorCounted(int i) : i(i) { ++constructor_calls; }
2555
+ bool operator==(int other) const { return i == other; }
2556
+
2557
+ int i;
2558
+ static int constructor_calls;
2559
+ };
2560
+ int ConstructorCounted::constructor_calls = 0;
2561
+
2562
+ struct ConstructorCountedCompare {
2563
+ bool operator()(int a, const ConstructorCounted &b) const { return a < b.i; }
2564
+ bool operator()(const ConstructorCounted &a, int b) const { return a.i < b; }
2565
+ bool operator()(const ConstructorCounted &a,
2566
+ const ConstructorCounted &b) const {
2567
+ return a.i < b.i;
2568
+ }
2569
+ using is_transparent = void;
2570
+ };
2571
+
2572
+ TEST(Btree,
2573
+ SetRangeConstructorAndInsertExplicitConvComparableLimitConstruction) {
2574
+ const int i[] = {0, 1, 1};
2575
+ ConstructorCounted::constructor_calls = 0;
2576
+
2577
+ absl::btree_set<ConstructorCounted, ConstructorCountedCompare> set{
2578
+ std::begin(i), std::end(i)};
2579
+ EXPECT_THAT(set, ElementsAre(0, 1));
2580
+ EXPECT_EQ(ConstructorCounted::constructor_calls, 2);
2581
+
2582
+ set.insert(std::begin(i), std::end(i));
2583
+ EXPECT_THAT(set, ElementsAre(0, 1));
2584
+ EXPECT_EQ(ConstructorCounted::constructor_calls, 2);
2585
+ }
2586
+
2587
+ TEST(Btree,
2588
+ SetRangeConstructorAndInsertSupportExplicitConversionNonComparable) {
2589
+ const int i[] = {0, 1};
2590
+
2591
+ absl::btree_set<std::vector<void *>> s1{std::begin(i), std::end(i)};
2592
+ EXPECT_THAT(s1, ElementsAre(IsEmpty(), ElementsAre(IsNull())));
2593
+
2594
+ absl::btree_set<std::vector<void *>> s2;
2595
+ s2.insert(std::begin(i), std::end(i));
2596
+ EXPECT_THAT(s2, ElementsAre(IsEmpty(), ElementsAre(IsNull())));
2597
+ }
2598
+
2599
+ // libstdc++ included with GCC 4.9 has a bug in the std::pair constructors that
2600
+ // prevents explicit conversions between pair types.
2601
+ // We only run this test for the libstdc++ from GCC 7 or newer because we can't
2602
+ // reliably check the libstdc++ version prior to that release.
2603
+ #if !defined(__GLIBCXX__) || \
2604
+ (defined(_GLIBCXX_RELEASE) && _GLIBCXX_RELEASE >= 7)
2605
+ TEST(Btree, MapRangeConstructorAndInsertSupportExplicitConversionComparable) {
2606
+ const std::pair<absl::string_view, int> names[] = {{"n1", 1}, {"n2", 2}};
2607
+
2608
+ absl::btree_map<std::string, int> name_map1{std::begin(names),
2609
+ std::end(names)};
2610
+ EXPECT_THAT(name_map1, ElementsAre(Pair("n1", 1), Pair("n2", 2)));
2611
+
2612
+ absl::btree_map<std::string, int> name_map2;
2613
+ name_map2.insert(std::begin(names), std::end(names));
2614
+ EXPECT_THAT(name_map2, ElementsAre(Pair("n1", 1), Pair("n2", 2)));
2615
+ }
2616
+
2617
+ TEST(Btree,
2618
+ MapRangeConstructorAndInsertExplicitConvComparableLimitConstruction) {
2619
+ const std::pair<int, int> i[] = {{0, 1}, {1, 2}, {1, 3}};
2620
+ ConstructorCounted::constructor_calls = 0;
2621
+
2622
+ absl::btree_map<ConstructorCounted, int, ConstructorCountedCompare> map{
2623
+ std::begin(i), std::end(i)};
2624
+ EXPECT_THAT(map, ElementsAre(Pair(0, 1), Pair(1, 2)));
2625
+ EXPECT_EQ(ConstructorCounted::constructor_calls, 2);
2626
+
2627
+ map.insert(std::begin(i), std::end(i));
2628
+ EXPECT_THAT(map, ElementsAre(Pair(0, 1), Pair(1, 2)));
2629
+ EXPECT_EQ(ConstructorCounted::constructor_calls, 2);
2630
+ }
2631
+
2632
+ TEST(Btree,
2633
+ MapRangeConstructorAndInsertSupportExplicitConversionNonComparable) {
2634
+ const std::pair<int, int> i[] = {{0, 1}, {1, 2}};
2635
+
2636
+ absl::btree_map<std::vector<void *>, int> m1{std::begin(i), std::end(i)};
2637
+ EXPECT_THAT(m1,
2638
+ ElementsAre(Pair(IsEmpty(), 1), Pair(ElementsAre(IsNull()), 2)));
2639
+
2640
+ absl::btree_map<std::vector<void *>, int> m2;
2641
+ m2.insert(std::begin(i), std::end(i));
2642
+ EXPECT_THAT(m2,
2643
+ ElementsAre(Pair(IsEmpty(), 1), Pair(ElementsAre(IsNull()), 2)));
2644
+ }
2645
+
2646
+ TEST(Btree, HeterogeneousTryEmplace) {
2647
+ absl::btree_map<std::string, int> m;
2648
+ std::string s = "key";
2649
+ absl::string_view sv = s;
2650
+ m.try_emplace(sv, 1);
2651
+ EXPECT_EQ(m[s], 1);
2652
+
2653
+ m.try_emplace(m.end(), sv, 2);
2654
+ EXPECT_EQ(m[s], 1);
2655
+ }
2656
+
2657
+ TEST(Btree, HeterogeneousOperatorMapped) {
2658
+ absl::btree_map<std::string, int> m;
2659
+ std::string s = "key";
2660
+ absl::string_view sv = s;
2661
+ m[sv] = 1;
2662
+ EXPECT_EQ(m[s], 1);
2663
+
2664
+ m[sv] = 2;
2665
+ EXPECT_EQ(m[s], 2);
2666
+ }
2667
+
2668
+ TEST(Btree, HeterogeneousInsertOrAssign) {
2669
+ absl::btree_map<std::string, int> m;
2670
+ std::string s = "key";
2671
+ absl::string_view sv = s;
2672
+ m.insert_or_assign(sv, 1);
2673
+ EXPECT_EQ(m[s], 1);
2674
+
2675
+ m.insert_or_assign(m.end(), sv, 2);
2676
+ EXPECT_EQ(m[s], 2);
2677
+ }
2678
+ #endif
2679
+
2680
+ TEST(Btree, NodeHandleMutableKeyAccess) {
2681
+ {
2682
+ absl::btree_map<std::string, std::string> map;
2683
+
2684
+ map["key1"] = "mapped";
2685
+
2686
+ auto nh = map.extract(map.begin());
2687
+ nh.key().resize(3);
2688
+ map.insert(std::move(nh));
2689
+
2690
+ EXPECT_THAT(map, ElementsAre(Pair("key", "mapped")));
2691
+ }
2692
+ // Also for multimap.
2693
+ {
2694
+ absl::btree_multimap<std::string, std::string> map;
2695
+
2696
+ map.emplace("key1", "mapped");
2697
+
2698
+ auto nh = map.extract(map.begin());
2699
+ nh.key().resize(3);
2700
+ map.insert(std::move(nh));
2701
+
2702
+ EXPECT_THAT(map, ElementsAre(Pair("key", "mapped")));
2703
+ }
2704
+ }
2705
+
2706
+ struct MultiKey {
2707
+ int i1;
2708
+ int i2;
2709
+ };
2710
+
2711
+ bool operator==(const MultiKey a, const MultiKey b) {
2712
+ return a.i1 == b.i1 && a.i2 == b.i2;
2713
+ }
2714
+
2715
+ // A heterogeneous comparator that has different equivalence classes for
2716
+ // different lookup types.
2717
+ struct MultiKeyComp {
2718
+ using is_transparent = void;
2719
+ bool operator()(const MultiKey a, const MultiKey b) const {
2720
+ if (a.i1 != b.i1) return a.i1 < b.i1;
2721
+ return a.i2 < b.i2;
2722
+ }
2723
+ bool operator()(const int a, const MultiKey b) const { return a < b.i1; }
2724
+ bool operator()(const MultiKey a, const int b) const { return a.i1 < b; }
2725
+ };
2726
+
2727
+ // A heterogeneous, three-way comparator that has different equivalence classes
2728
+ // for different lookup types.
2729
+ struct MultiKeyThreeWayComp {
2730
+ using is_transparent = void;
2731
+ absl::weak_ordering operator()(const MultiKey a, const MultiKey b) const {
2732
+ if (a.i1 < b.i1) return absl::weak_ordering::less;
2733
+ if (a.i1 > b.i1) return absl::weak_ordering::greater;
2734
+ if (a.i2 < b.i2) return absl::weak_ordering::less;
2735
+ if (a.i2 > b.i2) return absl::weak_ordering::greater;
2736
+ return absl::weak_ordering::equivalent;
2737
+ }
2738
+ absl::weak_ordering operator()(const int a, const MultiKey b) const {
2739
+ if (a < b.i1) return absl::weak_ordering::less;
2740
+ if (a > b.i1) return absl::weak_ordering::greater;
2741
+ return absl::weak_ordering::equivalent;
2742
+ }
2743
+ absl::weak_ordering operator()(const MultiKey a, const int b) const {
2744
+ if (a.i1 < b) return absl::weak_ordering::less;
2745
+ if (a.i1 > b) return absl::weak_ordering::greater;
2746
+ return absl::weak_ordering::equivalent;
2747
+ }
2748
+ };
2749
+
2750
+ template <typename Compare>
2751
+ class BtreeMultiKeyTest : public ::testing::Test {};
2752
+ using MultiKeyComps = ::testing::Types<MultiKeyComp, MultiKeyThreeWayComp>;
2753
+ TYPED_TEST_SUITE(BtreeMultiKeyTest, MultiKeyComps);
2754
+
2755
+ TYPED_TEST(BtreeMultiKeyTest, EqualRange) {
2756
+ absl::btree_set<MultiKey, TypeParam> set;
2757
+ for (int i = 0; i < 100; ++i) {
2758
+ for (int j = 0; j < 100; ++j) {
2759
+ set.insert({i, j});
2760
+ }
2761
+ }
2762
+
2763
+ for (int i = 0; i < 100; ++i) {
2764
+ auto equal_range = set.equal_range(i);
2765
+ EXPECT_EQ(equal_range.first->i1, i);
2766
+ EXPECT_EQ(equal_range.first->i2, 0) << i;
2767
+ EXPECT_EQ(std::distance(equal_range.first, equal_range.second), 100) << i;
2768
+ }
2769
+ }
2770
+
2771
+ TYPED_TEST(BtreeMultiKeyTest, Extract) {
2772
+ absl::btree_set<MultiKey, TypeParam> set;
2773
+ for (int i = 0; i < 100; ++i) {
2774
+ for (int j = 0; j < 100; ++j) {
2775
+ set.insert({i, j});
2776
+ }
2777
+ }
2778
+
2779
+ for (int i = 0; i < 100; ++i) {
2780
+ auto node_handle = set.extract(i);
2781
+ EXPECT_EQ(node_handle.value().i1, i);
2782
+ EXPECT_EQ(node_handle.value().i2, 0) << i;
2783
+ }
2784
+
2785
+ for (int i = 0; i < 100; ++i) {
2786
+ auto node_handle = set.extract(i);
2787
+ EXPECT_EQ(node_handle.value().i1, i);
2788
+ EXPECT_EQ(node_handle.value().i2, 1) << i;
2789
+ }
2790
+ }
2791
+
2792
+ TYPED_TEST(BtreeMultiKeyTest, Erase) {
2793
+ absl::btree_set<MultiKey, TypeParam> set = {
2794
+ {1, 1}, {2, 1}, {2, 2}, {3, 1}};
2795
+ EXPECT_EQ(set.erase(2), 2);
2796
+ EXPECT_THAT(set, ElementsAre(MultiKey{1, 1}, MultiKey{3, 1}));
2797
+ }
2798
+
2799
+ TYPED_TEST(BtreeMultiKeyTest, Count) {
2800
+ const absl::btree_set<MultiKey, TypeParam> set = {
2801
+ {1, 1}, {2, 1}, {2, 2}, {3, 1}};
2802
+ EXPECT_EQ(set.count(2), 2);
2803
+ }
2804
+
2805
+ TEST(Btree, SetIteratorsAreConst) {
2806
+ using Set = absl::btree_set<int>;
2807
+ EXPECT_TRUE(
2808
+ (std::is_same<typename Set::iterator::reference, const int &>::value));
2809
+ EXPECT_TRUE(
2810
+ (std::is_same<typename Set::iterator::pointer, const int *>::value));
2811
+
2812
+ using MSet = absl::btree_multiset<int>;
2813
+ EXPECT_TRUE(
2814
+ (std::is_same<typename MSet::iterator::reference, const int &>::value));
2815
+ EXPECT_TRUE(
2816
+ (std::is_same<typename MSet::iterator::pointer, const int *>::value));
2817
+ }
2818
+
2819
+ TEST(Btree, AllocConstructor) {
2820
+ using Alloc = CountingAllocator<int>;
2821
+ using Set = absl::btree_set<int, std::less<int>, Alloc>;
2822
+ int64_t bytes_used = 0;
2823
+ Alloc alloc(&bytes_used);
2824
+ Set set(alloc);
2825
+
2826
+ set.insert({1, 2, 3});
2827
+
2828
+ EXPECT_THAT(set, ElementsAre(1, 2, 3));
2829
+ EXPECT_GT(bytes_used, set.size() * sizeof(int));
2830
+ }
2831
+
2832
+ TEST(Btree, AllocInitializerListConstructor) {
2833
+ using Alloc = CountingAllocator<int>;
2834
+ using Set = absl::btree_set<int, std::less<int>, Alloc>;
2835
+ int64_t bytes_used = 0;
2836
+ Alloc alloc(&bytes_used);
2837
+ Set set({1, 2, 3}, alloc);
2838
+
2839
+ EXPECT_THAT(set, ElementsAre(1, 2, 3));
2840
+ EXPECT_GT(bytes_used, set.size() * sizeof(int));
2841
+ }
2842
+
2843
+ TEST(Btree, AllocRangeConstructor) {
2844
+ using Alloc = CountingAllocator<int>;
2845
+ using Set = absl::btree_set<int, std::less<int>, Alloc>;
2846
+ int64_t bytes_used = 0;
2847
+ Alloc alloc(&bytes_used);
2848
+ std::vector<int> v = {1, 2, 3};
2849
+ Set set(v.begin(), v.end(), alloc);
2850
+
2851
+ EXPECT_THAT(set, ElementsAre(1, 2, 3));
2852
+ EXPECT_GT(bytes_used, set.size() * sizeof(int));
2853
+ }
2854
+
2855
+ TEST(Btree, AllocCopyConstructor) {
2856
+ using Alloc = CountingAllocator<int>;
2857
+ using Set = absl::btree_set<int, std::less<int>, Alloc>;
2858
+ int64_t bytes_used1 = 0;
2859
+ Alloc alloc1(&bytes_used1);
2860
+ Set set1(alloc1);
2861
+
2862
+ set1.insert({1, 2, 3});
2863
+
2864
+ int64_t bytes_used2 = 0;
2865
+ Alloc alloc2(&bytes_used2);
2866
+ Set set2(set1, alloc2);
2867
+
2868
+ EXPECT_THAT(set1, ElementsAre(1, 2, 3));
2869
+ EXPECT_THAT(set2, ElementsAre(1, 2, 3));
2870
+ EXPECT_GT(bytes_used1, set1.size() * sizeof(int));
2871
+ EXPECT_EQ(bytes_used1, bytes_used2);
2872
+ }
2873
+
2874
+ TEST(Btree, AllocMoveConstructor_SameAlloc) {
2875
+ using Alloc = CountingAllocator<int>;
2876
+ using Set = absl::btree_set<int, std::less<int>, Alloc>;
2877
+ int64_t bytes_used = 0;
2878
+ Alloc alloc(&bytes_used);
2879
+ Set set1(alloc);
2880
+
2881
+ set1.insert({1, 2, 3});
2882
+
2883
+ const int64_t original_bytes_used = bytes_used;
2884
+ EXPECT_GT(original_bytes_used, set1.size() * sizeof(int));
2885
+
2886
+ Set set2(std::move(set1), alloc);
2887
+
2888
+ EXPECT_THAT(set2, ElementsAre(1, 2, 3));
2889
+ EXPECT_EQ(bytes_used, original_bytes_used);
2890
+ }
2891
+
2892
+ TEST(Btree, AllocMoveConstructor_DifferentAlloc) {
2893
+ using Alloc = CountingAllocator<int>;
2894
+ using Set = absl::btree_set<int, std::less<int>, Alloc>;
2895
+ int64_t bytes_used1 = 0;
2896
+ Alloc alloc1(&bytes_used1);
2897
+ Set set1(alloc1);
2898
+
2899
+ set1.insert({1, 2, 3});
2900
+
2901
+ const int64_t original_bytes_used = bytes_used1;
2902
+ EXPECT_GT(original_bytes_used, set1.size() * sizeof(int));
2903
+
2904
+ int64_t bytes_used2 = 0;
2905
+ Alloc alloc2(&bytes_used2);
2906
+ Set set2(std::move(set1), alloc2);
2907
+
2908
+ EXPECT_THAT(set2, ElementsAre(1, 2, 3));
2909
+ // We didn't free these bytes allocated by `set1` yet.
2910
+ EXPECT_EQ(bytes_used1, original_bytes_used);
2911
+ EXPECT_EQ(bytes_used2, original_bytes_used);
2912
+ }
2913
+
2914
+ bool IntCmp(const int a, const int b) { return a < b; }
2915
+
2916
+ TEST(Btree, SupportsFunctionPtrComparator) {
2917
+ absl::btree_set<int, decltype(IntCmp) *> set(IntCmp);
2918
+ set.insert({1, 2, 3});
2919
+ EXPECT_THAT(set, ElementsAre(1, 2, 3));
2920
+ EXPECT_TRUE(set.key_comp()(1, 2));
2921
+ EXPECT_TRUE(set.value_comp()(1, 2));
2922
+
2923
+ absl::btree_map<int, int, decltype(IntCmp) *> map(&IntCmp);
2924
+ map[1] = 1;
2925
+ EXPECT_THAT(map, ElementsAre(Pair(1, 1)));
2926
+ EXPECT_TRUE(map.key_comp()(1, 2));
2927
+ EXPECT_TRUE(map.value_comp()(std::make_pair(1, 1), std::make_pair(2, 2)));
2928
+ }
2929
+
2930
+ template <typename Compare>
2931
+ struct TransparentPassThroughComp {
2932
+ using is_transparent = void;
2933
+
2934
+ // This will fail compilation if we attempt a comparison that Compare does not
2935
+ // support, and the failure will happen inside the function implementation so
2936
+ // it can't be avoided by using SFINAE on this comparator.
2937
+ template <typename T, typename U>
2938
+ bool operator()(const T &lhs, const U &rhs) const {
2939
+ return Compare()(lhs, rhs);
2940
+ }
2941
+ };
2942
+
2943
+ TEST(Btree,
2944
+ SupportsTransparentComparatorThatDoesNotImplementAllVisibleOperators) {
2945
+ absl::btree_set<MultiKey, TransparentPassThroughComp<MultiKeyComp>> set;
2946
+ set.insert(MultiKey{1, 2});
2947
+ EXPECT_TRUE(set.contains(1));
2948
+ }
2949
+
2950
+ TEST(Btree, ConstructImplicitlyWithUnadaptedComparator) {
2951
+ absl::btree_set<MultiKey, MultiKeyComp> set = {{}, MultiKeyComp{}};
2952
+ EXPECT_TRUE(set.empty());
2953
+ }
2954
+
2955
+ TEST(Btree, InvalidComparatorsCaught) {
2956
+ if (!IsAssertEnabled()) GTEST_SKIP() << "Assertions not enabled.";
2957
+
2958
+ {
2959
+ struct ZeroAlwaysLessCmp {
2960
+ bool operator()(int lhs, int rhs) const {
2961
+ if (lhs == 0) return true;
2962
+ return lhs < rhs;
2963
+ }
2964
+ };
2965
+ absl::btree_set<int, ZeroAlwaysLessCmp> set;
2966
+ EXPECT_DEATH(set.insert({0, 1, 2}), "is_self_equivalent");
2967
+ }
2968
+ {
2969
+ struct ThreeWayAlwaysLessCmp {
2970
+ absl::weak_ordering operator()(int, int) const {
2971
+ return absl::weak_ordering::less;
2972
+ }
2973
+ };
2974
+ absl::btree_set<int, ThreeWayAlwaysLessCmp> set;
2975
+ EXPECT_DEATH(set.insert({0, 1, 2}), "is_self_equivalent");
2976
+ }
2977
+ {
2978
+ struct SumGreaterZeroCmp {
2979
+ bool operator()(int lhs, int rhs) const {
2980
+ // First, do equivalence correctly - so we can test later condition.
2981
+ if (lhs == rhs) return false;
2982
+ return lhs + rhs > 0;
2983
+ }
2984
+ };
2985
+ absl::btree_set<int, SumGreaterZeroCmp> set;
2986
+ // Note: '!' only needs to be escaped when it's the first character.
2987
+ EXPECT_DEATH(set.insert({0, 1, 2}),
2988
+ R"regex(\!lhs_comp_rhs \|\| !comp\(\)\(rhs, lhs\))regex");
2989
+ }
2990
+ {
2991
+ struct ThreeWaySumGreaterZeroCmp {
2992
+ absl::weak_ordering operator()(int lhs, int rhs) const {
2993
+ // First, do equivalence correctly - so we can test later condition.
2994
+ if (lhs == rhs) return absl::weak_ordering::equivalent;
2995
+
2996
+ if (lhs + rhs > 0) return absl::weak_ordering::less;
2997
+ if (lhs + rhs == 0) return absl::weak_ordering::equivalent;
2998
+ return absl::weak_ordering::greater;
2999
+ }
3000
+ };
3001
+ absl::btree_set<int, ThreeWaySumGreaterZeroCmp> set;
3002
+ EXPECT_DEATH(set.insert({0, 1, 2}), "lhs_comp_rhs < 0 -> rhs_comp_lhs > 0");
3003
+ }
3004
+ // Verify that we detect cases of comparators that violate transitivity.
3005
+ // When the comparators below check for the presence of an optional field,
3006
+ // they violate transitivity because instances that have the optional field
3007
+ // compare differently with each other from how they compare with instances
3008
+ // that don't have the optional field.
3009
+ struct ClockTime {
3010
+ absl::optional<int> hour;
3011
+ int minute;
3012
+ };
3013
+ // `comp(a,b) && comp(b,c) && !comp(a,c)` violates transitivity.
3014
+ ClockTime a = {absl::nullopt, 1};
3015
+ ClockTime b = {2, 5};
3016
+ ClockTime c = {6, 0};
3017
+ {
3018
+ struct NonTransitiveTimeCmp {
3019
+ bool operator()(ClockTime lhs, ClockTime rhs) const {
3020
+ if (lhs.hour.has_value() && rhs.hour.has_value() &&
3021
+ *lhs.hour != *rhs.hour) {
3022
+ return *lhs.hour < *rhs.hour;
3023
+ }
3024
+ return lhs.minute < rhs.minute;
3025
+ }
3026
+ };
3027
+ NonTransitiveTimeCmp cmp;
3028
+ ASSERT_TRUE(cmp(a, b) && cmp(b, c) && !cmp(a, c));
3029
+ absl::btree_set<ClockTime, NonTransitiveTimeCmp> set;
3030
+ EXPECT_DEATH(set.insert({a, b, c}), "is_ordered_correctly");
3031
+ absl::btree_multiset<ClockTime, NonTransitiveTimeCmp> mset;
3032
+ EXPECT_DEATH(mset.insert({a, a, b, b, c, c}), "is_ordered_correctly");
3033
+ }
3034
+ {
3035
+ struct ThreeWayNonTransitiveTimeCmp {
3036
+ absl::weak_ordering operator()(ClockTime lhs, ClockTime rhs) const {
3037
+ if (lhs.hour.has_value() && rhs.hour.has_value() &&
3038
+ *lhs.hour != *rhs.hour) {
3039
+ return *lhs.hour < *rhs.hour ? absl::weak_ordering::less
3040
+ : absl::weak_ordering::greater;
3041
+ }
3042
+ return lhs.minute < rhs.minute ? absl::weak_ordering::less
3043
+ : lhs.minute == rhs.minute ? absl::weak_ordering::equivalent
3044
+ : absl::weak_ordering::greater;
3045
+ }
3046
+ };
3047
+ ThreeWayNonTransitiveTimeCmp cmp;
3048
+ ASSERT_TRUE(cmp(a, b) < 0 && cmp(b, c) < 0 && cmp(a, c) > 0);
3049
+ absl::btree_set<ClockTime, ThreeWayNonTransitiveTimeCmp> set;
3050
+ EXPECT_DEATH(set.insert({a, b, c}), "is_ordered_correctly");
3051
+ absl::btree_multiset<ClockTime, ThreeWayNonTransitiveTimeCmp> mset;
3052
+ EXPECT_DEATH(mset.insert({a, a, b, b, c, c}), "is_ordered_correctly");
3053
+ }
3054
+ }
3055
+
3056
+ TEST(Btree, MutatedKeysCaught) {
3057
+ if (!IsAssertEnabled()) GTEST_SKIP() << "Assertions not enabled.";
3058
+
3059
+ struct IntPtrCmp {
3060
+ bool operator()(int *lhs, int *rhs) const { return *lhs < *rhs; }
3061
+ };
3062
+ {
3063
+ absl::btree_set<int *, IntPtrCmp> set;
3064
+ int arr[] = {0, 1, 2};
3065
+ set.insert({&arr[0], &arr[1], &arr[2]});
3066
+ arr[0] = 100;
3067
+ EXPECT_DEATH(set.insert(&arr[0]), "is_ordered_correctly");
3068
+ }
3069
+ {
3070
+ absl::btree_multiset<int *, IntPtrCmp> set;
3071
+ int arr[] = {0, 1, 2};
3072
+ set.insert({&arr[0], &arr[0], &arr[1], &arr[1], &arr[2], &arr[2]});
3073
+ arr[0] = 100;
3074
+ EXPECT_DEATH(set.insert(&arr[0]), "is_ordered_correctly");
3075
+ }
3076
+ }
3077
+
3078
+ #ifndef _MSC_VER
3079
+ // This test crashes on MSVC.
3080
+ TEST(Btree, InvalidIteratorUse) {
3081
+ if (!BtreeGenerationsEnabled())
3082
+ GTEST_SKIP() << "Generation validation for iterators is disabled.";
3083
+
3084
+ // Invalid memory use can trigger use-after-free in ASan, HWASAN or
3085
+ // invalidated iterator assertions.
3086
+ constexpr const char *kInvalidMemoryDeathMessage =
3087
+ "use-after-free|invalidated iterator";
3088
+
3089
+ {
3090
+ absl::btree_set<int> set;
3091
+ for (int i = 0; i < 10; ++i) set.insert(i);
3092
+ auto it = set.begin();
3093
+ set.erase(it++);
3094
+ EXPECT_DEATH(set.erase(it++), kInvalidMemoryDeathMessage);
3095
+ }
3096
+ {
3097
+ absl::btree_set<int> set;
3098
+ for (int i = 0; i < 10; ++i) set.insert(i);
3099
+ auto it = set.insert(20).first;
3100
+ set.insert(30);
3101
+ EXPECT_DEATH(*it, kInvalidMemoryDeathMessage);
3102
+ }
3103
+ {
3104
+ absl::btree_set<int> set;
3105
+ for (int i = 0; i < 10000; ++i) set.insert(i);
3106
+ auto it = set.find(5000);
3107
+ ASSERT_NE(it, set.end());
3108
+ set.erase(1);
3109
+ EXPECT_DEATH(*it, kInvalidMemoryDeathMessage);
3110
+ }
3111
+ {
3112
+ absl::btree_set<int> set;
3113
+ for (int i = 0; i < 10; ++i) set.insert(i);
3114
+ auto it = set.insert(20).first;
3115
+ set.insert(30);
3116
+ EXPECT_DEATH(void(it == set.begin()), kInvalidMemoryDeathMessage);
3117
+ EXPECT_DEATH(void(set.begin() == it), kInvalidMemoryDeathMessage);
3118
+ }
3119
+ }
3120
+ #endif
3121
+
3122
+ class OnlyConstructibleByAllocator {
3123
+ explicit OnlyConstructibleByAllocator(int i) : i_(i) {}
3124
+
3125
+ public:
3126
+ OnlyConstructibleByAllocator(const OnlyConstructibleByAllocator &other)
3127
+ : i_(other.i_) {}
3128
+ OnlyConstructibleByAllocator &operator=(
3129
+ const OnlyConstructibleByAllocator &other) {
3130
+ i_ = other.i_;
3131
+ return *this;
3132
+ }
3133
+ int Get() const { return i_; }
3134
+ bool operator==(int i) const { return i_ == i; }
3135
+
3136
+ private:
3137
+ template <typename T>
3138
+ friend class OnlyConstructibleAllocator;
3139
+
3140
+ int i_;
3141
+ };
3142
+
3143
+ template <typename T = OnlyConstructibleByAllocator>
3144
+ class OnlyConstructibleAllocator : public std::allocator<T> {
3145
+ public:
3146
+ OnlyConstructibleAllocator() = default;
3147
+ template <class U>
3148
+ explicit OnlyConstructibleAllocator(const OnlyConstructibleAllocator<U> &) {}
3149
+
3150
+ void construct(OnlyConstructibleByAllocator *p, int i) {
3151
+ new (p) OnlyConstructibleByAllocator(i);
3152
+ }
3153
+ template <typename Pair>
3154
+ void construct(Pair *p, const int i) {
3155
+ OnlyConstructibleByAllocator only(i);
3156
+ new (p) Pair(std::move(only), i);
3157
+ }
3158
+
3159
+ template <class U>
3160
+ struct rebind {
3161
+ using other = OnlyConstructibleAllocator<U>;
3162
+ };
3163
+ };
3164
+
3165
+ struct OnlyConstructibleByAllocatorComp {
3166
+ using is_transparent = void;
3167
+ bool operator()(OnlyConstructibleByAllocator a,
3168
+ OnlyConstructibleByAllocator b) const {
3169
+ return a.Get() < b.Get();
3170
+ }
3171
+ bool operator()(int a, OnlyConstructibleByAllocator b) const {
3172
+ return a < b.Get();
3173
+ }
3174
+ bool operator()(OnlyConstructibleByAllocator a, int b) const {
3175
+ return a.Get() < b;
3176
+ }
3177
+ };
3178
+
3179
+ TEST(Btree, OnlyConstructibleByAllocatorType) {
3180
+ const std::array<int, 2> arr = {3, 4};
3181
+ {
3182
+ absl::btree_set<OnlyConstructibleByAllocator,
3183
+ OnlyConstructibleByAllocatorComp,
3184
+ OnlyConstructibleAllocator<>>
3185
+ set;
3186
+ set.emplace(1);
3187
+ set.emplace_hint(set.end(), 2);
3188
+ set.insert(arr.begin(), arr.end());
3189
+ EXPECT_THAT(set, ElementsAre(1, 2, 3, 4));
3190
+ }
3191
+ {
3192
+ absl::btree_multiset<OnlyConstructibleByAllocator,
3193
+ OnlyConstructibleByAllocatorComp,
3194
+ OnlyConstructibleAllocator<>>
3195
+ set;
3196
+ set.emplace(1);
3197
+ set.emplace_hint(set.end(), 2);
3198
+ // TODO(ezb): fix insert_multi to allow this to compile.
3199
+ // set.insert(arr.begin(), arr.end());
3200
+ EXPECT_THAT(set, ElementsAre(1, 2));
3201
+ }
3202
+ {
3203
+ absl::btree_map<OnlyConstructibleByAllocator, int,
3204
+ OnlyConstructibleByAllocatorComp,
3205
+ OnlyConstructibleAllocator<>>
3206
+ map;
3207
+ map.emplace(1);
3208
+ map.emplace_hint(map.end(), 2);
3209
+ map.insert(arr.begin(), arr.end());
3210
+ EXPECT_THAT(map,
3211
+ ElementsAre(Pair(1, 1), Pair(2, 2), Pair(3, 3), Pair(4, 4)));
3212
+ }
3213
+ {
3214
+ absl::btree_multimap<OnlyConstructibleByAllocator, int,
3215
+ OnlyConstructibleByAllocatorComp,
3216
+ OnlyConstructibleAllocator<>>
3217
+ map;
3218
+ map.emplace(1);
3219
+ map.emplace_hint(map.end(), 2);
3220
+ // TODO(ezb): fix insert_multi to allow this to compile.
3221
+ // map.insert(arr.begin(), arr.end());
3222
+ EXPECT_THAT(map, ElementsAre(Pair(1, 1), Pair(2, 2)));
3223
+ }
3224
+ }
3225
+
3226
+ class NotAssignable {
3227
+ public:
3228
+ explicit NotAssignable(int i) : i_(i) {}
3229
+ NotAssignable(const NotAssignable &other) : i_(other.i_) {}
3230
+ NotAssignable &operator=(NotAssignable &&other) = delete;
3231
+ int Get() const { return i_; }
3232
+ bool operator==(int i) const { return i_ == i; }
3233
+ friend bool operator<(NotAssignable a, NotAssignable b) {
3234
+ return a.i_ < b.i_;
3235
+ }
3236
+
3237
+ private:
3238
+ int i_;
3239
+ };
3240
+
3241
+ TEST(Btree, NotAssignableType) {
3242
+ {
3243
+ absl::btree_set<NotAssignable> set;
3244
+ set.emplace(1);
3245
+ set.emplace_hint(set.end(), 2);
3246
+ set.insert(NotAssignable(3));
3247
+ set.insert(set.end(), NotAssignable(4));
3248
+ EXPECT_THAT(set, ElementsAre(1, 2, 3, 4));
3249
+ set.erase(set.begin());
3250
+ EXPECT_THAT(set, ElementsAre(2, 3, 4));
3251
+ }
3252
+ {
3253
+ absl::btree_multiset<NotAssignable> set;
3254
+ set.emplace(1);
3255
+ set.emplace_hint(set.end(), 2);
3256
+ set.insert(NotAssignable(2));
3257
+ set.insert(set.end(), NotAssignable(3));
3258
+ EXPECT_THAT(set, ElementsAre(1, 2, 2, 3));
3259
+ set.erase(set.begin());
3260
+ EXPECT_THAT(set, ElementsAre(2, 2, 3));
3261
+ }
3262
+ {
3263
+ absl::btree_map<NotAssignable, int> map;
3264
+ map.emplace(NotAssignable(1), 1);
3265
+ map.emplace_hint(map.end(), NotAssignable(2), 2);
3266
+ map.insert({NotAssignable(3), 3});
3267
+ map.insert(map.end(), {NotAssignable(4), 4});
3268
+ EXPECT_THAT(map,
3269
+ ElementsAre(Pair(1, 1), Pair(2, 2), Pair(3, 3), Pair(4, 4)));
3270
+ map.erase(map.begin());
3271
+ EXPECT_THAT(map, ElementsAre(Pair(2, 2), Pair(3, 3), Pair(4, 4)));
3272
+ }
3273
+ {
3274
+ absl::btree_multimap<NotAssignable, int> map;
3275
+ map.emplace(NotAssignable(1), 1);
3276
+ map.emplace_hint(map.end(), NotAssignable(2), 2);
3277
+ map.insert({NotAssignable(2), 3});
3278
+ map.insert(map.end(), {NotAssignable(3), 3});
3279
+ EXPECT_THAT(map,
3280
+ ElementsAre(Pair(1, 1), Pair(2, 2), Pair(2, 3), Pair(3, 3)));
3281
+ map.erase(map.begin());
3282
+ EXPECT_THAT(map, ElementsAre(Pair(2, 2), Pair(2, 3), Pair(3, 3)));
3283
+ }
3284
+ }
3285
+
3286
+ struct ArenaLike {
3287
+ void* recycled = nullptr;
3288
+ size_t recycled_size = 0;
3289
+ };
3290
+
3291
+ // A very simple implementation of arena allocation.
3292
+ template <typename T>
3293
+ class ArenaLikeAllocator : public std::allocator<T> {
3294
+ public:
3295
+ // Standard library containers require the ability to allocate objects of
3296
+ // different types which they can do so via rebind.other.
3297
+ template <typename U>
3298
+ struct rebind {
3299
+ using other = ArenaLikeAllocator<U>;
3300
+ };
3301
+
3302
+ explicit ArenaLikeAllocator(ArenaLike* arena) noexcept : arena_(arena) {}
3303
+
3304
+ ~ArenaLikeAllocator() {
3305
+ if (arena_->recycled != nullptr) {
3306
+ delete [] static_cast<T*>(arena_->recycled);
3307
+ arena_->recycled = nullptr;
3308
+ }
3309
+ }
3310
+
3311
+ template<typename U>
3312
+ explicit ArenaLikeAllocator(const ArenaLikeAllocator<U>& other) noexcept
3313
+ : arena_(other.arena_) {}
3314
+
3315
+ T* allocate(size_t num_objects, const void* = nullptr) {
3316
+ size_t size = num_objects * sizeof(T);
3317
+ if (arena_->recycled != nullptr && arena_->recycled_size == size) {
3318
+ T* result = static_cast<T*>(arena_->recycled);
3319
+ arena_->recycled = nullptr;
3320
+ return result;
3321
+ }
3322
+ return new T[num_objects];
3323
+ }
3324
+
3325
+ void deallocate(T* p, size_t num_objects) {
3326
+ size_t size = num_objects * sizeof(T);
3327
+
3328
+ // Simulate writing to the freed memory as an actual arena allocator might
3329
+ // do. This triggers an error report if the memory is poisoned.
3330
+ memset(p, 0xde, size);
3331
+
3332
+ if (arena_->recycled == nullptr) {
3333
+ arena_->recycled = p;
3334
+ arena_->recycled_size = size;
3335
+ } else {
3336
+ delete [] p;
3337
+ }
3338
+ }
3339
+
3340
+ ArenaLike* arena_;
3341
+ };
3342
+
3343
+ // This test verifies that an arena allocator that reuses memory will not be
3344
+ // asked to free poisoned BTree memory.
3345
+ TEST(Btree, ReusePoisonMemory) {
3346
+ using Alloc = ArenaLikeAllocator<int64_t>;
3347
+ using Set = absl::btree_set<int64_t, std::less<int64_t>, Alloc>;
3348
+ ArenaLike arena;
3349
+ Alloc alloc(&arena);
3350
+ Set set(alloc);
3351
+
3352
+ set.insert(0);
3353
+ set.erase(0);
3354
+ set.insert(0);
3355
+ }
3356
+
3357
+ TEST(Btree, IteratorDifference) {
3358
+ absl::BitGen bitgen;
3359
+ std::vector<int> vec;
3360
+ // Randomize the set's insertion order so the nodes aren't all full.
3361
+ for (int i = 0; i < 1000000; ++i) vec.push_back(i);
3362
+ absl::c_shuffle(vec, bitgen);
3363
+
3364
+ absl::btree_set<int> set;
3365
+ for (int i : vec) set.insert(i);
3366
+
3367
+ for (int i = 0; i < 1000; ++i) {
3368
+ size_t begin = absl::Uniform(bitgen, 0u, set.size());
3369
+ size_t end = absl::Uniform(bitgen, begin, set.size());
3370
+ ASSERT_EQ(end - begin, set.find(end) - set.find(begin))
3371
+ << begin << " " << end;
3372
+ }
3373
+ }
3374
+
3375
+ TEST(Btree, IteratorAddition) {
3376
+ absl::BitGen bitgen;
3377
+ std::vector<int> vec;
3378
+
3379
+ // Randomize the set's insertion order so the nodes aren't all full.
3380
+ constexpr int kSetSize = 1000000;
3381
+ for (int i = 0; i < kSetSize; ++i) vec.push_back(i);
3382
+ absl::c_shuffle(vec, bitgen);
3383
+
3384
+ absl::btree_set<int> set;
3385
+ for (int i : vec) set.insert(i);
3386
+
3387
+ for (int i = 0; i < 1000; ++i) {
3388
+ int begin = absl::Uniform(bitgen, 0, kSetSize);
3389
+ int end = absl::Uniform(bitgen, begin, kSetSize);
3390
+ ASSERT_LE(begin, end);
3391
+
3392
+ auto it = set.find(begin);
3393
+ it += end - begin;
3394
+ ASSERT_EQ(it, set.find(end)) << end;
3395
+
3396
+ it += begin - end;
3397
+ ASSERT_EQ(it, set.find(begin)) << begin;
3398
+ }
3399
+ }
3400
+
3401
+ TEST(Btree, IteratorAdditionOutOfBounds) {
3402
+ const absl::btree_set<int> set({5});
3403
+
3404
+ auto it = set.find(5);
3405
+
3406
+ auto forward = it;
3407
+ forward += 1;
3408
+ EXPECT_EQ(forward, set.end());
3409
+
3410
+ auto backward = it;
3411
+ EXPECT_EQ(backward, set.begin());
3412
+
3413
+ if (IsAssertEnabled()) {
3414
+ EXPECT_DEATH(forward += 1, "n == 0");
3415
+ EXPECT_DEATH(backward += -1, "position >= node->start");
3416
+ }
3417
+ }
3418
+
3419
+ TEST(Btree, IteratorSubtraction) {
3420
+ absl::BitGen bitgen;
3421
+ std::vector<int> vec;
3422
+
3423
+ // Randomize the set's insertion order so the nodes aren't all full.
3424
+ constexpr int kSetSize = 1000000;
3425
+ for (int i = 0; i < kSetSize; ++i) vec.push_back(i);
3426
+ absl::c_shuffle(vec, bitgen);
3427
+
3428
+ absl::btree_set<int> set;
3429
+ for (int i : vec) set.insert(i);
3430
+
3431
+ for (int i = 0; i < 1000; ++i) {
3432
+ int begin = absl::Uniform(bitgen, 0, kSetSize);
3433
+ int end = absl::Uniform(bitgen, begin, kSetSize);
3434
+ ASSERT_LE(begin, end);
3435
+
3436
+ auto it = set.find(end);
3437
+ it -= end - begin;
3438
+ ASSERT_EQ(it, set.find(begin)) << begin;
3439
+
3440
+ it -= begin - end;
3441
+ ASSERT_EQ(it, set.find(end)) << end;
3442
+ }
3443
+ }
3444
+
3445
+ TEST(Btree, IteratorSubtractionOutOfBounds) {
3446
+ const absl::btree_set<int> set({5});
3447
+
3448
+ auto it = set.find(5);
3449
+
3450
+ auto backward = it;
3451
+ EXPECT_EQ(backward, set.begin());
3452
+
3453
+ auto forward = it;
3454
+ forward -= -1;
3455
+ EXPECT_EQ(forward, set.end());
3456
+
3457
+ if (IsAssertEnabled()) {
3458
+ EXPECT_DEATH(backward -= 1, "position >= node->start");
3459
+ EXPECT_DEATH(forward -= -1, "n == 0");
3460
+ }
3461
+ }
3462
+
3463
+ TEST(Btree, DereferencingEndIterator) {
3464
+ if (!IsAssertEnabled()) GTEST_SKIP() << "Assertions not enabled.";
3465
+
3466
+ absl::btree_set<int> set;
3467
+ for (int i = 0; i < 1000; ++i) set.insert(i);
3468
+ EXPECT_DEATH(*set.end(), R"regex(Dereferencing end\(\) iterator)regex");
3469
+ }
3470
+
3471
+ TEST(Btree, InvalidIteratorComparison) {
3472
+ if (!IsAssertEnabled()) GTEST_SKIP() << "Assertions not enabled.";
3473
+
3474
+ absl::btree_set<int> set1, set2;
3475
+ for (int i = 0; i < 1000; ++i) {
3476
+ set1.insert(i);
3477
+ set2.insert(i);
3478
+ }
3479
+
3480
+ constexpr const char *kValueInitDeathMessage =
3481
+ "Comparing default-constructed iterator with .*non-default-constructed "
3482
+ "iterator";
3483
+ typename absl::btree_set<int>::iterator iter1, iter2;
3484
+ EXPECT_EQ(iter1, iter2);
3485
+ EXPECT_DEATH(void(set1.begin() == iter1), kValueInitDeathMessage);
3486
+ EXPECT_DEATH(void(iter1 == set1.begin()), kValueInitDeathMessage);
3487
+
3488
+ constexpr const char *kDifferentContainerDeathMessage =
3489
+ "Comparing iterators from different containers";
3490
+ iter1 = set1.begin();
3491
+ iter2 = set2.begin();
3492
+ EXPECT_DEATH(void(iter1 == iter2), kDifferentContainerDeathMessage);
3493
+ EXPECT_DEATH(void(iter2 == iter1), kDifferentContainerDeathMessage);
3494
+ }
3495
+
3496
+ TEST(Btree, InvalidPointerUse) {
3497
+ if (!kAsan)
3498
+ GTEST_SKIP() << "We only detect invalid pointer use in ASan mode.";
3499
+
3500
+ absl::btree_set<int> set;
3501
+ set.insert(0);
3502
+ const int *ptr = &*set.begin();
3503
+ set.insert(1);
3504
+ EXPECT_DEATH(std::cout << *ptr, "use-after-free");
3505
+ size_t slots_per_node = BtreeNodePeer::GetNumSlotsPerNode<decltype(set)>();
3506
+ for (int i = 2; i < slots_per_node - 1; ++i) set.insert(i);
3507
+ ptr = &*set.begin();
3508
+ set.insert(static_cast<int>(slots_per_node));
3509
+ EXPECT_DEATH(std::cout << *ptr, "use-after-free");
3510
+ }
3511
+
3512
+ template<typename Set>
3513
+ void TestBasicFunctionality(Set set) {
3514
+ using value_type = typename Set::value_type;
3515
+ for (int i = 0; i < 100; ++i) { set.insert(value_type(i)); }
3516
+ for (int i = 50; i < 100; ++i) { set.erase(value_type(i)); }
3517
+ auto it = set.begin();
3518
+ for (int i = 0; i < 50; ++i, ++it) {
3519
+ ASSERT_EQ(set.find(value_type(i)), it) << i;
3520
+ }
3521
+ }
3522
+
3523
+ template<size_t align>
3524
+ struct alignas(align) OveralignedKey {
3525
+ explicit OveralignedKey(int i) : key(i) {}
3526
+ bool operator<(const OveralignedKey &other) const { return key < other.key; }
3527
+ int key = 0;
3528
+ };
3529
+
3530
+ TEST(Btree, OveralignedKey) {
3531
+ // Test basic functionality with both even and odd numbers of slots per node.
3532
+ // The goal here is to detect cases where alignment may be incorrect.
3533
+ TestBasicFunctionality(
3534
+ SizedBtreeSet<OveralignedKey<16>, /*TargetValuesPerNode=*/8>());
3535
+ TestBasicFunctionality(
3536
+ SizedBtreeSet<OveralignedKey<16>, /*TargetValuesPerNode=*/9>());
3537
+ }
3538
+
3539
+ TEST(Btree, FieldTypeEqualsSlotType) {
3540
+ // This breaks if we try to do layout_type::Pointer<slot_type> because
3541
+ // slot_type is the same as field_type.
3542
+ using set_type = absl::btree_set<uint8_t>;
3543
+ static_assert(BtreeNodePeer::FieldTypeEqualsSlotType<set_type>(), "");
3544
+ TestBasicFunctionality(set_type());
3545
+ }
3546
+
3547
+ // Alias whose only purpose is to have the same length as set_params for better
3548
+ // alignment in the test below.
3549
+ template <typename... T>
3550
+ using set_p_impl = set_params_impl<T...>;
3551
+
3552
+ TEST(BtreeTest, SetParamsStripsDefaults) {
3553
+ using K = int;
3554
+ using DA = btree_set_defaults<int>::Compare;
3555
+ using DB = btree_set_defaults<int>::Alloc;
3556
+ using DC = btree_set_defaults<int>::TargetNodeSize;
3557
+ using DD = btree_set_defaults<int>::IsMulti;
3558
+
3559
+ using XA = std::greater<int>;
3560
+ struct XB {};
3561
+ using XC = std::integral_constant<int, 100>;
3562
+ using XD = std::true_type;
3563
+
3564
+ EXPECT_TRUE((std::is_same_v<set_params<K, XA, XB, XC{}, XD{}>,
3565
+ set_p_impl<K, XA, XB, XC, XD>>));
3566
+ EXPECT_TRUE((std::is_same_v<set_params<K, XA, XB, XC{}, DD{}>,
3567
+ set_p_impl<K, XA, XB, XC>>));
3568
+ EXPECT_TRUE((std::is_same_v<set_params<K, XA, XB, DC{}, XD{}>,
3569
+ set_p_impl<K, XA, XB, DC, XD>>));
3570
+ EXPECT_TRUE((std::is_same_v<set_params<K, XA, XB, DC{}, DD{}>,
3571
+ set_p_impl<K, XA, XB>>));
3572
+ EXPECT_TRUE((std::is_same_v<set_params<K, XA, DB, XC{}, XD{}>,
3573
+ set_p_impl<K, XA, DB, XC, XD>>));
3574
+ EXPECT_TRUE((std::is_same_v<set_params<K, XA, DB, XC{}, DD{}>,
3575
+ set_p_impl<K, XA, DB, XC>>));
3576
+ EXPECT_TRUE((std::is_same_v<set_params<K, XA, DB, DC{}, XD{}>,
3577
+ set_p_impl<K, XA, DB, DC, XD>>));
3578
+ EXPECT_TRUE((std::is_same_v<set_params<K, XA, DB, DC{}, DD{}>,
3579
+ set_p_impl<K, XA>>));
3580
+ EXPECT_TRUE((std::is_same_v<set_params<K, DA, XB, XC{}, XD{}>,
3581
+ set_p_impl<K, DA, XB, XC, XD>>));
3582
+ EXPECT_TRUE((std::is_same_v<set_params<K, DA, XB, XC{}, DD{}>,
3583
+ set_p_impl<K, DA, XB, XC>>));
3584
+ EXPECT_TRUE((std::is_same_v<set_params<K, DA, XB, DC{}, XD{}>,
3585
+ set_p_impl<K, DA, XB, DC, XD>>));
3586
+ EXPECT_TRUE((std::is_same_v<set_params<K, DA, XB, DC{}, DD{}>,
3587
+ set_p_impl<K, DA, XB>>));
3588
+ EXPECT_TRUE((std::is_same_v<set_params<K, DA, DB, XC{}, XD{}>,
3589
+ set_p_impl<K, DA, DB, XC, XD>>));
3590
+ EXPECT_TRUE((std::is_same_v<set_params<K, DA, DB, XC{}, DD{}>,
3591
+ set_p_impl<K, DA, DB, XC>>));
3592
+ EXPECT_TRUE((std::is_same_v<set_params<K, DA, DB, DC{}, XD{}>,
3593
+ set_p_impl<K, DA, DB, DC, XD>>));
3594
+ EXPECT_TRUE((std::is_same_v<set_params<K, DA, DB, DC{}, DD{}>,
3595
+ set_p_impl<K>>));
3596
+ }
3597
+
3598
+ // Alias whose only purpose is to have the same length as map_params for better
3599
+ // alignment in the test below.
3600
+ template <typename... T>
3601
+ using map_p_impl = map_params_impl<T...>;
3602
+
3603
+ TEST(BtreeTest, MapParamsStripsDefaults) {
3604
+ using K = int;
3605
+ using V = double;
3606
+ using DA = btree_map_defaults<int, double>::Compare;
3607
+ using DB = btree_map_defaults<int, double>::Alloc;
3608
+ using DC = btree_map_defaults<int, double>::TargetNodeSize;
3609
+ using DD = btree_map_defaults<int, double>::IsMulti;
3610
+
3611
+ using XA = std::greater<int>;
3612
+ struct XB {};
3613
+ using XC = std::integral_constant<int, 100>;
3614
+ using XD = std::true_type;
3615
+
3616
+ EXPECT_TRUE((std::is_same_v<map_params<K, V, XA, XB, XC{}, XD{}>,
3617
+ map_p_impl<K, V, XA, XB, XC, XD>>));
3618
+ EXPECT_TRUE((std::is_same_v<map_params<K, V, XA, XB, XC{}, DD{}>,
3619
+ map_p_impl<K, V, XA, XB, XC>>));
3620
+ EXPECT_TRUE((std::is_same_v<map_params<K, V, XA, XB, DC{}, XD{}>,
3621
+ map_p_impl<K, V, XA, XB, DC, XD>>));
3622
+ EXPECT_TRUE((std::is_same_v<map_params<K, V, XA, XB, DC{}, DD{}>,
3623
+ map_p_impl<K, V, XA, XB>>));
3624
+ EXPECT_TRUE((std::is_same_v<map_params<K, V, XA, DB, XC{}, XD{}>,
3625
+ map_p_impl<K, V, XA, DB, XC, XD>>));
3626
+ EXPECT_TRUE((std::is_same_v<map_params<K, V, XA, DB, XC{}, DD{}>,
3627
+ map_p_impl<K, V, XA, DB, XC>>));
3628
+ EXPECT_TRUE((std::is_same_v<map_params<K, V, XA, DB, DC{}, XD{}>,
3629
+ map_p_impl<K, V, XA, DB, DC, XD>>));
3630
+ EXPECT_TRUE((std::is_same_v<map_params<K, V, XA, DB, DC{}, DD{}>,
3631
+ map_p_impl<K, V, XA>>));
3632
+ EXPECT_TRUE((std::is_same_v<map_params<K, V, DA, XB, XC{}, XD{}>,
3633
+ map_p_impl<K, V, DA, XB, XC, XD>>));
3634
+ EXPECT_TRUE((std::is_same_v<map_params<K, V, DA, XB, XC{}, DD{}>,
3635
+ map_p_impl<K, V, DA, XB, XC>>));
3636
+ EXPECT_TRUE((std::is_same_v<map_params<K, V, DA, XB, DC{}, XD{}>,
3637
+ map_p_impl<K, V, DA, XB, DC, XD>>));
3638
+ EXPECT_TRUE((std::is_same_v<map_params<K, V, DA, XB, DC{}, DD{}>,
3639
+ map_p_impl<K, V, DA, XB>>));
3640
+ EXPECT_TRUE((std::is_same_v<map_params<K, V, DA, DB, XC{}, XD{}>,
3641
+ map_p_impl<K, V, DA, DB, XC, XD>>));
3642
+ EXPECT_TRUE((std::is_same_v<map_params<K, V, DA, DB, XC{}, DD{}>,
3643
+ map_p_impl<K, V, DA, DB, XC>>));
3644
+ EXPECT_TRUE((std::is_same_v<map_params<K, V, DA, DB, DC{}, XD{}>,
3645
+ map_p_impl<K, V, DA, DB, DC, XD>>));
3646
+ EXPECT_TRUE((std::is_same_v<map_params<K, V, DA, DB, DC{}, DD{}>,
3647
+ map_p_impl<K, V>>));
3648
+ }
3649
+
3650
+ } // namespace
3651
+ } // namespace container_internal
3652
+ ABSL_NAMESPACE_END
3653
+ } // namespace absl