re2 1.20.0 → 1.20.2

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