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,3125 @@
1
+ // Copyright 2020 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/strings/cord.h"
16
+
17
+ #include <algorithm>
18
+ #include <climits>
19
+ #include <cstdio>
20
+ #include <iterator>
21
+ #include <map>
22
+ #include <numeric>
23
+ #include <random>
24
+ #include <sstream>
25
+ #include <type_traits>
26
+ #include <utility>
27
+ #include <vector>
28
+
29
+ #include "gmock/gmock.h"
30
+ #include "gtest/gtest.h"
31
+ #include "absl/base/config.h"
32
+ #include "absl/base/internal/endian.h"
33
+ #include "absl/base/internal/raw_logging.h"
34
+ #include "absl/base/macros.h"
35
+ #include "absl/container/fixed_array.h"
36
+ #include "absl/hash/hash.h"
37
+ #include "absl/random/random.h"
38
+ #include "absl/strings/cord_test_helpers.h"
39
+ #include "absl/strings/cordz_test_helpers.h"
40
+ #include "absl/strings/match.h"
41
+ #include "absl/strings/str_cat.h"
42
+ #include "absl/strings/str_format.h"
43
+ #include "absl/strings/string_view.h"
44
+
45
+ // convenience local constants
46
+ static constexpr auto FLAT = absl::cord_internal::FLAT;
47
+ static constexpr auto MAX_FLAT_TAG = absl::cord_internal::MAX_FLAT_TAG;
48
+
49
+ typedef std::mt19937_64 RandomEngine;
50
+
51
+ using absl::cord_internal::CordRep;
52
+ using absl::cord_internal::CordRepBtree;
53
+ using absl::cord_internal::CordRepConcat;
54
+ using absl::cord_internal::CordRepCrc;
55
+ using absl::cord_internal::CordRepExternal;
56
+ using absl::cord_internal::CordRepFlat;
57
+ using absl::cord_internal::CordRepSubstring;
58
+ using absl::cord_internal::CordzUpdateTracker;
59
+ using absl::cord_internal::kFlatOverhead;
60
+ using absl::cord_internal::kMaxFlatLength;
61
+
62
+ static std::string RandomLowercaseString(RandomEngine* rng);
63
+ static std::string RandomLowercaseString(RandomEngine* rng, size_t length);
64
+
65
+ static int GetUniformRandomUpTo(RandomEngine* rng, int upper_bound) {
66
+ if (upper_bound > 0) {
67
+ std::uniform_int_distribution<int> uniform(0, upper_bound - 1);
68
+ return uniform(*rng);
69
+ } else {
70
+ return 0;
71
+ }
72
+ }
73
+
74
+ static size_t GetUniformRandomUpTo(RandomEngine* rng, size_t upper_bound) {
75
+ if (upper_bound > 0) {
76
+ std::uniform_int_distribution<size_t> uniform(0, upper_bound - 1);
77
+ return uniform(*rng);
78
+ } else {
79
+ return 0;
80
+ }
81
+ }
82
+
83
+ static int32_t GenerateSkewedRandom(RandomEngine* rng, int max_log) {
84
+ const uint32_t base = (*rng)() % (max_log + 1);
85
+ const uint32_t mask = ((base < 32) ? (1u << base) : 0u) - 1u;
86
+ return (*rng)() & mask;
87
+ }
88
+
89
+ static std::string RandomLowercaseString(RandomEngine* rng) {
90
+ int length;
91
+ std::bernoulli_distribution one_in_1k(0.001);
92
+ std::bernoulli_distribution one_in_10k(0.0001);
93
+ // With low probability, make a large fragment
94
+ if (one_in_10k(*rng)) {
95
+ length = GetUniformRandomUpTo(rng, 1048576);
96
+ } else if (one_in_1k(*rng)) {
97
+ length = GetUniformRandomUpTo(rng, 10000);
98
+ } else {
99
+ length = GenerateSkewedRandom(rng, 10);
100
+ }
101
+ return RandomLowercaseString(rng, length);
102
+ }
103
+
104
+ static std::string RandomLowercaseString(RandomEngine* rng, size_t length) {
105
+ std::string result(length, '\0');
106
+ std::uniform_int_distribution<int> chars('a', 'z');
107
+ std::generate(result.begin(), result.end(),
108
+ [&]() { return static_cast<char>(chars(*rng)); });
109
+ return result;
110
+ }
111
+
112
+ static void DoNothing(absl::string_view /* data */, void* /* arg */) {}
113
+
114
+ static void DeleteExternalString(absl::string_view data, void* arg) {
115
+ std::string* s = reinterpret_cast<std::string*>(arg);
116
+ EXPECT_EQ(data, *s);
117
+ delete s;
118
+ }
119
+
120
+ // Add "s" to *dst via `MakeCordFromExternal`
121
+ static void AddExternalMemory(absl::string_view s, absl::Cord* dst) {
122
+ std::string* str = new std::string(s.data(), s.size());
123
+ dst->Append(absl::MakeCordFromExternal(*str, [str](absl::string_view data) {
124
+ DeleteExternalString(data, str);
125
+ }));
126
+ }
127
+
128
+ static void DumpGrowth() {
129
+ absl::Cord str;
130
+ for (int i = 0; i < 1000; i++) {
131
+ char c = 'a' + i % 26;
132
+ str.Append(absl::string_view(&c, 1));
133
+ }
134
+ }
135
+
136
+ // Make a Cord with some number of fragments. Return the size (in bytes)
137
+ // of the smallest fragment.
138
+ static size_t AppendWithFragments(const std::string& s, RandomEngine* rng,
139
+ absl::Cord* cord) {
140
+ size_t j = 0;
141
+ const size_t max_size = s.size() / 5; // Make approx. 10 fragments
142
+ size_t min_size = max_size; // size of smallest fragment
143
+ while (j < s.size()) {
144
+ size_t N = 1 + GetUniformRandomUpTo(rng, max_size);
145
+ if (N > (s.size() - j)) {
146
+ N = s.size() - j;
147
+ }
148
+ if (N < min_size) {
149
+ min_size = N;
150
+ }
151
+
152
+ std::bernoulli_distribution coin_flip(0.5);
153
+ if (coin_flip(*rng)) {
154
+ // Grow by adding an external-memory.
155
+ AddExternalMemory(absl::string_view(s.data() + j, N), cord);
156
+ } else {
157
+ cord->Append(absl::string_view(s.data() + j, N));
158
+ }
159
+ j += N;
160
+ }
161
+ return min_size;
162
+ }
163
+
164
+ // Add an external memory that contains the specified std::string to cord
165
+ static void AddNewStringBlock(const std::string& str, absl::Cord* dst) {
166
+ char* data = new char[str.size()];
167
+ memcpy(data, str.data(), str.size());
168
+ dst->Append(absl::MakeCordFromExternal(
169
+ absl::string_view(data, str.size()),
170
+ [](absl::string_view s) { delete[] s.data(); }));
171
+ }
172
+
173
+ // Make a Cord out of many different types of nodes.
174
+ static absl::Cord MakeComposite() {
175
+ absl::Cord cord;
176
+ cord.Append("the");
177
+ AddExternalMemory(" quick brown", &cord);
178
+ AddExternalMemory(" fox jumped", &cord);
179
+
180
+ absl::Cord full(" over");
181
+ AddExternalMemory(" the lazy", &full);
182
+ AddNewStringBlock(" dog slept the whole day away", &full);
183
+ absl::Cord substring = full.Subcord(0, 18);
184
+
185
+ // Make substring long enough to defeat the copying fast path in Append.
186
+ substring.Append(std::string(1000, '.'));
187
+ cord.Append(substring);
188
+ cord = cord.Subcord(0, cord.size() - 998); // Remove most of extra junk
189
+
190
+ return cord;
191
+ }
192
+
193
+ namespace absl {
194
+ ABSL_NAMESPACE_BEGIN
195
+
196
+ class CordTestPeer {
197
+ public:
198
+ static void ForEachChunk(
199
+ const Cord& c, absl::FunctionRef<void(absl::string_view)> callback) {
200
+ c.ForEachChunk(callback);
201
+ }
202
+
203
+ static bool IsTree(const Cord& c) { return c.contents_.is_tree(); }
204
+ static CordRep* Tree(const Cord& c) { return c.contents_.tree(); }
205
+
206
+ static cord_internal::CordzInfo* GetCordzInfo(const Cord& c) {
207
+ return c.contents_.cordz_info();
208
+ }
209
+
210
+ static Cord MakeSubstring(Cord src, size_t offset, size_t length) {
211
+ ABSL_RAW_CHECK(src.contents_.is_tree(), "Can not be inlined");
212
+ ABSL_RAW_CHECK(src.ExpectedChecksum() == absl::nullopt,
213
+ "Can not be hardened");
214
+ Cord cord;
215
+ auto* tree = cord_internal::SkipCrcNode(src.contents_.tree());
216
+ auto* rep = CordRepSubstring::Create(CordRep::Ref(tree), offset, length);
217
+ cord.contents_.EmplaceTree(rep, CordzUpdateTracker::kSubCord);
218
+ return cord;
219
+ }
220
+ };
221
+
222
+ ABSL_NAMESPACE_END
223
+ } // namespace absl
224
+
225
+ // The CordTest fixture runs all tests with and without Cord Btree enabled,
226
+ // and with our without expected CRCs being set on the subject Cords.
227
+ class CordTest : public testing::TestWithParam<int> {
228
+ public:
229
+ // Returns true if test is running with btree enabled.
230
+ bool UseCrc() const { return GetParam() == 2 || GetParam() == 3; }
231
+ void MaybeHarden(absl::Cord& c) {
232
+ if (UseCrc()) {
233
+ c.SetExpectedChecksum(1);
234
+ }
235
+ }
236
+ absl::Cord MaybeHardened(absl::Cord c) {
237
+ MaybeHarden(c);
238
+ return c;
239
+ }
240
+
241
+ // Returns human readable string representation of the test parameter.
242
+ static std::string ToString(testing::TestParamInfo<int> param) {
243
+ switch (param.param) {
244
+ case 0:
245
+ return "Btree";
246
+ case 1:
247
+ return "BtreeHardened";
248
+ default:
249
+ assert(false);
250
+ return "???";
251
+ }
252
+ }
253
+ };
254
+
255
+ INSTANTIATE_TEST_SUITE_P(WithParam, CordTest, testing::Values(0, 1),
256
+ CordTest::ToString);
257
+
258
+ TEST(CordRepFlat, AllFlatCapacities) {
259
+ // Explicitly and redundantly assert built-in min/max limits
260
+ static_assert(absl::cord_internal::kFlatOverhead < 32, "");
261
+ static_assert(absl::cord_internal::kMinFlatSize == 32, "");
262
+ static_assert(absl::cord_internal::kMaxLargeFlatSize == 256 << 10, "");
263
+ EXPECT_EQ(absl::cord_internal::TagToAllocatedSize(FLAT), 32);
264
+ EXPECT_EQ(absl::cord_internal::TagToAllocatedSize(MAX_FLAT_TAG), 256 << 10);
265
+
266
+ // Verify all tags to map perfectly back and forth, and
267
+ // that sizes are monotonically increasing.
268
+ size_t last_size = 0;
269
+ for (int tag = FLAT; tag <= MAX_FLAT_TAG; ++tag) {
270
+ size_t size = absl::cord_internal::TagToAllocatedSize(tag);
271
+ ASSERT_GT(size, last_size);
272
+ ASSERT_EQ(absl::cord_internal::TagToAllocatedSize(tag), size);
273
+ last_size = size;
274
+ }
275
+
276
+ // All flat size from 32 - 512 are 8 byte granularity
277
+ for (size_t size = 32; size <= 512; size += 8) {
278
+ ASSERT_EQ(absl::cord_internal::RoundUpForTag(size), size);
279
+ uint8_t tag = absl::cord_internal::AllocatedSizeToTag(size);
280
+ ASSERT_EQ(absl::cord_internal::TagToAllocatedSize(tag), size);
281
+ }
282
+
283
+ // All flat sizes from 512 - 8192 are 64 byte granularity
284
+ for (size_t size = 512; size <= 8192; size += 64) {
285
+ ASSERT_EQ(absl::cord_internal::RoundUpForTag(size), size);
286
+ uint8_t tag = absl::cord_internal::AllocatedSizeToTag(size);
287
+ ASSERT_EQ(absl::cord_internal::TagToAllocatedSize(tag), size);
288
+ }
289
+
290
+ // All flat sizes from 8KB to 256KB are 4KB granularity
291
+ for (size_t size = 8192; size <= 256 * 1024; size += 4 * 1024) {
292
+ ASSERT_EQ(absl::cord_internal::RoundUpForTag(size), size);
293
+ uint8_t tag = absl::cord_internal::AllocatedSizeToTag(size);
294
+ ASSERT_EQ(absl::cord_internal::TagToAllocatedSize(tag), size);
295
+ }
296
+ }
297
+
298
+ TEST(CordRepFlat, MaxFlatSize) {
299
+ CordRepFlat* flat = CordRepFlat::New(kMaxFlatLength);
300
+ EXPECT_EQ(flat->Capacity(), kMaxFlatLength);
301
+ CordRep::Unref(flat);
302
+
303
+ flat = CordRepFlat::New(kMaxFlatLength * 4);
304
+ EXPECT_EQ(flat->Capacity(), kMaxFlatLength);
305
+ CordRep::Unref(flat);
306
+ }
307
+
308
+ TEST(CordRepFlat, MaxLargeFlatSize) {
309
+ const size_t size = 256 * 1024 - kFlatOverhead;
310
+ CordRepFlat* flat = CordRepFlat::New(CordRepFlat::Large(), size);
311
+ EXPECT_GE(flat->Capacity(), size);
312
+ CordRep::Unref(flat);
313
+ }
314
+
315
+ TEST(CordRepFlat, AllFlatSizes) {
316
+ const size_t kMaxSize = 256 * 1024;
317
+ for (size_t size = 32; size <= kMaxSize; size *=2) {
318
+ const size_t length = size - kFlatOverhead - 1;
319
+ CordRepFlat* flat = CordRepFlat::New(CordRepFlat::Large(), length);
320
+ EXPECT_GE(flat->Capacity(), length);
321
+ memset(flat->Data(), 0xCD, flat->Capacity());
322
+ CordRep::Unref(flat);
323
+ }
324
+ }
325
+
326
+ TEST_P(CordTest, AllFlatSizes) {
327
+ using absl::strings_internal::CordTestAccess;
328
+
329
+ for (size_t s = 0; s < CordTestAccess::MaxFlatLength(); s++) {
330
+ // Make a string of length s.
331
+ std::string src;
332
+ while (src.size() < s) {
333
+ src.push_back('a' + (src.size() % 26));
334
+ }
335
+
336
+ absl::Cord dst(src);
337
+ MaybeHarden(dst);
338
+ EXPECT_EQ(std::string(dst), src) << s;
339
+ }
340
+ }
341
+
342
+ // We create a Cord at least 128GB in size using the fact that Cords can
343
+ // internally reference-count; thus the Cord is enormous without actually
344
+ // consuming very much memory.
345
+ TEST_P(CordTest, GigabyteCordFromExternal) {
346
+ const size_t one_gig = 1024U * 1024U * 1024U;
347
+ size_t max_size = 2 * one_gig;
348
+ if (sizeof(max_size) > 4) max_size = 128 * one_gig;
349
+
350
+ size_t length = 128 * 1024;
351
+ char* data = new char[length];
352
+ absl::Cord from = absl::MakeCordFromExternal(
353
+ absl::string_view(data, length),
354
+ [](absl::string_view sv) { delete[] sv.data(); });
355
+
356
+ // This loop may seem odd due to its combination of exponential doubling of
357
+ // size and incremental size increases. We do it incrementally to be sure the
358
+ // Cord will need rebalancing and will exercise code that, in the past, has
359
+ // caused crashes in production. We grow exponentially so that the code will
360
+ // execute in a reasonable amount of time.
361
+ absl::Cord c;
362
+ c.Append(from);
363
+ while (c.size() < max_size) {
364
+ c.Append(c);
365
+ c.Append(from);
366
+ c.Append(from);
367
+ c.Append(from);
368
+ c.Append(from);
369
+ MaybeHarden(c);
370
+ }
371
+
372
+ for (int i = 0; i < 1024; ++i) {
373
+ c.Append(from);
374
+ }
375
+ ABSL_RAW_LOG(INFO, "Made a Cord with %zu bytes!", c.size());
376
+ // Note: on a 32-bit build, this comes out to 2,818,048,000 bytes.
377
+ // Note: on a 64-bit build, this comes out to 171,932,385,280 bytes.
378
+ }
379
+
380
+ static absl::Cord MakeExternalCord(int size) {
381
+ char* buffer = new char[size];
382
+ memset(buffer, 'x', size);
383
+ absl::Cord cord;
384
+ cord.Append(absl::MakeCordFromExternal(
385
+ absl::string_view(buffer, size),
386
+ [](absl::string_view s) { delete[] s.data(); }));
387
+ return cord;
388
+ }
389
+
390
+ // Extern to fool clang that this is not constant. Needed to suppress
391
+ // a warning of unsafe code we want to test.
392
+ extern bool my_unique_true_boolean;
393
+ bool my_unique_true_boolean = true;
394
+
395
+ TEST_P(CordTest, Assignment) {
396
+ absl::Cord x(absl::string_view("hi there"));
397
+ absl::Cord y(x);
398
+ MaybeHarden(y);
399
+ ASSERT_EQ(x.ExpectedChecksum(), absl::nullopt);
400
+ ASSERT_EQ(std::string(x), "hi there");
401
+ ASSERT_EQ(std::string(y), "hi there");
402
+ ASSERT_TRUE(x == y);
403
+ ASSERT_TRUE(x <= y);
404
+ ASSERT_TRUE(y <= x);
405
+
406
+ x = absl::string_view("foo");
407
+ ASSERT_EQ(std::string(x), "foo");
408
+ ASSERT_EQ(std::string(y), "hi there");
409
+ ASSERT_TRUE(x < y);
410
+ ASSERT_TRUE(y > x);
411
+ ASSERT_TRUE(x != y);
412
+ ASSERT_TRUE(x <= y);
413
+ ASSERT_TRUE(y >= x);
414
+
415
+ x = "foo";
416
+ ASSERT_EQ(x, "foo");
417
+
418
+ // Test that going from inline rep to tree we don't leak memory.
419
+ std::vector<std::pair<absl::string_view, absl::string_view>>
420
+ test_string_pairs = {{"hi there", "foo"},
421
+ {"loooooong coooooord", "short cord"},
422
+ {"short cord", "loooooong coooooord"},
423
+ {"loooooong coooooord1", "loooooong coooooord2"}};
424
+ for (std::pair<absl::string_view, absl::string_view> test_strings :
425
+ test_string_pairs) {
426
+ absl::Cord tmp(test_strings.first);
427
+ absl::Cord z(std::move(tmp));
428
+ ASSERT_EQ(std::string(z), test_strings.first);
429
+ tmp = test_strings.second;
430
+ z = std::move(tmp);
431
+ ASSERT_EQ(std::string(z), test_strings.second);
432
+ }
433
+ {
434
+ // Test that self-move assignment doesn't crash/leak.
435
+ // Do not write such code!
436
+ absl::Cord my_small_cord("foo");
437
+ absl::Cord my_big_cord("loooooong coooooord");
438
+ // Bypass clang's warning on self move-assignment.
439
+ absl::Cord* my_small_alias =
440
+ my_unique_true_boolean ? &my_small_cord : &my_big_cord;
441
+ absl::Cord* my_big_alias =
442
+ !my_unique_true_boolean ? &my_small_cord : &my_big_cord;
443
+
444
+ *my_small_alias = std::move(my_small_cord);
445
+ *my_big_alias = std::move(my_big_cord);
446
+ // my_small_cord and my_big_cord are in an unspecified but valid
447
+ // state, and will be correctly destroyed here.
448
+ }
449
+ }
450
+
451
+ TEST_P(CordTest, StartsEndsWith) {
452
+ absl::Cord x(absl::string_view("abcde"));
453
+ MaybeHarden(x);
454
+ absl::Cord empty("");
455
+
456
+ ASSERT_TRUE(x.StartsWith(absl::Cord("abcde")));
457
+ ASSERT_TRUE(x.StartsWith(absl::Cord("abc")));
458
+ ASSERT_TRUE(x.StartsWith(absl::Cord("")));
459
+ ASSERT_TRUE(empty.StartsWith(absl::Cord("")));
460
+ ASSERT_TRUE(x.EndsWith(absl::Cord("abcde")));
461
+ ASSERT_TRUE(x.EndsWith(absl::Cord("cde")));
462
+ ASSERT_TRUE(x.EndsWith(absl::Cord("")));
463
+ ASSERT_TRUE(empty.EndsWith(absl::Cord("")));
464
+
465
+ ASSERT_TRUE(!x.StartsWith(absl::Cord("xyz")));
466
+ ASSERT_TRUE(!empty.StartsWith(absl::Cord("xyz")));
467
+ ASSERT_TRUE(!x.EndsWith(absl::Cord("xyz")));
468
+ ASSERT_TRUE(!empty.EndsWith(absl::Cord("xyz")));
469
+
470
+ ASSERT_TRUE(x.StartsWith("abcde"));
471
+ ASSERT_TRUE(x.StartsWith("abc"));
472
+ ASSERT_TRUE(x.StartsWith(""));
473
+ ASSERT_TRUE(empty.StartsWith(""));
474
+ ASSERT_TRUE(x.EndsWith("abcde"));
475
+ ASSERT_TRUE(x.EndsWith("cde"));
476
+ ASSERT_TRUE(x.EndsWith(""));
477
+ ASSERT_TRUE(empty.EndsWith(""));
478
+
479
+ ASSERT_TRUE(!x.StartsWith("xyz"));
480
+ ASSERT_TRUE(!empty.StartsWith("xyz"));
481
+ ASSERT_TRUE(!x.EndsWith("xyz"));
482
+ ASSERT_TRUE(!empty.EndsWith("xyz"));
483
+ }
484
+
485
+ TEST_P(CordTest, Subcord) {
486
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
487
+ const std::string s = RandomLowercaseString(&rng, 1024);
488
+
489
+ absl::Cord a;
490
+ AppendWithFragments(s, &rng, &a);
491
+ MaybeHarden(a);
492
+ ASSERT_EQ(s, std::string(a));
493
+
494
+ // Check subcords of a, from a variety of interesting points.
495
+ std::set<size_t> positions;
496
+ for (int i = 0; i <= 32; ++i) {
497
+ positions.insert(i);
498
+ positions.insert(i * 32 - 1);
499
+ positions.insert(i * 32);
500
+ positions.insert(i * 32 + 1);
501
+ positions.insert(a.size() - i);
502
+ }
503
+ positions.insert(237);
504
+ positions.insert(732);
505
+ for (size_t pos : positions) {
506
+ if (pos > a.size()) continue;
507
+ for (size_t end_pos : positions) {
508
+ if (end_pos < pos || end_pos > a.size()) continue;
509
+ absl::Cord sa = a.Subcord(pos, end_pos - pos);
510
+ ASSERT_EQ(absl::string_view(s).substr(pos, end_pos - pos),
511
+ std::string(sa))
512
+ << a;
513
+ if (pos != 0 || end_pos != a.size()) {
514
+ ASSERT_EQ(sa.ExpectedChecksum(), absl::nullopt);
515
+ }
516
+ }
517
+ }
518
+
519
+ // Do the same thing for an inline cord.
520
+ const std::string sh = "short";
521
+ absl::Cord c(sh);
522
+ for (size_t pos = 0; pos <= sh.size(); ++pos) {
523
+ for (size_t n = 0; n <= sh.size() - pos; ++n) {
524
+ absl::Cord sc = c.Subcord(pos, n);
525
+ ASSERT_EQ(sh.substr(pos, n), std::string(sc)) << c;
526
+ }
527
+ }
528
+
529
+ // Check subcords of subcords.
530
+ absl::Cord sa = a.Subcord(0, a.size());
531
+ std::string ss = s.substr(0, s.size());
532
+ while (sa.size() > 1) {
533
+ sa = sa.Subcord(1, sa.size() - 2);
534
+ ss = ss.substr(1, ss.size() - 2);
535
+ ASSERT_EQ(ss, std::string(sa)) << a;
536
+ if (HasFailure()) break; // halt cascade
537
+ }
538
+
539
+ // It is OK to ask for too much.
540
+ sa = a.Subcord(0, a.size() + 1);
541
+ EXPECT_EQ(s, std::string(sa));
542
+
543
+ // It is OK to ask for something beyond the end.
544
+ sa = a.Subcord(a.size() + 1, 0);
545
+ EXPECT_TRUE(sa.empty());
546
+ sa = a.Subcord(a.size() + 1, 1);
547
+ EXPECT_TRUE(sa.empty());
548
+ }
549
+
550
+ TEST_P(CordTest, Swap) {
551
+ absl::string_view a("Dexter");
552
+ absl::string_view b("Mandark");
553
+ absl::Cord x(a);
554
+ absl::Cord y(b);
555
+ MaybeHarden(x);
556
+ swap(x, y);
557
+ if (UseCrc()) {
558
+ ASSERT_EQ(x.ExpectedChecksum(), absl::nullopt);
559
+ ASSERT_EQ(y.ExpectedChecksum(), 1);
560
+ }
561
+ ASSERT_EQ(x, absl::Cord(b));
562
+ ASSERT_EQ(y, absl::Cord(a));
563
+ x.swap(y);
564
+ if (UseCrc()) {
565
+ ASSERT_EQ(x.ExpectedChecksum(), 1);
566
+ ASSERT_EQ(y.ExpectedChecksum(), absl::nullopt);
567
+ }
568
+ ASSERT_EQ(x, absl::Cord(a));
569
+ ASSERT_EQ(y, absl::Cord(b));
570
+ }
571
+
572
+ static void VerifyCopyToString(const absl::Cord& cord) {
573
+ std::string initially_empty;
574
+ absl::CopyCordToString(cord, &initially_empty);
575
+ EXPECT_EQ(initially_empty, cord);
576
+
577
+ constexpr size_t kInitialLength = 1024;
578
+ std::string has_initial_contents(kInitialLength, 'x');
579
+ const char* address_before_copy = has_initial_contents.data();
580
+ absl::CopyCordToString(cord, &has_initial_contents);
581
+ EXPECT_EQ(has_initial_contents, cord);
582
+
583
+ if (cord.size() <= kInitialLength) {
584
+ EXPECT_EQ(has_initial_contents.data(), address_before_copy)
585
+ << "CopyCordToString allocated new string storage; "
586
+ "has_initial_contents = \""
587
+ << has_initial_contents << "\"";
588
+ }
589
+ }
590
+
591
+ TEST_P(CordTest, CopyToString) {
592
+ VerifyCopyToString(absl::Cord()); // empty cords cannot carry CRCs
593
+ VerifyCopyToString(MaybeHardened(absl::Cord("small cord")));
594
+ VerifyCopyToString(MaybeHardened(
595
+ absl::MakeFragmentedCord({"fragmented ", "cord ", "to ", "test ",
596
+ "copying ", "to ", "a ", "string."})));
597
+ }
598
+
599
+ TEST_P(CordTest, AppendEmptyBuffer) {
600
+ absl::Cord cord;
601
+ cord.Append(absl::CordBuffer());
602
+ cord.Append(absl::CordBuffer::CreateWithDefaultLimit(2000));
603
+ }
604
+
605
+ TEST_P(CordTest, AppendEmptyBufferToFlat) {
606
+ absl::Cord cord(std::string(2000, 'x'));
607
+ cord.Append(absl::CordBuffer());
608
+ cord.Append(absl::CordBuffer::CreateWithDefaultLimit(2000));
609
+ }
610
+
611
+ TEST_P(CordTest, AppendEmptyBufferToTree) {
612
+ absl::Cord cord(std::string(2000, 'x'));
613
+ cord.Append(std::string(2000, 'y'));
614
+ cord.Append(absl::CordBuffer());
615
+ cord.Append(absl::CordBuffer::CreateWithDefaultLimit(2000));
616
+ }
617
+
618
+ TEST_P(CordTest, AppendSmallBuffer) {
619
+ absl::Cord cord;
620
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(3);
621
+ ASSERT_THAT(buffer.capacity(), ::testing::Le(15));
622
+ memcpy(buffer.data(), "Abc", 3);
623
+ buffer.SetLength(3);
624
+ cord.Append(std::move(buffer));
625
+ EXPECT_EQ(buffer.length(), 0); // NOLINT
626
+ EXPECT_GT(buffer.capacity(), 0); // NOLINT
627
+
628
+ buffer = absl::CordBuffer::CreateWithDefaultLimit(3);
629
+ memcpy(buffer.data(), "defgh", 5);
630
+ buffer.SetLength(5);
631
+ cord.Append(std::move(buffer));
632
+ EXPECT_EQ(buffer.length(), 0); // NOLINT
633
+ EXPECT_GT(buffer.capacity(), 0); // NOLINT
634
+
635
+ EXPECT_THAT(cord.Chunks(), ::testing::ElementsAre("Abcdefgh"));
636
+ }
637
+
638
+ TEST_P(CordTest, AppendAndPrependBufferArePrecise) {
639
+ // Create a cord large enough to force 40KB flats.
640
+ std::string test_data(absl::cord_internal::kMaxFlatLength * 10, 'x');
641
+ absl::Cord cord1(test_data);
642
+ absl::Cord cord2(test_data);
643
+ const size_t size1 = cord1.EstimatedMemoryUsage();
644
+ const size_t size2 = cord2.EstimatedMemoryUsage();
645
+
646
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(3);
647
+ memcpy(buffer.data(), "Abc", 3);
648
+ buffer.SetLength(3);
649
+ cord1.Append(std::move(buffer));
650
+
651
+ buffer = absl::CordBuffer::CreateWithDefaultLimit(3);
652
+ memcpy(buffer.data(), "Abc", 3);
653
+ buffer.SetLength(3);
654
+ cord2.Prepend(std::move(buffer));
655
+
656
+ #ifndef NDEBUG
657
+ // Allow 32 bytes new CordRepFlat, and 128 bytes for 'glue nodes'
658
+ constexpr size_t kMaxDelta = 128 + 32;
659
+ #else
660
+ // Allow 256 bytes extra for 'allocation debug overhead'
661
+ constexpr size_t kMaxDelta = 128 + 32 + 256;
662
+ #endif
663
+
664
+ EXPECT_LE(cord1.EstimatedMemoryUsage() - size1, kMaxDelta);
665
+ EXPECT_LE(cord2.EstimatedMemoryUsage() - size2, kMaxDelta);
666
+
667
+ EXPECT_EQ(cord1, absl::StrCat(test_data, "Abc"));
668
+ EXPECT_EQ(cord2, absl::StrCat("Abc", test_data));
669
+ }
670
+
671
+ TEST_P(CordTest, PrependSmallBuffer) {
672
+ absl::Cord cord;
673
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(3);
674
+ ASSERT_THAT(buffer.capacity(), ::testing::Le(15));
675
+ memcpy(buffer.data(), "Abc", 3);
676
+ buffer.SetLength(3);
677
+ cord.Prepend(std::move(buffer));
678
+ EXPECT_EQ(buffer.length(), 0); // NOLINT
679
+ EXPECT_GT(buffer.capacity(), 0); // NOLINT
680
+
681
+ buffer = absl::CordBuffer::CreateWithDefaultLimit(3);
682
+ memcpy(buffer.data(), "defgh", 5);
683
+ buffer.SetLength(5);
684
+ cord.Prepend(std::move(buffer));
685
+ EXPECT_EQ(buffer.length(), 0); // NOLINT
686
+ EXPECT_GT(buffer.capacity(), 0); // NOLINT
687
+
688
+ EXPECT_THAT(cord.Chunks(), ::testing::ElementsAre("defghAbc"));
689
+ }
690
+
691
+ TEST_P(CordTest, AppendLargeBuffer) {
692
+ absl::Cord cord;
693
+
694
+ std::string s1(700, '1');
695
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(s1.size());
696
+ memcpy(buffer.data(), s1.data(), s1.size());
697
+ buffer.SetLength(s1.size());
698
+ cord.Append(std::move(buffer));
699
+ EXPECT_EQ(buffer.length(), 0); // NOLINT
700
+ EXPECT_GT(buffer.capacity(), 0); // NOLINT
701
+
702
+ std::string s2(1000, '2');
703
+ buffer = absl::CordBuffer::CreateWithDefaultLimit(s2.size());
704
+ memcpy(buffer.data(), s2.data(), s2.size());
705
+ buffer.SetLength(s2.size());
706
+ cord.Append(std::move(buffer));
707
+ EXPECT_EQ(buffer.length(), 0); // NOLINT
708
+ EXPECT_GT(buffer.capacity(), 0); // NOLINT
709
+
710
+ EXPECT_THAT(cord.Chunks(), ::testing::ElementsAre(s1, s2));
711
+ }
712
+
713
+ TEST_P(CordTest, PrependLargeBuffer) {
714
+ absl::Cord cord;
715
+
716
+ std::string s1(700, '1');
717
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(s1.size());
718
+ memcpy(buffer.data(), s1.data(), s1.size());
719
+ buffer.SetLength(s1.size());
720
+ cord.Prepend(std::move(buffer));
721
+ EXPECT_EQ(buffer.length(), 0); // NOLINT
722
+ EXPECT_GT(buffer.capacity(), 0); // NOLINT
723
+
724
+ std::string s2(1000, '2');
725
+ buffer = absl::CordBuffer::CreateWithDefaultLimit(s2.size());
726
+ memcpy(buffer.data(), s2.data(), s2.size());
727
+ buffer.SetLength(s2.size());
728
+ cord.Prepend(std::move(buffer));
729
+ EXPECT_EQ(buffer.length(), 0); // NOLINT
730
+ EXPECT_GT(buffer.capacity(), 0); // NOLINT
731
+
732
+ EXPECT_THAT(cord.Chunks(), ::testing::ElementsAre(s2, s1));
733
+ }
734
+
735
+ class CordAppendBufferTest : public testing::TestWithParam<bool> {
736
+ public:
737
+ size_t is_default() const { return GetParam(); }
738
+
739
+ // Returns human readable string representation of the test parameter.
740
+ static std::string ToString(testing::TestParamInfo<bool> param) {
741
+ return param.param ? "DefaultLimit" : "CustomLimit";
742
+ }
743
+
744
+ size_t limit() const {
745
+ return is_default() ? absl::CordBuffer::kDefaultLimit
746
+ : absl::CordBuffer::kCustomLimit;
747
+ }
748
+
749
+ size_t maximum_payload() const {
750
+ return is_default() ? absl::CordBuffer::MaximumPayload()
751
+ : absl::CordBuffer::MaximumPayload(limit());
752
+ }
753
+
754
+ absl::CordBuffer GetAppendBuffer(absl::Cord& cord, size_t capacity,
755
+ size_t min_capacity = 16) {
756
+ return is_default()
757
+ ? cord.GetAppendBuffer(capacity, min_capacity)
758
+ : cord.GetCustomAppendBuffer(limit(), capacity, min_capacity);
759
+ }
760
+ };
761
+
762
+ INSTANTIATE_TEST_SUITE_P(WithParam, CordAppendBufferTest, testing::Bool(),
763
+ CordAppendBufferTest::ToString);
764
+
765
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnEmptyCord) {
766
+ absl::Cord cord;
767
+ absl::CordBuffer buffer = GetAppendBuffer(cord, 1000);
768
+ EXPECT_GE(buffer.capacity(), 1000);
769
+ EXPECT_EQ(buffer.length(), 0);
770
+ }
771
+
772
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnInlinedCord) {
773
+ static constexpr int kInlinedSize = sizeof(absl::CordBuffer) - 1;
774
+ for (int size : {6, kInlinedSize - 3, kInlinedSize - 2, 1000}) {
775
+ absl::Cord cord("Abc");
776
+ absl::CordBuffer buffer = GetAppendBuffer(cord, size, 1);
777
+ EXPECT_GE(buffer.capacity(), 3 + size);
778
+ EXPECT_EQ(buffer.length(), 3);
779
+ EXPECT_EQ(absl::string_view(buffer.data(), buffer.length()), "Abc");
780
+ EXPECT_TRUE(cord.empty());
781
+ }
782
+ }
783
+
784
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnInlinedCordCapacityCloseToMax) {
785
+ // Cover the use case where we have a non empty inlined cord with some size
786
+ // 'n', and ask for something like 'uint64_max - k', assuming internal logic
787
+ // could overflow on 'uint64_max - k + size', and return a valid, but
788
+ // inefficiently smaller buffer if it would provide is the max allowed size.
789
+ for (size_t dist_from_max = 0; dist_from_max <= 4; ++dist_from_max) {
790
+ absl::Cord cord("Abc");
791
+ size_t size = std::numeric_limits<size_t>::max() - dist_from_max;
792
+ absl::CordBuffer buffer = GetAppendBuffer(cord, size, 1);
793
+ EXPECT_GE(buffer.capacity(), maximum_payload());
794
+ EXPECT_EQ(buffer.length(), 3);
795
+ EXPECT_EQ(absl::string_view(buffer.data(), buffer.length()), "Abc");
796
+ EXPECT_TRUE(cord.empty());
797
+ }
798
+ }
799
+
800
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnFlat) {
801
+ // Create a cord with a single flat and extra capacity
802
+ absl::Cord cord;
803
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(500);
804
+ const size_t expected_capacity = buffer.capacity();
805
+ buffer.SetLength(3);
806
+ memcpy(buffer.data(), "Abc", 3);
807
+ cord.Append(std::move(buffer));
808
+
809
+ buffer = GetAppendBuffer(cord, 6);
810
+ EXPECT_EQ(buffer.capacity(), expected_capacity);
811
+ EXPECT_EQ(buffer.length(), 3);
812
+ EXPECT_EQ(absl::string_view(buffer.data(), buffer.length()), "Abc");
813
+ EXPECT_TRUE(cord.empty());
814
+ }
815
+
816
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnFlatWithoutMinCapacity) {
817
+ // Create a cord with a single flat and extra capacity
818
+ absl::Cord cord;
819
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(500);
820
+ buffer.SetLength(30);
821
+ memset(buffer.data(), 'x', 30);
822
+ cord.Append(std::move(buffer));
823
+
824
+ buffer = GetAppendBuffer(cord, 1000, 900);
825
+ EXPECT_GE(buffer.capacity(), 1000);
826
+ EXPECT_EQ(buffer.length(), 0);
827
+ EXPECT_EQ(cord, std::string(30, 'x'));
828
+ }
829
+
830
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnTree) {
831
+ RandomEngine rng;
832
+ for (int num_flats : {2, 3, 100}) {
833
+ // Create a cord with `num_flats` flats and extra capacity
834
+ absl::Cord cord;
835
+ std::string prefix;
836
+ std::string last;
837
+ for (int i = 0; i < num_flats - 1; ++i) {
838
+ prefix += last;
839
+ last = RandomLowercaseString(&rng, 10);
840
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(500);
841
+ buffer.SetLength(10);
842
+ memcpy(buffer.data(), last.data(), 10);
843
+ cord.Append(std::move(buffer));
844
+ }
845
+ absl::CordBuffer buffer = GetAppendBuffer(cord, 6);
846
+ EXPECT_GE(buffer.capacity(), 500);
847
+ EXPECT_EQ(buffer.length(), 10);
848
+ EXPECT_EQ(absl::string_view(buffer.data(), buffer.length()), last);
849
+ EXPECT_EQ(cord, prefix);
850
+ }
851
+ }
852
+
853
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnTreeWithoutMinCapacity) {
854
+ absl::Cord cord;
855
+ for (int i = 0; i < 2; ++i) {
856
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(500);
857
+ buffer.SetLength(3);
858
+ memcpy(buffer.data(), i ? "def" : "Abc", 3);
859
+ cord.Append(std::move(buffer));
860
+ }
861
+ absl::CordBuffer buffer = GetAppendBuffer(cord, 1000, 900);
862
+ EXPECT_GE(buffer.capacity(), 1000);
863
+ EXPECT_EQ(buffer.length(), 0);
864
+ EXPECT_EQ(cord, "Abcdef");
865
+ }
866
+
867
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnSubstring) {
868
+ // Create a large cord with a single flat and some extra capacity
869
+ absl::Cord cord;
870
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(500);
871
+ buffer.SetLength(450);
872
+ memset(buffer.data(), 'x', 450);
873
+ cord.Append(std::move(buffer));
874
+ cord.RemovePrefix(1);
875
+
876
+ // Deny on substring
877
+ buffer = GetAppendBuffer(cord, 6);
878
+ EXPECT_EQ(buffer.length(), 0);
879
+ EXPECT_EQ(cord, std::string(449, 'x'));
880
+ }
881
+
882
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnSharedCord) {
883
+ // Create a shared cord with a single flat and extra capacity
884
+ absl::Cord cord;
885
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(500);
886
+ buffer.SetLength(3);
887
+ memcpy(buffer.data(), "Abc", 3);
888
+ cord.Append(std::move(buffer));
889
+ absl::Cord shared_cord = cord;
890
+
891
+ // Deny on flat
892
+ buffer = GetAppendBuffer(cord, 6);
893
+ EXPECT_EQ(buffer.length(), 0);
894
+ EXPECT_EQ(cord, "Abc");
895
+
896
+ buffer = absl::CordBuffer::CreateWithDefaultLimit(500);
897
+ buffer.SetLength(3);
898
+ memcpy(buffer.data(), "def", 3);
899
+ cord.Append(std::move(buffer));
900
+ shared_cord = cord;
901
+
902
+ // Deny on tree
903
+ buffer = GetAppendBuffer(cord, 6);
904
+ EXPECT_EQ(buffer.length(), 0);
905
+ EXPECT_EQ(cord, "Abcdef");
906
+ }
907
+
908
+ TEST_P(CordTest, TryFlatEmpty) {
909
+ absl::Cord c;
910
+ EXPECT_EQ(c.TryFlat(), "");
911
+ }
912
+
913
+ TEST_P(CordTest, TryFlatFlat) {
914
+ absl::Cord c("hello");
915
+ MaybeHarden(c);
916
+ EXPECT_EQ(c.TryFlat(), "hello");
917
+ }
918
+
919
+ TEST_P(CordTest, TryFlatSubstrInlined) {
920
+ absl::Cord c("hello");
921
+ c.RemovePrefix(1);
922
+ MaybeHarden(c);
923
+ EXPECT_EQ(c.TryFlat(), "ello");
924
+ }
925
+
926
+ TEST_P(CordTest, TryFlatSubstrFlat) {
927
+ absl::Cord c("longer than 15 bytes");
928
+ absl::Cord sub = absl::CordTestPeer::MakeSubstring(c, 1, c.size() - 1);
929
+ MaybeHarden(sub);
930
+ EXPECT_EQ(sub.TryFlat(), "onger than 15 bytes");
931
+ }
932
+
933
+ TEST_P(CordTest, TryFlatConcat) {
934
+ absl::Cord c = absl::MakeFragmentedCord({"hel", "lo"});
935
+ MaybeHarden(c);
936
+ EXPECT_EQ(c.TryFlat(), absl::nullopt);
937
+ }
938
+
939
+ TEST_P(CordTest, TryFlatExternal) {
940
+ absl::Cord c = absl::MakeCordFromExternal("hell", [](absl::string_view) {});
941
+ MaybeHarden(c);
942
+ EXPECT_EQ(c.TryFlat(), "hell");
943
+ }
944
+
945
+ TEST_P(CordTest, TryFlatSubstrExternal) {
946
+ absl::Cord c = absl::MakeCordFromExternal("hell", [](absl::string_view) {});
947
+ absl::Cord sub = absl::CordTestPeer::MakeSubstring(c, 1, c.size() - 1);
948
+ MaybeHarden(sub);
949
+ EXPECT_EQ(sub.TryFlat(), "ell");
950
+ }
951
+
952
+ TEST_P(CordTest, TryFlatCommonlyAssumedInvariants) {
953
+ // The behavior tested below is not part of the API contract of Cord, but it's
954
+ // something we intend to be true in our current implementation. This test
955
+ // exists to detect and prevent accidental breakage of the implementation.
956
+ absl::string_view fragments[] = {"A fragmented test",
957
+ " cord",
958
+ " to test subcords",
959
+ " of ",
960
+ "a",
961
+ " cord for",
962
+ " each chunk "
963
+ "returned by the ",
964
+ "iterator"};
965
+ absl::Cord c = absl::MakeFragmentedCord(fragments);
966
+ MaybeHarden(c);
967
+ int fragment = 0;
968
+ int offset = 0;
969
+ absl::Cord::CharIterator itc = c.char_begin();
970
+ for (absl::string_view sv : c.Chunks()) {
971
+ absl::string_view expected = fragments[fragment];
972
+ absl::Cord subcord1 = c.Subcord(offset, sv.length());
973
+ absl::Cord subcord2 = absl::Cord::AdvanceAndRead(&itc, sv.size());
974
+ EXPECT_EQ(subcord1.TryFlat(), expected);
975
+ EXPECT_EQ(subcord2.TryFlat(), expected);
976
+ ++fragment;
977
+ offset += sv.length();
978
+ }
979
+ }
980
+
981
+ static bool IsFlat(const absl::Cord& c) {
982
+ return c.chunk_begin() == c.chunk_end() || ++c.chunk_begin() == c.chunk_end();
983
+ }
984
+
985
+ static void VerifyFlatten(absl::Cord c) {
986
+ std::string old_contents(c);
987
+ absl::string_view old_flat;
988
+ bool already_flat_and_non_empty = IsFlat(c) && !c.empty();
989
+ if (already_flat_and_non_empty) {
990
+ old_flat = *c.chunk_begin();
991
+ }
992
+ absl::string_view new_flat = c.Flatten();
993
+
994
+ // Verify that the contents of the flattened Cord are correct.
995
+ EXPECT_EQ(new_flat, old_contents);
996
+ EXPECT_EQ(std::string(c), old_contents);
997
+
998
+ // If the Cord contained data and was already flat, verify that the data
999
+ // wasn't copied.
1000
+ if (already_flat_and_non_empty) {
1001
+ EXPECT_EQ(old_flat.data(), new_flat.data())
1002
+ << "Allocated new memory even though the Cord was already flat.";
1003
+ }
1004
+
1005
+ // Verify that the flattened Cord is in fact flat.
1006
+ EXPECT_TRUE(IsFlat(c));
1007
+ }
1008
+
1009
+ TEST_P(CordTest, Flatten) {
1010
+ VerifyFlatten(absl::Cord());
1011
+ VerifyFlatten(MaybeHardened(absl::Cord("small cord")));
1012
+ VerifyFlatten(
1013
+ MaybeHardened(absl::Cord("larger than small buffer optimization")));
1014
+ VerifyFlatten(MaybeHardened(
1015
+ absl::MakeFragmentedCord({"small ", "fragmented ", "cord"})));
1016
+
1017
+ // Test with a cord that is longer than the largest flat buffer
1018
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
1019
+ VerifyFlatten(MaybeHardened(absl::Cord(RandomLowercaseString(&rng, 8192))));
1020
+ }
1021
+
1022
+ // Test data
1023
+ namespace {
1024
+ class TestData {
1025
+ private:
1026
+ std::vector<std::string> data_;
1027
+
1028
+ // Return a std::string of the specified length.
1029
+ static std::string MakeString(int length) {
1030
+ std::string result;
1031
+ char buf[30];
1032
+ snprintf(buf, sizeof(buf), "(%d)", length);
1033
+ while (result.size() < length) {
1034
+ result += buf;
1035
+ }
1036
+ result.resize(length);
1037
+ return result;
1038
+ }
1039
+
1040
+ public:
1041
+ TestData() {
1042
+ // short strings increasing in length by one
1043
+ for (int i = 0; i < 30; i++) {
1044
+ data_.push_back(MakeString(i));
1045
+ }
1046
+
1047
+ // strings around half kMaxFlatLength
1048
+ static const int kMaxFlatLength = 4096 - 9;
1049
+ static const int kHalf = kMaxFlatLength / 2;
1050
+
1051
+ for (int i = -10; i <= +10; i++) {
1052
+ data_.push_back(MakeString(kHalf + i));
1053
+ }
1054
+
1055
+ for (int i = -10; i <= +10; i++) {
1056
+ data_.push_back(MakeString(kMaxFlatLength + i));
1057
+ }
1058
+ }
1059
+
1060
+ size_t size() const { return data_.size(); }
1061
+ const std::string& data(size_t i) const { return data_[i]; }
1062
+ };
1063
+ } // namespace
1064
+
1065
+ TEST_P(CordTest, MultipleLengths) {
1066
+ TestData d;
1067
+ for (size_t i = 0; i < d.size(); i++) {
1068
+ std::string a = d.data(i);
1069
+
1070
+ { // Construct from Cord
1071
+ absl::Cord tmp(a);
1072
+ absl::Cord x(tmp);
1073
+ MaybeHarden(x);
1074
+ EXPECT_EQ(a, std::string(x)) << "'" << a << "'";
1075
+ }
1076
+
1077
+ { // Construct from absl::string_view
1078
+ absl::Cord x(a);
1079
+ MaybeHarden(x);
1080
+ EXPECT_EQ(a, std::string(x)) << "'" << a << "'";
1081
+ }
1082
+
1083
+ { // Append cord to self
1084
+ absl::Cord self(a);
1085
+ MaybeHarden(self);
1086
+ self.Append(self);
1087
+ EXPECT_EQ(a + a, std::string(self)) << "'" << a << "' + '" << a << "'";
1088
+ }
1089
+
1090
+ { // Prepend cord to self
1091
+ absl::Cord self(a);
1092
+ MaybeHarden(self);
1093
+ self.Prepend(self);
1094
+ EXPECT_EQ(a + a, std::string(self)) << "'" << a << "' + '" << a << "'";
1095
+ }
1096
+
1097
+ // Try to append/prepend others
1098
+ for (size_t j = 0; j < d.size(); j++) {
1099
+ std::string b = d.data(j);
1100
+
1101
+ { // CopyFrom Cord
1102
+ absl::Cord x(a);
1103
+ absl::Cord y(b);
1104
+ MaybeHarden(x);
1105
+ x = y;
1106
+ EXPECT_EQ(b, std::string(x)) << "'" << a << "' + '" << b << "'";
1107
+ }
1108
+
1109
+ { // CopyFrom absl::string_view
1110
+ absl::Cord x(a);
1111
+ MaybeHarden(x);
1112
+ x = b;
1113
+ EXPECT_EQ(b, std::string(x)) << "'" << a << "' + '" << b << "'";
1114
+ }
1115
+
1116
+ { // Cord::Append(Cord)
1117
+ absl::Cord x(a);
1118
+ absl::Cord y(b);
1119
+ MaybeHarden(x);
1120
+ x.Append(y);
1121
+ EXPECT_EQ(a + b, std::string(x)) << "'" << a << "' + '" << b << "'";
1122
+ }
1123
+
1124
+ { // Cord::Append(absl::string_view)
1125
+ absl::Cord x(a);
1126
+ MaybeHarden(x);
1127
+ x.Append(b);
1128
+ EXPECT_EQ(a + b, std::string(x)) << "'" << a << "' + '" << b << "'";
1129
+ }
1130
+
1131
+ { // Cord::Prepend(Cord)
1132
+ absl::Cord x(a);
1133
+ absl::Cord y(b);
1134
+ MaybeHarden(x);
1135
+ x.Prepend(y);
1136
+ EXPECT_EQ(b + a, std::string(x)) << "'" << b << "' + '" << a << "'";
1137
+ }
1138
+
1139
+ { // Cord::Prepend(absl::string_view)
1140
+ absl::Cord x(a);
1141
+ MaybeHarden(x);
1142
+ x.Prepend(b);
1143
+ EXPECT_EQ(b + a, std::string(x)) << "'" << b << "' + '" << a << "'";
1144
+ }
1145
+ }
1146
+ }
1147
+ }
1148
+
1149
+ namespace {
1150
+
1151
+ TEST_P(CordTest, RemoveSuffixWithExternalOrSubstring) {
1152
+ absl::Cord cord = absl::MakeCordFromExternal(
1153
+ "foo bar baz", [](absl::string_view s) { DoNothing(s, nullptr); });
1154
+ EXPECT_EQ("foo bar baz", std::string(cord));
1155
+
1156
+ MaybeHarden(cord);
1157
+
1158
+ // This RemoveSuffix() will wrap the EXTERNAL node in a SUBSTRING node.
1159
+ cord.RemoveSuffix(4);
1160
+ EXPECT_EQ("foo bar", std::string(cord));
1161
+
1162
+ MaybeHarden(cord);
1163
+
1164
+ // This RemoveSuffix() will adjust the SUBSTRING node in-place.
1165
+ cord.RemoveSuffix(4);
1166
+ EXPECT_EQ("foo", std::string(cord));
1167
+ }
1168
+
1169
+ TEST_P(CordTest, RemoveSuffixMakesZeroLengthNode) {
1170
+ absl::Cord c;
1171
+ c.Append(absl::Cord(std::string(100, 'x')));
1172
+ absl::Cord other_ref = c; // Prevent inplace appends
1173
+ MaybeHarden(c);
1174
+ c.Append(absl::Cord(std::string(200, 'y')));
1175
+ c.RemoveSuffix(200);
1176
+ EXPECT_EQ(std::string(100, 'x'), std::string(c));
1177
+ }
1178
+
1179
+ } // namespace
1180
+
1181
+ // CordSpliceTest contributed by hendrie.
1182
+ namespace {
1183
+
1184
+ // Create a cord with an external memory block filled with 'z'
1185
+ absl::Cord CordWithZedBlock(size_t size) {
1186
+ char* data = new char[size];
1187
+ if (size > 0) {
1188
+ memset(data, 'z', size);
1189
+ }
1190
+ absl::Cord cord = absl::MakeCordFromExternal(
1191
+ absl::string_view(data, size),
1192
+ [](absl::string_view s) { delete[] s.data(); });
1193
+ return cord;
1194
+ }
1195
+
1196
+ // Establish that ZedBlock does what we think it does.
1197
+ TEST_P(CordTest, CordSpliceTestZedBlock) {
1198
+ absl::Cord blob = CordWithZedBlock(10);
1199
+ MaybeHarden(blob);
1200
+ EXPECT_EQ(10, blob.size());
1201
+ std::string s;
1202
+ absl::CopyCordToString(blob, &s);
1203
+ EXPECT_EQ("zzzzzzzzzz", s);
1204
+ }
1205
+
1206
+ TEST_P(CordTest, CordSpliceTestZedBlock0) {
1207
+ absl::Cord blob = CordWithZedBlock(0);
1208
+ MaybeHarden(blob);
1209
+ EXPECT_EQ(0, blob.size());
1210
+ std::string s;
1211
+ absl::CopyCordToString(blob, &s);
1212
+ EXPECT_EQ("", s);
1213
+ }
1214
+
1215
+ TEST_P(CordTest, CordSpliceTestZedBlockSuffix1) {
1216
+ absl::Cord blob = CordWithZedBlock(10);
1217
+ MaybeHarden(blob);
1218
+ EXPECT_EQ(10, blob.size());
1219
+ absl::Cord suffix(blob);
1220
+ suffix.RemovePrefix(9);
1221
+ EXPECT_EQ(1, suffix.size());
1222
+ std::string s;
1223
+ absl::CopyCordToString(suffix, &s);
1224
+ EXPECT_EQ("z", s);
1225
+ }
1226
+
1227
+ // Remove all of a prefix block
1228
+ TEST_P(CordTest, CordSpliceTestZedBlockSuffix0) {
1229
+ absl::Cord blob = CordWithZedBlock(10);
1230
+ MaybeHarden(blob);
1231
+ EXPECT_EQ(10, blob.size());
1232
+ absl::Cord suffix(blob);
1233
+ suffix.RemovePrefix(10);
1234
+ EXPECT_EQ(0, suffix.size());
1235
+ std::string s;
1236
+ absl::CopyCordToString(suffix, &s);
1237
+ EXPECT_EQ("", s);
1238
+ }
1239
+
1240
+ absl::Cord BigCord(size_t len, char v) {
1241
+ std::string s(len, v);
1242
+ return absl::Cord(s);
1243
+ }
1244
+
1245
+ // Splice block into cord.
1246
+ absl::Cord SpliceCord(const absl::Cord& blob, int64_t offset,
1247
+ const absl::Cord& block) {
1248
+ ABSL_RAW_CHECK(offset >= 0, "");
1249
+ ABSL_RAW_CHECK(offset + block.size() <= blob.size(), "");
1250
+ absl::Cord result(blob);
1251
+ result.RemoveSuffix(blob.size() - offset);
1252
+ result.Append(block);
1253
+ absl::Cord suffix(blob);
1254
+ suffix.RemovePrefix(offset + block.size());
1255
+ result.Append(suffix);
1256
+ ABSL_RAW_CHECK(blob.size() == result.size(), "");
1257
+ return result;
1258
+ }
1259
+
1260
+ // Taking an empty suffix of a block breaks appending.
1261
+ TEST_P(CordTest, CordSpliceTestRemoveEntireBlock1) {
1262
+ absl::Cord zero = CordWithZedBlock(10);
1263
+ MaybeHarden(zero);
1264
+ absl::Cord suffix(zero);
1265
+ suffix.RemovePrefix(10);
1266
+ absl::Cord result;
1267
+ result.Append(suffix);
1268
+ }
1269
+
1270
+ TEST_P(CordTest, CordSpliceTestRemoveEntireBlock2) {
1271
+ absl::Cord zero = CordWithZedBlock(10);
1272
+ MaybeHarden(zero);
1273
+ absl::Cord prefix(zero);
1274
+ prefix.RemoveSuffix(10);
1275
+ absl::Cord suffix(zero);
1276
+ suffix.RemovePrefix(10);
1277
+ absl::Cord result(prefix);
1278
+ result.Append(suffix);
1279
+ }
1280
+
1281
+ TEST_P(CordTest, CordSpliceTestRemoveEntireBlock3) {
1282
+ absl::Cord blob = CordWithZedBlock(10);
1283
+ absl::Cord block = BigCord(10, 'b');
1284
+ MaybeHarden(blob);
1285
+ MaybeHarden(block);
1286
+ blob = SpliceCord(blob, 0, block);
1287
+ }
1288
+
1289
+ struct CordCompareTestCase {
1290
+ template <typename LHS, typename RHS>
1291
+ CordCompareTestCase(const LHS& lhs, const RHS& rhs, bool use_crc)
1292
+ : lhs_cord(lhs), rhs_cord(rhs) {
1293
+ if (use_crc) {
1294
+ lhs_cord.SetExpectedChecksum(1);
1295
+ }
1296
+ }
1297
+
1298
+ absl::Cord lhs_cord;
1299
+ absl::Cord rhs_cord;
1300
+ };
1301
+
1302
+ const auto sign = [](int x) { return x == 0 ? 0 : (x > 0 ? 1 : -1); };
1303
+
1304
+ void VerifyComparison(const CordCompareTestCase& test_case) {
1305
+ std::string lhs_string(test_case.lhs_cord);
1306
+ std::string rhs_string(test_case.rhs_cord);
1307
+ int expected = sign(lhs_string.compare(rhs_string));
1308
+ EXPECT_EQ(expected, test_case.lhs_cord.Compare(test_case.rhs_cord))
1309
+ << "LHS=" << lhs_string << "; RHS=" << rhs_string;
1310
+ EXPECT_EQ(expected, test_case.lhs_cord.Compare(rhs_string))
1311
+ << "LHS=" << lhs_string << "; RHS=" << rhs_string;
1312
+ EXPECT_EQ(-expected, test_case.rhs_cord.Compare(test_case.lhs_cord))
1313
+ << "LHS=" << rhs_string << "; RHS=" << lhs_string;
1314
+ EXPECT_EQ(-expected, test_case.rhs_cord.Compare(lhs_string))
1315
+ << "LHS=" << rhs_string << "; RHS=" << lhs_string;
1316
+ }
1317
+
1318
+ TEST_P(CordTest, Compare) {
1319
+ absl::Cord subcord("aaaaaBBBBBcccccDDDDD");
1320
+ subcord = subcord.Subcord(3, 10);
1321
+
1322
+ absl::Cord tmp("aaaaaaaaaaaaaaaa");
1323
+ tmp.Append("BBBBBBBBBBBBBBBB");
1324
+ absl::Cord concat = absl::Cord("cccccccccccccccc");
1325
+ concat.Append("DDDDDDDDDDDDDDDD");
1326
+ concat.Prepend(tmp);
1327
+
1328
+ absl::Cord concat2("aaaaaaaaaaaaa");
1329
+ concat2.Append("aaaBBBBBBBBBBBBBBBBccccc");
1330
+ concat2.Append("cccccccccccDDDDDDDDDDDDDD");
1331
+ concat2.Append("DD");
1332
+
1333
+ const bool use_crc = UseCrc();
1334
+
1335
+ std::vector<CordCompareTestCase> test_cases = {{
1336
+ // Inline cords
1337
+ {"abcdef", "abcdef", use_crc},
1338
+ {"abcdef", "abcdee", use_crc},
1339
+ {"abcdef", "abcdeg", use_crc},
1340
+ {"bbcdef", "abcdef", use_crc},
1341
+ {"bbcdef", "abcdeg", use_crc},
1342
+ {"abcdefa", "abcdef", use_crc},
1343
+ {"abcdef", "abcdefa", use_crc},
1344
+
1345
+ // Small flat cords
1346
+ {"aaaaaBBBBBcccccDDDDD", "aaaaaBBBBBcccccDDDDD", use_crc},
1347
+ {"aaaaaBBBBBcccccDDDDD", "aaaaaBBBBBxccccDDDDD", use_crc},
1348
+ {"aaaaaBBBBBcxcccDDDDD", "aaaaaBBBBBcccccDDDDD", use_crc},
1349
+ {"aaaaaBBBBBxccccDDDDD", "aaaaaBBBBBcccccDDDDX", use_crc},
1350
+ {"aaaaaBBBBBcccccDDDDDa", "aaaaaBBBBBcccccDDDDD", use_crc},
1351
+ {"aaaaaBBBBBcccccDDDDD", "aaaaaBBBBBcccccDDDDDa", use_crc},
1352
+
1353
+ // Subcords
1354
+ {subcord, subcord, use_crc},
1355
+ {subcord, "aaBBBBBccc", use_crc},
1356
+ {subcord, "aaBBBBBccd", use_crc},
1357
+ {subcord, "aaBBBBBccb", use_crc},
1358
+ {subcord, "aaBBBBBxcb", use_crc},
1359
+ {subcord, "aaBBBBBccca", use_crc},
1360
+ {subcord, "aaBBBBBcc", use_crc},
1361
+
1362
+ // Concats
1363
+ {concat, concat, use_crc},
1364
+ {concat,
1365
+ "aaaaaaaaaaaaaaaaBBBBBBBBBBBBBBBBccccccccccccccccDDDDDDDDDDDDDDDD",
1366
+ use_crc},
1367
+ {concat,
1368
+ "aaaaaaaaaaaaaaaaBBBBBBBBBBBBBBBBcccccccccccccccxDDDDDDDDDDDDDDDD",
1369
+ use_crc},
1370
+ {concat,
1371
+ "aaaaaaaaaaaaaaaaBBBBBBBBBBBBBBBBacccccccccccccccDDDDDDDDDDDDDDDD",
1372
+ use_crc},
1373
+ {concat,
1374
+ "aaaaaaaaaaaaaaaaBBBBBBBBBBBBBBBBccccccccccccccccDDDDDDDDDDDDDDD",
1375
+ use_crc},
1376
+ {concat,
1377
+ "aaaaaaaaaaaaaaaaBBBBBBBBBBBBBBBBccccccccccccccccDDDDDDDDDDDDDDDDe",
1378
+ use_crc},
1379
+
1380
+ {concat, concat2, use_crc},
1381
+ }};
1382
+
1383
+ for (const auto& tc : test_cases) {
1384
+ VerifyComparison(tc);
1385
+ }
1386
+ }
1387
+
1388
+ TEST_P(CordTest, CompareAfterAssign) {
1389
+ absl::Cord a("aaaaaa1111111");
1390
+ absl::Cord b("aaaaaa2222222");
1391
+ MaybeHarden(a);
1392
+ a = "cccccc";
1393
+ b = "cccccc";
1394
+ EXPECT_EQ(a, b);
1395
+ EXPECT_FALSE(a < b);
1396
+
1397
+ a = "aaaa";
1398
+ b = "bbbbb";
1399
+ a = "";
1400
+ b = "";
1401
+ EXPECT_EQ(a, b);
1402
+ EXPECT_FALSE(a < b);
1403
+ }
1404
+
1405
+ // Test CompareTo() and ComparePrefix() against string and substring
1406
+ // comparison methods from basic_string.
1407
+ static void TestCompare(const absl::Cord& c, const absl::Cord& d,
1408
+ RandomEngine* rng) {
1409
+ typedef std::basic_string<uint8_t> ustring;
1410
+ ustring cs(reinterpret_cast<const uint8_t*>(std::string(c).data()), c.size());
1411
+ ustring ds(reinterpret_cast<const uint8_t*>(std::string(d).data()), d.size());
1412
+ // ustring comparison is ideal because we expect Cord comparisons to be
1413
+ // based on unsigned byte comparisons regardless of whether char is signed.
1414
+ int expected = sign(cs.compare(ds));
1415
+ EXPECT_EQ(expected, sign(c.Compare(d))) << c << ", " << d;
1416
+ }
1417
+
1418
+ TEST_P(CordTest, CompareComparisonIsUnsigned) {
1419
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
1420
+ std::uniform_int_distribution<uint32_t> uniform_uint8(0, 255);
1421
+ char x = static_cast<char>(uniform_uint8(rng));
1422
+ TestCompare(
1423
+ absl::Cord(std::string(GetUniformRandomUpTo(&rng, 100), x)),
1424
+ absl::Cord(std::string(GetUniformRandomUpTo(&rng, 100), x ^ 0x80)), &rng);
1425
+ }
1426
+
1427
+ TEST_P(CordTest, CompareRandomComparisons) {
1428
+ const int kIters = 5000;
1429
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
1430
+
1431
+ int n = GetUniformRandomUpTo(&rng, 5000);
1432
+ absl::Cord a[] = {MakeExternalCord(n),
1433
+ absl::Cord("ant"),
1434
+ absl::Cord("elephant"),
1435
+ absl::Cord("giraffe"),
1436
+ absl::Cord(std::string(GetUniformRandomUpTo(&rng, 100),
1437
+ GetUniformRandomUpTo(&rng, 100))),
1438
+ absl::Cord(""),
1439
+ absl::Cord("x"),
1440
+ absl::Cord("A"),
1441
+ absl::Cord("B"),
1442
+ absl::Cord("C")};
1443
+ for (int i = 0; i < kIters; i++) {
1444
+ absl::Cord c, d;
1445
+ for (int j = 0; j < (i % 7) + 1; j++) {
1446
+ c.Append(a[GetUniformRandomUpTo(&rng, ABSL_ARRAYSIZE(a))]);
1447
+ d.Append(a[GetUniformRandomUpTo(&rng, ABSL_ARRAYSIZE(a))]);
1448
+ }
1449
+ std::bernoulli_distribution coin_flip(0.5);
1450
+ MaybeHarden(c);
1451
+ MaybeHarden(d);
1452
+ TestCompare(coin_flip(rng) ? c : absl::Cord(std::string(c)),
1453
+ coin_flip(rng) ? d : absl::Cord(std::string(d)), &rng);
1454
+ }
1455
+ }
1456
+
1457
+ template <typename T1, typename T2>
1458
+ void CompareOperators() {
1459
+ const T1 a("a");
1460
+ const T2 b("b");
1461
+
1462
+ EXPECT_TRUE(a == a);
1463
+ // For pointer type (i.e. `const char*`), operator== compares the address
1464
+ // instead of the string, so `a == const char*("a")` isn't necessarily true.
1465
+ EXPECT_TRUE(std::is_pointer<T1>::value || a == T1("a"));
1466
+ EXPECT_TRUE(std::is_pointer<T2>::value || a == T2("a"));
1467
+ EXPECT_FALSE(a == b);
1468
+
1469
+ EXPECT_TRUE(a != b);
1470
+ EXPECT_FALSE(a != a);
1471
+
1472
+ EXPECT_TRUE(a < b);
1473
+ EXPECT_FALSE(b < a);
1474
+
1475
+ EXPECT_TRUE(b > a);
1476
+ EXPECT_FALSE(a > b);
1477
+
1478
+ EXPECT_TRUE(a >= a);
1479
+ EXPECT_TRUE(b >= a);
1480
+ EXPECT_FALSE(a >= b);
1481
+
1482
+ EXPECT_TRUE(a <= a);
1483
+ EXPECT_TRUE(a <= b);
1484
+ EXPECT_FALSE(b <= a);
1485
+ }
1486
+
1487
+ TEST_P(CordTest, ComparisonOperators_Cord_Cord) {
1488
+ CompareOperators<absl::Cord, absl::Cord>();
1489
+ }
1490
+
1491
+ TEST_P(CordTest, ComparisonOperators_Cord_StringPiece) {
1492
+ CompareOperators<absl::Cord, absl::string_view>();
1493
+ }
1494
+
1495
+ TEST_P(CordTest, ComparisonOperators_StringPiece_Cord) {
1496
+ CompareOperators<absl::string_view, absl::Cord>();
1497
+ }
1498
+
1499
+ TEST_P(CordTest, ComparisonOperators_Cord_string) {
1500
+ CompareOperators<absl::Cord, std::string>();
1501
+ }
1502
+
1503
+ TEST_P(CordTest, ComparisonOperators_string_Cord) {
1504
+ CompareOperators<std::string, absl::Cord>();
1505
+ }
1506
+
1507
+ TEST_P(CordTest, ComparisonOperators_stdstring_Cord) {
1508
+ CompareOperators<std::string, absl::Cord>();
1509
+ }
1510
+
1511
+ TEST_P(CordTest, ComparisonOperators_Cord_stdstring) {
1512
+ CompareOperators<absl::Cord, std::string>();
1513
+ }
1514
+
1515
+ TEST_P(CordTest, ComparisonOperators_charstar_Cord) {
1516
+ CompareOperators<const char*, absl::Cord>();
1517
+ }
1518
+
1519
+ TEST_P(CordTest, ComparisonOperators_Cord_charstar) {
1520
+ CompareOperators<absl::Cord, const char*>();
1521
+ }
1522
+
1523
+ TEST_P(CordTest, ConstructFromExternalReleaserInvoked) {
1524
+ // Empty external memory means the releaser should be called immediately.
1525
+ {
1526
+ bool invoked = false;
1527
+ auto releaser = [&invoked](absl::string_view) { invoked = true; };
1528
+ {
1529
+ auto c = absl::MakeCordFromExternal("", releaser);
1530
+ EXPECT_TRUE(invoked);
1531
+ }
1532
+ }
1533
+
1534
+ // If the size of the data is small enough, a future constructor
1535
+ // implementation may copy the bytes and immediately invoke the releaser
1536
+ // instead of creating an external node. We make a large dummy std::string to
1537
+ // make this test independent of such an optimization.
1538
+ std::string large_dummy(2048, 'c');
1539
+ {
1540
+ bool invoked = false;
1541
+ auto releaser = [&invoked](absl::string_view) { invoked = true; };
1542
+ {
1543
+ auto c = absl::MakeCordFromExternal(large_dummy, releaser);
1544
+ EXPECT_FALSE(invoked);
1545
+ }
1546
+ EXPECT_TRUE(invoked);
1547
+ }
1548
+
1549
+ {
1550
+ bool invoked = false;
1551
+ auto releaser = [&invoked](absl::string_view) { invoked = true; };
1552
+ {
1553
+ absl::Cord copy;
1554
+ {
1555
+ auto c = absl::MakeCordFromExternal(large_dummy, releaser);
1556
+ copy = c;
1557
+ EXPECT_FALSE(invoked);
1558
+ }
1559
+ EXPECT_FALSE(invoked);
1560
+ }
1561
+ EXPECT_TRUE(invoked);
1562
+ }
1563
+ }
1564
+
1565
+ TEST_P(CordTest, ConstructFromExternalCompareContents) {
1566
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
1567
+
1568
+ for (int length = 1; length <= 2048; length *= 2) {
1569
+ std::string data = RandomLowercaseString(&rng, length);
1570
+ auto* external = new std::string(data);
1571
+ auto cord =
1572
+ absl::MakeCordFromExternal(*external, [external](absl::string_view sv) {
1573
+ EXPECT_EQ(external->data(), sv.data());
1574
+ EXPECT_EQ(external->size(), sv.size());
1575
+ delete external;
1576
+ });
1577
+ MaybeHarden(cord);
1578
+ EXPECT_EQ(data, cord);
1579
+ }
1580
+ }
1581
+
1582
+ TEST_P(CordTest, ConstructFromExternalLargeReleaser) {
1583
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
1584
+ constexpr size_t kLength = 256;
1585
+ std::string data = RandomLowercaseString(&rng, kLength);
1586
+ std::array<char, kLength> data_array;
1587
+ for (size_t i = 0; i < kLength; ++i) data_array[i] = data[i];
1588
+ bool invoked = false;
1589
+ auto releaser = [data_array, &invoked](absl::string_view data) {
1590
+ EXPECT_EQ(data, absl::string_view(data_array.data(), data_array.size()));
1591
+ invoked = true;
1592
+ };
1593
+ (void)MaybeHardened(absl::MakeCordFromExternal(data, releaser));
1594
+ EXPECT_TRUE(invoked);
1595
+ }
1596
+
1597
+ TEST_P(CordTest, ConstructFromExternalFunctionPointerReleaser) {
1598
+ static absl::string_view data("hello world");
1599
+ static bool invoked;
1600
+ auto* releaser =
1601
+ static_cast<void (*)(absl::string_view)>([](absl::string_view sv) {
1602
+ EXPECT_EQ(data, sv);
1603
+ invoked = true;
1604
+ });
1605
+ invoked = false;
1606
+ (void)MaybeHardened(absl::MakeCordFromExternal(data, releaser));
1607
+ EXPECT_TRUE(invoked);
1608
+
1609
+ invoked = false;
1610
+ (void)MaybeHardened(absl::MakeCordFromExternal(data, *releaser));
1611
+ EXPECT_TRUE(invoked);
1612
+ }
1613
+
1614
+ TEST_P(CordTest, ConstructFromExternalMoveOnlyReleaser) {
1615
+ struct Releaser {
1616
+ explicit Releaser(bool* invoked) : invoked(invoked) {}
1617
+ Releaser(Releaser&& other) noexcept : invoked(other.invoked) {}
1618
+ void operator()(absl::string_view) const { *invoked = true; }
1619
+
1620
+ bool* invoked;
1621
+ };
1622
+
1623
+ bool invoked = false;
1624
+ (void)MaybeHardened(absl::MakeCordFromExternal("dummy", Releaser(&invoked)));
1625
+ EXPECT_TRUE(invoked);
1626
+ }
1627
+
1628
+ TEST_P(CordTest, ConstructFromExternalNoArgLambda) {
1629
+ bool invoked = false;
1630
+ (void)MaybeHardened(
1631
+ absl::MakeCordFromExternal("dummy", [&invoked]() { invoked = true; }));
1632
+ EXPECT_TRUE(invoked);
1633
+ }
1634
+
1635
+ TEST_P(CordTest, ConstructFromExternalStringViewArgLambda) {
1636
+ bool invoked = false;
1637
+ (void)MaybeHardened(absl::MakeCordFromExternal(
1638
+ "dummy", [&invoked](absl::string_view) { invoked = true; }));
1639
+ EXPECT_TRUE(invoked);
1640
+ }
1641
+
1642
+ TEST_P(CordTest, ConstructFromExternalNonTrivialReleaserDestructor) {
1643
+ struct Releaser {
1644
+ explicit Releaser(bool* destroyed) : destroyed(destroyed) {}
1645
+ ~Releaser() { *destroyed = true; }
1646
+ void operator()(absl::string_view) const {}
1647
+
1648
+ bool* destroyed;
1649
+ };
1650
+
1651
+ bool destroyed = false;
1652
+ Releaser releaser(&destroyed);
1653
+ (void)MaybeHardened(absl::MakeCordFromExternal("dummy", releaser));
1654
+ EXPECT_TRUE(destroyed);
1655
+ }
1656
+
1657
+ TEST_P(CordTest, ConstructFromExternalReferenceQualifierOverloads) {
1658
+ enum InvokedAs { kMissing, kLValue, kRValue };
1659
+ enum CopiedAs { kNone, kMove, kCopy };
1660
+ struct Tracker {
1661
+ CopiedAs copied_as = kNone;
1662
+ InvokedAs invoked_as = kMissing;
1663
+
1664
+ void Record(InvokedAs rhs) {
1665
+ ASSERT_EQ(invoked_as, kMissing);
1666
+ invoked_as = rhs;
1667
+ }
1668
+
1669
+ void Record(CopiedAs rhs) {
1670
+ if (copied_as == kNone || rhs == kCopy) copied_as = rhs;
1671
+ }
1672
+ } tracker;
1673
+
1674
+ class Releaser {
1675
+ public:
1676
+ explicit Releaser(Tracker* tracker) : tr_(tracker) { *tracker = Tracker(); }
1677
+ Releaser(Releaser&& rhs) : tr_(rhs.tr_) { tr_->Record(kMove); }
1678
+ Releaser(const Releaser& rhs) : tr_(rhs.tr_) { tr_->Record(kCopy); }
1679
+
1680
+ void operator()(absl::string_view) & { tr_->Record(kLValue); }
1681
+ void operator()(absl::string_view) && { tr_->Record(kRValue); }
1682
+
1683
+ private:
1684
+ Tracker* tr_;
1685
+ };
1686
+
1687
+ const Releaser releaser1(&tracker);
1688
+ (void)MaybeHardened(absl::MakeCordFromExternal("", releaser1));
1689
+ EXPECT_EQ(tracker.copied_as, kCopy);
1690
+ EXPECT_EQ(tracker.invoked_as, kRValue);
1691
+
1692
+ const Releaser releaser2(&tracker);
1693
+ (void)MaybeHardened(absl::MakeCordFromExternal("", releaser2));
1694
+ EXPECT_EQ(tracker.copied_as, kCopy);
1695
+ EXPECT_EQ(tracker.invoked_as, kRValue);
1696
+
1697
+ Releaser releaser3(&tracker);
1698
+ (void)MaybeHardened(absl::MakeCordFromExternal("", std::move(releaser3)));
1699
+ EXPECT_EQ(tracker.copied_as, kMove);
1700
+ EXPECT_EQ(tracker.invoked_as, kRValue);
1701
+
1702
+ Releaser releaser4(&tracker);
1703
+ (void)MaybeHardened(absl::MakeCordFromExternal("dummy", releaser4));
1704
+ EXPECT_EQ(tracker.copied_as, kCopy);
1705
+ EXPECT_EQ(tracker.invoked_as, kRValue);
1706
+
1707
+ const Releaser releaser5(&tracker);
1708
+ (void)MaybeHardened(absl::MakeCordFromExternal("dummy", releaser5));
1709
+ EXPECT_EQ(tracker.copied_as, kCopy);
1710
+ EXPECT_EQ(tracker.invoked_as, kRValue);
1711
+
1712
+ Releaser releaser6(&tracker);
1713
+ (void)MaybeHardened(absl::MakeCordFromExternal("foo", std::move(releaser6)));
1714
+ EXPECT_EQ(tracker.copied_as, kMove);
1715
+ EXPECT_EQ(tracker.invoked_as, kRValue);
1716
+ }
1717
+
1718
+ TEST_P(CordTest, ExternalMemoryBasicUsage) {
1719
+ static const char* strings[] = {"", "hello", "there"};
1720
+ for (const char* str : strings) {
1721
+ absl::Cord dst("(prefix)");
1722
+ MaybeHarden(dst);
1723
+ AddExternalMemory(str, &dst);
1724
+ MaybeHarden(dst);
1725
+ dst.Append("(suffix)");
1726
+ EXPECT_EQ((std::string("(prefix)") + str + std::string("(suffix)")),
1727
+ std::string(dst));
1728
+ }
1729
+ }
1730
+
1731
+ TEST_P(CordTest, ExternalMemoryRemovePrefixSuffix) {
1732
+ // Exhaustively try all sub-strings.
1733
+ absl::Cord cord = MakeComposite();
1734
+ std::string s = std::string(cord);
1735
+ for (int offset = 0; offset <= s.size(); offset++) {
1736
+ for (int length = 0; length <= s.size() - offset; length++) {
1737
+ absl::Cord result(cord);
1738
+ MaybeHarden(result);
1739
+ result.RemovePrefix(offset);
1740
+ MaybeHarden(result);
1741
+ result.RemoveSuffix(result.size() - length);
1742
+ EXPECT_EQ(s.substr(offset, length), std::string(result))
1743
+ << offset << " " << length;
1744
+ }
1745
+ }
1746
+ }
1747
+
1748
+ TEST_P(CordTest, ExternalMemoryGet) {
1749
+ absl::Cord cord("hello");
1750
+ AddExternalMemory(" world!", &cord);
1751
+ MaybeHarden(cord);
1752
+ AddExternalMemory(" how are ", &cord);
1753
+ cord.Append(" you?");
1754
+ MaybeHarden(cord);
1755
+ std::string s = std::string(cord);
1756
+ for (int i = 0; i < s.size(); i++) {
1757
+ EXPECT_EQ(s[i], cord[i]);
1758
+ }
1759
+ }
1760
+
1761
+ // CordMemoryUsage tests verify the correctness of the EstimatedMemoryUsage()
1762
+ // We use whiteboxed expectations based on our knowledge of the layout and size
1763
+ // of empty and inlined cords, and flat nodes.
1764
+
1765
+ constexpr auto kFairShare = absl::CordMemoryAccounting::kFairShare;
1766
+
1767
+ // Creates a cord of `n` `c` values, making sure no string stealing occurs.
1768
+ absl::Cord MakeCord(size_t n, char c) {
1769
+ const std::string s(n, c);
1770
+ return absl::Cord(s);
1771
+ }
1772
+
1773
+ TEST(CordTest, CordMemoryUsageEmpty) {
1774
+ absl::Cord cord;
1775
+ EXPECT_EQ(sizeof(absl::Cord), cord.EstimatedMemoryUsage());
1776
+ EXPECT_EQ(sizeof(absl::Cord), cord.EstimatedMemoryUsage(kFairShare));
1777
+ }
1778
+
1779
+ TEST(CordTest, CordMemoryUsageInlined) {
1780
+ absl::Cord a("hello");
1781
+ EXPECT_EQ(a.EstimatedMemoryUsage(), sizeof(absl::Cord));
1782
+ EXPECT_EQ(a.EstimatedMemoryUsage(kFairShare), sizeof(absl::Cord));
1783
+ }
1784
+
1785
+ TEST(CordTest, CordMemoryUsageExternalMemory) {
1786
+ absl::Cord cord;
1787
+ AddExternalMemory(std::string(1000, 'x'), &cord);
1788
+ const size_t expected =
1789
+ sizeof(absl::Cord) + 1000 + sizeof(CordRepExternal) + sizeof(intptr_t);
1790
+ EXPECT_EQ(cord.EstimatedMemoryUsage(), expected);
1791
+ EXPECT_EQ(cord.EstimatedMemoryUsage(kFairShare), expected);
1792
+ }
1793
+
1794
+ TEST(CordTest, CordMemoryUsageFlat) {
1795
+ absl::Cord cord = MakeCord(1000, 'a');
1796
+ const size_t flat_size =
1797
+ absl::CordTestPeer::Tree(cord)->flat()->AllocatedSize();
1798
+ EXPECT_EQ(cord.EstimatedMemoryUsage(), sizeof(absl::Cord) + flat_size);
1799
+ EXPECT_EQ(cord.EstimatedMemoryUsage(kFairShare),
1800
+ sizeof(absl::Cord) + flat_size);
1801
+ }
1802
+
1803
+ TEST(CordTest, CordMemoryUsageSubStringSharedFlat) {
1804
+ absl::Cord flat = MakeCord(2000, 'a');
1805
+ const size_t flat_size =
1806
+ absl::CordTestPeer::Tree(flat)->flat()->AllocatedSize();
1807
+ absl::Cord cord = flat.Subcord(500, 1000);
1808
+ EXPECT_EQ(cord.EstimatedMemoryUsage(),
1809
+ sizeof(absl::Cord) + sizeof(CordRepSubstring) + flat_size);
1810
+ EXPECT_EQ(cord.EstimatedMemoryUsage(kFairShare),
1811
+ sizeof(absl::Cord) + sizeof(CordRepSubstring) + flat_size / 2);
1812
+ }
1813
+
1814
+ TEST(CordTest, CordMemoryUsageFlatShared) {
1815
+ absl::Cord shared = MakeCord(1000, 'a');
1816
+ absl::Cord cord(shared);
1817
+ const size_t flat_size =
1818
+ absl::CordTestPeer::Tree(cord)->flat()->AllocatedSize();
1819
+ EXPECT_EQ(cord.EstimatedMemoryUsage(), sizeof(absl::Cord) + flat_size);
1820
+ EXPECT_EQ(cord.EstimatedMemoryUsage(kFairShare),
1821
+ sizeof(absl::Cord) + flat_size / 2);
1822
+ }
1823
+
1824
+ TEST(CordTest, CordMemoryUsageFlatHardenedAndShared) {
1825
+ absl::Cord shared = MakeCord(1000, 'a');
1826
+ absl::Cord cord(shared);
1827
+ const size_t flat_size =
1828
+ absl::CordTestPeer::Tree(cord)->flat()->AllocatedSize();
1829
+ cord.SetExpectedChecksum(1);
1830
+ EXPECT_EQ(cord.EstimatedMemoryUsage(),
1831
+ sizeof(absl::Cord) + sizeof(CordRepCrc) + flat_size);
1832
+ EXPECT_EQ(cord.EstimatedMemoryUsage(kFairShare),
1833
+ sizeof(absl::Cord) + sizeof(CordRepCrc) + flat_size / 2);
1834
+
1835
+ absl::Cord cord2(cord);
1836
+ EXPECT_EQ(cord2.EstimatedMemoryUsage(),
1837
+ sizeof(absl::Cord) + sizeof(CordRepCrc) + flat_size);
1838
+ EXPECT_EQ(cord2.EstimatedMemoryUsage(kFairShare),
1839
+ sizeof(absl::Cord) + (sizeof(CordRepCrc) + flat_size / 2) / 2);
1840
+ }
1841
+
1842
+ TEST(CordTest, CordMemoryUsageBTree) {
1843
+ absl::Cord cord1;
1844
+ size_t flats1_size = 0;
1845
+ absl::Cord flats1[4] = {MakeCord(1000, 'a'), MakeCord(1100, 'a'),
1846
+ MakeCord(1200, 'a'), MakeCord(1300, 'a')};
1847
+ for (absl::Cord flat : flats1) {
1848
+ flats1_size += absl::CordTestPeer::Tree(flat)->flat()->AllocatedSize();
1849
+ cord1.Append(std::move(flat));
1850
+ }
1851
+
1852
+ // Make sure the created cord is a BTREE tree. Under some builds such as
1853
+ // windows DLL, we may have ODR like effects on the flag, meaning the DLL
1854
+ // code will run with the picked up default.
1855
+ if (!absl::CordTestPeer::Tree(cord1)->IsBtree()) {
1856
+ ABSL_RAW_LOG(WARNING, "Cord library code not respecting btree flag");
1857
+ return;
1858
+ }
1859
+
1860
+ size_t rep1_size = sizeof(CordRepBtree) + flats1_size;
1861
+ size_t rep1_shared_size = sizeof(CordRepBtree) + flats1_size / 2;
1862
+
1863
+ EXPECT_EQ(cord1.EstimatedMemoryUsage(), sizeof(absl::Cord) + rep1_size);
1864
+ EXPECT_EQ(cord1.EstimatedMemoryUsage(kFairShare),
1865
+ sizeof(absl::Cord) + rep1_shared_size);
1866
+
1867
+ absl::Cord cord2;
1868
+ size_t flats2_size = 0;
1869
+ absl::Cord flats2[4] = {MakeCord(600, 'a'), MakeCord(700, 'a'),
1870
+ MakeCord(800, 'a'), MakeCord(900, 'a')};
1871
+ for (absl::Cord& flat : flats2) {
1872
+ flats2_size += absl::CordTestPeer::Tree(flat)->flat()->AllocatedSize();
1873
+ cord2.Append(std::move(flat));
1874
+ }
1875
+ size_t rep2_size = sizeof(CordRepBtree) + flats2_size;
1876
+
1877
+ EXPECT_EQ(cord2.EstimatedMemoryUsage(), sizeof(absl::Cord) + rep2_size);
1878
+ EXPECT_EQ(cord2.EstimatedMemoryUsage(kFairShare),
1879
+ sizeof(absl::Cord) + rep2_size);
1880
+
1881
+ absl::Cord cord(cord1);
1882
+ cord.Append(std::move(cord2));
1883
+
1884
+ EXPECT_EQ(cord.EstimatedMemoryUsage(),
1885
+ sizeof(absl::Cord) + sizeof(CordRepBtree) + rep1_size + rep2_size);
1886
+ EXPECT_EQ(cord.EstimatedMemoryUsage(kFairShare),
1887
+ sizeof(absl::Cord) + sizeof(CordRepBtree) + rep1_shared_size / 2 +
1888
+ rep2_size);
1889
+ }
1890
+
1891
+ // Regtest for a change that had to be rolled back because it expanded out
1892
+ // of the InlineRep too soon, which was observable through MemoryUsage().
1893
+ TEST_P(CordTest, CordMemoryUsageInlineRep) {
1894
+ constexpr size_t kMaxInline = 15; // Cord::InlineRep::N
1895
+ const std::string small_string(kMaxInline, 'x');
1896
+ absl::Cord c1(small_string);
1897
+
1898
+ absl::Cord c2;
1899
+ c2.Append(small_string);
1900
+ EXPECT_EQ(c1, c2);
1901
+ EXPECT_EQ(c1.EstimatedMemoryUsage(), c2.EstimatedMemoryUsage());
1902
+ }
1903
+
1904
+ } // namespace
1905
+
1906
+ // Regtest for 7510292 (fix a bug introduced by 7465150)
1907
+ TEST_P(CordTest, Concat_Append) {
1908
+ // Create a rep of type CONCAT
1909
+ absl::Cord s1("foobarbarbarbarbar");
1910
+ MaybeHarden(s1);
1911
+ s1.Append("abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefg");
1912
+ size_t size = s1.size();
1913
+
1914
+ // Create a copy of s1 and append to it.
1915
+ absl::Cord s2 = s1;
1916
+ MaybeHarden(s2);
1917
+ s2.Append("x");
1918
+
1919
+ // 7465150 modifies s1 when it shouldn't.
1920
+ EXPECT_EQ(s1.size(), size);
1921
+ EXPECT_EQ(s2.size(), size + 1);
1922
+ }
1923
+
1924
+ TEST_P(CordTest, DiabolicalGrowth) {
1925
+ // This test exercises a diabolical Append(<one char>) on a cord, making the
1926
+ // cord shared before each Append call resulting in a terribly fragmented
1927
+ // resulting cord.
1928
+ // TODO(b/183983616): Apply some minimum compaction when copying a shared
1929
+ // source cord into a mutable copy for updates in CordRepRing.
1930
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
1931
+ const std::string expected = RandomLowercaseString(&rng, 5000);
1932
+ absl::Cord cord;
1933
+ for (char c : expected) {
1934
+ absl::Cord shared(cord);
1935
+ cord.Append(absl::string_view(&c, 1));
1936
+ MaybeHarden(cord);
1937
+ }
1938
+ std::string value;
1939
+ absl::CopyCordToString(cord, &value);
1940
+ EXPECT_EQ(value, expected);
1941
+ ABSL_RAW_LOG(INFO, "Diabolical size allocated = %zu",
1942
+ cord.EstimatedMemoryUsage());
1943
+ }
1944
+
1945
+ // The following tests check support for >4GB cords in 64-bit binaries, and
1946
+ // 2GB-4GB cords in 32-bit binaries. This function returns the large cord size
1947
+ // that's appropriate for the binary.
1948
+
1949
+ // Construct a huge cord with the specified valid prefix.
1950
+ static absl::Cord MakeHuge(absl::string_view prefix) {
1951
+ absl::Cord cord;
1952
+ if (sizeof(size_t) > 4) {
1953
+ // In 64-bit binaries, test 64-bit Cord support.
1954
+ const size_t size =
1955
+ static_cast<size_t>(std::numeric_limits<uint32_t>::max()) + 314;
1956
+ cord.Append(absl::MakeCordFromExternal(
1957
+ absl::string_view(prefix.data(), size),
1958
+ [](absl::string_view s) { DoNothing(s, nullptr); }));
1959
+ } else {
1960
+ // Cords are limited to 32-bit lengths in 32-bit binaries. The following
1961
+ // tests check for use of "signed int" to represent Cord length/offset.
1962
+ // However absl::string_view does not allow lengths >= (1u<<31), so we need
1963
+ // to append in two parts;
1964
+ const size_t s1 = (1u << 31) - 1;
1965
+ // For shorter cord, `Append` copies the data rather than allocating a new
1966
+ // node. The threshold is currently set to 511, so `s2` needs to be bigger
1967
+ // to not trigger the copy.
1968
+ const size_t s2 = 600;
1969
+ cord.Append(absl::MakeCordFromExternal(
1970
+ absl::string_view(prefix.data(), s1),
1971
+ [](absl::string_view s) { DoNothing(s, nullptr); }));
1972
+ cord.Append(absl::MakeCordFromExternal(
1973
+ absl::string_view("", s2),
1974
+ [](absl::string_view s) { DoNothing(s, nullptr); }));
1975
+ }
1976
+ return cord;
1977
+ }
1978
+
1979
+ TEST_P(CordTest, HugeCord) {
1980
+ absl::Cord cord = MakeHuge("huge cord");
1981
+ MaybeHarden(cord);
1982
+
1983
+ const size_t acceptable_delta =
1984
+ 100 + (UseCrc() ? sizeof(absl::cord_internal::CordRepCrc) : 0);
1985
+ EXPECT_LE(cord.size(), cord.EstimatedMemoryUsage());
1986
+ EXPECT_GE(cord.size() + acceptable_delta, cord.EstimatedMemoryUsage());
1987
+ }
1988
+
1989
+ // Tests that Append() works ok when handed a self reference
1990
+ TEST_P(CordTest, AppendSelf) {
1991
+ // Test the empty case.
1992
+ absl::Cord empty;
1993
+ MaybeHarden(empty);
1994
+ empty.Append(empty);
1995
+ ASSERT_EQ(empty, "");
1996
+
1997
+ // We run the test until data is ~16K
1998
+ // This guarantees it covers small, medium and large data.
1999
+ std::string control_data = "Abc";
2000
+ absl::Cord data(control_data);
2001
+ while (control_data.length() < 0x4000) {
2002
+ MaybeHarden(data);
2003
+ data.Append(data);
2004
+ control_data.append(control_data);
2005
+ ASSERT_EQ(control_data, data);
2006
+ }
2007
+ }
2008
+
2009
+ TEST_P(CordTest, MakeFragmentedCordFromInitializerList) {
2010
+ absl::Cord fragmented =
2011
+ absl::MakeFragmentedCord({"A ", "fragmented ", "Cord"});
2012
+
2013
+ MaybeHarden(fragmented);
2014
+
2015
+ EXPECT_EQ("A fragmented Cord", fragmented);
2016
+
2017
+ auto chunk_it = fragmented.chunk_begin();
2018
+
2019
+ ASSERT_TRUE(chunk_it != fragmented.chunk_end());
2020
+ EXPECT_EQ("A ", *chunk_it);
2021
+
2022
+ ASSERT_TRUE(++chunk_it != fragmented.chunk_end());
2023
+ EXPECT_EQ("fragmented ", *chunk_it);
2024
+
2025
+ ASSERT_TRUE(++chunk_it != fragmented.chunk_end());
2026
+ EXPECT_EQ("Cord", *chunk_it);
2027
+
2028
+ ASSERT_TRUE(++chunk_it == fragmented.chunk_end());
2029
+ }
2030
+
2031
+ TEST_P(CordTest, MakeFragmentedCordFromVector) {
2032
+ std::vector<absl::string_view> chunks = {"A ", "fragmented ", "Cord"};
2033
+ absl::Cord fragmented = absl::MakeFragmentedCord(chunks);
2034
+
2035
+ MaybeHarden(fragmented);
2036
+
2037
+ EXPECT_EQ("A fragmented Cord", fragmented);
2038
+
2039
+ auto chunk_it = fragmented.chunk_begin();
2040
+
2041
+ ASSERT_TRUE(chunk_it != fragmented.chunk_end());
2042
+ EXPECT_EQ("A ", *chunk_it);
2043
+
2044
+ ASSERT_TRUE(++chunk_it != fragmented.chunk_end());
2045
+ EXPECT_EQ("fragmented ", *chunk_it);
2046
+
2047
+ ASSERT_TRUE(++chunk_it != fragmented.chunk_end());
2048
+ EXPECT_EQ("Cord", *chunk_it);
2049
+
2050
+ ASSERT_TRUE(++chunk_it == fragmented.chunk_end());
2051
+ }
2052
+
2053
+ TEST_P(CordTest, CordChunkIteratorTraits) {
2054
+ static_assert(std::is_copy_constructible<absl::Cord::ChunkIterator>::value,
2055
+ "");
2056
+ static_assert(std::is_copy_assignable<absl::Cord::ChunkIterator>::value, "");
2057
+
2058
+ // Move semantics to satisfy swappable via std::swap
2059
+ static_assert(std::is_move_constructible<absl::Cord::ChunkIterator>::value,
2060
+ "");
2061
+ static_assert(std::is_move_assignable<absl::Cord::ChunkIterator>::value, "");
2062
+
2063
+ static_assert(
2064
+ std::is_same<
2065
+ std::iterator_traits<absl::Cord::ChunkIterator>::iterator_category,
2066
+ std::input_iterator_tag>::value,
2067
+ "");
2068
+ static_assert(
2069
+ std::is_same<std::iterator_traits<absl::Cord::ChunkIterator>::value_type,
2070
+ absl::string_view>::value,
2071
+ "");
2072
+ static_assert(
2073
+ std::is_same<
2074
+ std::iterator_traits<absl::Cord::ChunkIterator>::difference_type,
2075
+ ptrdiff_t>::value,
2076
+ "");
2077
+ static_assert(
2078
+ std::is_same<std::iterator_traits<absl::Cord::ChunkIterator>::pointer,
2079
+ const absl::string_view*>::value,
2080
+ "");
2081
+ static_assert(
2082
+ std::is_same<std::iterator_traits<absl::Cord::ChunkIterator>::reference,
2083
+ absl::string_view>::value,
2084
+ "");
2085
+ }
2086
+
2087
+ static void VerifyChunkIterator(const absl::Cord& cord,
2088
+ size_t expected_chunks) {
2089
+ EXPECT_EQ(cord.chunk_begin() == cord.chunk_end(), cord.empty()) << cord;
2090
+ EXPECT_EQ(cord.chunk_begin() != cord.chunk_end(), !cord.empty());
2091
+
2092
+ absl::Cord::ChunkRange range = cord.Chunks();
2093
+ EXPECT_EQ(range.begin() == range.end(), cord.empty());
2094
+ EXPECT_EQ(range.begin() != range.end(), !cord.empty());
2095
+
2096
+ std::string content(cord);
2097
+ size_t pos = 0;
2098
+ auto pre_iter = cord.chunk_begin(), post_iter = cord.chunk_begin();
2099
+ size_t n_chunks = 0;
2100
+ while (pre_iter != cord.chunk_end() && post_iter != cord.chunk_end()) {
2101
+ EXPECT_FALSE(pre_iter == cord.chunk_end()); // NOLINT: explicitly test ==
2102
+ EXPECT_FALSE(post_iter == cord.chunk_end()); // NOLINT
2103
+
2104
+ EXPECT_EQ(pre_iter, post_iter);
2105
+ EXPECT_EQ(*pre_iter, *post_iter);
2106
+
2107
+ EXPECT_EQ(pre_iter->data(), (*pre_iter).data());
2108
+ EXPECT_EQ(pre_iter->size(), (*pre_iter).size());
2109
+
2110
+ absl::string_view chunk = *pre_iter;
2111
+ EXPECT_FALSE(chunk.empty());
2112
+ EXPECT_LE(pos + chunk.size(), content.size());
2113
+ EXPECT_EQ(absl::string_view(content.c_str() + pos, chunk.size()), chunk);
2114
+
2115
+ int n_equal_iterators = 0;
2116
+ for (absl::Cord::ChunkIterator it = range.begin(); it != range.end();
2117
+ ++it) {
2118
+ n_equal_iterators += static_cast<int>(it == pre_iter);
2119
+ }
2120
+ EXPECT_EQ(n_equal_iterators, 1);
2121
+
2122
+ ++pre_iter;
2123
+ EXPECT_EQ(*post_iter++, chunk);
2124
+
2125
+ pos += chunk.size();
2126
+ ++n_chunks;
2127
+ }
2128
+ EXPECT_EQ(expected_chunks, n_chunks);
2129
+ EXPECT_EQ(pos, content.size());
2130
+ EXPECT_TRUE(pre_iter == cord.chunk_end()); // NOLINT: explicitly test ==
2131
+ EXPECT_TRUE(post_iter == cord.chunk_end()); // NOLINT
2132
+ }
2133
+
2134
+ TEST_P(CordTest, CordChunkIteratorOperations) {
2135
+ absl::Cord empty_cord;
2136
+ VerifyChunkIterator(empty_cord, 0);
2137
+
2138
+ absl::Cord small_buffer_cord("small cord");
2139
+ MaybeHarden(small_buffer_cord);
2140
+ VerifyChunkIterator(small_buffer_cord, 1);
2141
+
2142
+ absl::Cord flat_node_cord("larger than small buffer optimization");
2143
+ MaybeHarden(flat_node_cord);
2144
+ VerifyChunkIterator(flat_node_cord, 1);
2145
+
2146
+ VerifyChunkIterator(MaybeHardened(absl::MakeFragmentedCord(
2147
+ {"a ", "small ", "fragmented ", "cord ", "for ",
2148
+ "testing ", "chunk ", "iterations."})),
2149
+ 8);
2150
+
2151
+ absl::Cord reused_nodes_cord(std::string(40, 'c'));
2152
+ reused_nodes_cord.Prepend(absl::Cord(std::string(40, 'b')));
2153
+ MaybeHarden(reused_nodes_cord);
2154
+ reused_nodes_cord.Prepend(absl::Cord(std::string(40, 'a')));
2155
+ size_t expected_chunks = 3;
2156
+ for (int i = 0; i < 8; ++i) {
2157
+ reused_nodes_cord.Prepend(reused_nodes_cord);
2158
+ MaybeHarden(reused_nodes_cord);
2159
+ expected_chunks *= 2;
2160
+ VerifyChunkIterator(reused_nodes_cord, expected_chunks);
2161
+ }
2162
+
2163
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
2164
+ absl::Cord flat_cord(RandomLowercaseString(&rng, 256));
2165
+ absl::Cord subcords;
2166
+ for (int i = 0; i < 128; ++i) subcords.Prepend(flat_cord.Subcord(i, 128));
2167
+ VerifyChunkIterator(subcords, 128);
2168
+ }
2169
+
2170
+
2171
+ TEST_P(CordTest, AdvanceAndReadOnDataEdge) {
2172
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
2173
+ const std::string data = RandomLowercaseString(&rng, 2000);
2174
+ for (bool as_flat : {true, false}) {
2175
+ SCOPED_TRACE(as_flat ? "Flat" : "External");
2176
+
2177
+ absl::Cord cord =
2178
+ as_flat ? absl::Cord(data)
2179
+ : absl::MakeCordFromExternal(data, [](absl::string_view) {});
2180
+ auto it = cord.Chars().begin();
2181
+ #if !defined(NDEBUG) || ABSL_OPTION_HARDENED
2182
+ EXPECT_DEATH_IF_SUPPORTED(cord.AdvanceAndRead(&it, 2001), ".*");
2183
+ #endif
2184
+
2185
+ it = cord.Chars().begin();
2186
+ absl::Cord frag = cord.AdvanceAndRead(&it, 2000);
2187
+ EXPECT_EQ(frag, data);
2188
+ EXPECT_TRUE(it == cord.Chars().end());
2189
+
2190
+ it = cord.Chars().begin();
2191
+ frag = cord.AdvanceAndRead(&it, 200);
2192
+ EXPECT_EQ(frag, data.substr(0, 200));
2193
+ EXPECT_FALSE(it == cord.Chars().end());
2194
+
2195
+ frag = cord.AdvanceAndRead(&it, 1500);
2196
+ EXPECT_EQ(frag, data.substr(200, 1500));
2197
+ EXPECT_FALSE(it == cord.Chars().end());
2198
+
2199
+ frag = cord.AdvanceAndRead(&it, 300);
2200
+ EXPECT_EQ(frag, data.substr(1700, 300));
2201
+ EXPECT_TRUE(it == cord.Chars().end());
2202
+ }
2203
+ }
2204
+
2205
+ TEST_P(CordTest, AdvanceAndReadOnSubstringDataEdge) {
2206
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
2207
+ const std::string data = RandomLowercaseString(&rng, 2500);
2208
+ for (bool as_flat : {true, false}) {
2209
+ SCOPED_TRACE(as_flat ? "Flat" : "External");
2210
+
2211
+ absl::Cord cord =
2212
+ as_flat ? absl::Cord(data)
2213
+ : absl::MakeCordFromExternal(data, [](absl::string_view) {});
2214
+ cord = cord.Subcord(200, 2000);
2215
+ const std::string substr = data.substr(200, 2000);
2216
+
2217
+ auto it = cord.Chars().begin();
2218
+ #if !defined(NDEBUG) || ABSL_OPTION_HARDENED
2219
+ EXPECT_DEATH_IF_SUPPORTED(cord.AdvanceAndRead(&it, 2001), ".*");
2220
+ #endif
2221
+
2222
+ it = cord.Chars().begin();
2223
+ absl::Cord frag = cord.AdvanceAndRead(&it, 2000);
2224
+ EXPECT_EQ(frag, substr);
2225
+ EXPECT_TRUE(it == cord.Chars().end());
2226
+
2227
+ it = cord.Chars().begin();
2228
+ frag = cord.AdvanceAndRead(&it, 200);
2229
+ EXPECT_EQ(frag, substr.substr(0, 200));
2230
+ EXPECT_FALSE(it == cord.Chars().end());
2231
+
2232
+ frag = cord.AdvanceAndRead(&it, 1500);
2233
+ EXPECT_EQ(frag, substr.substr(200, 1500));
2234
+ EXPECT_FALSE(it == cord.Chars().end());
2235
+
2236
+ frag = cord.AdvanceAndRead(&it, 300);
2237
+ EXPECT_EQ(frag, substr.substr(1700, 300));
2238
+ EXPECT_TRUE(it == cord.Chars().end());
2239
+ }
2240
+ }
2241
+
2242
+ TEST_P(CordTest, CharIteratorTraits) {
2243
+ static_assert(std::is_copy_constructible<absl::Cord::CharIterator>::value,
2244
+ "");
2245
+ static_assert(std::is_copy_assignable<absl::Cord::CharIterator>::value, "");
2246
+
2247
+ // Move semantics to satisfy swappable via std::swap
2248
+ static_assert(std::is_move_constructible<absl::Cord::CharIterator>::value,
2249
+ "");
2250
+ static_assert(std::is_move_assignable<absl::Cord::CharIterator>::value, "");
2251
+
2252
+ static_assert(
2253
+ std::is_same<
2254
+ std::iterator_traits<absl::Cord::CharIterator>::iterator_category,
2255
+ std::input_iterator_tag>::value,
2256
+ "");
2257
+ static_assert(
2258
+ std::is_same<std::iterator_traits<absl::Cord::CharIterator>::value_type,
2259
+ char>::value,
2260
+ "");
2261
+ static_assert(
2262
+ std::is_same<
2263
+ std::iterator_traits<absl::Cord::CharIterator>::difference_type,
2264
+ ptrdiff_t>::value,
2265
+ "");
2266
+ static_assert(
2267
+ std::is_same<std::iterator_traits<absl::Cord::CharIterator>::pointer,
2268
+ const char*>::value,
2269
+ "");
2270
+ static_assert(
2271
+ std::is_same<std::iterator_traits<absl::Cord::CharIterator>::reference,
2272
+ const char&>::value,
2273
+ "");
2274
+ }
2275
+
2276
+ static void VerifyCharIterator(const absl::Cord& cord) {
2277
+ EXPECT_EQ(cord.char_begin() == cord.char_end(), cord.empty());
2278
+ EXPECT_EQ(cord.char_begin() != cord.char_end(), !cord.empty());
2279
+
2280
+ absl::Cord::CharRange range = cord.Chars();
2281
+ EXPECT_EQ(range.begin() == range.end(), cord.empty());
2282
+ EXPECT_EQ(range.begin() != range.end(), !cord.empty());
2283
+
2284
+ size_t i = 0;
2285
+ absl::Cord::CharIterator pre_iter = cord.char_begin();
2286
+ absl::Cord::CharIterator post_iter = cord.char_begin();
2287
+ std::string content(cord);
2288
+ while (pre_iter != cord.char_end() && post_iter != cord.char_end()) {
2289
+ EXPECT_FALSE(pre_iter == cord.char_end()); // NOLINT: explicitly test ==
2290
+ EXPECT_FALSE(post_iter == cord.char_end()); // NOLINT
2291
+
2292
+ EXPECT_LT(i, cord.size());
2293
+ EXPECT_EQ(content[i], *pre_iter);
2294
+
2295
+ EXPECT_EQ(pre_iter, post_iter);
2296
+ EXPECT_EQ(*pre_iter, *post_iter);
2297
+ EXPECT_EQ(&*pre_iter, &*post_iter);
2298
+
2299
+ EXPECT_EQ(&*pre_iter, pre_iter.operator->());
2300
+
2301
+ const char* character_address = &*pre_iter;
2302
+ absl::Cord::CharIterator copy = pre_iter;
2303
+ ++copy;
2304
+ EXPECT_EQ(character_address, &*pre_iter);
2305
+
2306
+ int n_equal_iterators = 0;
2307
+ for (absl::Cord::CharIterator it = range.begin(); it != range.end(); ++it) {
2308
+ n_equal_iterators += static_cast<int>(it == pre_iter);
2309
+ }
2310
+ EXPECT_EQ(n_equal_iterators, 1);
2311
+
2312
+ absl::Cord::CharIterator advance_iter = range.begin();
2313
+ absl::Cord::Advance(&advance_iter, i);
2314
+ EXPECT_EQ(pre_iter, advance_iter);
2315
+
2316
+ advance_iter = range.begin();
2317
+ EXPECT_EQ(absl::Cord::AdvanceAndRead(&advance_iter, i), cord.Subcord(0, i));
2318
+ EXPECT_EQ(pre_iter, advance_iter);
2319
+
2320
+ advance_iter = pre_iter;
2321
+ absl::Cord::Advance(&advance_iter, cord.size() - i);
2322
+ EXPECT_EQ(range.end(), advance_iter);
2323
+
2324
+ advance_iter = pre_iter;
2325
+ EXPECT_EQ(absl::Cord::AdvanceAndRead(&advance_iter, cord.size() - i),
2326
+ cord.Subcord(i, cord.size() - i));
2327
+ EXPECT_EQ(range.end(), advance_iter);
2328
+
2329
+ ++i;
2330
+ ++pre_iter;
2331
+ post_iter++;
2332
+ }
2333
+ EXPECT_EQ(i, cord.size());
2334
+ EXPECT_TRUE(pre_iter == cord.char_end()); // NOLINT: explicitly test ==
2335
+ EXPECT_TRUE(post_iter == cord.char_end()); // NOLINT
2336
+
2337
+ absl::Cord::CharIterator zero_advanced_end = cord.char_end();
2338
+ absl::Cord::Advance(&zero_advanced_end, 0);
2339
+ EXPECT_EQ(zero_advanced_end, cord.char_end());
2340
+
2341
+ absl::Cord::CharIterator it = cord.char_begin();
2342
+ for (absl::string_view chunk : cord.Chunks()) {
2343
+ while (!chunk.empty()) {
2344
+ EXPECT_EQ(absl::Cord::ChunkRemaining(it), chunk);
2345
+ chunk.remove_prefix(1);
2346
+ ++it;
2347
+ }
2348
+ }
2349
+ }
2350
+
2351
+ TEST_P(CordTest, CharIteratorOperations) {
2352
+ absl::Cord empty_cord;
2353
+ VerifyCharIterator(empty_cord);
2354
+
2355
+ absl::Cord small_buffer_cord("small cord");
2356
+ MaybeHarden(small_buffer_cord);
2357
+ VerifyCharIterator(small_buffer_cord);
2358
+
2359
+ absl::Cord flat_node_cord("larger than small buffer optimization");
2360
+ MaybeHarden(flat_node_cord);
2361
+ VerifyCharIterator(flat_node_cord);
2362
+
2363
+ VerifyCharIterator(MaybeHardened(
2364
+ absl::MakeFragmentedCord({"a ", "small ", "fragmented ", "cord ", "for ",
2365
+ "testing ", "character ", "iteration."})));
2366
+
2367
+ absl::Cord reused_nodes_cord("ghi");
2368
+ reused_nodes_cord.Prepend(absl::Cord("def"));
2369
+ reused_nodes_cord.Prepend(absl::Cord("abc"));
2370
+ for (int i = 0; i < 4; ++i) {
2371
+ reused_nodes_cord.Prepend(reused_nodes_cord);
2372
+ MaybeHarden(reused_nodes_cord);
2373
+ VerifyCharIterator(reused_nodes_cord);
2374
+ }
2375
+
2376
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
2377
+ absl::Cord flat_cord(RandomLowercaseString(&rng, 256));
2378
+ absl::Cord subcords;
2379
+ for (int i = 0; i < 4; ++i) {
2380
+ subcords.Prepend(flat_cord.Subcord(16 * i, 128));
2381
+ MaybeHarden(subcords);
2382
+ }
2383
+ VerifyCharIterator(subcords);
2384
+ }
2385
+
2386
+ TEST_P(CordTest, CharIteratorAdvanceAndRead) {
2387
+ // Create a Cord holding 6 flats of 2500 bytes each, and then iterate over it
2388
+ // reading 150, 1500, 2500 and 3000 bytes. This will result in all possible
2389
+ // partial, full and straddled read combinations including reads below
2390
+ // kMaxBytesToCopy. b/197776822 surfaced a bug for a specific partial, small
2391
+ // read 'at end' on Cord which caused a failure on attempting to read past the
2392
+ // end in CordRepBtreeReader which was not covered by any existing test.
2393
+ constexpr int kBlocks = 6;
2394
+ constexpr size_t kBlockSize = 2500;
2395
+ constexpr size_t kChunkSize1 = 1500;
2396
+ constexpr size_t kChunkSize2 = 2500;
2397
+ constexpr size_t kChunkSize3 = 3000;
2398
+ constexpr size_t kChunkSize4 = 150;
2399
+ RandomEngine rng;
2400
+ std::string data = RandomLowercaseString(&rng, kBlocks * kBlockSize);
2401
+ absl::Cord cord;
2402
+ for (int i = 0; i < kBlocks; ++i) {
2403
+ const std::string block = data.substr(i * kBlockSize, kBlockSize);
2404
+ cord.Append(absl::Cord(block));
2405
+ }
2406
+
2407
+ MaybeHarden(cord);
2408
+
2409
+ for (size_t chunk_size :
2410
+ {kChunkSize1, kChunkSize2, kChunkSize3, kChunkSize4}) {
2411
+ absl::Cord::CharIterator it = cord.char_begin();
2412
+ size_t offset = 0;
2413
+ while (offset < data.length()) {
2414
+ const size_t n = std::min<size_t>(data.length() - offset, chunk_size);
2415
+ absl::Cord chunk = cord.AdvanceAndRead(&it, n);
2416
+ ASSERT_EQ(chunk.size(), n);
2417
+ ASSERT_EQ(chunk.Compare(data.substr(offset, n)), 0);
2418
+ offset += n;
2419
+ }
2420
+ }
2421
+ }
2422
+
2423
+ TEST_P(CordTest, StreamingOutput) {
2424
+ absl::Cord c =
2425
+ absl::MakeFragmentedCord({"A ", "small ", "fragmented ", "Cord", "."});
2426
+ MaybeHarden(c);
2427
+ std::stringstream output;
2428
+ output << c;
2429
+ EXPECT_EQ("A small fragmented Cord.", output.str());
2430
+ }
2431
+
2432
+ TEST_P(CordTest, ForEachChunk) {
2433
+ for (int num_elements : {1, 10, 200}) {
2434
+ SCOPED_TRACE(num_elements);
2435
+ std::vector<std::string> cord_chunks;
2436
+ for (int i = 0; i < num_elements; ++i) {
2437
+ cord_chunks.push_back(absl::StrCat("[", i, "]"));
2438
+ }
2439
+ absl::Cord c = absl::MakeFragmentedCord(cord_chunks);
2440
+ MaybeHarden(c);
2441
+
2442
+ std::vector<std::string> iterated_chunks;
2443
+ absl::CordTestPeer::ForEachChunk(c,
2444
+ [&iterated_chunks](absl::string_view sv) {
2445
+ iterated_chunks.emplace_back(sv);
2446
+ });
2447
+ EXPECT_EQ(iterated_chunks, cord_chunks);
2448
+ }
2449
+ }
2450
+
2451
+ TEST_P(CordTest, SmallBufferAssignFromOwnData) {
2452
+ constexpr size_t kMaxInline = 15;
2453
+ std::string contents = "small buff cord";
2454
+ EXPECT_EQ(contents.size(), kMaxInline);
2455
+ for (size_t pos = 0; pos < contents.size(); ++pos) {
2456
+ for (size_t count = contents.size() - pos; count > 0; --count) {
2457
+ absl::Cord c(contents);
2458
+ MaybeHarden(c);
2459
+ absl::string_view flat = c.Flatten();
2460
+ c = flat.substr(pos, count);
2461
+ EXPECT_EQ(c, contents.substr(pos, count))
2462
+ << "pos = " << pos << "; count = " << count;
2463
+ }
2464
+ }
2465
+ }
2466
+
2467
+ TEST_P(CordTest, Format) {
2468
+ absl::Cord c;
2469
+ absl::Format(&c, "There were %04d little %s.", 3, "pigs");
2470
+ EXPECT_EQ(c, "There were 0003 little pigs.");
2471
+ MaybeHarden(c);
2472
+ absl::Format(&c, "And %-3llx bad wolf!", 1);
2473
+ MaybeHarden(c);
2474
+ EXPECT_EQ(c, "There were 0003 little pigs.And 1 bad wolf!");
2475
+ }
2476
+
2477
+ TEST_P(CordTest, Hardening) {
2478
+ absl::Cord cord("hello");
2479
+ MaybeHarden(cord);
2480
+
2481
+ // These statement should abort the program in all builds modes.
2482
+ EXPECT_DEATH_IF_SUPPORTED(cord.RemovePrefix(6), "");
2483
+ EXPECT_DEATH_IF_SUPPORTED(cord.RemoveSuffix(6), "");
2484
+
2485
+ bool test_hardening = false;
2486
+ ABSL_HARDENING_ASSERT([&]() {
2487
+ // This only runs when ABSL_HARDENING_ASSERT is active.
2488
+ test_hardening = true;
2489
+ return true;
2490
+ }());
2491
+ if (!test_hardening) return;
2492
+
2493
+ EXPECT_DEATH_IF_SUPPORTED(cord[5], "");
2494
+ EXPECT_DEATH_IF_SUPPORTED(*cord.chunk_end(), "");
2495
+ EXPECT_DEATH_IF_SUPPORTED(static_cast<void>(cord.chunk_end()->empty()), "");
2496
+ EXPECT_DEATH_IF_SUPPORTED(++cord.chunk_end(), "");
2497
+ }
2498
+
2499
+ // This test mimics a specific (and rare) application repeatedly splitting a
2500
+ // cord, inserting (overwriting) a string value, and composing a new cord from
2501
+ // the three pieces. This is hostile towards a Btree implementation: A split of
2502
+ // a node at any level is likely to have the right-most edge of the left split,
2503
+ // and the left-most edge of the right split shared. For example, splitting a
2504
+ // leaf node with 6 edges will result likely in a 1-6, 2-5, 3-4, etc. split,
2505
+ // sharing the 'split node'. When recomposing such nodes, we 'injected' an edge
2506
+ // in that node. As this happens with some probability on each level of the
2507
+ // tree, this will quickly grow the tree until it reaches maximum height.
2508
+ TEST_P(CordTest, BtreeHostileSplitInsertJoin) {
2509
+ absl::BitGen bitgen;
2510
+
2511
+ // Start with about 1GB of data
2512
+ std::string data(1 << 10, 'x');
2513
+ absl::Cord buffer(data);
2514
+ absl::Cord cord;
2515
+ for (int i = 0; i < 1000000; ++i) {
2516
+ cord.Append(buffer);
2517
+ }
2518
+
2519
+ for (int j = 0; j < 1000; ++j) {
2520
+ MaybeHarden(cord);
2521
+ size_t offset = absl::Uniform(bitgen, 0u, cord.size());
2522
+ size_t length = absl::Uniform(bitgen, 100u, data.size());
2523
+ if (cord.size() == offset) {
2524
+ cord.Append(absl::string_view(data.data(), length));
2525
+ } else {
2526
+ absl::Cord suffix;
2527
+ if (offset + length < cord.size()) {
2528
+ suffix = cord;
2529
+ suffix.RemovePrefix(offset + length);
2530
+ }
2531
+ if (cord.size() > offset) {
2532
+ cord.RemoveSuffix(cord.size() - offset);
2533
+ }
2534
+ cord.Append(absl::string_view(data.data(), length));
2535
+ if (!suffix.empty()) {
2536
+ cord.Append(suffix);
2537
+ }
2538
+ }
2539
+ }
2540
+ }
2541
+
2542
+ class AfterExitCordTester {
2543
+ public:
2544
+ bool Set(absl::Cord* cord, absl::string_view expected) {
2545
+ cord_ = cord;
2546
+ expected_ = expected;
2547
+ return true;
2548
+ }
2549
+
2550
+ ~AfterExitCordTester() {
2551
+ EXPECT_EQ(*cord_, expected_);
2552
+ }
2553
+ private:
2554
+ absl::Cord* cord_;
2555
+ absl::string_view expected_;
2556
+ };
2557
+
2558
+ // Deliberately prevents the destructor for an absl::Cord from running. The cord
2559
+ // is accessible via the cord member during the lifetime of the CordLeaker.
2560
+ // After the CordLeaker is destroyed, pointers to the cord will remain valid
2561
+ // until the CordLeaker's memory is deallocated.
2562
+ struct CordLeaker {
2563
+ union {
2564
+ absl::Cord cord;
2565
+ };
2566
+
2567
+ template <typename Str>
2568
+ constexpr explicit CordLeaker(const Str& str) : cord(str) {}
2569
+
2570
+ ~CordLeaker() {
2571
+ // Don't do anything, including running cord's destructor. (cord's
2572
+ // destructor won't run automatically because cord is hidden inside a
2573
+ // union.)
2574
+ }
2575
+ };
2576
+
2577
+ template <typename Str>
2578
+ void TestConstinitConstructor(Str) {
2579
+ const auto expected = Str::value;
2580
+ // Defined before `cord` to be destroyed after it.
2581
+ static AfterExitCordTester exit_tester; // NOLINT
2582
+ ABSL_CONST_INIT static CordLeaker cord_leaker(Str{}); // NOLINT
2583
+ // cord_leaker is static, so this reference will remain valid through the end
2584
+ // of program execution.
2585
+ static absl::Cord& cord = cord_leaker.cord;
2586
+ static bool init_exit_tester = exit_tester.Set(&cord, expected);
2587
+ (void)init_exit_tester;
2588
+
2589
+ EXPECT_EQ(cord, expected);
2590
+ // Copy the object and test the copy, and the original.
2591
+ {
2592
+ absl::Cord copy = cord;
2593
+ EXPECT_EQ(copy, expected);
2594
+ }
2595
+ // The original still works
2596
+ EXPECT_EQ(cord, expected);
2597
+
2598
+ // Try making adding more structure to the tree.
2599
+ {
2600
+ absl::Cord copy = cord;
2601
+ std::string expected_copy(expected);
2602
+ for (int i = 0; i < 10; ++i) {
2603
+ copy.Append(cord);
2604
+ absl::StrAppend(&expected_copy, expected);
2605
+ EXPECT_EQ(copy, expected_copy);
2606
+ }
2607
+ }
2608
+
2609
+ // Make sure we are using the right branch during constant evaluation.
2610
+ EXPECT_EQ(absl::CordTestPeer::IsTree(cord), cord.size() >= 16);
2611
+
2612
+ for (int i = 0; i < 10; ++i) {
2613
+ // Make a few more Cords from the same global rep.
2614
+ // This tests what happens when the refcount for it gets below 1.
2615
+ EXPECT_EQ(expected, absl::Cord(Str{}));
2616
+ }
2617
+ }
2618
+
2619
+ constexpr int SimpleStrlen(const char* p) {
2620
+ return *p ? 1 + SimpleStrlen(p + 1) : 0;
2621
+ }
2622
+
2623
+ struct ShortView {
2624
+ constexpr absl::string_view operator()() const {
2625
+ return absl::string_view("SSO string", SimpleStrlen("SSO string"));
2626
+ }
2627
+ };
2628
+
2629
+ struct LongView {
2630
+ constexpr absl::string_view operator()() const {
2631
+ return absl::string_view("String that does not fit SSO.",
2632
+ SimpleStrlen("String that does not fit SSO."));
2633
+ }
2634
+ };
2635
+
2636
+
2637
+ TEST_P(CordTest, ConstinitConstructor) {
2638
+ TestConstinitConstructor(
2639
+ absl::strings_internal::MakeStringConstant(ShortView{}));
2640
+ TestConstinitConstructor(
2641
+ absl::strings_internal::MakeStringConstant(LongView{}));
2642
+ }
2643
+
2644
+ namespace {
2645
+
2646
+ // Test helper that generates a populated cord for future manipulation.
2647
+ //
2648
+ // By test convention, all generated cords begin with the characters "abcde" at
2649
+ // the start of the first chunk.
2650
+ class PopulatedCordFactory {
2651
+ public:
2652
+ constexpr PopulatedCordFactory(absl::string_view name,
2653
+ absl::Cord (*generator)())
2654
+ : name_(name), generator_(generator) {}
2655
+
2656
+ absl::string_view Name() const { return name_; }
2657
+ absl::Cord Generate() const { return generator_(); }
2658
+
2659
+ private:
2660
+ absl::string_view name_;
2661
+ absl::Cord (*generator_)();
2662
+ };
2663
+
2664
+ // clang-format off
2665
+ // This array is constant-initialized in conformant compilers.
2666
+ PopulatedCordFactory cord_factories[] = {
2667
+ {"sso", [] { return absl::Cord("abcde"); }},
2668
+ {"flat", [] {
2669
+ // Too large to live in SSO space, but small enough to be a simple FLAT.
2670
+ absl::Cord flat(absl::StrCat("abcde", std::string(1000, 'x')));
2671
+ flat.Flatten();
2672
+ return flat;
2673
+ }},
2674
+ {"external", [] {
2675
+ // A cheat: we are using a string literal as the external storage, so a
2676
+ // no-op releaser is correct here.
2677
+ return absl::MakeCordFromExternal("abcde External!", []{});
2678
+ }},
2679
+ {"external substring", [] {
2680
+ // A cheat: we are using a string literal as the external storage, so a
2681
+ // no-op releaser is correct here.
2682
+ absl::Cord ext = absl::MakeCordFromExternal("-abcde External!", []{});
2683
+ return absl::CordTestPeer::MakeSubstring(ext, 1, ext.size() - 1);
2684
+ }},
2685
+ {"substring", [] {
2686
+ absl::Cord flat(absl::StrCat("-abcde", std::string(1000, 'x')));
2687
+ flat.Flatten();
2688
+ return flat.Subcord(1, 998);
2689
+ }},
2690
+ {"fragmented", [] {
2691
+ std::string fragment = absl::StrCat("abcde", std::string(195, 'x'));
2692
+ std::vector<std::string> fragments(200, fragment);
2693
+ absl::Cord cord = absl::MakeFragmentedCord(fragments);
2694
+ assert(cord.size() == 40000);
2695
+ return cord;
2696
+ }},
2697
+ };
2698
+ // clang-format on
2699
+
2700
+ // Test helper that can mutate a cord, and possibly undo the mutation, for
2701
+ // testing.
2702
+ class CordMutator {
2703
+ public:
2704
+ constexpr CordMutator(absl::string_view name, void (*mutate)(absl::Cord&),
2705
+ void (*undo)(absl::Cord&) = nullptr)
2706
+ : name_(name), mutate_(mutate), undo_(undo) {}
2707
+
2708
+ absl::string_view Name() const { return name_; }
2709
+ void Mutate(absl::Cord& cord) const { mutate_(cord); }
2710
+ bool CanUndo() const { return undo_ != nullptr; }
2711
+ void Undo(absl::Cord& cord) const { undo_(cord); }
2712
+
2713
+ private:
2714
+ absl::string_view name_;
2715
+ void (*mutate_)(absl::Cord&);
2716
+ void (*undo_)(absl::Cord&);
2717
+ };
2718
+
2719
+ // clang-format off
2720
+ // This array is constant-initialized in conformant compilers.
2721
+ CordMutator cord_mutators[] = {
2722
+ {"clear", [](absl::Cord& c) { c.Clear(); }},
2723
+ {"overwrite", [](absl::Cord& c) { c = "overwritten"; }},
2724
+ {
2725
+ "append string",
2726
+ [](absl::Cord& c) { c.Append("0123456789"); },
2727
+ [](absl::Cord& c) { c.RemoveSuffix(10); }
2728
+ },
2729
+ {
2730
+ "append cord",
2731
+ [](absl::Cord& c) {
2732
+ c.Append(absl::MakeFragmentedCord({"12345", "67890"}));
2733
+ },
2734
+ [](absl::Cord& c) { c.RemoveSuffix(10); }
2735
+ },
2736
+ {
2737
+ "append checksummed cord",
2738
+ [](absl::Cord& c) {
2739
+ absl::Cord to_append = absl::MakeFragmentedCord({"12345", "67890"});
2740
+ to_append.SetExpectedChecksum(999);
2741
+ c.Append(to_append);
2742
+ },
2743
+ [](absl::Cord& c) { c.RemoveSuffix(10); }
2744
+ },
2745
+ {
2746
+ "append self",
2747
+ [](absl::Cord& c) { c.Append(c); },
2748
+ [](absl::Cord& c) { c.RemoveSuffix(c.size() / 2); }
2749
+ },
2750
+ {
2751
+ "append empty string",
2752
+ [](absl::Cord& c) { c.Append(""); },
2753
+ [](absl::Cord& c) { }
2754
+ },
2755
+ {
2756
+ "append empty cord",
2757
+ [](absl::Cord& c) { c.Append(absl::Cord()); },
2758
+ [](absl::Cord& c) { }
2759
+ },
2760
+ {
2761
+ "append empty checksummed cord",
2762
+ [](absl::Cord& c) {
2763
+ absl::Cord to_append;
2764
+ to_append.SetExpectedChecksum(999);
2765
+ c.Append(to_append);
2766
+ },
2767
+ [](absl::Cord& c) { }
2768
+ },
2769
+ {
2770
+ "prepend string",
2771
+ [](absl::Cord& c) { c.Prepend("9876543210"); },
2772
+ [](absl::Cord& c) { c.RemovePrefix(10); }
2773
+ },
2774
+ {
2775
+ "prepend cord",
2776
+ [](absl::Cord& c) {
2777
+ c.Prepend(absl::MakeFragmentedCord({"98765", "43210"}));
2778
+ },
2779
+ [](absl::Cord& c) { c.RemovePrefix(10); }
2780
+ },
2781
+ {
2782
+ "prepend checksummed cord",
2783
+ [](absl::Cord& c) {
2784
+ absl::Cord to_prepend = absl::MakeFragmentedCord({"98765", "43210"});
2785
+ to_prepend.SetExpectedChecksum(999);
2786
+ c.Prepend(to_prepend);
2787
+ },
2788
+ [](absl::Cord& c) { c.RemovePrefix(10); }
2789
+ },
2790
+ {
2791
+ "prepend empty string",
2792
+ [](absl::Cord& c) { c.Prepend(""); },
2793
+ [](absl::Cord& c) { }
2794
+ },
2795
+ {
2796
+ "prepend empty cord",
2797
+ [](absl::Cord& c) { c.Prepend(absl::Cord()); },
2798
+ [](absl::Cord& c) { }
2799
+ },
2800
+ {
2801
+ "prepend empty checksummed cord",
2802
+ [](absl::Cord& c) {
2803
+ absl::Cord to_prepend;
2804
+ to_prepend.SetExpectedChecksum(999);
2805
+ c.Prepend(to_prepend);
2806
+ },
2807
+ [](absl::Cord& c) { }
2808
+ },
2809
+ {
2810
+ "prepend self",
2811
+ [](absl::Cord& c) { c.Prepend(c); },
2812
+ [](absl::Cord& c) { c.RemovePrefix(c.size() / 2); }
2813
+ },
2814
+ {"remove prefix", [](absl::Cord& c) { c.RemovePrefix(c.size() / 2); }},
2815
+ {"remove suffix", [](absl::Cord& c) { c.RemoveSuffix(c.size() / 2); }},
2816
+ {"remove 0-prefix", [](absl::Cord& c) { c.RemovePrefix(0); }},
2817
+ {"remove 0-suffix", [](absl::Cord& c) { c.RemoveSuffix(0); }},
2818
+ {"subcord", [](absl::Cord& c) { c = c.Subcord(1, c.size() - 2); }},
2819
+ {
2820
+ "swap inline",
2821
+ [](absl::Cord& c) {
2822
+ absl::Cord other("swap");
2823
+ c.swap(other);
2824
+ }
2825
+ },
2826
+ {
2827
+ "swap tree",
2828
+ [](absl::Cord& c) {
2829
+ absl::Cord other(std::string(10000, 'x'));
2830
+ c.swap(other);
2831
+ }
2832
+ },
2833
+ };
2834
+ // clang-format on
2835
+ } // namespace
2836
+
2837
+ TEST_P(CordTest, ExpectedChecksum) {
2838
+ for (const PopulatedCordFactory& factory : cord_factories) {
2839
+ SCOPED_TRACE(factory.Name());
2840
+ for (bool shared : {false, true}) {
2841
+ SCOPED_TRACE(shared);
2842
+
2843
+ absl::Cord shared_cord_source = factory.Generate();
2844
+ auto make_instance = [=] {
2845
+ return shared ? shared_cord_source : factory.Generate();
2846
+ };
2847
+
2848
+ const absl::Cord base_value = factory.Generate();
2849
+ const std::string base_value_as_string(factory.Generate().Flatten());
2850
+
2851
+ absl::Cord c1 = make_instance();
2852
+ EXPECT_FALSE(c1.ExpectedChecksum().has_value());
2853
+
2854
+ // Setting an expected checksum works, and retains the cord's bytes
2855
+ c1.SetExpectedChecksum(12345);
2856
+ EXPECT_EQ(c1.ExpectedChecksum().value_or(0), 12345);
2857
+ EXPECT_EQ(c1, base_value);
2858
+
2859
+ // Test that setting an expected checksum again doesn't crash or leak
2860
+ // memory.
2861
+ c1.SetExpectedChecksum(12345);
2862
+ EXPECT_EQ(c1.ExpectedChecksum().value_or(0), 12345);
2863
+ EXPECT_EQ(c1, base_value);
2864
+
2865
+ // CRC persists through copies, assignments, and moves:
2866
+ absl::Cord c1_copy_construct = c1;
2867
+ EXPECT_EQ(c1_copy_construct.ExpectedChecksum().value_or(0), 12345);
2868
+
2869
+ absl::Cord c1_copy_assign;
2870
+ c1_copy_assign = c1;
2871
+ EXPECT_EQ(c1_copy_assign.ExpectedChecksum().value_or(0), 12345);
2872
+
2873
+ absl::Cord c1_move(std::move(c1_copy_assign));
2874
+ EXPECT_EQ(c1_move.ExpectedChecksum().value_or(0), 12345);
2875
+
2876
+ EXPECT_EQ(c1.ExpectedChecksum().value_or(0), 12345);
2877
+
2878
+ // A CRC Cord compares equal to its non-CRC value.
2879
+ EXPECT_EQ(c1, make_instance());
2880
+
2881
+ for (const CordMutator& mutator : cord_mutators) {
2882
+ SCOPED_TRACE(mutator.Name());
2883
+
2884
+ // Test that mutating a cord removes its stored checksum
2885
+ absl::Cord c2 = make_instance();
2886
+ c2.SetExpectedChecksum(24680);
2887
+
2888
+ mutator.Mutate(c2);
2889
+
2890
+ if (c1 == c2) {
2891
+ // Not a mutation (for example, appending the empty string).
2892
+ // Whether the checksum is removed is not defined.
2893
+ continue;
2894
+ }
2895
+
2896
+ EXPECT_EQ(c2.ExpectedChecksum(), absl::nullopt);
2897
+
2898
+ if (mutator.CanUndo()) {
2899
+ // Undoing an operation should not restore the checksum
2900
+ mutator.Undo(c2);
2901
+ EXPECT_EQ(c2, base_value);
2902
+ EXPECT_EQ(c2.ExpectedChecksum(), absl::nullopt);
2903
+ }
2904
+ }
2905
+
2906
+ absl::Cord c3 = make_instance();
2907
+ c3.SetExpectedChecksum(999);
2908
+ const absl::Cord& cc3 = c3;
2909
+
2910
+ // Test that all cord reading operations function in the face of an
2911
+ // expected checksum.
2912
+
2913
+ // Test data precondition
2914
+ ASSERT_TRUE(cc3.StartsWith("abcde"));
2915
+
2916
+ EXPECT_EQ(cc3.size(), base_value_as_string.size());
2917
+ EXPECT_FALSE(cc3.empty());
2918
+ EXPECT_EQ(cc3.Compare(base_value), 0);
2919
+ EXPECT_EQ(cc3.Compare(base_value_as_string), 0);
2920
+ EXPECT_EQ(cc3.Compare("wxyz"), -1);
2921
+ EXPECT_EQ(cc3.Compare(absl::Cord("wxyz")), -1);
2922
+ EXPECT_EQ(cc3.Compare("aaaa"), 1);
2923
+ EXPECT_EQ(cc3.Compare(absl::Cord("aaaa")), 1);
2924
+ EXPECT_EQ(absl::Cord("wxyz").Compare(cc3), 1);
2925
+ EXPECT_EQ(absl::Cord("aaaa").Compare(cc3), -1);
2926
+ EXPECT_TRUE(cc3.StartsWith("abcd"));
2927
+ EXPECT_EQ(std::string(cc3), base_value_as_string);
2928
+
2929
+ std::string dest;
2930
+ absl::CopyCordToString(cc3, &dest);
2931
+ EXPECT_EQ(dest, base_value_as_string);
2932
+
2933
+ bool first_pass = true;
2934
+ for (absl::string_view chunk : cc3.Chunks()) {
2935
+ if (first_pass) {
2936
+ EXPECT_TRUE(absl::StartsWith(chunk, "abcde"));
2937
+ }
2938
+ first_pass = false;
2939
+ }
2940
+ first_pass = true;
2941
+ for (char ch : cc3.Chars()) {
2942
+ if (first_pass) {
2943
+ EXPECT_EQ(ch, 'a');
2944
+ }
2945
+ first_pass = false;
2946
+ }
2947
+ EXPECT_TRUE(absl::StartsWith(*cc3.chunk_begin(), "abcde"));
2948
+ EXPECT_EQ(*cc3.char_begin(), 'a');
2949
+
2950
+ auto char_it = cc3.char_begin();
2951
+ absl::Cord::Advance(&char_it, 2);
2952
+ EXPECT_EQ(absl::Cord::AdvanceAndRead(&char_it, 2), "cd");
2953
+ EXPECT_EQ(*char_it, 'e');
2954
+ char_it = cc3.char_begin();
2955
+ absl::Cord::Advance(&char_it, 2);
2956
+ EXPECT_TRUE(absl::StartsWith(absl::Cord::ChunkRemaining(char_it), "cde"));
2957
+
2958
+ EXPECT_EQ(cc3[0], 'a');
2959
+ EXPECT_EQ(cc3[4], 'e');
2960
+ EXPECT_EQ(absl::HashOf(cc3), absl::HashOf(base_value));
2961
+ EXPECT_EQ(absl::HashOf(cc3), absl::HashOf(base_value_as_string));
2962
+ }
2963
+ }
2964
+ }
2965
+
2966
+ // Test the special cases encountered with an empty checksummed cord.
2967
+ TEST_P(CordTest, ChecksummedEmptyCord) {
2968
+ absl::Cord c1;
2969
+ EXPECT_FALSE(c1.ExpectedChecksum().has_value());
2970
+
2971
+ // Setting an expected checksum works.
2972
+ c1.SetExpectedChecksum(12345);
2973
+ EXPECT_EQ(c1.ExpectedChecksum().value_or(0), 12345);
2974
+ EXPECT_EQ(c1, "");
2975
+ EXPECT_TRUE(c1.empty());
2976
+
2977
+ // Test that setting an expected checksum again doesn't crash or leak memory.
2978
+ c1.SetExpectedChecksum(12345);
2979
+ EXPECT_EQ(c1.ExpectedChecksum().value_or(0), 12345);
2980
+ EXPECT_EQ(c1, "");
2981
+ EXPECT_TRUE(c1.empty());
2982
+
2983
+ // CRC persists through copies, assignments, and moves:
2984
+ absl::Cord c1_copy_construct = c1;
2985
+ EXPECT_EQ(c1_copy_construct.ExpectedChecksum().value_or(0), 12345);
2986
+
2987
+ absl::Cord c1_copy_assign;
2988
+ c1_copy_assign = c1;
2989
+ EXPECT_EQ(c1_copy_assign.ExpectedChecksum().value_or(0), 12345);
2990
+
2991
+ absl::Cord c1_move(std::move(c1_copy_assign));
2992
+ EXPECT_EQ(c1_move.ExpectedChecksum().value_or(0), 12345);
2993
+
2994
+ EXPECT_EQ(c1.ExpectedChecksum().value_or(0), 12345);
2995
+
2996
+ // A CRC Cord compares equal to its non-CRC value.
2997
+ EXPECT_EQ(c1, absl::Cord());
2998
+
2999
+ for (const CordMutator& mutator : cord_mutators) {
3000
+ SCOPED_TRACE(mutator.Name());
3001
+
3002
+ // Exercise mutating an empty checksummed cord to catch crashes and exercise
3003
+ // memory sanitizers.
3004
+ absl::Cord c2;
3005
+ c2.SetExpectedChecksum(24680);
3006
+ mutator.Mutate(c2);
3007
+
3008
+ if (c2.empty()) {
3009
+ // Not a mutation
3010
+ continue;
3011
+ }
3012
+ EXPECT_EQ(c2.ExpectedChecksum(), absl::nullopt);
3013
+
3014
+ if (mutator.CanUndo()) {
3015
+ mutator.Undo(c2);
3016
+ }
3017
+ }
3018
+
3019
+ absl::Cord c3;
3020
+ c3.SetExpectedChecksum(999);
3021
+ const absl::Cord& cc3 = c3;
3022
+
3023
+ // Test that all cord reading operations function in the face of an
3024
+ // expected checksum.
3025
+ EXPECT_TRUE(cc3.StartsWith(""));
3026
+ EXPECT_TRUE(cc3.EndsWith(""));
3027
+ EXPECT_TRUE(cc3.empty());
3028
+ EXPECT_EQ(cc3, "");
3029
+ EXPECT_EQ(cc3, absl::Cord());
3030
+ EXPECT_EQ(cc3.size(), 0);
3031
+ EXPECT_EQ(cc3.Compare(absl::Cord()), 0);
3032
+ EXPECT_EQ(cc3.Compare(c1), 0);
3033
+ EXPECT_EQ(cc3.Compare(cc3), 0);
3034
+ EXPECT_EQ(cc3.Compare(""), 0);
3035
+ EXPECT_EQ(cc3.Compare("wxyz"), -1);
3036
+ EXPECT_EQ(cc3.Compare(absl::Cord("wxyz")), -1);
3037
+ EXPECT_EQ(absl::Cord("wxyz").Compare(cc3), 1);
3038
+ EXPECT_EQ(std::string(cc3), "");
3039
+
3040
+ std::string dest;
3041
+ absl::CopyCordToString(cc3, &dest);
3042
+ EXPECT_EQ(dest, "");
3043
+
3044
+ for (absl::string_view chunk : cc3.Chunks()) { // NOLINT(unreachable loop)
3045
+ static_cast<void>(chunk);
3046
+ GTEST_FAIL() << "no chunks expected";
3047
+ }
3048
+ EXPECT_TRUE(cc3.chunk_begin() == cc3.chunk_end());
3049
+
3050
+ for (char ch : cc3.Chars()) { // NOLINT(unreachable loop)
3051
+ static_cast<void>(ch);
3052
+ GTEST_FAIL() << "no chars expected";
3053
+ }
3054
+ EXPECT_TRUE(cc3.char_begin() == cc3.char_end());
3055
+
3056
+ EXPECT_EQ(cc3.TryFlat(), "");
3057
+ EXPECT_EQ(absl::HashOf(c3), absl::HashOf(absl::Cord()));
3058
+ EXPECT_EQ(absl::HashOf(c3), absl::HashOf(absl::string_view()));
3059
+ }
3060
+
3061
+ #if defined(GTEST_HAS_DEATH_TEST) && defined(ABSL_INTERNAL_CORD_HAVE_SANITIZER)
3062
+
3063
+ // Returns an expected poison / uninitialized death message expression.
3064
+ const char* MASanDeathExpr() {
3065
+ return "(use-after-poison|use-of-uninitialized-value)";
3066
+ }
3067
+
3068
+ TEST(CordSanitizerTest, SanitizesEmptyCord) {
3069
+ absl::Cord cord;
3070
+ const char* data = cord.Flatten().data();
3071
+ EXPECT_DEATH(EXPECT_EQ(data[0], 0), MASanDeathExpr());
3072
+ }
3073
+
3074
+ TEST(CordSanitizerTest, SanitizesSmallCord) {
3075
+ absl::Cord cord("Hello");
3076
+ const char* data = cord.Flatten().data();
3077
+ EXPECT_DEATH(EXPECT_EQ(data[5], 0), MASanDeathExpr());
3078
+ }
3079
+
3080
+ TEST(CordSanitizerTest, SanitizesCordOnSetSSOValue) {
3081
+ absl::Cord cord("String that is too big to be an SSO value");
3082
+ cord = "Hello";
3083
+ const char* data = cord.Flatten().data();
3084
+ EXPECT_DEATH(EXPECT_EQ(data[5], 0), MASanDeathExpr());
3085
+ }
3086
+
3087
+ TEST(CordSanitizerTest, SanitizesCordOnCopyCtor) {
3088
+ absl::Cord src("hello");
3089
+ absl::Cord dst(src);
3090
+ const char* data = dst.Flatten().data();
3091
+ EXPECT_DEATH(EXPECT_EQ(data[5], 0), MASanDeathExpr());
3092
+ }
3093
+
3094
+ TEST(CordSanitizerTest, SanitizesCordOnMoveCtor) {
3095
+ absl::Cord src("hello");
3096
+ absl::Cord dst(std::move(src));
3097
+ const char* data = dst.Flatten().data();
3098
+ EXPECT_DEATH(EXPECT_EQ(data[5], 0), MASanDeathExpr());
3099
+ }
3100
+
3101
+ TEST(CordSanitizerTest, SanitizesCordOnAssign) {
3102
+ absl::Cord src("hello");
3103
+ absl::Cord dst;
3104
+ dst = src;
3105
+ const char* data = dst.Flatten().data();
3106
+ EXPECT_DEATH(EXPECT_EQ(data[5], 0), MASanDeathExpr());
3107
+ }
3108
+
3109
+ TEST(CordSanitizerTest, SanitizesCordOnMoveAssign) {
3110
+ absl::Cord src("hello");
3111
+ absl::Cord dst;
3112
+ dst = std::move(src);
3113
+ const char* data = dst.Flatten().data();
3114
+ EXPECT_DEATH(EXPECT_EQ(data[5], 0), MASanDeathExpr());
3115
+ }
3116
+
3117
+ TEST(CordSanitizerTest, SanitizesCordOnSsoAssign) {
3118
+ absl::Cord src("hello");
3119
+ absl::Cord dst("String that is too big to be an SSO value");
3120
+ dst = src;
3121
+ const char* data = dst.Flatten().data();
3122
+ EXPECT_DEATH(EXPECT_EQ(data[5], 0), MASanDeathExpr());
3123
+ }
3124
+
3125
+ #endif // GTEST_HAS_DEATH_TEST && ABSL_INTERNAL_CORD_HAVE_SANITIZER