@nxtedition/rocksdb 15.1.5 → 15.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1705) hide show
  1. package/.claude/settings.local.json +5 -1
  2. package/binding.cc +83 -43
  3. package/binding.gyp +102 -2
  4. package/deps/abseil-cpp/BUILD.bazel +35 -0
  5. package/deps/abseil-cpp/CMake/AbseilDll.cmake +938 -0
  6. package/deps/abseil-cpp/CMake/AbseilHelpers.cmake +465 -0
  7. package/deps/abseil-cpp/CMake/Googletest/CMakeLists.txt.in +14 -0
  8. package/deps/abseil-cpp/CMake/Googletest/DownloadGTest.cmake +41 -0
  9. package/deps/abseil-cpp/CMake/abslConfig.cmake.in +8 -0
  10. package/deps/abseil-cpp/CMake/install_test_project/CMakeLists.txt +25 -0
  11. package/deps/abseil-cpp/CMake/install_test_project/simple.cc +32 -0
  12. package/deps/abseil-cpp/CMake/install_test_project/test.sh +113 -0
  13. package/deps/abseil-cpp/CMakeLists.txt +280 -0
  14. package/deps/abseil-cpp/LICENSE +203 -0
  15. package/deps/abseil-cpp/MODULE.bazel +43 -0
  16. package/deps/abseil-cpp/PrivacyInfo.xcprivacy +14 -0
  17. package/deps/abseil-cpp/absl/BUILD.bazel +62 -0
  18. package/deps/abseil-cpp/absl/CMakeLists.txt +45 -0
  19. package/deps/abseil-cpp/absl/abseil.podspec.gen.py +245 -0
  20. package/deps/abseil-cpp/absl/algorithm/BUILD.bazel +92 -0
  21. package/deps/abseil-cpp/absl/algorithm/CMakeLists.txt +72 -0
  22. package/deps/abseil-cpp/absl/algorithm/algorithm.h +64 -0
  23. package/deps/abseil-cpp/absl/algorithm/algorithm_test.cc +60 -0
  24. package/deps/abseil-cpp/absl/algorithm/container.h +1864 -0
  25. package/deps/abseil-cpp/absl/algorithm/container_test.cc +2232 -0
  26. package/deps/abseil-cpp/absl/base/BUILD.bazel +1036 -0
  27. package/deps/abseil-cpp/absl/base/CMakeLists.txt +881 -0
  28. package/deps/abseil-cpp/absl/base/attributes.h +1081 -0
  29. package/deps/abseil-cpp/absl/base/attributes_test.cc +43 -0
  30. package/deps/abseil-cpp/absl/base/bit_cast_test.cc +109 -0
  31. package/deps/abseil-cpp/absl/base/c_header_test.c +30 -0
  32. package/deps/abseil-cpp/absl/base/call_once.h +228 -0
  33. package/deps/abseil-cpp/absl/base/call_once_test.cc +107 -0
  34. package/deps/abseil-cpp/absl/base/casts.cc +61 -0
  35. package/deps/abseil-cpp/absl/base/casts.h +313 -0
  36. package/deps/abseil-cpp/absl/base/casts_test.cc +148 -0
  37. package/deps/abseil-cpp/absl/base/config.h +854 -0
  38. package/deps/abseil-cpp/absl/base/config_test.cc +60 -0
  39. package/deps/abseil-cpp/absl/base/const_init.h +76 -0
  40. package/deps/abseil-cpp/absl/base/dynamic_annotations.h +480 -0
  41. package/deps/abseil-cpp/absl/base/exception_safety_testing_test.cc +958 -0
  42. package/deps/abseil-cpp/absl/base/fast_type_id.h +73 -0
  43. package/deps/abseil-cpp/absl/base/fast_type_id_test.cc +130 -0
  44. package/deps/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
  45. package/deps/abseil-cpp/absl/base/internal/atomic_hook_test.cc +97 -0
  46. package/deps/abseil-cpp/absl/base/internal/atomic_hook_test_helper.cc +32 -0
  47. package/deps/abseil-cpp/absl/base/internal/atomic_hook_test_helper.h +34 -0
  48. package/deps/abseil-cpp/absl/base/internal/cmake_thread_test.cc +22 -0
  49. package/deps/abseil-cpp/absl/base/internal/cycleclock.cc +72 -0
  50. package/deps/abseil-cpp/absl/base/internal/cycleclock.h +144 -0
  51. package/deps/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  52. package/deps/abseil-cpp/absl/base/internal/direct_mmap.h +170 -0
  53. package/deps/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  54. package/deps/abseil-cpp/absl/base/internal/endian.h +279 -0
  55. package/deps/abseil-cpp/absl/base/internal/endian_test.cc +263 -0
  56. package/deps/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
  57. package/deps/abseil-cpp/absl/base/internal/errno_saver_test.cc +45 -0
  58. package/deps/abseil-cpp/absl/base/internal/exception_safety_testing.cc +79 -0
  59. package/deps/abseil-cpp/absl/base/internal/exception_safety_testing.h +1109 -0
  60. package/deps/abseil-cpp/absl/base/internal/exception_testing.h +42 -0
  61. package/deps/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
  62. package/deps/abseil-cpp/absl/base/internal/iterator_traits.h +75 -0
  63. package/deps/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
  64. package/deps/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
  65. package/deps/abseil-cpp/absl/base/internal/low_level_alloc.cc +661 -0
  66. package/deps/abseil-cpp/absl/base/internal/low_level_alloc.h +133 -0
  67. package/deps/abseil-cpp/absl/base/internal/low_level_alloc_test.cc +180 -0
  68. package/deps/abseil-cpp/absl/base/internal/low_level_scheduling.h +134 -0
  69. package/deps/abseil-cpp/absl/base/internal/nullability_traits.h +71 -0
  70. package/deps/abseil-cpp/absl/base/internal/nullability_traits_test.cc +98 -0
  71. package/deps/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
  72. package/deps/abseil-cpp/absl/base/internal/poison.cc +85 -0
  73. package/deps/abseil-cpp/absl/base/internal/poison.h +59 -0
  74. package/deps/abseil-cpp/absl/base/internal/poison_test.cc +41 -0
  75. package/deps/abseil-cpp/absl/base/internal/pretty_function.h +33 -0
  76. package/deps/abseil-cpp/absl/base/internal/raw_logging.cc +279 -0
  77. package/deps/abseil-cpp/absl/base/internal/raw_logging.h +217 -0
  78. package/deps/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
  79. package/deps/abseil-cpp/absl/base/internal/scoped_set_env.cc +81 -0
  80. package/deps/abseil-cpp/absl/base/internal/scoped_set_env.h +45 -0
  81. package/deps/abseil-cpp/absl/base/internal/scoped_set_env_test.cc +99 -0
  82. package/deps/abseil-cpp/absl/base/internal/spinlock.cc +225 -0
  83. package/deps/abseil-cpp/absl/base/internal/spinlock.h +310 -0
  84. package/deps/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
  85. package/deps/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +80 -0
  86. package/deps/abseil-cpp/absl/base/internal/spinlock_linux.inc +71 -0
  87. package/deps/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
  88. package/deps/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
  89. package/deps/abseil-cpp/absl/base/internal/spinlock_wait.h +95 -0
  90. package/deps/abseil-cpp/absl/base/internal/spinlock_win32.inc +40 -0
  91. package/deps/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  92. package/deps/abseil-cpp/absl/base/internal/strerror.h +39 -0
  93. package/deps/abseil-cpp/absl/base/internal/strerror_benchmark.cc +29 -0
  94. package/deps/abseil-cpp/absl/base/internal/strerror_test.cc +89 -0
  95. package/deps/abseil-cpp/absl/base/internal/sysinfo.cc +494 -0
  96. package/deps/abseil-cpp/absl/base/internal/sysinfo.h +74 -0
  97. package/deps/abseil-cpp/absl/base/internal/sysinfo_test.cc +82 -0
  98. package/deps/abseil-cpp/absl/base/internal/thread_identity.cc +163 -0
  99. package/deps/abseil-cpp/absl/base/internal/thread_identity.h +273 -0
  100. package/deps/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +38 -0
  101. package/deps/abseil-cpp/absl/base/internal/thread_identity_test.cc +129 -0
  102. package/deps/abseil-cpp/absl/base/internal/throw_delegate.cc +203 -0
  103. package/deps/abseil-cpp/absl/base/internal/throw_delegate.h +75 -0
  104. package/deps/abseil-cpp/absl/base/internal/tracing.cc +39 -0
  105. package/deps/abseil-cpp/absl/base/internal/tracing.h +81 -0
  106. package/deps/abseil-cpp/absl/base/internal/tracing_strong_test.cc +117 -0
  107. package/deps/abseil-cpp/absl/base/internal/tracing_weak_test.cc +34 -0
  108. package/deps/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +68 -0
  109. package/deps/abseil-cpp/absl/base/internal/unaligned_access.h +89 -0
  110. package/deps/abseil-cpp/absl/base/internal/unique_small_name_test.cc +77 -0
  111. package/deps/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +134 -0
  112. package/deps/abseil-cpp/absl/base/internal/unscaledcycleclock.h +113 -0
  113. package/deps/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  114. package/deps/abseil-cpp/absl/base/log_severity.cc +56 -0
  115. package/deps/abseil-cpp/absl/base/log_severity.h +185 -0
  116. package/deps/abseil-cpp/absl/base/log_severity_test.cc +251 -0
  117. package/deps/abseil-cpp/absl/base/macros.h +243 -0
  118. package/deps/abseil-cpp/absl/base/no_destructor.h +191 -0
  119. package/deps/abseil-cpp/absl/base/no_destructor_benchmark.cc +165 -0
  120. package/deps/abseil-cpp/absl/base/no_destructor_test.cc +205 -0
  121. package/deps/abseil-cpp/absl/base/nullability.h +317 -0
  122. package/deps/abseil-cpp/absl/base/nullability_default_nonnull_test.cc +44 -0
  123. package/deps/abseil-cpp/absl/base/nullability_test.cc +90 -0
  124. package/deps/abseil-cpp/absl/base/optimization.h +310 -0
  125. package/deps/abseil-cpp/absl/base/optimization_test.cc +141 -0
  126. package/deps/abseil-cpp/absl/base/options.h +158 -0
  127. package/deps/abseil-cpp/absl/base/policy_checks.h +115 -0
  128. package/deps/abseil-cpp/absl/base/port.h +25 -0
  129. package/deps/abseil-cpp/absl/base/prefetch.h +209 -0
  130. package/deps/abseil-cpp/absl/base/prefetch_test.cc +64 -0
  131. package/deps/abseil-cpp/absl/base/raw_logging_test.cc +98 -0
  132. package/deps/abseil-cpp/absl/base/spinlock_test_common.cc +302 -0
  133. package/deps/abseil-cpp/absl/base/thread_annotations.h +333 -0
  134. package/deps/abseil-cpp/absl/base/throw_delegate_test.cc +175 -0
  135. package/deps/abseil-cpp/absl/cleanup/BUILD.bazel +74 -0
  136. package/deps/abseil-cpp/absl/cleanup/CMakeLists.txt +55 -0
  137. package/deps/abseil-cpp/absl/cleanup/cleanup.h +142 -0
  138. package/deps/abseil-cpp/absl/cleanup/cleanup_test.cc +309 -0
  139. package/deps/abseil-cpp/absl/cleanup/internal/cleanup.h +99 -0
  140. package/deps/abseil-cpp/absl/container/BUILD.bazel +1394 -0
  141. package/deps/abseil-cpp/absl/container/CMakeLists.txt +1239 -0
  142. package/deps/abseil-cpp/absl/container/btree_benchmark.cc +806 -0
  143. package/deps/abseil-cpp/absl/container/btree_map.h +941 -0
  144. package/deps/abseil-cpp/absl/container/btree_set.h +872 -0
  145. package/deps/abseil-cpp/absl/container/btree_test.cc +3653 -0
  146. package/deps/abseil-cpp/absl/container/btree_test.h +166 -0
  147. package/deps/abseil-cpp/absl/container/chunked_queue.h +755 -0
  148. package/deps/abseil-cpp/absl/container/chunked_queue_benchmark.cc +386 -0
  149. package/deps/abseil-cpp/absl/container/chunked_queue_test.cc +768 -0
  150. package/deps/abseil-cpp/absl/container/fixed_array.h +547 -0
  151. package/deps/abseil-cpp/absl/container/fixed_array_benchmark.cc +67 -0
  152. package/deps/abseil-cpp/absl/container/fixed_array_exception_safety_test.cc +201 -0
  153. package/deps/abseil-cpp/absl/container/fixed_array_test.cc +874 -0
  154. package/deps/abseil-cpp/absl/container/flat_hash_map.h +702 -0
  155. package/deps/abseil-cpp/absl/container/flat_hash_map_test.cc +451 -0
  156. package/deps/abseil-cpp/absl/container/flat_hash_set.h +590 -0
  157. package/deps/abseil-cpp/absl/container/flat_hash_set_test.cc +401 -0
  158. package/deps/abseil-cpp/absl/container/hash_container_defaults.h +45 -0
  159. package/deps/abseil-cpp/absl/container/inlined_vector.h +1025 -0
  160. package/deps/abseil-cpp/absl/container/inlined_vector_benchmark.cc +829 -0
  161. package/deps/abseil-cpp/absl/container/inlined_vector_exception_safety_test.cc +508 -0
  162. package/deps/abseil-cpp/absl/container/inlined_vector_test.cc +2278 -0
  163. package/deps/abseil-cpp/absl/container/internal/btree.h +3149 -0
  164. package/deps/abseil-cpp/absl/container/internal/btree_container.h +876 -0
  165. package/deps/abseil-cpp/absl/container/internal/chunked_queue.h +173 -0
  166. package/deps/abseil-cpp/absl/container/internal/common.h +301 -0
  167. package/deps/abseil-cpp/absl/container/internal/common_policy_traits.h +151 -0
  168. package/deps/abseil-cpp/absl/container/internal/common_policy_traits_test.cc +157 -0
  169. package/deps/abseil-cpp/absl/container/internal/compressed_tuple.h +275 -0
  170. package/deps/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +469 -0
  171. package/deps/abseil-cpp/absl/container/internal/container_memory.h +561 -0
  172. package/deps/abseil-cpp/absl/container/internal/container_memory_test.cc +359 -0
  173. package/deps/abseil-cpp/absl/container/internal/hash_function_defaults.h +281 -0
  174. package/deps/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +633 -0
  175. package/deps/abseil-cpp/absl/container/internal/hash_generator_testing.cc +54 -0
  176. package/deps/abseil-cpp/absl/container/internal/hash_generator_testing.h +172 -0
  177. package/deps/abseil-cpp/absl/container/internal/hash_policy_testing.h +173 -0
  178. package/deps/abseil-cpp/absl/container/internal/hash_policy_testing_test.cc +45 -0
  179. package/deps/abseil-cpp/absl/container/internal/hash_policy_traits.h +195 -0
  180. package/deps/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +149 -0
  181. package/deps/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
  182. package/deps/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
  183. package/deps/abseil-cpp/absl/container/internal/hashtable_debug.h +102 -0
  184. package/deps/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  185. package/deps/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +316 -0
  186. package/deps/abseil-cpp/absl/container/internal/hashtablez_sampler.h +311 -0
  187. package/deps/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +31 -0
  188. package/deps/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +534 -0
  189. package/deps/abseil-cpp/absl/container/internal/heterogeneous_lookup_testing.h +80 -0
  190. package/deps/abseil-cpp/absl/container/internal/inlined_vector.h +1094 -0
  191. package/deps/abseil-cpp/absl/container/internal/layout.h +828 -0
  192. package/deps/abseil-cpp/absl/container/internal/layout_benchmark.cc +295 -0
  193. package/deps/abseil-cpp/absl/container/internal/layout_test.cc +2034 -0
  194. package/deps/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
  195. package/deps/abseil-cpp/absl/container/internal/node_slot_policy_test.cc +71 -0
  196. package/deps/abseil-cpp/absl/container/internal/raw_hash_map.h +382 -0
  197. package/deps/abseil-cpp/absl/container/internal/raw_hash_set.cc +2090 -0
  198. package/deps/abseil-cpp/absl/container/internal/raw_hash_set.h +3763 -0
  199. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +525 -0
  200. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +696 -0
  201. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +583 -0
  202. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
  203. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
  204. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +4184 -0
  205. package/deps/abseil-cpp/absl/container/internal/test_allocator.h +387 -0
  206. package/deps/abseil-cpp/absl/container/internal/test_instance_tracker.cc +29 -0
  207. package/deps/abseil-cpp/absl/container/internal/test_instance_tracker.h +274 -0
  208. package/deps/abseil-cpp/absl/container/internal/test_instance_tracker_test.cc +184 -0
  209. package/deps/abseil-cpp/absl/container/internal/tracked.h +83 -0
  210. package/deps/abseil-cpp/absl/container/internal/unordered_map_constructor_test.h +435 -0
  211. package/deps/abseil-cpp/absl/container/internal/unordered_map_lookup_test.h +112 -0
  212. package/deps/abseil-cpp/absl/container/internal/unordered_map_members_test.h +87 -0
  213. package/deps/abseil-cpp/absl/container/internal/unordered_map_modifiers_test.h +336 -0
  214. package/deps/abseil-cpp/absl/container/internal/unordered_map_test.cc +50 -0
  215. package/deps/abseil-cpp/absl/container/internal/unordered_set_constructor_test.h +437 -0
  216. package/deps/abseil-cpp/absl/container/internal/unordered_set_lookup_test.h +88 -0
  217. package/deps/abseil-cpp/absl/container/internal/unordered_set_members_test.h +86 -0
  218. package/deps/abseil-cpp/absl/container/internal/unordered_set_modifiers_test.h +215 -0
  219. package/deps/abseil-cpp/absl/container/internal/unordered_set_test.cc +41 -0
  220. package/deps/abseil-cpp/absl/container/linked_hash_map.h +666 -0
  221. package/deps/abseil-cpp/absl/container/linked_hash_map_benchmark.cc +140 -0
  222. package/deps/abseil-cpp/absl/container/linked_hash_map_test.cc +987 -0
  223. package/deps/abseil-cpp/absl/container/linked_hash_set.h +527 -0
  224. package/deps/abseil-cpp/absl/container/linked_hash_set_benchmark.cc +84 -0
  225. package/deps/abseil-cpp/absl/container/linked_hash_set_test.cc +947 -0
  226. package/deps/abseil-cpp/absl/container/node_hash_map.h +698 -0
  227. package/deps/abseil-cpp/absl/container/node_hash_map_test.cc +348 -0
  228. package/deps/abseil-cpp/absl/container/node_hash_set.h +589 -0
  229. package/deps/abseil-cpp/absl/container/node_hash_set_test.cc +188 -0
  230. package/deps/abseil-cpp/absl/container/sample_element_size_test.cc +118 -0
  231. package/deps/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +106 -0
  232. package/deps/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +303 -0
  233. package/deps/abseil-cpp/absl/copts/GENERATED_copts.bzl +304 -0
  234. package/deps/abseil-cpp/absl/copts/configure_copts.bzl +39 -0
  235. package/deps/abseil-cpp/absl/copts/copts.py +205 -0
  236. package/deps/abseil-cpp/absl/copts/generate_copts.py +109 -0
  237. package/deps/abseil-cpp/absl/crc/BUILD.bazel +228 -0
  238. package/deps/abseil-cpp/absl/crc/CMakeLists.txt +177 -0
  239. package/deps/abseil-cpp/absl/crc/crc32c.cc +95 -0
  240. package/deps/abseil-cpp/absl/crc/crc32c.h +192 -0
  241. package/deps/abseil-cpp/absl/crc/crc32c_benchmark.cc +196 -0
  242. package/deps/abseil-cpp/absl/crc/crc32c_test.cc +257 -0
  243. package/deps/abseil-cpp/absl/crc/internal/cpu_detect.cc +359 -0
  244. package/deps/abseil-cpp/absl/crc/internal/cpu_detect.h +69 -0
  245. package/deps/abseil-cpp/absl/crc/internal/crc.cc +435 -0
  246. package/deps/abseil-cpp/absl/crc/internal/crc.h +83 -0
  247. package/deps/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +278 -0
  248. package/deps/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  249. package/deps/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  250. package/deps/abseil-cpp/absl/crc/internal/crc_cord_state.cc +131 -0
  251. package/deps/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  252. package/deps/abseil-cpp/absl/crc/internal/crc_cord_state_test.cc +124 -0
  253. package/deps/abseil-cpp/absl/crc/internal/crc_internal.h +161 -0
  254. package/deps/abseil-cpp/absl/crc/internal/crc_memcpy.h +122 -0
  255. package/deps/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +78 -0
  256. package/deps/abseil-cpp/absl/crc/internal/crc_memcpy_test.cc +177 -0
  257. package/deps/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +459 -0
  258. package/deps/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  259. package/deps/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +762 -0
  260. package/deps/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
  261. package/deps/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +81 -0
  262. package/deps/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +195 -0
  263. package/deps/abseil-cpp/absl/crc/internal/non_temporal_memcpy_test.cc +90 -0
  264. package/deps/abseil-cpp/absl/debugging/BUILD.bazel +483 -0
  265. package/deps/abseil-cpp/absl/debugging/CMakeLists.txt +448 -0
  266. package/deps/abseil-cpp/absl/debugging/failure_signal_handler.cc +434 -0
  267. package/deps/abseil-cpp/absl/debugging/failure_signal_handler.h +121 -0
  268. package/deps/abseil-cpp/absl/debugging/failure_signal_handler_test.cc +166 -0
  269. package/deps/abseil-cpp/absl/debugging/internal/address_is_readable.cc +98 -0
  270. package/deps/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  271. package/deps/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  272. package/deps/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +118 -0
  273. package/deps/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +71 -0
  274. package/deps/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +97 -0
  275. package/deps/abseil-cpp/absl/debugging/internal/bounded_utf8_length_sequence.h +126 -0
  276. package/deps/abseil-cpp/absl/debugging/internal/bounded_utf8_length_sequence_test.cc +126 -0
  277. package/deps/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +258 -0
  278. package/deps/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +55 -0
  279. package/deps/abseil-cpp/absl/debugging/internal/decode_rust_punycode_test.cc +606 -0
  280. package/deps/abseil-cpp/absl/debugging/internal/demangle.cc +2958 -0
  281. package/deps/abseil-cpp/absl/debugging/internal/demangle.h +76 -0
  282. package/deps/abseil-cpp/absl/debugging/internal/demangle_rust.cc +925 -0
  283. package/deps/abseil-cpp/absl/debugging/internal/demangle_rust.h +42 -0
  284. package/deps/abseil-cpp/absl/debugging/internal/demangle_rust_test.cc +584 -0
  285. package/deps/abseil-cpp/absl/debugging/internal/demangle_test.cc +2050 -0
  286. package/deps/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +413 -0
  287. package/deps/abseil-cpp/absl/debugging/internal/elf_mem_image.h +141 -0
  288. package/deps/abseil-cpp/absl/debugging/internal/examine_stack.cc +334 -0
  289. package/deps/abseil-cpp/absl/debugging/internal/examine_stack.h +70 -0
  290. package/deps/abseil-cpp/absl/debugging/internal/stack_consumption.cc +206 -0
  291. package/deps/abseil-cpp/absl/debugging/internal/stack_consumption.h +50 -0
  292. package/deps/abseil-cpp/absl/debugging/internal/stack_consumption_test.cc +50 -0
  293. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +288 -0
  294. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +148 -0
  295. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_config.h +96 -0
  296. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +112 -0
  297. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +114 -0
  298. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +270 -0
  299. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +204 -0
  300. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +25 -0
  301. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +81 -0
  302. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +410 -0
  303. package/deps/abseil-cpp/absl/debugging/internal/symbolize.h +153 -0
  304. package/deps/abseil-cpp/absl/debugging/internal/utf8_for_code_point.cc +70 -0
  305. package/deps/abseil-cpp/absl/debugging/internal/utf8_for_code_point.h +47 -0
  306. package/deps/abseil-cpp/absl/debugging/internal/utf8_for_code_point_test.cc +175 -0
  307. package/deps/abseil-cpp/absl/debugging/internal/vdso_support.cc +209 -0
  308. package/deps/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  309. package/deps/abseil-cpp/absl/debugging/leak_check.cc +73 -0
  310. package/deps/abseil-cpp/absl/debugging/leak_check.h +150 -0
  311. package/deps/abseil-cpp/absl/debugging/leak_check_fail_test.cc +41 -0
  312. package/deps/abseil-cpp/absl/debugging/leak_check_test.cc +41 -0
  313. package/deps/abseil-cpp/absl/debugging/stacktrace.cc +244 -0
  314. package/deps/abseil-cpp/absl/debugging/stacktrace.h +302 -0
  315. package/deps/abseil-cpp/absl/debugging/stacktrace_benchmark.cc +78 -0
  316. package/deps/abseil-cpp/absl/debugging/stacktrace_test.cc +505 -0
  317. package/deps/abseil-cpp/absl/debugging/symbolize.cc +44 -0
  318. package/deps/abseil-cpp/absl/debugging/symbolize.h +99 -0
  319. package/deps/abseil-cpp/absl/debugging/symbolize_darwin.inc +102 -0
  320. package/deps/abseil-cpp/absl/debugging/symbolize_elf.inc +1756 -0
  321. package/deps/abseil-cpp/absl/debugging/symbolize_emscripten.inc +63 -0
  322. package/deps/abseil-cpp/absl/debugging/symbolize_test.cc +619 -0
  323. package/deps/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  324. package/deps/abseil-cpp/absl/debugging/symbolize_win32.inc +99 -0
  325. package/deps/abseil-cpp/absl/extend/CMakeLists.txt +140 -0
  326. package/deps/abseil-cpp/absl/extend/internal/BUILD.bazel +127 -0
  327. package/deps/abseil-cpp/absl/extend/internal/aggregate.h +1687 -0
  328. package/deps/abseil-cpp/absl/extend/internal/aggregate_test.cc +867 -0
  329. package/deps/abseil-cpp/absl/extend/internal/dependencies.h +83 -0
  330. package/deps/abseil-cpp/absl/extend/internal/dependencies_test.cc +117 -0
  331. package/deps/abseil-cpp/absl/extend/internal/is_tuple_hashable.h +45 -0
  332. package/deps/abseil-cpp/absl/extend/internal/num_bases.h +87 -0
  333. package/deps/abseil-cpp/absl/extend/internal/num_bases_test.cc +91 -0
  334. package/deps/abseil-cpp/absl/extend/internal/num_initializers.h +113 -0
  335. package/deps/abseil-cpp/absl/extend/internal/num_initializers_test.cc +250 -0
  336. package/deps/abseil-cpp/absl/extend/internal/reflection.cc +112 -0
  337. package/deps/abseil-cpp/absl/extend/internal/reflection.h +75 -0
  338. package/deps/abseil-cpp/absl/extend/internal/tuple.h +51 -0
  339. package/deps/abseil-cpp/absl/flags/BUILD.bazel +618 -0
  340. package/deps/abseil-cpp/absl/flags/CMakeLists.txt +482 -0
  341. package/deps/abseil-cpp/absl/flags/commandlineflag.cc +35 -0
  342. package/deps/abseil-cpp/absl/flags/commandlineflag.h +219 -0
  343. package/deps/abseil-cpp/absl/flags/commandlineflag_test.cc +236 -0
  344. package/deps/abseil-cpp/absl/flags/config.h +68 -0
  345. package/deps/abseil-cpp/absl/flags/config_test.cc +61 -0
  346. package/deps/abseil-cpp/absl/flags/declare.h +77 -0
  347. package/deps/abseil-cpp/absl/flags/flag.h +307 -0
  348. package/deps/abseil-cpp/absl/flags/flag_benchmark.cc +251 -0
  349. package/deps/abseil-cpp/absl/flags/flag_benchmark.lds +13 -0
  350. package/deps/abseil-cpp/absl/flags/flag_test.cc +1381 -0
  351. package/deps/abseil-cpp/absl/flags/flag_test_defs.cc +24 -0
  352. package/deps/abseil-cpp/absl/flags/internal/commandlineflag.cc +26 -0
  353. package/deps/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
  354. package/deps/abseil-cpp/absl/flags/internal/flag.cc +712 -0
  355. package/deps/abseil-cpp/absl/flags/internal/flag.h +969 -0
  356. package/deps/abseil-cpp/absl/flags/internal/parse.h +70 -0
  357. package/deps/abseil-cpp/absl/flags/internal/path_util.h +62 -0
  358. package/deps/abseil-cpp/absl/flags/internal/path_util_test.cc +46 -0
  359. package/deps/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +69 -0
  360. package/deps/abseil-cpp/absl/flags/internal/private_handle_accessor.h +64 -0
  361. package/deps/abseil-cpp/absl/flags/internal/program_name.cc +61 -0
  362. package/deps/abseil-cpp/absl/flags/internal/program_name.h +50 -0
  363. package/deps/abseil-cpp/absl/flags/internal/program_name_test.cc +61 -0
  364. package/deps/abseil-cpp/absl/flags/internal/registry.h +98 -0
  365. package/deps/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
  366. package/deps/abseil-cpp/absl/flags/internal/sequence_lock_test.cc +169 -0
  367. package/deps/abseil-cpp/absl/flags/internal/usage.cc +558 -0
  368. package/deps/abseil-cpp/absl/flags/internal/usage.h +106 -0
  369. package/deps/abseil-cpp/absl/flags/internal/usage_test.cc +550 -0
  370. package/deps/abseil-cpp/absl/flags/marshalling.cc +276 -0
  371. package/deps/abseil-cpp/absl/flags/marshalling.h +361 -0
  372. package/deps/abseil-cpp/absl/flags/marshalling_test.cc +1220 -0
  373. package/deps/abseil-cpp/absl/flags/parse.cc +952 -0
  374. package/deps/abseil-cpp/absl/flags/parse.h +130 -0
  375. package/deps/abseil-cpp/absl/flags/parse_test.cc +1094 -0
  376. package/deps/abseil-cpp/absl/flags/reflection.cc +368 -0
  377. package/deps/abseil-cpp/absl/flags/reflection.h +90 -0
  378. package/deps/abseil-cpp/absl/flags/reflection_test.cc +268 -0
  379. package/deps/abseil-cpp/absl/flags/usage.cc +66 -0
  380. package/deps/abseil-cpp/absl/flags/usage.h +43 -0
  381. package/deps/abseil-cpp/absl/flags/usage_config.cc +170 -0
  382. package/deps/abseil-cpp/absl/flags/usage_config.h +135 -0
  383. package/deps/abseil-cpp/absl/flags/usage_config_test.cc +205 -0
  384. package/deps/abseil-cpp/absl/functional/BUILD.bazel +173 -0
  385. package/deps/abseil-cpp/absl/functional/CMakeLists.txt +140 -0
  386. package/deps/abseil-cpp/absl/functional/any_invocable.h +336 -0
  387. package/deps/abseil-cpp/absl/functional/any_invocable_test.cc +1687 -0
  388. package/deps/abseil-cpp/absl/functional/bind_front.h +200 -0
  389. package/deps/abseil-cpp/absl/functional/bind_front_test.cc +227 -0
  390. package/deps/abseil-cpp/absl/functional/function_ref.h +249 -0
  391. package/deps/abseil-cpp/absl/functional/function_ref_test.cc +416 -0
  392. package/deps/abseil-cpp/absl/functional/function_type_benchmark.cc +176 -0
  393. package/deps/abseil-cpp/absl/functional/internal/any_invocable.h +787 -0
  394. package/deps/abseil-cpp/absl/functional/internal/front_binder.h +93 -0
  395. package/deps/abseil-cpp/absl/functional/internal/function_ref.h +151 -0
  396. package/deps/abseil-cpp/absl/functional/overload.h +72 -0
  397. package/deps/abseil-cpp/absl/functional/overload_test.cc +207 -0
  398. package/deps/abseil-cpp/absl/hash/BUILD.bazel +220 -0
  399. package/deps/abseil-cpp/absl/hash/CMakeLists.txt +179 -0
  400. package/deps/abseil-cpp/absl/hash/hash.h +466 -0
  401. package/deps/abseil-cpp/absl/hash/hash_benchmark.cc +398 -0
  402. package/deps/abseil-cpp/absl/hash/hash_instantiated_test.cc +224 -0
  403. package/deps/abseil-cpp/absl/hash/hash_test.cc +1320 -0
  404. package/deps/abseil-cpp/absl/hash/hash_testing.h +380 -0
  405. package/deps/abseil-cpp/absl/hash/internal/city.cc +337 -0
  406. package/deps/abseil-cpp/absl/hash/internal/city.h +78 -0
  407. package/deps/abseil-cpp/absl/hash/internal/city_test.cc +597 -0
  408. package/deps/abseil-cpp/absl/hash/internal/hash.cc +430 -0
  409. package/deps/abseil-cpp/absl/hash/internal/hash.h +1563 -0
  410. package/deps/abseil-cpp/absl/hash/internal/hash_test.h +87 -0
  411. package/deps/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +509 -0
  412. package/deps/abseil-cpp/absl/hash/internal/print_hash_of.cc +23 -0
  413. package/deps/abseil-cpp/absl/hash/internal/spy_hash_state.h +286 -0
  414. package/deps/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
  415. package/deps/abseil-cpp/absl/log/BUILD.bazel +686 -0
  416. package/deps/abseil-cpp/absl/log/CMakeLists.txt +1239 -0
  417. package/deps/abseil-cpp/absl/log/absl_check.h +117 -0
  418. package/deps/abseil-cpp/absl/log/absl_check_test.cc +58 -0
  419. package/deps/abseil-cpp/absl/log/absl_log.h +115 -0
  420. package/deps/abseil-cpp/absl/log/absl_log_basic_test.cc +22 -0
  421. package/deps/abseil-cpp/absl/log/absl_vlog_is_on.h +95 -0
  422. package/deps/abseil-cpp/absl/log/check.h +210 -0
  423. package/deps/abseil-cpp/absl/log/check_test.cc +58 -0
  424. package/deps/abseil-cpp/absl/log/check_test_impl.inc +1035 -0
  425. package/deps/abseil-cpp/absl/log/die_if_null.cc +34 -0
  426. package/deps/abseil-cpp/absl/log/die_if_null.h +97 -0
  427. package/deps/abseil-cpp/absl/log/die_if_null_test.cc +107 -0
  428. package/deps/abseil-cpp/absl/log/flags.cc +143 -0
  429. package/deps/abseil-cpp/absl/log/flags.h +43 -0
  430. package/deps/abseil-cpp/absl/log/flags_test.cc +195 -0
  431. package/deps/abseil-cpp/absl/log/globals.cc +178 -0
  432. package/deps/abseil-cpp/absl/log/globals.h +230 -0
  433. package/deps/abseil-cpp/absl/log/globals_test.cc +156 -0
  434. package/deps/abseil-cpp/absl/log/initialize.cc +38 -0
  435. package/deps/abseil-cpp/absl/log/initialize.h +45 -0
  436. package/deps/abseil-cpp/absl/log/internal/BUILD.bazel +581 -0
  437. package/deps/abseil-cpp/absl/log/internal/append_truncated.h +75 -0
  438. package/deps/abseil-cpp/absl/log/internal/check_impl.h +151 -0
  439. package/deps/abseil-cpp/absl/log/internal/check_op.cc +147 -0
  440. package/deps/abseil-cpp/absl/log/internal/check_op.h +565 -0
  441. package/deps/abseil-cpp/absl/log/internal/conditions.cc +85 -0
  442. package/deps/abseil-cpp/absl/log/internal/conditions.h +247 -0
  443. package/deps/abseil-cpp/absl/log/internal/config.h +45 -0
  444. package/deps/abseil-cpp/absl/log/internal/container.h +312 -0
  445. package/deps/abseil-cpp/absl/log/internal/container_test.cc +254 -0
  446. package/deps/abseil-cpp/absl/log/internal/flags.h +59 -0
  447. package/deps/abseil-cpp/absl/log/internal/fnmatch.cc +73 -0
  448. package/deps/abseil-cpp/absl/log/internal/fnmatch.h +35 -0
  449. package/deps/abseil-cpp/absl/log/internal/fnmatch_benchmark.cc +29 -0
  450. package/deps/abseil-cpp/absl/log/internal/fnmatch_test.cc +60 -0
  451. package/deps/abseil-cpp/absl/log/internal/globals.cc +145 -0
  452. package/deps/abseil-cpp/absl/log/internal/globals.h +101 -0
  453. package/deps/abseil-cpp/absl/log/internal/log_format.cc +205 -0
  454. package/deps/abseil-cpp/absl/log/internal/log_format.h +78 -0
  455. package/deps/abseil-cpp/absl/log/internal/log_impl.h +280 -0
  456. package/deps/abseil-cpp/absl/log/internal/log_message.cc +787 -0
  457. package/deps/abseil-cpp/absl/log/internal/log_message.h +455 -0
  458. package/deps/abseil-cpp/absl/log/internal/log_sink_set.cc +296 -0
  459. package/deps/abseil-cpp/absl/log/internal/log_sink_set.h +54 -0
  460. package/deps/abseil-cpp/absl/log/internal/nullguard.cc +35 -0
  461. package/deps/abseil-cpp/absl/log/internal/nullguard.h +88 -0
  462. package/deps/abseil-cpp/absl/log/internal/nullstream.h +128 -0
  463. package/deps/abseil-cpp/absl/log/internal/proto.cc +218 -0
  464. package/deps/abseil-cpp/absl/log/internal/proto.h +298 -0
  465. package/deps/abseil-cpp/absl/log/internal/stderr_log_sink_test.cc +105 -0
  466. package/deps/abseil-cpp/absl/log/internal/strip.h +99 -0
  467. package/deps/abseil-cpp/absl/log/internal/structured.h +160 -0
  468. package/deps/abseil-cpp/absl/log/internal/structured_proto.cc +115 -0
  469. package/deps/abseil-cpp/absl/log/internal/structured_proto.h +107 -0
  470. package/deps/abseil-cpp/absl/log/internal/structured_proto_test.cc +120 -0
  471. package/deps/abseil-cpp/absl/log/internal/test_actions.cc +75 -0
  472. package/deps/abseil-cpp/absl/log/internal/test_actions.h +90 -0
  473. package/deps/abseil-cpp/absl/log/internal/test_helpers.cc +82 -0
  474. package/deps/abseil-cpp/absl/log/internal/test_helpers.h +71 -0
  475. package/deps/abseil-cpp/absl/log/internal/test_matchers.cc +216 -0
  476. package/deps/abseil-cpp/absl/log/internal/test_matchers.h +94 -0
  477. package/deps/abseil-cpp/absl/log/internal/vlog_config.cc +347 -0
  478. package/deps/abseil-cpp/absl/log/internal/vlog_config.h +164 -0
  479. package/deps/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +187 -0
  480. package/deps/abseil-cpp/absl/log/internal/voidify.h +50 -0
  481. package/deps/abseil-cpp/absl/log/log.h +378 -0
  482. package/deps/abseil-cpp/absl/log/log_basic_test.cc +22 -0
  483. package/deps/abseil-cpp/absl/log/log_basic_test_impl.inc +654 -0
  484. package/deps/abseil-cpp/absl/log/log_benchmark.cc +164 -0
  485. package/deps/abseil-cpp/absl/log/log_entry.cc +263 -0
  486. package/deps/abseil-cpp/absl/log/log_entry.h +223 -0
  487. package/deps/abseil-cpp/absl/log/log_entry_test.cc +468 -0
  488. package/deps/abseil-cpp/absl/log/log_format_test.cc +2261 -0
  489. package/deps/abseil-cpp/absl/log/log_macro_hygiene_test.cc +187 -0
  490. package/deps/abseil-cpp/absl/log/log_modifier_methods_test.cc +244 -0
  491. package/deps/abseil-cpp/absl/log/log_sink.cc +23 -0
  492. package/deps/abseil-cpp/absl/log/log_sink.h +71 -0
  493. package/deps/abseil-cpp/absl/log/log_sink_registry.h +64 -0
  494. package/deps/abseil-cpp/absl/log/log_sink_test.cc +418 -0
  495. package/deps/abseil-cpp/absl/log/log_streamer.h +181 -0
  496. package/deps/abseil-cpp/absl/log/log_streamer_test.cc +451 -0
  497. package/deps/abseil-cpp/absl/log/scoped_mock_log.cc +86 -0
  498. package/deps/abseil-cpp/absl/log/scoped_mock_log.h +203 -0
  499. package/deps/abseil-cpp/absl/log/scoped_mock_log_test.cc +295 -0
  500. package/deps/abseil-cpp/absl/log/stripping_test.cc +502 -0
  501. package/deps/abseil-cpp/absl/log/structured.h +75 -0
  502. package/deps/abseil-cpp/absl/log/structured_test.cc +64 -0
  503. package/deps/abseil-cpp/absl/log/vlog_is_on.h +74 -0
  504. package/deps/abseil-cpp/absl/log/vlog_is_on_test.cc +233 -0
  505. package/deps/abseil-cpp/absl/memory/BUILD.bazel +62 -0
  506. package/deps/abseil-cpp/absl/memory/CMakeLists.txt +41 -0
  507. package/deps/abseil-cpp/absl/memory/memory.h +278 -0
  508. package/deps/abseil-cpp/absl/memory/memory_test.cc +222 -0
  509. package/deps/abseil-cpp/absl/meta/BUILD.bazel +112 -0
  510. package/deps/abseil-cpp/absl/meta/CMakeLists.txt +100 -0
  511. package/deps/abseil-cpp/absl/meta/internal/constexpr_testing.h +73 -0
  512. package/deps/abseil-cpp/absl/meta/internal/constexpr_testing_test.cc +40 -0
  513. package/deps/abseil-cpp/absl/meta/internal/requires.h +67 -0
  514. package/deps/abseil-cpp/absl/meta/internal/requires_test.cc +66 -0
  515. package/deps/abseil-cpp/absl/meta/type_traits.h +582 -0
  516. package/deps/abseil-cpp/absl/meta/type_traits_test.cc +378 -0
  517. package/deps/abseil-cpp/absl/numeric/BUILD.bazel +145 -0
  518. package/deps/abseil-cpp/absl/numeric/CMakeLists.txt +104 -0
  519. package/deps/abseil-cpp/absl/numeric/bits.h +262 -0
  520. package/deps/abseil-cpp/absl/numeric/bits_benchmark.cc +73 -0
  521. package/deps/abseil-cpp/absl/numeric/bits_test.cc +724 -0
  522. package/deps/abseil-cpp/absl/numeric/int128.cc +344 -0
  523. package/deps/abseil-cpp/absl/numeric/int128.h +1224 -0
  524. package/deps/abseil-cpp/absl/numeric/int128_benchmark.cc +281 -0
  525. package/deps/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +303 -0
  526. package/deps/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +347 -0
  527. package/deps/abseil-cpp/absl/numeric/int128_stream_test.cc +1400 -0
  528. package/deps/abseil-cpp/absl/numeric/int128_test.cc +1407 -0
  529. package/deps/abseil-cpp/absl/numeric/internal/bits.h +394 -0
  530. package/deps/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  531. package/deps/abseil-cpp/absl/profiling/BUILD.bazel +188 -0
  532. package/deps/abseil-cpp/absl/profiling/CMakeLists.txt +132 -0
  533. package/deps/abseil-cpp/absl/profiling/hashtable.cc +135 -0
  534. package/deps/abseil-cpp/absl/profiling/hashtable.h +40 -0
  535. package/deps/abseil-cpp/absl/profiling/internal/exponential_biased.cc +93 -0
  536. package/deps/abseil-cpp/absl/profiling/internal/exponential_biased.h +130 -0
  537. package/deps/abseil-cpp/absl/profiling/internal/exponential_biased_test.cc +203 -0
  538. package/deps/abseil-cpp/absl/profiling/internal/periodic_sampler.cc +53 -0
  539. package/deps/abseil-cpp/absl/profiling/internal/periodic_sampler.h +211 -0
  540. package/deps/abseil-cpp/absl/profiling/internal/periodic_sampler_benchmark.cc +79 -0
  541. package/deps/abseil-cpp/absl/profiling/internal/periodic_sampler_test.cc +177 -0
  542. package/deps/abseil-cpp/absl/profiling/internal/profile_builder.cc +463 -0
  543. package/deps/abseil-cpp/absl/profiling/internal/profile_builder.h +161 -0
  544. package/deps/abseil-cpp/absl/profiling/internal/sample_recorder.h +253 -0
  545. package/deps/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +188 -0
  546. package/deps/abseil-cpp/absl/random/BUILD.bazel +550 -0
  547. package/deps/abseil-cpp/absl/random/CMakeLists.txt +1250 -0
  548. package/deps/abseil-cpp/absl/random/benchmarks.cc +376 -0
  549. package/deps/abseil-cpp/absl/random/bernoulli_distribution.h +202 -0
  550. package/deps/abseil-cpp/absl/random/bernoulli_distribution_test.cc +217 -0
  551. package/deps/abseil-cpp/absl/random/beta_distribution.h +429 -0
  552. package/deps/abseil-cpp/absl/random/beta_distribution_test.cc +615 -0
  553. package/deps/abseil-cpp/absl/random/bit_gen_ref.h +187 -0
  554. package/deps/abseil-cpp/absl/random/bit_gen_ref_test.cc +107 -0
  555. package/deps/abseil-cpp/absl/random/discrete_distribution.cc +108 -0
  556. package/deps/abseil-cpp/absl/random/discrete_distribution.h +249 -0
  557. package/deps/abseil-cpp/absl/random/discrete_distribution_test.cc +251 -0
  558. package/deps/abseil-cpp/absl/random/distributions.h +450 -0
  559. package/deps/abseil-cpp/absl/random/distributions_test.cc +516 -0
  560. package/deps/abseil-cpp/absl/random/examples_test.cc +98 -0
  561. package/deps/abseil-cpp/absl/random/exponential_distribution.h +166 -0
  562. package/deps/abseil-cpp/absl/random/exponential_distribution_test.cc +426 -0
  563. package/deps/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  564. package/deps/abseil-cpp/absl/random/gaussian_distribution.h +276 -0
  565. package/deps/abseil-cpp/absl/random/gaussian_distribution_test.cc +561 -0
  566. package/deps/abseil-cpp/absl/random/generators_test.cc +185 -0
  567. package/deps/abseil-cpp/absl/random/internal/BUILD.bazel +863 -0
  568. package/deps/abseil-cpp/absl/random/internal/chi_square.cc +230 -0
  569. package/deps/abseil-cpp/absl/random/internal/chi_square.h +89 -0
  570. package/deps/abseil-cpp/absl/random/internal/chi_square_test.cc +364 -0
  571. package/deps/abseil-cpp/absl/random/internal/distribution_caller.h +96 -0
  572. package/deps/abseil-cpp/absl/random/internal/distribution_test_util.cc +418 -0
  573. package/deps/abseil-cpp/absl/random/internal/distribution_test_util.h +113 -0
  574. package/deps/abseil-cpp/absl/random/internal/distribution_test_util_test.cc +193 -0
  575. package/deps/abseil-cpp/absl/random/internal/entropy_pool.cc +185 -0
  576. package/deps/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
  577. package/deps/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
  578. package/deps/abseil-cpp/absl/random/internal/explicit_seed_seq.h +92 -0
  579. package/deps/abseil-cpp/absl/random/internal/explicit_seed_seq_test.cc +241 -0
  580. package/deps/abseil-cpp/absl/random/internal/fast_uniform_bits.h +271 -0
  581. package/deps/abseil-cpp/absl/random/internal/fast_uniform_bits_test.cc +336 -0
  582. package/deps/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  583. package/deps/abseil-cpp/absl/random/internal/fastmath_test.cc +95 -0
  584. package/deps/abseil-cpp/absl/random/internal/gaussian_distribution_gentables.cc +142 -0
  585. package/deps/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  586. package/deps/abseil-cpp/absl/random/internal/generate_real_test.cc +496 -0
  587. package/deps/abseil-cpp/absl/random/internal/iostream_state_saver.h +248 -0
  588. package/deps/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +373 -0
  589. package/deps/abseil-cpp/absl/random/internal/mock_helpers.h +160 -0
  590. package/deps/abseil-cpp/absl/random/internal/mock_overload_set.h +122 -0
  591. package/deps/abseil-cpp/absl/random/internal/mock_validators.h +98 -0
  592. package/deps/abseil-cpp/absl/random/internal/nanobenchmark.cc +804 -0
  593. package/deps/abseil-cpp/absl/random/internal/nanobenchmark.h +172 -0
  594. package/deps/abseil-cpp/absl/random/internal/nanobenchmark_test.cc +79 -0
  595. package/deps/abseil-cpp/absl/random/internal/nonsecure_base.h +160 -0
  596. package/deps/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +267 -0
  597. package/deps/abseil-cpp/absl/random/internal/pcg_engine.h +287 -0
  598. package/deps/abseil-cpp/absl/random/internal/pcg_engine_test.cc +638 -0
  599. package/deps/abseil-cpp/absl/random/internal/platform.h +158 -0
  600. package/deps/abseil-cpp/absl/random/internal/randen.cc +91 -0
  601. package/deps/abseil-cpp/absl/random/internal/randen.h +96 -0
  602. package/deps/abseil-cpp/absl/random/internal/randen_benchmarks.cc +177 -0
  603. package/deps/abseil-cpp/absl/random/internal/randen_detect.cc +280 -0
  604. package/deps/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  605. package/deps/abseil-cpp/absl/random/internal/randen_engine.h +265 -0
  606. package/deps/abseil-cpp/absl/random/internal/randen_engine_test.cc +654 -0
  607. package/deps/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  608. package/deps/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  609. package/deps/abseil-cpp/absl/random/internal/randen_hwaes_test.cc +99 -0
  610. package/deps/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  611. package/deps/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  612. package/deps/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  613. package/deps/abseil-cpp/absl/random/internal/randen_slow_test.cc +61 -0
  614. package/deps/abseil-cpp/absl/random/internal/randen_test.cc +75 -0
  615. package/deps/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  616. package/deps/abseil-cpp/absl/random/internal/salted_seed_seq.h +165 -0
  617. package/deps/abseil-cpp/absl/random/internal/salted_seed_seq_test.cc +172 -0
  618. package/deps/abseil-cpp/absl/random/internal/seed_material.cc +249 -0
  619. package/deps/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  620. package/deps/abseil-cpp/absl/random/internal/seed_material_test.cc +205 -0
  621. package/deps/abseil-cpp/absl/random/internal/sequence_urbg.h +60 -0
  622. package/deps/abseil-cpp/absl/random/internal/traits.h +149 -0
  623. package/deps/abseil-cpp/absl/random/internal/traits_test.cc +123 -0
  624. package/deps/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  625. package/deps/abseil-cpp/absl/random/internal/uniform_helper_test.cc +279 -0
  626. package/deps/abseil-cpp/absl/random/internal/wide_multiply.h +95 -0
  627. package/deps/abseil-cpp/absl/random/internal/wide_multiply_test.cc +119 -0
  628. package/deps/abseil-cpp/absl/random/log_uniform_int_distribution.h +253 -0
  629. package/deps/abseil-cpp/absl/random/log_uniform_int_distribution_test.cc +277 -0
  630. package/deps/abseil-cpp/absl/random/mock_distributions.h +269 -0
  631. package/deps/abseil-cpp/absl/random/mock_distributions_test.cc +281 -0
  632. package/deps/abseil-cpp/absl/random/mocking_bit_gen.h +237 -0
  633. package/deps/abseil-cpp/absl/random/mocking_bit_gen_test.cc +403 -0
  634. package/deps/abseil-cpp/absl/random/poisson_distribution.h +262 -0
  635. package/deps/abseil-cpp/absl/random/poisson_distribution_test.cc +569 -0
  636. package/deps/abseil-cpp/absl/random/random.h +224 -0
  637. package/deps/abseil-cpp/absl/random/seed_gen_exception.cc +45 -0
  638. package/deps/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  639. package/deps/abseil-cpp/absl/random/seed_sequences.cc +33 -0
  640. package/deps/abseil-cpp/absl/random/seed_sequences.h +112 -0
  641. package/deps/abseil-cpp/absl/random/seed_sequences_test.cc +126 -0
  642. package/deps/abseil-cpp/absl/random/uniform_int_distribution.h +276 -0
  643. package/deps/abseil-cpp/absl/random/uniform_int_distribution_test.cc +259 -0
  644. package/deps/abseil-cpp/absl/random/uniform_real_distribution.h +204 -0
  645. package/deps/abseil-cpp/absl/random/uniform_real_distribution_test.cc +394 -0
  646. package/deps/abseil-cpp/absl/random/zipf_distribution.h +273 -0
  647. package/deps/abseil-cpp/absl/random/zipf_distribution_test.cc +423 -0
  648. package/deps/abseil-cpp/absl/status/BUILD.bazel +211 -0
  649. package/deps/abseil-cpp/absl/status/CMakeLists.txt +159 -0
  650. package/deps/abseil-cpp/absl/status/internal/status_internal.cc +251 -0
  651. package/deps/abseil-cpp/absl/status/internal/status_internal.h +133 -0
  652. package/deps/abseil-cpp/absl/status/internal/status_matchers.cc +69 -0
  653. package/deps/abseil-cpp/absl/status/internal/status_matchers.h +246 -0
  654. package/deps/abseil-cpp/absl/status/internal/statusor_internal.h +657 -0
  655. package/deps/abseil-cpp/absl/status/status.cc +421 -0
  656. package/deps/abseil-cpp/absl/status/status.h +948 -0
  657. package/deps/abseil-cpp/absl/status/status_benchmark.cc +37 -0
  658. package/deps/abseil-cpp/absl/status/status_matchers.h +166 -0
  659. package/deps/abseil-cpp/absl/status/status_matchers_test.cc +211 -0
  660. package/deps/abseil-cpp/absl/status/status_payload_printer.cc +36 -0
  661. package/deps/abseil-cpp/absl/status/status_payload_printer.h +52 -0
  662. package/deps/abseil-cpp/absl/status/status_test.cc +580 -0
  663. package/deps/abseil-cpp/absl/status/statusor.cc +106 -0
  664. package/deps/abseil-cpp/absl/status/statusor.h +743 -0
  665. package/deps/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
  666. package/deps/abseil-cpp/absl/status/statusor_test.cc +2124 -0
  667. package/deps/abseil-cpp/absl/strings/BUILD.bazel +1593 -0
  668. package/deps/abseil-cpp/absl/strings/CMakeLists.txt +1295 -0
  669. package/deps/abseil-cpp/absl/strings/ascii.cc +296 -0
  670. package/deps/abseil-cpp/absl/strings/ascii.h +289 -0
  671. package/deps/abseil-cpp/absl/strings/ascii_benchmark.cc +157 -0
  672. package/deps/abseil-cpp/absl/strings/ascii_test.cc +374 -0
  673. package/deps/abseil-cpp/absl/strings/atod_manual_test.cc +193 -0
  674. package/deps/abseil-cpp/absl/strings/char_formatting_test.cc +169 -0
  675. package/deps/abseil-cpp/absl/strings/charconv.cc +1442 -0
  676. package/deps/abseil-cpp/absl/strings/charconv.h +123 -0
  677. package/deps/abseil-cpp/absl/strings/charconv_benchmark.cc +203 -0
  678. package/deps/abseil-cpp/absl/strings/charconv_test.cc +787 -0
  679. package/deps/abseil-cpp/absl/strings/charset.h +163 -0
  680. package/deps/abseil-cpp/absl/strings/charset_benchmark.cc +57 -0
  681. package/deps/abseil-cpp/absl/strings/charset_test.cc +181 -0
  682. package/deps/abseil-cpp/absl/strings/cord.cc +1582 -0
  683. package/deps/abseil-cpp/absl/strings/cord.h +1763 -0
  684. package/deps/abseil-cpp/absl/strings/cord_analysis.cc +196 -0
  685. package/deps/abseil-cpp/absl/strings/cord_analysis.h +63 -0
  686. package/deps/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  687. package/deps/abseil-cpp/absl/strings/cord_buffer_test.cc +322 -0
  688. package/deps/abseil-cpp/absl/strings/cord_test.cc +3421 -0
  689. package/deps/abseil-cpp/absl/strings/cord_test_helpers.h +122 -0
  690. package/deps/abseil-cpp/absl/strings/cordz_test.cc +468 -0
  691. package/deps/abseil-cpp/absl/strings/cordz_test_helpers.h +152 -0
  692. package/deps/abseil-cpp/absl/strings/escaping.cc +1035 -0
  693. package/deps/abseil-cpp/absl/strings/escaping.h +185 -0
  694. package/deps/abseil-cpp/absl/strings/escaping_benchmark.cc +124 -0
  695. package/deps/abseil-cpp/absl/strings/escaping_test.cc +760 -0
  696. package/deps/abseil-cpp/absl/strings/has_absl_stringify.h +64 -0
  697. package/deps/abseil-cpp/absl/strings/has_absl_stringify_test.cc +40 -0
  698. package/deps/abseil-cpp/absl/strings/has_ostream_operator.h +42 -0
  699. package/deps/abseil-cpp/absl/strings/has_ostream_operator_test.cc +41 -0
  700. package/deps/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  701. package/deps/abseil-cpp/absl/strings/internal/append_and_overwrite_test.cc +95 -0
  702. package/deps/abseil-cpp/absl/strings/internal/charconv_bigint.cc +357 -0
  703. package/deps/abseil-cpp/absl/strings/internal/charconv_bigint.h +433 -0
  704. package/deps/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +260 -0
  705. package/deps/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
  706. package/deps/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
  707. package/deps/abseil-cpp/absl/strings/internal/charconv_parse_test.cc +357 -0
  708. package/deps/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  709. package/deps/abseil-cpp/absl/strings/internal/cord_data_edge_test.cc +130 -0
  710. package/deps/abseil-cpp/absl/strings/internal/cord_internal.cc +70 -0
  711. package/deps/abseil-cpp/absl/strings/internal/cord_internal.h +942 -0
  712. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1237 -0
  713. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree.h +944 -0
  714. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +187 -0
  715. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +267 -0
  716. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator_test.cc +346 -0
  717. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +69 -0
  718. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +212 -0
  719. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_reader_test.cc +293 -0
  720. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_test.cc +1568 -0
  721. package/deps/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +64 -0
  722. package/deps/abseil-cpp/absl/strings/internal/cord_rep_consume.h +47 -0
  723. package/deps/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +56 -0
  724. package/deps/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -0
  725. package/deps/abseil-cpp/absl/strings/internal/cord_rep_crc_test.cc +130 -0
  726. package/deps/abseil-cpp/absl/strings/internal/cord_rep_flat.h +195 -0
  727. package/deps/abseil-cpp/absl/strings/internal/cord_rep_test_util.h +205 -0
  728. package/deps/abseil-cpp/absl/strings/internal/cordz_functions.cc +102 -0
  729. package/deps/abseil-cpp/absl/strings/internal/cordz_functions.h +87 -0
  730. package/deps/abseil-cpp/absl/strings/internal/cordz_functions_test.cc +147 -0
  731. package/deps/abseil-cpp/absl/strings/internal/cordz_handle.cc +165 -0
  732. package/deps/abseil-cpp/absl/strings/internal/cordz_handle.h +98 -0
  733. package/deps/abseil-cpp/absl/strings/internal/cordz_handle_test.cc +265 -0
  734. package/deps/abseil-cpp/absl/strings/internal/cordz_info.cc +424 -0
  735. package/deps/abseil-cpp/absl/strings/internal/cordz_info.h +295 -0
  736. package/deps/abseil-cpp/absl/strings/internal/cordz_info_statistics_test.cc +510 -0
  737. package/deps/abseil-cpp/absl/strings/internal/cordz_info_test.cc +342 -0
  738. package/deps/abseil-cpp/absl/strings/internal/cordz_sample_token.cc +64 -0
  739. package/deps/abseil-cpp/absl/strings/internal/cordz_sample_token.h +97 -0
  740. package/deps/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +208 -0
  741. package/deps/abseil-cpp/absl/strings/internal/cordz_statistics.h +88 -0
  742. package/deps/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  743. package/deps/abseil-cpp/absl/strings/internal/cordz_update_scope_test.cc +49 -0
  744. package/deps/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +123 -0
  745. package/deps/abseil-cpp/absl/strings/internal/cordz_update_tracker_test.cc +147 -0
  746. package/deps/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +99 -0
  747. package/deps/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +35 -0
  748. package/deps/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
  749. package/deps/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_test.cc +99 -0
  750. package/deps/abseil-cpp/absl/strings/internal/escaping.cc +209 -0
  751. package/deps/abseil-cpp/absl/strings/internal/escaping.h +59 -0
  752. package/deps/abseil-cpp/absl/strings/internal/escaping_test_common.h +133 -0
  753. package/deps/abseil-cpp/absl/strings/internal/generic_printer.cc +107 -0
  754. package/deps/abseil-cpp/absl/strings/internal/generic_printer.h +115 -0
  755. package/deps/abseil-cpp/absl/strings/internal/generic_printer_internal.h +423 -0
  756. package/deps/abseil-cpp/absl/strings/internal/generic_printer_test.cc +685 -0
  757. package/deps/abseil-cpp/absl/strings/internal/memutil.cc +48 -0
  758. package/deps/abseil-cpp/absl/strings/internal/memutil.h +40 -0
  759. package/deps/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +127 -0
  760. package/deps/abseil-cpp/absl/strings/internal/memutil_test.cc +41 -0
  761. package/deps/abseil-cpp/absl/strings/internal/numbers_test_common.h +184 -0
  762. package/deps/abseil-cpp/absl/strings/internal/ostringstream.cc +43 -0
  763. package/deps/abseil-cpp/absl/strings/internal/ostringstream.h +114 -0
  764. package/deps/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +105 -0
  765. package/deps/abseil-cpp/absl/strings/internal/ostringstream_test.cc +131 -0
  766. package/deps/abseil-cpp/absl/strings/internal/pow10_helper.cc +122 -0
  767. package/deps/abseil-cpp/absl/strings/internal/pow10_helper.h +40 -0
  768. package/deps/abseil-cpp/absl/strings/internal/pow10_helper_test.cc +122 -0
  769. package/deps/abseil-cpp/absl/strings/internal/resize_uninitialized.h +119 -0
  770. package/deps/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +108 -0
  771. package/deps/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
  772. package/deps/abseil-cpp/absl/strings/internal/str_format/arg.cc +615 -0
  773. package/deps/abseil-cpp/absl/strings/internal/str_format/arg.h +661 -0
  774. package/deps/abseil-cpp/absl/strings/internal/str_format/arg_test.cc +162 -0
  775. package/deps/abseil-cpp/absl/strings/internal/str_format/bind.cc +275 -0
  776. package/deps/abseil-cpp/absl/strings/internal/str_format/bind.h +237 -0
  777. package/deps/abseil-cpp/absl/strings/internal/str_format/bind_test.cc +157 -0
  778. package/deps/abseil-cpp/absl/strings/internal/str_format/checker.h +98 -0
  779. package/deps/abseil-cpp/absl/strings/internal/str_format/checker_test.cc +176 -0
  780. package/deps/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +357 -0
  781. package/deps/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1471 -0
  782. package/deps/abseil-cpp/absl/strings/internal/str_format/extension.cc +53 -0
  783. package/deps/abseil-cpp/absl/strings/internal/str_format/extension.h +456 -0
  784. package/deps/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +110 -0
  785. package/deps/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +1945 -0
  786. package/deps/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +37 -0
  787. package/deps/abseil-cpp/absl/strings/internal/str_format/output.cc +74 -0
  788. package/deps/abseil-cpp/absl/strings/internal/str_format/output.h +97 -0
  789. package/deps/abseil-cpp/absl/strings/internal/str_format/output_test.cc +79 -0
  790. package/deps/abseil-cpp/absl/strings/internal/str_format/parser.cc +140 -0
  791. package/deps/abseil-cpp/absl/strings/internal/str_format/parser.h +271 -0
  792. package/deps/abseil-cpp/absl/strings/internal/str_format/parser_test.cc +446 -0
  793. package/deps/abseil-cpp/absl/strings/internal/str_join_internal.h +341 -0
  794. package/deps/abseil-cpp/absl/strings/internal/str_split_internal.h +525 -0
  795. package/deps/abseil-cpp/absl/strings/internal/string_constant.h +67 -0
  796. package/deps/abseil-cpp/absl/strings/internal/string_constant_test.cc +60 -0
  797. package/deps/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  798. package/deps/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
  799. package/deps/abseil-cpp/absl/strings/internal/utf8.cc +148 -0
  800. package/deps/abseil-cpp/absl/strings/internal/utf8.h +64 -0
  801. package/deps/abseil-cpp/absl/strings/internal/utf8_test.cc +259 -0
  802. package/deps/abseil-cpp/absl/strings/match.cc +133 -0
  803. package/deps/abseil-cpp/absl/strings/match.h +129 -0
  804. package/deps/abseil-cpp/absl/strings/match_test.cc +291 -0
  805. package/deps/abseil-cpp/absl/strings/numbers.cc +1230 -0
  806. package/deps/abseil-cpp/absl/strings/numbers.h +359 -0
  807. package/deps/abseil-cpp/absl/strings/numbers_benchmark.cc +288 -0
  808. package/deps/abseil-cpp/absl/strings/numbers_test.cc +2324 -0
  809. package/deps/abseil-cpp/absl/strings/resize_and_overwrite.h +194 -0
  810. package/deps/abseil-cpp/absl/strings/resize_and_overwrite_test.cc +154 -0
  811. package/deps/abseil-cpp/absl/strings/str_cat.cc +247 -0
  812. package/deps/abseil-cpp/absl/strings/str_cat.h +633 -0
  813. package/deps/abseil-cpp/absl/strings/str_cat_benchmark.cc +288 -0
  814. package/deps/abseil-cpp/absl/strings/str_cat_test.cc +692 -0
  815. package/deps/abseil-cpp/absl/strings/str_format.h +887 -0
  816. package/deps/abseil-cpp/absl/strings/str_format_test.cc +1230 -0
  817. package/deps/abseil-cpp/absl/strings/str_join.h +301 -0
  818. package/deps/abseil-cpp/absl/strings/str_join_benchmark.cc +106 -0
  819. package/deps/abseil-cpp/absl/strings/str_join_test.cc +645 -0
  820. package/deps/abseil-cpp/absl/strings/str_replace.cc +91 -0
  821. package/deps/abseil-cpp/absl/strings/str_replace.h +222 -0
  822. package/deps/abseil-cpp/absl/strings/str_replace_benchmark.cc +121 -0
  823. package/deps/abseil-cpp/absl/strings/str_replace_test.cc +345 -0
  824. package/deps/abseil-cpp/absl/strings/str_split.cc +144 -0
  825. package/deps/abseil-cpp/absl/strings/str_split.h +582 -0
  826. package/deps/abseil-cpp/absl/strings/str_split_benchmark.cc +180 -0
  827. package/deps/abseil-cpp/absl/strings/str_split_test.cc +1069 -0
  828. package/deps/abseil-cpp/absl/strings/string_view.h +60 -0
  829. package/deps/abseil-cpp/absl/strings/string_view_test.cc +86 -0
  830. package/deps/abseil-cpp/absl/strings/strip.h +99 -0
  831. package/deps/abseil-cpp/absl/strings/strip_test.cc +198 -0
  832. package/deps/abseil-cpp/absl/strings/substitute.cc +187 -0
  833. package/deps/abseil-cpp/absl/strings/substitute.h +769 -0
  834. package/deps/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
  835. package/deps/abseil-cpp/absl/strings/substitute_test.cc +288 -0
  836. package/deps/abseil-cpp/absl/synchronization/BUILD.bazel +410 -0
  837. package/deps/abseil-cpp/absl/synchronization/CMakeLists.txt +293 -0
  838. package/deps/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  839. package/deps/abseil-cpp/absl/synchronization/barrier.h +79 -0
  840. package/deps/abseil-cpp/absl/synchronization/barrier_test.cc +75 -0
  841. package/deps/abseil-cpp/absl/synchronization/blocking_counter.cc +73 -0
  842. package/deps/abseil-cpp/absl/synchronization/blocking_counter.h +107 -0
  843. package/deps/abseil-cpp/absl/synchronization/blocking_counter_benchmark.cc +84 -0
  844. package/deps/abseil-cpp/absl/synchronization/blocking_counter_test.cc +146 -0
  845. package/deps/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +152 -0
  846. package/deps/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +56 -0
  847. package/deps/abseil-cpp/absl/synchronization/internal/futex.h +177 -0
  848. package/deps/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +107 -0
  849. package/deps/abseil-cpp/absl/synchronization/internal/futex_waiter.h +63 -0
  850. package/deps/abseil-cpp/absl/synchronization/internal/graphcycles.cc +714 -0
  851. package/deps/abseil-cpp/absl/synchronization/internal/graphcycles.h +146 -0
  852. package/deps/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +43 -0
  853. package/deps/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +483 -0
  854. package/deps/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +220 -0
  855. package/deps/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +178 -0
  856. package/deps/abseil-cpp/absl/synchronization/internal/kernel_timeout_test.cc +406 -0
  857. package/deps/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  858. package/deps/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +119 -0
  859. package/deps/abseil-cpp/absl/synchronization/internal/per_thread_sem_test.cc +194 -0
  860. package/deps/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +163 -0
  861. package/deps/abseil-cpp/absl/synchronization/internal/pthread_waiter.h +60 -0
  862. package/deps/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +118 -0
  863. package/deps/abseil-cpp/absl/synchronization/internal/sem_waiter.h +65 -0
  864. package/deps/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +87 -0
  865. package/deps/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.h +56 -0
  866. package/deps/abseil-cpp/absl/synchronization/internal/thread_pool.h +96 -0
  867. package/deps/abseil-cpp/absl/synchronization/internal/waiter.h +69 -0
  868. package/deps/abseil-cpp/absl/synchronization/internal/waiter_base.cc +38 -0
  869. package/deps/abseil-cpp/absl/synchronization/internal/waiter_base.h +90 -0
  870. package/deps/abseil-cpp/absl/synchronization/internal/waiter_test.cc +192 -0
  871. package/deps/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +147 -0
  872. package/deps/abseil-cpp/absl/synchronization/internal/win32_waiter.h +72 -0
  873. package/deps/abseil-cpp/absl/synchronization/lifetime_test.cc +180 -0
  874. package/deps/abseil-cpp/absl/synchronization/mutex.cc +2820 -0
  875. package/deps/abseil-cpp/absl/synchronization/mutex.h +1352 -0
  876. package/deps/abseil-cpp/absl/synchronization/mutex_benchmark.cc +321 -0
  877. package/deps/abseil-cpp/absl/synchronization/mutex_method_pointer_test.cc +138 -0
  878. package/deps/abseil-cpp/absl/synchronization/mutex_test.cc +2065 -0
  879. package/deps/abseil-cpp/absl/synchronization/notification.cc +85 -0
  880. package/deps/abseil-cpp/absl/synchronization/notification.h +133 -0
  881. package/deps/abseil-cpp/absl/synchronization/notification_test.cc +230 -0
  882. package/deps/abseil-cpp/absl/time/BUILD.bazel +244 -0
  883. package/deps/abseil-cpp/absl/time/CMakeLists.txt +218 -0
  884. package/deps/abseil-cpp/absl/time/civil_time.cc +200 -0
  885. package/deps/abseil-cpp/absl/time/civil_time.h +589 -0
  886. package/deps/abseil-cpp/absl/time/civil_time_benchmark.cc +129 -0
  887. package/deps/abseil-cpp/absl/time/civil_time_test.cc +1351 -0
  888. package/deps/abseil-cpp/absl/time/clock.cc +603 -0
  889. package/deps/abseil-cpp/absl/time/clock.h +78 -0
  890. package/deps/abseil-cpp/absl/time/clock_benchmark.cc +74 -0
  891. package/deps/abseil-cpp/absl/time/clock_interface.cc +71 -0
  892. package/deps/abseil-cpp/absl/time/clock_interface.h +91 -0
  893. package/deps/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
  894. package/deps/abseil-cpp/absl/time/clock_test.cc +122 -0
  895. package/deps/abseil-cpp/absl/time/duration.cc +918 -0
  896. package/deps/abseil-cpp/absl/time/duration_benchmark.cc +608 -0
  897. package/deps/abseil-cpp/absl/time/duration_test.cc +1901 -0
  898. package/deps/abseil-cpp/absl/time/flag_test.cc +147 -0
  899. package/deps/abseil-cpp/absl/time/format.cc +162 -0
  900. package/deps/abseil-cpp/absl/time/format_benchmark.cc +64 -0
  901. package/deps/abseil-cpp/absl/time/format_test.cc +441 -0
  902. package/deps/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +195 -0
  903. package/deps/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  904. package/deps/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +644 -0
  905. package/deps/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +460 -0
  906. package/deps/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  907. package/deps/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +436 -0
  908. package/deps/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  909. package/deps/abseil-cpp/absl/time/internal/cctz/src/civil_time_test.cc +1066 -0
  910. package/deps/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
  911. package/deps/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
  912. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  913. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  914. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1068 -0
  915. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +1773 -0
  916. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +47 -0
  917. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +80 -0
  918. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +115 -0
  919. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +97 -0
  920. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +1070 -0
  921. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +128 -0
  922. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +333 -0
  923. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +60 -0
  924. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +217 -0
  925. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +918 -0
  926. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +186 -0
  927. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  928. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  929. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  930. package/deps/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +120 -0
  931. package/deps/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +116 -0
  932. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/README.zoneinfo +38 -0
  933. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -0
  934. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Abidjan +0 -0
  935. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Accra +0 -0
  936. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Addis_Ababa +0 -0
  937. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Algiers +0 -0
  938. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Asmara +0 -0
  939. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Asmera +0 -0
  940. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Bamako +0 -0
  941. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Bangui +0 -0
  942. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Banjul +0 -0
  943. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Bissau +0 -0
  944. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Blantyre +0 -0
  945. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Brazzaville +0 -0
  946. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Bujumbura +0 -0
  947. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Cairo +0 -0
  948. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Casablanca +0 -0
  949. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Ceuta +0 -0
  950. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Conakry +0 -0
  951. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Dakar +0 -0
  952. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Dar_es_Salaam +0 -0
  953. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Djibouti +0 -0
  954. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Douala +0 -0
  955. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/El_Aaiun +0 -0
  956. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Freetown +0 -0
  957. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Gaborone +0 -0
  958. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Harare +0 -0
  959. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Johannesburg +0 -0
  960. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Juba +0 -0
  961. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Kampala +0 -0
  962. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Khartoum +0 -0
  963. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Kigali +0 -0
  964. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Kinshasa +0 -0
  965. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Lagos +0 -0
  966. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Libreville +0 -0
  967. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Lome +0 -0
  968. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Luanda +0 -0
  969. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Lubumbashi +0 -0
  970. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Lusaka +0 -0
  971. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Malabo +0 -0
  972. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Maputo +0 -0
  973. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Maseru +0 -0
  974. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Mbabane +0 -0
  975. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Mogadishu +0 -0
  976. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Monrovia +0 -0
  977. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Nairobi +0 -0
  978. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Ndjamena +0 -0
  979. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Niamey +0 -0
  980. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Nouakchott +0 -0
  981. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Ouagadougou +0 -0
  982. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Porto-Novo +0 -0
  983. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Sao_Tome +0 -0
  984. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Timbuktu +0 -0
  985. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Tripoli +0 -0
  986. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Tunis +0 -0
  987. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Windhoek +0 -0
  988. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Adak +0 -0
  989. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Anchorage +0 -0
  990. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Anguilla +0 -0
  991. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Antigua +0 -0
  992. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Araguaina +0 -0
  993. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Buenos_Aires +0 -0
  994. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Catamarca +0 -0
  995. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/ComodRivadavia +0 -0
  996. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Cordoba +0 -0
  997. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Jujuy +0 -0
  998. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/La_Rioja +0 -0
  999. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Mendoza +0 -0
  1000. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Rio_Gallegos +0 -0
  1001. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Salta +0 -0
  1002. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/San_Juan +0 -0
  1003. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/San_Luis +0 -0
  1004. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Tucuman +0 -0
  1005. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Ushuaia +0 -0
  1006. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Aruba +0 -0
  1007. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Asuncion +0 -0
  1008. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Atikokan +0 -0
  1009. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Atka +0 -0
  1010. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Bahia +0 -0
  1011. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Bahia_Banderas +0 -0
  1012. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Barbados +0 -0
  1013. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Belem +0 -0
  1014. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Belize +0 -0
  1015. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Blanc-Sablon +0 -0
  1016. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Boa_Vista +0 -0
  1017. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Bogota +0 -0
  1018. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Boise +0 -0
  1019. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Buenos_Aires +0 -0
  1020. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cambridge_Bay +0 -0
  1021. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Campo_Grande +0 -0
  1022. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cancun +0 -0
  1023. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Caracas +0 -0
  1024. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Catamarca +0 -0
  1025. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cayenne +0 -0
  1026. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cayman +0 -0
  1027. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Chicago +0 -0
  1028. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Chihuahua +0 -0
  1029. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ciudad_Juarez +0 -0
  1030. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coral_Harbour +0 -0
  1031. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cordoba +0 -0
  1032. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Costa_Rica +0 -0
  1033. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
  1034. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Creston +0 -0
  1035. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cuiaba +0 -0
  1036. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Curacao +0 -0
  1037. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Danmarkshavn +0 -0
  1038. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Dawson +0 -0
  1039. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Dawson_Creek +0 -0
  1040. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Denver +0 -0
  1041. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Detroit +0 -0
  1042. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Dominica +0 -0
  1043. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Edmonton +0 -0
  1044. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Eirunepe +0 -0
  1045. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/El_Salvador +0 -0
  1046. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ensenada +0 -0
  1047. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Fort_Nelson +0 -0
  1048. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Fort_Wayne +0 -0
  1049. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Fortaleza +0 -0
  1050. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Glace_Bay +0 -0
  1051. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Godthab +0 -0
  1052. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Goose_Bay +0 -0
  1053. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Grand_Turk +0 -0
  1054. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Grenada +0 -0
  1055. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Guadeloupe +0 -0
  1056. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Guatemala +0 -0
  1057. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Guayaquil +0 -0
  1058. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Guyana +0 -0
  1059. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Halifax +0 -0
  1060. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Havana +0 -0
  1061. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Hermosillo +0 -0
  1062. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Indianapolis +0 -0
  1063. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Knox +0 -0
  1064. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Marengo +0 -0
  1065. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Petersburg +0 -0
  1066. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Tell_City +0 -0
  1067. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Vevay +0 -0
  1068. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Vincennes +0 -0
  1069. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Winamac +0 -0
  1070. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indianapolis +0 -0
  1071. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Inuvik +0 -0
  1072. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Iqaluit +0 -0
  1073. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Jamaica +0 -0
  1074. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Jujuy +0 -0
  1075. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Juneau +0 -0
  1076. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Kentucky/Louisville +0 -0
  1077. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Kentucky/Monticello +0 -0
  1078. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Knox_IN +0 -0
  1079. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Kralendijk +0 -0
  1080. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/La_Paz +0 -0
  1081. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Lima +0 -0
  1082. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Los_Angeles +0 -0
  1083. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Louisville +0 -0
  1084. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Lower_Princes +0 -0
  1085. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Maceio +0 -0
  1086. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Managua +0 -0
  1087. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Manaus +0 -0
  1088. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Marigot +0 -0
  1089. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Martinique +0 -0
  1090. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Matamoros +0 -0
  1091. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mazatlan +0 -0
  1092. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mendoza +0 -0
  1093. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Menominee +0 -0
  1094. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Merida +0 -0
  1095. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Metlakatla +0 -0
  1096. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mexico_City +0 -0
  1097. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Miquelon +0 -0
  1098. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Moncton +0 -0
  1099. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Monterrey +0 -0
  1100. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Montevideo +0 -0
  1101. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Montreal +0 -0
  1102. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Montserrat +0 -0
  1103. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nassau +0 -0
  1104. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/New_York +0 -0
  1105. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nipigon +0 -0
  1106. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nome +0 -0
  1107. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Noronha +0 -0
  1108. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/North_Dakota/Beulah +0 -0
  1109. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/North_Dakota/Center +0 -0
  1110. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/North_Dakota/New_Salem +0 -0
  1111. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nuuk +0 -0
  1112. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ojinaga +0 -0
  1113. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Panama +0 -0
  1114. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Pangnirtung +0 -0
  1115. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Paramaribo +0 -0
  1116. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Phoenix +0 -0
  1117. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Port-au-Prince +0 -0
  1118. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Port_of_Spain +0 -0
  1119. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Porto_Acre +0 -0
  1120. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Porto_Velho +0 -0
  1121. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Puerto_Rico +0 -0
  1122. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Punta_Arenas +0 -0
  1123. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rainy_River +0 -0
  1124. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rankin_Inlet +0 -0
  1125. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Recife +0 -0
  1126. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Regina +0 -0
  1127. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Resolute +0 -0
  1128. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rio_Branco +0 -0
  1129. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rosario +0 -0
  1130. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santa_Isabel +0 -0
  1131. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santarem +0 -0
  1132. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santiago +0 -0
  1133. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santo_Domingo +0 -0
  1134. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Sao_Paulo +0 -0
  1135. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Scoresbysund +0 -0
  1136. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Shiprock +0 -0
  1137. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Sitka +0 -0
  1138. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Barthelemy +0 -0
  1139. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Johns +0 -0
  1140. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Kitts +0 -0
  1141. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Lucia +0 -0
  1142. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Thomas +0 -0
  1143. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Vincent +0 -0
  1144. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Swift_Current +0 -0
  1145. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tegucigalpa +0 -0
  1146. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Thule +0 -0
  1147. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Thunder_Bay +0 -0
  1148. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tijuana +0 -0
  1149. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Toronto +0 -0
  1150. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tortola +0 -0
  1151. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
  1152. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Virgin +0 -0
  1153. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Whitehorse +0 -0
  1154. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Winnipeg +0 -0
  1155. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Yakutat +0 -0
  1156. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Yellowknife +0 -0
  1157. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Casey +0 -0
  1158. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Davis +0 -0
  1159. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/DumontDUrville +0 -0
  1160. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Macquarie +0 -0
  1161. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Mawson +0 -0
  1162. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/McMurdo +0 -0
  1163. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Palmer +0 -0
  1164. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Rothera +0 -0
  1165. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/South_Pole +0 -0
  1166. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Syowa +0 -0
  1167. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Troll +0 -0
  1168. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Vostok +0 -0
  1169. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Arctic/Longyearbyen +0 -0
  1170. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Aden +0 -0
  1171. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Almaty +0 -0
  1172. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Amman +0 -0
  1173. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Anadyr +0 -0
  1174. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Aqtau +0 -0
  1175. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Aqtobe +0 -0
  1176. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ashgabat +0 -0
  1177. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ashkhabad +0 -0
  1178. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Atyrau +0 -0
  1179. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Baghdad +0 -0
  1180. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Bahrain +0 -0
  1181. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Baku +0 -0
  1182. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Bangkok +0 -0
  1183. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Barnaul +0 -0
  1184. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Beirut +0 -0
  1185. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Bishkek +0 -0
  1186. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Brunei +0 -0
  1187. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Calcutta +0 -0
  1188. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Chita +0 -0
  1189. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Choibalsan +0 -0
  1190. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Chongqing +0 -0
  1191. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Chungking +0 -0
  1192. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Colombo +0 -0
  1193. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dacca +0 -0
  1194. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Damascus +0 -0
  1195. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dhaka +0 -0
  1196. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dili +0 -0
  1197. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dubai +0 -0
  1198. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dushanbe +0 -0
  1199. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Famagusta +0 -0
  1200. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Gaza +0 -0
  1201. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Harbin +0 -0
  1202. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hebron +0 -0
  1203. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
  1204. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hong_Kong +0 -0
  1205. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hovd +0 -0
  1206. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Irkutsk +0 -0
  1207. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Istanbul +0 -0
  1208. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Jakarta +0 -0
  1209. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Jayapura +0 -0
  1210. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Jerusalem +0 -0
  1211. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kabul +0 -0
  1212. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kamchatka +0 -0
  1213. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Karachi +0 -0
  1214. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kashgar +0 -0
  1215. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kathmandu +0 -0
  1216. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Katmandu +0 -0
  1217. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Khandyga +0 -0
  1218. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kolkata +0 -0
  1219. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Krasnoyarsk +0 -0
  1220. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kuala_Lumpur +0 -0
  1221. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kuching +0 -0
  1222. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kuwait +0 -0
  1223. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Macao +0 -0
  1224. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Macau +0 -0
  1225. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Magadan +0 -0
  1226. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Makassar +0 -0
  1227. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Manila +0 -0
  1228. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Muscat +0 -0
  1229. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Nicosia +0 -0
  1230. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Novokuznetsk +0 -0
  1231. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Novosibirsk +0 -0
  1232. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Omsk +0 -0
  1233. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Oral +0 -0
  1234. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
  1235. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Pontianak +0 -0
  1236. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Pyongyang +0 -0
  1237. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Qatar +0 -0
  1238. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Qostanay +0 -0
  1239. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Qyzylorda +0 -0
  1240. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Rangoon +0 -0
  1241. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Riyadh +0 -0
  1242. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
  1243. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Sakhalin +0 -0
  1244. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Samarkand +0 -0
  1245. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Seoul +0 -0
  1246. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Shanghai +0 -0
  1247. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Singapore +0 -0
  1248. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Srednekolymsk +0 -0
  1249. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Taipei +0 -0
  1250. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tashkent +0 -0
  1251. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
  1252. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
  1253. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tel_Aviv +0 -0
  1254. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Thimbu +0 -0
  1255. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Thimphu +0 -0
  1256. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tokyo +0 -0
  1257. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tomsk +0 -0
  1258. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ujung_Pandang +0 -0
  1259. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ulaanbaatar +0 -0
  1260. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ulan_Bator +0 -0
  1261. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Urumqi +0 -0
  1262. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ust-Nera +0 -0
  1263. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
  1264. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vladivostok +0 -0
  1265. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Yakutsk +0 -0
  1266. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Yangon +0 -0
  1267. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Yekaterinburg +0 -0
  1268. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Yerevan +0 -0
  1269. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Azores +0 -0
  1270. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Bermuda +0 -0
  1271. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Canary +0 -0
  1272. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Cape_Verde +0 -0
  1273. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Faeroe +0 -0
  1274. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Faroe +0 -0
  1275. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Jan_Mayen +0 -0
  1276. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Madeira +0 -0
  1277. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Reykjavik +0 -0
  1278. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/South_Georgia +0 -0
  1279. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/St_Helena +0 -0
  1280. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Stanley +0 -0
  1281. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/ACT +0 -0
  1282. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Adelaide +0 -0
  1283. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Brisbane +0 -0
  1284. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Broken_Hill +0 -0
  1285. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Canberra +0 -0
  1286. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Currie +0 -0
  1287. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Darwin +0 -0
  1288. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Eucla +0 -0
  1289. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Hobart +0 -0
  1290. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/LHI +0 -0
  1291. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Lindeman +0 -0
  1292. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Lord_Howe +0 -0
  1293. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Melbourne +0 -0
  1294. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/NSW +0 -0
  1295. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/North +0 -0
  1296. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Perth +0 -0
  1297. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Queensland +0 -0
  1298. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/South +0 -0
  1299. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Sydney +0 -0
  1300. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Tasmania +0 -0
  1301. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Victoria +0 -0
  1302. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/West +0 -0
  1303. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Yancowinna +0 -0
  1304. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Brazil/Acre +0 -0
  1305. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Brazil/DeNoronha +0 -0
  1306. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Brazil/East +0 -0
  1307. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Brazil/West +0 -0
  1308. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/CET +0 -0
  1309. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/CST6CDT +0 -0
  1310. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Atlantic +0 -0
  1311. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Central +0 -0
  1312. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Eastern +0 -0
  1313. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Mountain +0 -0
  1314. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Newfoundland +0 -0
  1315. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
  1316. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Saskatchewan +0 -0
  1317. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Yukon +0 -0
  1318. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Chile/Continental +0 -0
  1319. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Chile/EasterIsland +0 -0
  1320. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Cuba +0 -0
  1321. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/EET +0 -0
  1322. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/EST +0 -0
  1323. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/EST5EDT +0 -0
  1324. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Egypt +0 -0
  1325. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Eire +0 -0
  1326. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT +0 -0
  1327. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+0 +0 -0
  1328. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+1 +0 -0
  1329. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+10 +0 -0
  1330. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+11 +0 -0
  1331. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+12 +0 -0
  1332. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+2 +0 -0
  1333. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+3 +0 -0
  1334. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+4 +0 -0
  1335. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+5 +0 -0
  1336. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+6 +0 -0
  1337. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+7 +0 -0
  1338. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+8 +0 -0
  1339. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+9 +0 -0
  1340. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-0 +0 -0
  1341. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-1 +0 -0
  1342. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-10 +0 -0
  1343. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-11 +0 -0
  1344. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-12 +0 -0
  1345. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-13 +0 -0
  1346. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-14 +0 -0
  1347. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-2 +0 -0
  1348. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-3 +0 -0
  1349. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-4 +0 -0
  1350. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-5 +0 -0
  1351. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-6 +0 -0
  1352. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-7 +0 -0
  1353. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-8 +0 -0
  1354. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-9 +0 -0
  1355. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT0 +0 -0
  1356. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/Greenwich +0 -0
  1357. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/UCT +0 -0
  1358. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/UTC +0 -0
  1359. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/Universal +0 -0
  1360. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/Zulu +0 -0
  1361. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Amsterdam +0 -0
  1362. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Andorra +0 -0
  1363. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Astrakhan +0 -0
  1364. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Athens +0 -0
  1365. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Belfast +0 -0
  1366. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Belgrade +0 -0
  1367. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Berlin +0 -0
  1368. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Bratislava +0 -0
  1369. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Brussels +0 -0
  1370. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Bucharest +0 -0
  1371. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Budapest +0 -0
  1372. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Busingen +0 -0
  1373. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
  1374. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Copenhagen +0 -0
  1375. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Dublin +0 -0
  1376. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Gibraltar +0 -0
  1377. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Guernsey +0 -0
  1378. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Helsinki +0 -0
  1379. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Isle_of_Man +0 -0
  1380. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Istanbul +0 -0
  1381. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Jersey +0 -0
  1382. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Kaliningrad +0 -0
  1383. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Kiev +0 -0
  1384. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Kirov +0 -0
  1385. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Kyiv +0 -0
  1386. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Lisbon +0 -0
  1387. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Ljubljana +0 -0
  1388. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/London +0 -0
  1389. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Luxembourg +0 -0
  1390. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Madrid +0 -0
  1391. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Malta +0 -0
  1392. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Mariehamn +0 -0
  1393. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Minsk +0 -0
  1394. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Monaco +0 -0
  1395. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Moscow +0 -0
  1396. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Nicosia +0 -0
  1397. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Oslo +0 -0
  1398. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Paris +0 -0
  1399. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Podgorica +0 -0
  1400. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Prague +0 -0
  1401. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Riga +0 -0
  1402. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Rome +0 -0
  1403. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Samara +0 -0
  1404. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/San_Marino +0 -0
  1405. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Sarajevo +0 -0
  1406. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Saratov +0 -0
  1407. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Simferopol +0 -0
  1408. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Skopje +0 -0
  1409. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Sofia +0 -0
  1410. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Stockholm +0 -0
  1411. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tallinn +0 -0
  1412. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tirane +0 -0
  1413. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
  1414. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Ulyanovsk +0 -0
  1415. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Uzhgorod +0 -0
  1416. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Vaduz +0 -0
  1417. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Vatican +0 -0
  1418. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Vienna +0 -0
  1419. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Vilnius +0 -0
  1420. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Volgograd +0 -0
  1421. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Warsaw +0 -0
  1422. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Zagreb +0 -0
  1423. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Zaporozhye +0 -0
  1424. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Zurich +0 -0
  1425. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Factory +0 -0
  1426. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GB +0 -0
  1427. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GB-Eire +0 -0
  1428. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GMT +0 -0
  1429. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GMT+0 +0 -0
  1430. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GMT-0 +0 -0
  1431. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GMT0 +0 -0
  1432. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Greenwich +0 -0
  1433. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/HST +0 -0
  1434. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Hongkong +0 -0
  1435. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iceland +0 -0
  1436. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Antananarivo +0 -0
  1437. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Chagos +0 -0
  1438. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Christmas +0 -0
  1439. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Cocos +0 -0
  1440. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Comoro +0 -0
  1441. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Kerguelen +0 -0
  1442. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Mahe +0 -0
  1443. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Maldives +0 -0
  1444. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Mauritius +0 -0
  1445. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Mayotte +0 -0
  1446. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Reunion +0 -0
  1447. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
  1448. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Israel +0 -0
  1449. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Jamaica +0 -0
  1450. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Japan +0 -0
  1451. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Kwajalein +0 -0
  1452. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Libya +0 -0
  1453. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/MET +0 -0
  1454. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/MST +0 -0
  1455. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/MST7MDT +0 -0
  1456. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaNorte +0 -0
  1457. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaSur +0 -0
  1458. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/General +0 -0
  1459. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/NZ +0 -0
  1460. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/NZ-CHAT +0 -0
  1461. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Navajo +0 -0
  1462. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/PRC +0 -0
  1463. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/PST8PDT +0 -0
  1464. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Apia +0 -0
  1465. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Auckland +0 -0
  1466. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Bougainville +0 -0
  1467. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Chatham +0 -0
  1468. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Chuuk +0 -0
  1469. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Easter +0 -0
  1470. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Efate +0 -0
  1471. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Enderbury +0 -0
  1472. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Fakaofo +0 -0
  1473. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Fiji +0 -0
  1474. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Funafuti +0 -0
  1475. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Galapagos +0 -0
  1476. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Gambier +0 -0
  1477. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Guadalcanal +0 -0
  1478. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Guam +0 -0
  1479. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Honolulu +0 -0
  1480. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Johnston +0 -0
  1481. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kanton +0 -0
  1482. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kiritimati +0 -0
  1483. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kosrae +0 -0
  1484. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kwajalein +0 -0
  1485. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Majuro +0 -0
  1486. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Marquesas +0 -0
  1487. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Midway +0 -0
  1488. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Nauru +0 -0
  1489. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Niue +0 -0
  1490. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Norfolk +0 -0
  1491. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Noumea +0 -0
  1492. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Pago_Pago +0 -0
  1493. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Palau +0 -0
  1494. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Pitcairn +0 -0
  1495. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Pohnpei +0 -0
  1496. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Ponape +0 -0
  1497. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Port_Moresby +0 -0
  1498. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Rarotonga +0 -0
  1499. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Saipan +0 -0
  1500. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Samoa +0 -0
  1501. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Tahiti +0 -0
  1502. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Tarawa +0 -0
  1503. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Tongatapu +0 -0
  1504. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Truk +0 -0
  1505. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Wake +0 -0
  1506. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Wallis +0 -0
  1507. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Yap +0 -0
  1508. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Poland +0 -0
  1509. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Portugal +0 -0
  1510. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/ROC +0 -0
  1511. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/ROK +0 -0
  1512. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Singapore +0 -0
  1513. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Turkey +0 -0
  1514. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/UCT +0 -0
  1515. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Alaska +0 -0
  1516. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Aleutian +0 -0
  1517. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Arizona +0 -0
  1518. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Central +0 -0
  1519. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/East-Indiana +0 -0
  1520. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Eastern +0 -0
  1521. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Hawaii +0 -0
  1522. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Indiana-Starke +0 -0
  1523. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Michigan +0 -0
  1524. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Mountain +0 -0
  1525. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Pacific +0 -0
  1526. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Samoa +0 -0
  1527. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/UTC +0 -0
  1528. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Universal +0 -0
  1529. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/W-SU +0 -0
  1530. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/WET +0 -0
  1531. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Zulu +0 -0
  1532. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/iso3166.tab +279 -0
  1533. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +375 -0
  1534. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +296 -0
  1535. package/deps/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  1536. package/deps/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  1537. package/deps/abseil-cpp/absl/time/internal/test_util.cc +32 -0
  1538. package/deps/abseil-cpp/absl/time/internal/test_util.h +33 -0
  1539. package/deps/abseil-cpp/absl/time/simulated_clock.cc +225 -0
  1540. package/deps/abseil-cpp/absl/time/simulated_clock.h +108 -0
  1541. package/deps/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
  1542. package/deps/abseil-cpp/absl/time/time.cc +507 -0
  1543. package/deps/abseil-cpp/absl/time/time.h +1926 -0
  1544. package/deps/abseil-cpp/absl/time/time_benchmark.cc +321 -0
  1545. package/deps/abseil-cpp/absl/time/time_test.cc +1365 -0
  1546. package/deps/abseil-cpp/absl/time/time_zone_test.cc +97 -0
  1547. package/deps/abseil-cpp/absl/types/BUILD.bazel +166 -0
  1548. package/deps/abseil-cpp/absl/types/CMakeLists.txt +179 -0
  1549. package/deps/abseil-cpp/absl/types/any.h +44 -0
  1550. package/deps/abseil-cpp/absl/types/compare.h +506 -0
  1551. package/deps/abseil-cpp/absl/types/compare_test.cc +300 -0
  1552. package/deps/abseil-cpp/absl/types/internal/span.h +141 -0
  1553. package/deps/abseil-cpp/absl/types/optional.h +41 -0
  1554. package/deps/abseil-cpp/absl/types/span.h +830 -0
  1555. package/deps/abseil-cpp/absl/types/span_test.cc +915 -0
  1556. package/deps/abseil-cpp/absl/types/variant.h +82 -0
  1557. package/deps/abseil-cpp/absl/types/variant_test.cc +164 -0
  1558. package/deps/abseil-cpp/absl/utility/BUILD.bazel +46 -0
  1559. package/deps/abseil-cpp/absl/utility/CMakeLists.txt +28 -0
  1560. package/deps/abseil-cpp/absl/utility/utility.h +68 -0
  1561. package/deps/abseil-cpp/ci/absl_alternate_options.h +28 -0
  1562. package/deps/abseil-cpp/ci/cmake_common.sh +19 -0
  1563. package/deps/abseil-cpp/ci/cmake_install_test.sh +64 -0
  1564. package/deps/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +106 -0
  1565. package/deps/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +114 -0
  1566. package/deps/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +107 -0
  1567. package/deps/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +106 -0
  1568. package/deps/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +104 -0
  1569. package/deps/abseil-cpp/ci/linux_docker_containers.sh +22 -0
  1570. package/deps/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +100 -0
  1571. package/deps/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +105 -0
  1572. package/deps/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +85 -0
  1573. package/deps/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +85 -0
  1574. package/deps/abseil-cpp/ci/macos_xcode_bazel.sh +70 -0
  1575. package/deps/abseil-cpp/ci/macos_xcode_cmake.sh +78 -0
  1576. package/deps/abseil-cpp/ci/windows_clangcl_bazel.bat +70 -0
  1577. package/deps/abseil-cpp/ci/windows_msvc_bazel.bat +61 -0
  1578. package/deps/abseil-cpp/ci/windows_msvc_cmake.bat +69 -0
  1579. package/deps/abseil-cpp/conanfile.py +51 -0
  1580. package/deps/abseil-cpp/create_lts.py +139 -0
  1581. package/deps/re2/.bazelrc +20 -0
  1582. package/deps/re2/.bcr/metadata.template.json +16 -0
  1583. package/deps/re2/.bcr/presubmit.yml +57 -0
  1584. package/deps/re2/.bcr/source.template.json +5 -0
  1585. package/deps/re2/BUILD.bazel +463 -0
  1586. package/deps/re2/CMakeLists.txt +283 -0
  1587. package/deps/re2/LICENSE +27 -0
  1588. package/deps/re2/MODULE.bazel +29 -0
  1589. package/deps/re2/Makefile +408 -0
  1590. package/deps/re2/WORKSPACE.bazel +7 -0
  1591. package/deps/re2/WORKSPACE.bzlmod +7 -0
  1592. package/deps/re2/app/BUILD.bazel +24 -0
  1593. package/deps/re2/app/_re2.cc +94 -0
  1594. package/deps/re2/app/_re2.d.ts +23 -0
  1595. package/deps/re2/app/app.ts +111 -0
  1596. package/deps/re2/app/build.sh +32 -0
  1597. package/deps/re2/app/index.html +5 -0
  1598. package/deps/re2/app/package.json +14 -0
  1599. package/deps/re2/app/rollup.config.js +28 -0
  1600. package/deps/re2/app/tsconfig.json +17 -0
  1601. package/deps/re2/benchlog/benchplot.py +98 -0
  1602. package/deps/re2/benchlog/mktable +155 -0
  1603. package/deps/re2/doc/mksyntaxgo +42 -0
  1604. package/deps/re2/doc/mksyntaxhtml +42 -0
  1605. package/deps/re2/doc/mksyntaxwiki +36 -0
  1606. package/deps/re2/doc/syntax.html +477 -0
  1607. package/deps/re2/doc/syntax.txt +463 -0
  1608. package/deps/re2/lib/git/commit-msg.hook +104 -0
  1609. package/deps/re2/libre2.symbols +16 -0
  1610. package/deps/re2/libre2.symbols.darwin +12 -0
  1611. package/deps/re2/python/BUILD.bazel +80 -0
  1612. package/deps/re2/python/_re2.cc +352 -0
  1613. package/deps/re2/python/re2.py +583 -0
  1614. package/deps/re2/python/re2_test.py +495 -0
  1615. package/deps/re2/python/setup.py +159 -0
  1616. package/deps/re2/python/toolchains/generate.py +100 -0
  1617. package/deps/re2/re2/bitmap256.cc +43 -0
  1618. package/deps/re2/re2/bitmap256.h +88 -0
  1619. package/deps/re2/re2/bitstate.cc +389 -0
  1620. package/deps/re2/re2/compile.cc +1265 -0
  1621. package/deps/re2/re2/dfa.cc +2135 -0
  1622. package/deps/re2/re2/filtered_re2.cc +138 -0
  1623. package/deps/re2/re2/filtered_re2.h +115 -0
  1624. package/deps/re2/re2/fuzzing/re2_fuzzer.cc +284 -0
  1625. package/deps/re2/re2/make_perl_groups.pl +116 -0
  1626. package/deps/re2/re2/make_unicode_casefold.py +151 -0
  1627. package/deps/re2/re2/make_unicode_groups.py +117 -0
  1628. package/deps/re2/re2/mimics_pcre.cc +196 -0
  1629. package/deps/re2/re2/nfa.cc +714 -0
  1630. package/deps/re2/re2/onepass.cc +623 -0
  1631. package/deps/re2/re2/parse.cc +2529 -0
  1632. package/deps/re2/re2/perl_groups.cc +119 -0
  1633. package/deps/re2/re2/pod_array.h +55 -0
  1634. package/deps/re2/re2/prefilter.cc +711 -0
  1635. package/deps/re2/re2/prefilter.h +168 -0
  1636. package/deps/re2/re2/prefilter_tree.cc +376 -0
  1637. package/deps/re2/re2/prefilter_tree.h +153 -0
  1638. package/deps/re2/re2/prog.cc +1181 -0
  1639. package/deps/re2/re2/prog.h +493 -0
  1640. package/deps/re2/re2/re2.cc +1355 -0
  1641. package/deps/re2/re2/re2.h +1074 -0
  1642. package/deps/re2/re2/regexp.cc +1004 -0
  1643. package/deps/re2/re2/regexp.h +693 -0
  1644. package/deps/re2/re2/set.cc +185 -0
  1645. package/deps/re2/re2/set.h +91 -0
  1646. package/deps/re2/re2/simplify.cc +689 -0
  1647. package/deps/re2/re2/sparse_array.h +394 -0
  1648. package/deps/re2/re2/sparse_set.h +266 -0
  1649. package/deps/re2/re2/stringpiece.h +18 -0
  1650. package/deps/re2/re2/testing/backtrack.cc +274 -0
  1651. package/deps/re2/re2/testing/charclass_test.cc +228 -0
  1652. package/deps/re2/re2/testing/compile_test.cc +431 -0
  1653. package/deps/re2/re2/testing/dfa_test.cc +376 -0
  1654. package/deps/re2/re2/testing/dump.cc +172 -0
  1655. package/deps/re2/re2/testing/exhaustive1_test.cc +40 -0
  1656. package/deps/re2/re2/testing/exhaustive2_test.cc +72 -0
  1657. package/deps/re2/re2/testing/exhaustive3_test.cc +100 -0
  1658. package/deps/re2/re2/testing/exhaustive_test.cc +35 -0
  1659. package/deps/re2/re2/testing/exhaustive_tester.cc +204 -0
  1660. package/deps/re2/re2/testing/exhaustive_tester.h +105 -0
  1661. package/deps/re2/re2/testing/filtered_re2_test.cc +343 -0
  1662. package/deps/re2/re2/testing/mimics_pcre_test.cc +79 -0
  1663. package/deps/re2/re2/testing/null_walker.cc +48 -0
  1664. package/deps/re2/re2/testing/parse_test.cc +586 -0
  1665. package/deps/re2/re2/testing/possible_match_test.cc +251 -0
  1666. package/deps/re2/re2/testing/random_test.cc +102 -0
  1667. package/deps/re2/re2/testing/re2_arg_test.cc +182 -0
  1668. package/deps/re2/re2/testing/re2_test.cc +1699 -0
  1669. package/deps/re2/re2/testing/regexp_benchmark.cc +1605 -0
  1670. package/deps/re2/re2/testing/regexp_generator.cc +284 -0
  1671. package/deps/re2/re2/testing/regexp_generator.h +77 -0
  1672. package/deps/re2/re2/testing/regexp_test.cc +87 -0
  1673. package/deps/re2/re2/testing/required_prefix_test.cc +201 -0
  1674. package/deps/re2/re2/testing/search_test.cc +338 -0
  1675. package/deps/re2/re2/testing/set_test.cc +235 -0
  1676. package/deps/re2/re2/testing/simplify_test.cc +289 -0
  1677. package/deps/re2/re2/testing/string_generator.cc +144 -0
  1678. package/deps/re2/re2/testing/string_generator.h +76 -0
  1679. package/deps/re2/re2/testing/string_generator_test.cc +114 -0
  1680. package/deps/re2/re2/testing/tester.cc +690 -0
  1681. package/deps/re2/re2/testing/tester.h +121 -0
  1682. package/deps/re2/re2/tostring.cc +351 -0
  1683. package/deps/re2/re2/unicode.py +284 -0
  1684. package/deps/re2/re2/unicode_casefold.cc +604 -0
  1685. package/deps/re2/re2/unicode_casefold.h +77 -0
  1686. package/deps/re2/re2/unicode_groups.cc +6517 -0
  1687. package/deps/re2/re2/unicode_groups.h +66 -0
  1688. package/deps/re2/re2/walker-inl.h +249 -0
  1689. package/deps/re2/re2.pc.in +9 -0
  1690. package/deps/re2/re2Config.cmake.in +26 -0
  1691. package/deps/re2/runtests +33 -0
  1692. package/deps/re2/testinstall.cc +27 -0
  1693. package/deps/re2/ucs2.diff +567 -0
  1694. package/deps/re2/util/malloc_counter.h +19 -0
  1695. package/deps/re2/util/pcre.cc +957 -0
  1696. package/deps/re2/util/pcre.h +671 -0
  1697. package/deps/re2/util/rune.cc +260 -0
  1698. package/deps/re2/util/strutil.cc +26 -0
  1699. package/deps/re2/util/strutil.h +16 -0
  1700. package/deps/re2/util/utf.h +44 -0
  1701. package/index.js +14 -5
  1702. package/package.json +1 -1
  1703. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  1704. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  1705. package/util.h +10 -16
@@ -0,0 +1,3421 @@
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 <array>
19
+ #include <cassert>
20
+ #include <cstddef>
21
+ #include <cstdint>
22
+ #include <cstdio>
23
+ #include <cstring>
24
+ #include <iostream>
25
+ #include <iterator>
26
+ #include <limits>
27
+ #include <random>
28
+ #include <set>
29
+ #include <sstream>
30
+ #include <string>
31
+ #include <type_traits>
32
+ #include <utility>
33
+ #include <vector>
34
+
35
+ #include "gmock/gmock.h"
36
+ #include "gtest/gtest.h"
37
+ #include "absl/base/attributes.h"
38
+ #include "absl/base/config.h"
39
+ #include "absl/base/internal/endian.h"
40
+ #include "absl/base/macros.h"
41
+ #include "absl/base/no_destructor.h"
42
+ #include "absl/base/options.h"
43
+ #include "absl/container/fixed_array.h"
44
+ #include "absl/functional/function_ref.h"
45
+ #include "absl/hash/hash.h"
46
+ #include "absl/hash/hash_testing.h"
47
+ #include "absl/log/check.h"
48
+ #include "absl/log/log.h"
49
+ #include "absl/random/random.h"
50
+ #include "absl/strings/cord_buffer.h"
51
+ #include "absl/strings/cord_test_helpers.h"
52
+ #include "absl/strings/cordz_test_helpers.h"
53
+ #include "absl/strings/internal/cord_internal.h"
54
+ #include "absl/strings/internal/cord_rep_crc.h"
55
+ #include "absl/strings/internal/cord_rep_flat.h"
56
+ #include "absl/strings/internal/cordz_statistics.h"
57
+ #include "absl/strings/internal/cordz_update_tracker.h"
58
+ #include "absl/strings/internal/string_constant.h"
59
+ #include "absl/strings/match.h"
60
+ #include "absl/strings/str_cat.h"
61
+ #include "absl/strings/str_format.h"
62
+ #include "absl/strings/string_view.h"
63
+ #include "absl/types/compare.h"
64
+ #include "absl/types/optional.h"
65
+
66
+ // convenience local constants
67
+ static constexpr auto FLAT = absl::cord_internal::FLAT;
68
+ static constexpr auto MAX_FLAT_TAG = absl::cord_internal::MAX_FLAT_TAG;
69
+
70
+ typedef std::mt19937_64 RandomEngine;
71
+
72
+ using absl::cord_internal::CordRep;
73
+ using absl::cord_internal::CordRepBtree;
74
+ using absl::cord_internal::CordRepConcat;
75
+ using absl::cord_internal::CordRepCrc;
76
+ using absl::cord_internal::CordRepExternal;
77
+ using absl::cord_internal::CordRepFlat;
78
+ using absl::cord_internal::CordRepSubstring;
79
+ using absl::cord_internal::CordzUpdateTracker;
80
+ using absl::cord_internal::kFlatOverhead;
81
+ using absl::cord_internal::kMaxFlatLength;
82
+ using ::testing::ElementsAre;
83
+ using ::testing::Le;
84
+
85
+ static std::string RandomLowercaseString(RandomEngine* rng);
86
+ static std::string RandomLowercaseString(RandomEngine* rng, size_t length);
87
+
88
+ static int GetUniformRandomUpTo(RandomEngine* rng, int upper_bound) {
89
+ if (upper_bound > 0) {
90
+ std::uniform_int_distribution<int> uniform(0, upper_bound - 1);
91
+ return uniform(*rng);
92
+ } else {
93
+ return 0;
94
+ }
95
+ }
96
+
97
+ static size_t GetUniformRandomUpTo(RandomEngine* rng, size_t upper_bound) {
98
+ if (upper_bound > 0) {
99
+ std::uniform_int_distribution<size_t> uniform(0, upper_bound - 1);
100
+ return uniform(*rng);
101
+ } else {
102
+ return 0;
103
+ }
104
+ }
105
+
106
+ static int32_t GenerateSkewedRandom(RandomEngine* rng, int max_log) {
107
+ const uint32_t base = (*rng)() % (max_log + 1);
108
+ const uint32_t mask = ((base < 32) ? (1u << base) : 0u) - 1u;
109
+ return (*rng)() & mask;
110
+ }
111
+
112
+ static std::string RandomLowercaseString(RandomEngine* rng) {
113
+ int length;
114
+ std::bernoulli_distribution one_in_1k(0.001);
115
+ std::bernoulli_distribution one_in_10k(0.0001);
116
+ // With low probability, make a large fragment
117
+ if (one_in_10k(*rng)) {
118
+ length = GetUniformRandomUpTo(rng, 1048576);
119
+ } else if (one_in_1k(*rng)) {
120
+ length = GetUniformRandomUpTo(rng, 10000);
121
+ } else {
122
+ length = GenerateSkewedRandom(rng, 10);
123
+ }
124
+ return RandomLowercaseString(rng, length);
125
+ }
126
+
127
+ static std::string RandomLowercaseString(RandomEngine* rng, size_t length) {
128
+ std::string result(length, '\0');
129
+ std::uniform_int_distribution<int> chars('a', 'z');
130
+ std::generate(result.begin(), result.end(),
131
+ [&]() { return static_cast<char>(chars(*rng)); });
132
+ return result;
133
+ }
134
+
135
+ static void DoNothing(absl::string_view /* data */, void* /* arg */) {}
136
+
137
+ static void DeleteExternalString(absl::string_view data, void* arg) {
138
+ std::string* s = reinterpret_cast<std::string*>(arg);
139
+ EXPECT_EQ(data, *s);
140
+ delete s;
141
+ }
142
+
143
+ // Add "s" to *dst via `MakeCordFromExternal`
144
+ static void AddExternalMemory(absl::string_view s, absl::Cord* dst) {
145
+ std::string* str = new std::string(s.data(), s.size());
146
+ dst->Append(absl::MakeCordFromExternal(*str, [str](absl::string_view data) {
147
+ DeleteExternalString(data, str);
148
+ }));
149
+ }
150
+
151
+ static void DumpGrowth() {
152
+ absl::Cord str;
153
+ for (int i = 0; i < 1000; i++) {
154
+ char c = 'a' + i % 26;
155
+ str.Append(absl::string_view(&c, 1));
156
+ }
157
+ }
158
+
159
+ // Make a Cord with some number of fragments. Return the size (in bytes)
160
+ // of the smallest fragment.
161
+ static size_t AppendWithFragments(const std::string& s, RandomEngine* rng,
162
+ absl::Cord* cord) {
163
+ size_t j = 0;
164
+ const size_t max_size = s.size() / 5; // Make approx. 10 fragments
165
+ size_t min_size = max_size; // size of smallest fragment
166
+ while (j < s.size()) {
167
+ size_t N = 1 + GetUniformRandomUpTo(rng, max_size);
168
+ if (N > (s.size() - j)) {
169
+ N = s.size() - j;
170
+ }
171
+ if (N < min_size) {
172
+ min_size = N;
173
+ }
174
+
175
+ std::bernoulli_distribution coin_flip(0.5);
176
+ if (coin_flip(*rng)) {
177
+ // Grow by adding an external-memory.
178
+ AddExternalMemory(absl::string_view(s.data() + j, N), cord);
179
+ } else {
180
+ cord->Append(absl::string_view(s.data() + j, N));
181
+ }
182
+ j += N;
183
+ }
184
+ return min_size;
185
+ }
186
+
187
+ // Add an external memory that contains the specified std::string to cord
188
+ static void AddNewStringBlock(const std::string& str, absl::Cord* dst) {
189
+ char* data = new char[str.size()];
190
+ memcpy(data, str.data(), str.size());
191
+ dst->Append(absl::MakeCordFromExternal(
192
+ absl::string_view(data, str.size()),
193
+ [](absl::string_view s) { delete[] s.data(); }));
194
+ }
195
+
196
+ // Make a Cord out of many different types of nodes.
197
+ static absl::Cord MakeComposite() {
198
+ absl::Cord cord;
199
+ cord.Append("the");
200
+ AddExternalMemory(" quick brown", &cord);
201
+ AddExternalMemory(" fox jumped", &cord);
202
+
203
+ absl::Cord full(" over");
204
+ AddExternalMemory(" the lazy", &full);
205
+ AddNewStringBlock(" dog slept the whole day away", &full);
206
+ absl::Cord substring = full.Subcord(0, 18);
207
+
208
+ // Make substring long enough to defeat the copying fast path in Append.
209
+ substring.Append(std::string(1000, '.'));
210
+ cord.Append(substring);
211
+ cord = cord.Subcord(0, cord.size() - 998); // Remove most of extra junk
212
+
213
+ return cord;
214
+ }
215
+
216
+ namespace absl {
217
+ ABSL_NAMESPACE_BEGIN
218
+
219
+ class CordTestPeer {
220
+ public:
221
+ static void ForEachChunk(
222
+ const Cord& c, absl::FunctionRef<void(absl::string_view)> callback) {
223
+ c.ForEachChunk(callback);
224
+ }
225
+
226
+ static bool IsTree(const Cord& c) { return c.contents_.is_tree(); }
227
+ static CordRep* Tree(const Cord& c) { return c.contents_.tree(); }
228
+
229
+ static cord_internal::CordzInfo* GetCordzInfo(const Cord& c) {
230
+ return c.contents_.cordz_info();
231
+ }
232
+
233
+ static Cord MakeSubstring(Cord src, size_t offset, size_t length) {
234
+ CHECK(src.contents_.is_tree()) << "Can not be inlined";
235
+ CHECK(!src.ExpectedChecksum().has_value()) << "Can not be hardened";
236
+ Cord cord;
237
+ auto* tree = cord_internal::SkipCrcNode(src.contents_.tree());
238
+ auto* rep = CordRepSubstring::Create(CordRep::Ref(tree), offset, length);
239
+ cord.contents_.EmplaceTree(rep, CordzUpdateTracker::kSubCord);
240
+ return cord;
241
+ }
242
+ };
243
+
244
+ ABSL_NAMESPACE_END
245
+ } // namespace absl
246
+
247
+
248
+
249
+ // The CordTest fixture runs all tests with and without expected CRCs being set
250
+ // on the subject Cords.
251
+ class CordTest : public testing::TestWithParam<bool /*useCrc*/> {
252
+ public:
253
+ // Returns true if test is running with Crc enabled.
254
+ bool UseCrc() const { return GetParam(); }
255
+ void MaybeHarden(absl::Cord& c) {
256
+ if (UseCrc()) {
257
+ c.SetExpectedChecksum(1);
258
+ }
259
+ }
260
+ absl::Cord MaybeHardened(absl::Cord c) {
261
+ MaybeHarden(c);
262
+ return c;
263
+ }
264
+
265
+ // Returns human readable string representation of the test parameter.
266
+ static std::string ToString(testing::TestParamInfo<bool> useCrc) {
267
+ if (useCrc.param) {
268
+ return "BtreeHardened";
269
+ } else {
270
+ return "Btree";
271
+ }
272
+ }
273
+ };
274
+
275
+ INSTANTIATE_TEST_SUITE_P(WithParam, CordTest, testing::Bool(),
276
+ CordTest::ToString);
277
+
278
+ TEST(CordRepFlat, AllFlatCapacities) {
279
+ // Explicitly and redundantly assert built-in min/max limits
280
+ static_assert(absl::cord_internal::kFlatOverhead < 32, "");
281
+ static_assert(absl::cord_internal::kMinFlatSize == 32, "");
282
+ static_assert(absl::cord_internal::kMaxLargeFlatSize == 256 << 10, "");
283
+ EXPECT_EQ(absl::cord_internal::TagToAllocatedSize(FLAT), 32);
284
+ EXPECT_EQ(absl::cord_internal::TagToAllocatedSize(MAX_FLAT_TAG), 256 << 10);
285
+
286
+ // Verify all tags to map perfectly back and forth, and
287
+ // that sizes are monotonically increasing.
288
+ size_t last_size = 0;
289
+ for (int tag = FLAT; tag <= MAX_FLAT_TAG; ++tag) {
290
+ size_t size = absl::cord_internal::TagToAllocatedSize(tag);
291
+ ASSERT_GT(size, last_size);
292
+ ASSERT_EQ(absl::cord_internal::TagToAllocatedSize(tag), size);
293
+ last_size = size;
294
+ }
295
+
296
+ // All flat size from 32 - 512 are 8 byte granularity
297
+ for (size_t size = 32; size <= 512; size += 8) {
298
+ ASSERT_EQ(absl::cord_internal::RoundUpForTag(size), size);
299
+ uint8_t tag = absl::cord_internal::AllocatedSizeToTag(size);
300
+ ASSERT_EQ(absl::cord_internal::TagToAllocatedSize(tag), size);
301
+ }
302
+
303
+ // All flat sizes from 512 - 8192 are 64 byte granularity
304
+ for (size_t size = 512; size <= 8192; size += 64) {
305
+ ASSERT_EQ(absl::cord_internal::RoundUpForTag(size), size);
306
+ uint8_t tag = absl::cord_internal::AllocatedSizeToTag(size);
307
+ ASSERT_EQ(absl::cord_internal::TagToAllocatedSize(tag), size);
308
+ }
309
+
310
+ // All flat sizes from 8KB to 256KB are 4KB granularity
311
+ for (size_t size = 8192; size <= 256 * 1024; size += 4 * 1024) {
312
+ ASSERT_EQ(absl::cord_internal::RoundUpForTag(size), size);
313
+ uint8_t tag = absl::cord_internal::AllocatedSizeToTag(size);
314
+ ASSERT_EQ(absl::cord_internal::TagToAllocatedSize(tag), size);
315
+ }
316
+ }
317
+
318
+ TEST(CordRepFlat, MaxFlatSize) {
319
+ CordRepFlat* flat = CordRepFlat::New(kMaxFlatLength);
320
+ EXPECT_EQ(flat->Capacity(), kMaxFlatLength);
321
+ CordRep::Unref(flat);
322
+
323
+ flat = CordRepFlat::New(kMaxFlatLength * 4);
324
+ EXPECT_EQ(flat->Capacity(), kMaxFlatLength);
325
+ CordRep::Unref(flat);
326
+ }
327
+
328
+ TEST(CordRepFlat, MaxLargeFlatSize) {
329
+ const size_t size = 256 * 1024 - kFlatOverhead;
330
+ CordRepFlat* flat = CordRepFlat::New(CordRepFlat::Large(), size);
331
+ EXPECT_GE(flat->Capacity(), size);
332
+ CordRep::Unref(flat);
333
+ }
334
+
335
+ TEST(CordRepFlat, AllFlatSizes) {
336
+ const size_t kMaxSize = 256 * 1024;
337
+ for (size_t size = 32; size <= kMaxSize; size *=2) {
338
+ const size_t length = size - kFlatOverhead - 1;
339
+ CordRepFlat* flat = CordRepFlat::New(CordRepFlat::Large(), length);
340
+ EXPECT_GE(flat->Capacity(), length);
341
+ memset(flat->Data(), 0xCD, flat->Capacity());
342
+ CordRep::Unref(flat);
343
+ }
344
+ }
345
+
346
+ TEST_P(CordTest, AllFlatSizes) {
347
+ using absl::strings_internal::CordTestAccess;
348
+
349
+ for (size_t s = 0; s < CordTestAccess::MaxFlatLength(); s++) {
350
+ // Make a string of length s.
351
+ std::string src;
352
+ while (src.size() < s) {
353
+ src.push_back('a' + (src.size() % 26));
354
+ }
355
+
356
+ absl::Cord dst(src);
357
+ MaybeHarden(dst);
358
+ EXPECT_EQ(std::string(dst), src) << s;
359
+ }
360
+ }
361
+
362
+ // We create a Cord at least 128GB in size using the fact that Cords can
363
+ // internally reference-count; thus the Cord is enormous without actually
364
+ // consuming very much memory.
365
+ TEST_P(CordTest, GigabyteCordFromExternal) {
366
+ const size_t one_gig = 1024U * 1024U * 1024U;
367
+ size_t max_size = 2 * one_gig;
368
+ if (sizeof(max_size) > 4) max_size = 128 * one_gig;
369
+
370
+ size_t length = 128 * 1024;
371
+ char* data = new char[length];
372
+ absl::Cord from = absl::MakeCordFromExternal(
373
+ absl::string_view(data, length),
374
+ [](absl::string_view sv) { delete[] sv.data(); });
375
+
376
+ // This loop may seem odd due to its combination of exponential doubling of
377
+ // size and incremental size increases. We do it incrementally to be sure the
378
+ // Cord will need rebalancing and will exercise code that, in the past, has
379
+ // caused crashes in production. We grow exponentially so that the code will
380
+ // execute in a reasonable amount of time.
381
+ absl::Cord c;
382
+ c.Append(from);
383
+ while (c.size() < max_size) {
384
+ c.Append(c);
385
+ c.Append(from);
386
+ c.Append(from);
387
+ c.Append(from);
388
+ c.Append(from);
389
+ MaybeHarden(c);
390
+ }
391
+
392
+ for (int i = 0; i < 1024; ++i) {
393
+ c.Append(from);
394
+ }
395
+ LOG(INFO) << "Made a Cord with " << c.size() << " bytes!";
396
+ // Note: on a 32-bit build, this comes out to 2,818,048,000 bytes.
397
+ // Note: on a 64-bit build, this comes out to 171,932,385,280 bytes.
398
+ }
399
+
400
+ static absl::Cord MakeExternalCord(int size) {
401
+ char* buffer = new char[size];
402
+ memset(buffer, 'x', size);
403
+ absl::Cord cord;
404
+ cord.Append(absl::MakeCordFromExternal(
405
+ absl::string_view(buffer, size),
406
+ [](absl::string_view s) { delete[] s.data(); }));
407
+ return cord;
408
+ }
409
+
410
+ // Extern to fool clang that this is not constant. Needed to suppress
411
+ // a warning of unsafe code we want to test.
412
+ extern bool my_unique_true_boolean;
413
+ bool my_unique_true_boolean = true;
414
+
415
+ TEST_P(CordTest, Assignment) {
416
+ absl::Cord x(absl::string_view("hi there"));
417
+ absl::Cord y(x);
418
+ MaybeHarden(y);
419
+ ASSERT_EQ(x.ExpectedChecksum(), absl::nullopt);
420
+ ASSERT_EQ(std::string(x), "hi there");
421
+ ASSERT_EQ(std::string(y), "hi there");
422
+ ASSERT_TRUE(x == y);
423
+ ASSERT_TRUE(x <= y);
424
+ ASSERT_TRUE(y <= x);
425
+
426
+ x = absl::string_view("foo");
427
+ ASSERT_EQ(std::string(x), "foo");
428
+ ASSERT_EQ(std::string(y), "hi there");
429
+ ASSERT_TRUE(x < y);
430
+ ASSERT_TRUE(y > x);
431
+ ASSERT_TRUE(x != y);
432
+ ASSERT_TRUE(x <= y);
433
+ ASSERT_TRUE(y >= x);
434
+
435
+ x = "foo";
436
+ ASSERT_EQ(x, "foo");
437
+
438
+ // Test that going from inline rep to tree we don't leak memory.
439
+ std::vector<std::pair<absl::string_view, absl::string_view>>
440
+ test_string_pairs = {{"hi there", "foo"},
441
+ {"loooooong coooooord", "short cord"},
442
+ {"short cord", "loooooong coooooord"},
443
+ {"loooooong coooooord1", "loooooong coooooord2"}};
444
+ for (std::pair<absl::string_view, absl::string_view> test_strings :
445
+ test_string_pairs) {
446
+ absl::Cord tmp(test_strings.first);
447
+ absl::Cord z(std::move(tmp));
448
+ ASSERT_EQ(std::string(z), test_strings.first);
449
+ tmp = test_strings.second;
450
+ z = std::move(tmp);
451
+ ASSERT_EQ(std::string(z), test_strings.second);
452
+ }
453
+ {
454
+ // Test that self-move assignment doesn't crash/leak.
455
+ // Do not write such code!
456
+ absl::Cord my_small_cord("foo");
457
+ absl::Cord my_big_cord("loooooong coooooord");
458
+ // Bypass clang's warning on self move-assignment.
459
+ absl::Cord* my_small_alias =
460
+ my_unique_true_boolean ? &my_small_cord : &my_big_cord;
461
+ absl::Cord* my_big_alias =
462
+ !my_unique_true_boolean ? &my_small_cord : &my_big_cord;
463
+
464
+ *my_small_alias = std::move(my_small_cord);
465
+ *my_big_alias = std::move(my_big_cord);
466
+ // my_small_cord and my_big_cord are in an unspecified but valid
467
+ // state, and will be correctly destroyed here.
468
+ }
469
+ }
470
+
471
+ TEST_P(CordTest, StartsEndsWith) {
472
+ absl::Cord x(absl::string_view("abcde"));
473
+ MaybeHarden(x);
474
+ absl::Cord empty("");
475
+
476
+ ASSERT_TRUE(x.StartsWith(absl::Cord("abcde")));
477
+ ASSERT_TRUE(x.StartsWith(absl::Cord("abc")));
478
+ ASSERT_TRUE(x.StartsWith(absl::Cord("")));
479
+ ASSERT_TRUE(empty.StartsWith(absl::Cord("")));
480
+ ASSERT_TRUE(x.EndsWith(absl::Cord("abcde")));
481
+ ASSERT_TRUE(x.EndsWith(absl::Cord("cde")));
482
+ ASSERT_TRUE(x.EndsWith(absl::Cord("")));
483
+ ASSERT_TRUE(empty.EndsWith(absl::Cord("")));
484
+
485
+ ASSERT_TRUE(!x.StartsWith(absl::Cord("xyz")));
486
+ ASSERT_TRUE(!empty.StartsWith(absl::Cord("xyz")));
487
+ ASSERT_TRUE(!x.EndsWith(absl::Cord("xyz")));
488
+ ASSERT_TRUE(!empty.EndsWith(absl::Cord("xyz")));
489
+
490
+ ASSERT_TRUE(x.StartsWith("abcde"));
491
+ ASSERT_TRUE(x.StartsWith("abc"));
492
+ ASSERT_TRUE(x.StartsWith(""));
493
+ ASSERT_TRUE(empty.StartsWith(""));
494
+ ASSERT_TRUE(x.EndsWith("abcde"));
495
+ ASSERT_TRUE(x.EndsWith("cde"));
496
+ ASSERT_TRUE(x.EndsWith(""));
497
+ ASSERT_TRUE(empty.EndsWith(""));
498
+
499
+ ASSERT_TRUE(!x.StartsWith("xyz"));
500
+ ASSERT_TRUE(!empty.StartsWith("xyz"));
501
+ ASSERT_TRUE(!x.EndsWith("xyz"));
502
+ ASSERT_TRUE(!empty.EndsWith("xyz"));
503
+ }
504
+
505
+ TEST_P(CordTest, Contains) {
506
+ auto flat_haystack = absl::Cord("this is a flat cord");
507
+ auto fragmented_haystack = absl::MakeFragmentedCord(
508
+ {"this", " ", "is", " ", "a", " ", "fragmented", " ", "cord"});
509
+
510
+ EXPECT_TRUE(flat_haystack.Contains(""));
511
+ EXPECT_TRUE(fragmented_haystack.Contains(""));
512
+ EXPECT_TRUE(flat_haystack.Contains(absl::Cord("")));
513
+ EXPECT_TRUE(fragmented_haystack.Contains(absl::Cord("")));
514
+ EXPECT_TRUE(absl::Cord("").Contains(""));
515
+ EXPECT_TRUE(absl::Cord("").Contains(absl::Cord("")));
516
+ EXPECT_FALSE(absl::Cord("").Contains(flat_haystack));
517
+ EXPECT_FALSE(absl::Cord("").Contains(fragmented_haystack));
518
+
519
+ EXPECT_FALSE(flat_haystack.Contains("z"));
520
+ EXPECT_FALSE(fragmented_haystack.Contains("z"));
521
+ EXPECT_FALSE(flat_haystack.Contains(absl::Cord("z")));
522
+ EXPECT_FALSE(fragmented_haystack.Contains(absl::Cord("z")));
523
+
524
+ EXPECT_FALSE(flat_haystack.Contains("is an"));
525
+ EXPECT_FALSE(fragmented_haystack.Contains("is an"));
526
+ EXPECT_FALSE(flat_haystack.Contains(absl::Cord("is an")));
527
+ EXPECT_FALSE(fragmented_haystack.Contains(absl::Cord("is an")));
528
+ EXPECT_FALSE(
529
+ flat_haystack.Contains(absl::MakeFragmentedCord({"is", " ", "an"})));
530
+ EXPECT_FALSE(fragmented_haystack.Contains(
531
+ absl::MakeFragmentedCord({"is", " ", "an"})));
532
+
533
+ EXPECT_TRUE(flat_haystack.Contains("is a"));
534
+ EXPECT_TRUE(fragmented_haystack.Contains("is a"));
535
+ EXPECT_TRUE(flat_haystack.Contains(absl::Cord("is a")));
536
+ EXPECT_TRUE(fragmented_haystack.Contains(absl::Cord("is a")));
537
+ EXPECT_TRUE(
538
+ flat_haystack.Contains(absl::MakeFragmentedCord({"is", " ", "a"})));
539
+ EXPECT_TRUE(
540
+ fragmented_haystack.Contains(absl::MakeFragmentedCord({"is", " ", "a"})));
541
+ }
542
+
543
+ TEST_P(CordTest, Find) {
544
+ auto flat_haystack = absl::Cord("this is a flat cord");
545
+ auto fragmented_haystack = absl::MakeFragmentedCord(
546
+ {"this", " ", "is", " ", "a", " ", "fragmented", " ", "cord"});
547
+ auto empty_haystack = absl::Cord("");
548
+
549
+ EXPECT_EQ(flat_haystack.Find(""), flat_haystack.char_begin());
550
+ EXPECT_EQ(fragmented_haystack.Find(""), fragmented_haystack.char_begin());
551
+ EXPECT_EQ(flat_haystack.Find(absl::Cord("")), flat_haystack.char_begin());
552
+ EXPECT_EQ(fragmented_haystack.Find(absl::Cord("")),
553
+ fragmented_haystack.char_begin());
554
+ EXPECT_EQ(empty_haystack.Find(""), empty_haystack.char_begin());
555
+ EXPECT_EQ(empty_haystack.Find(absl::Cord("")), empty_haystack.char_begin());
556
+ EXPECT_EQ(empty_haystack.Find(flat_haystack), empty_haystack.char_end());
557
+ EXPECT_EQ(empty_haystack.Find(fragmented_haystack),
558
+ empty_haystack.char_end());
559
+
560
+ EXPECT_EQ(flat_haystack.Find("z"), flat_haystack.char_end());
561
+ EXPECT_EQ(fragmented_haystack.Find("z"), fragmented_haystack.char_end());
562
+ EXPECT_EQ(flat_haystack.Find(absl::Cord("z")), flat_haystack.char_end());
563
+ EXPECT_EQ(fragmented_haystack.Find(absl::Cord("z")),
564
+ fragmented_haystack.char_end());
565
+
566
+ EXPECT_EQ(flat_haystack.Find("is an"), flat_haystack.char_end());
567
+ EXPECT_EQ(fragmented_haystack.Find("is an"), fragmented_haystack.char_end());
568
+ EXPECT_EQ(flat_haystack.Find(absl::Cord("is an")), flat_haystack.char_end());
569
+ EXPECT_EQ(fragmented_haystack.Find(absl::Cord("is an")),
570
+ fragmented_haystack.char_end());
571
+ EXPECT_EQ(flat_haystack.Find(absl::MakeFragmentedCord({"is", " ", "an"})),
572
+ flat_haystack.char_end());
573
+ EXPECT_EQ(
574
+ fragmented_haystack.Find(absl::MakeFragmentedCord({"is", " ", "an"})),
575
+ fragmented_haystack.char_end());
576
+
577
+ EXPECT_EQ(flat_haystack.Find("is a"),
578
+ std::next(flat_haystack.char_begin(), 5));
579
+ EXPECT_EQ(fragmented_haystack.Find("is a"),
580
+ std::next(fragmented_haystack.char_begin(), 5));
581
+ EXPECT_EQ(flat_haystack.Find(absl::Cord("is a")),
582
+ std::next(flat_haystack.char_begin(), 5));
583
+ EXPECT_EQ(fragmented_haystack.Find(absl::Cord("is a")),
584
+ std::next(fragmented_haystack.char_begin(), 5));
585
+ EXPECT_EQ(flat_haystack.Find(absl::MakeFragmentedCord({"is", " ", "a"})),
586
+ std::next(flat_haystack.char_begin(), 5));
587
+ EXPECT_EQ(
588
+ fragmented_haystack.Find(absl::MakeFragmentedCord({"is", " ", "a"})),
589
+ std::next(fragmented_haystack.char_begin(), 5));
590
+ }
591
+
592
+ TEST_P(CordTest, Subcord) {
593
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
594
+ const std::string s = RandomLowercaseString(&rng, 1024);
595
+
596
+ absl::Cord a;
597
+ AppendWithFragments(s, &rng, &a);
598
+ MaybeHarden(a);
599
+ ASSERT_EQ(s, std::string(a));
600
+
601
+ // Check subcords of a, from a variety of interesting points.
602
+ std::set<size_t> positions;
603
+ for (int i = 0; i <= 32; ++i) {
604
+ positions.insert(i);
605
+ positions.insert(i * 32 - 1);
606
+ positions.insert(i * 32);
607
+ positions.insert(i * 32 + 1);
608
+ positions.insert(a.size() - i);
609
+ }
610
+ positions.insert(237);
611
+ positions.insert(732);
612
+ for (size_t pos : positions) {
613
+ if (pos > a.size()) continue;
614
+ for (size_t end_pos : positions) {
615
+ if (end_pos < pos || end_pos > a.size()) continue;
616
+ absl::Cord sa = a.Subcord(pos, end_pos - pos);
617
+ ASSERT_EQ(absl::string_view(s).substr(pos, end_pos - pos),
618
+ std::string(sa))
619
+ << a;
620
+ if (pos != 0 || end_pos != a.size()) {
621
+ ASSERT_EQ(sa.ExpectedChecksum(), absl::nullopt);
622
+ }
623
+ }
624
+ }
625
+
626
+ // Do the same thing for an inline cord.
627
+ const std::string sh = "short";
628
+ absl::Cord c(sh);
629
+ for (size_t pos = 0; pos <= sh.size(); ++pos) {
630
+ for (size_t n = 0; n <= sh.size() - pos; ++n) {
631
+ absl::Cord sc = c.Subcord(pos, n);
632
+ ASSERT_EQ(sh.substr(pos, n), std::string(sc)) << c;
633
+ }
634
+ }
635
+
636
+ // Check subcords of subcords.
637
+ absl::Cord sa = a.Subcord(0, a.size());
638
+ std::string ss = s.substr(0, s.size());
639
+ while (sa.size() > 1) {
640
+ sa = sa.Subcord(1, sa.size() - 2);
641
+ ss = ss.substr(1, ss.size() - 2);
642
+ ASSERT_EQ(ss, std::string(sa)) << a;
643
+ if (HasFailure()) break; // halt cascade
644
+ }
645
+
646
+ // It is OK to ask for too much.
647
+ sa = a.Subcord(0, a.size() + 1);
648
+ EXPECT_EQ(s, std::string(sa));
649
+
650
+ // It is OK to ask for something beyond the end.
651
+ sa = a.Subcord(a.size() + 1, 0);
652
+ EXPECT_TRUE(sa.empty());
653
+ sa = a.Subcord(a.size() + 1, 1);
654
+ EXPECT_TRUE(sa.empty());
655
+ }
656
+
657
+ TEST_P(CordTest, Swap) {
658
+ absl::string_view a("Dexter");
659
+ absl::string_view b("Mandark");
660
+ absl::Cord x(a);
661
+ absl::Cord y(b);
662
+ MaybeHarden(x);
663
+ swap(x, y);
664
+ if (UseCrc()) {
665
+ ASSERT_EQ(x.ExpectedChecksum(), absl::nullopt);
666
+ ASSERT_EQ(y.ExpectedChecksum(), 1);
667
+ }
668
+ ASSERT_EQ(x, absl::Cord(b));
669
+ ASSERT_EQ(y, absl::Cord(a));
670
+ x.swap(y);
671
+ if (UseCrc()) {
672
+ ASSERT_EQ(x.ExpectedChecksum(), 1);
673
+ ASSERT_EQ(y.ExpectedChecksum(), absl::nullopt);
674
+ }
675
+ ASSERT_EQ(x, absl::Cord(a));
676
+ ASSERT_EQ(y, absl::Cord(b));
677
+ }
678
+
679
+ static void VerifyCopyToString(const absl::Cord& cord) {
680
+ std::string initially_empty;
681
+ absl::CopyCordToString(cord, &initially_empty);
682
+ EXPECT_EQ(initially_empty, cord);
683
+
684
+ constexpr size_t kInitialLength = 1024;
685
+ std::string has_initial_contents(kInitialLength, 'x');
686
+ const char* address_before_copy = has_initial_contents.data();
687
+ absl::CopyCordToString(cord, &has_initial_contents);
688
+ EXPECT_EQ(has_initial_contents, cord);
689
+
690
+ if (cord.size() <= kInitialLength) {
691
+ EXPECT_EQ(has_initial_contents.data(), address_before_copy)
692
+ << "CopyCordToString allocated new string storage; "
693
+ "has_initial_contents = \""
694
+ << has_initial_contents << "\"";
695
+ }
696
+ }
697
+
698
+ TEST_P(CordTest, CopyToString) {
699
+ VerifyCopyToString(absl::Cord()); // empty cords cannot carry CRCs
700
+ VerifyCopyToString(MaybeHardened(absl::Cord("small cord")));
701
+ VerifyCopyToString(MaybeHardened(
702
+ absl::MakeFragmentedCord({"fragmented ", "cord ", "to ", "test ",
703
+ "copying ", "to ", "a ", "string."})));
704
+ }
705
+
706
+ static void VerifyAppendCordToString(const absl::Cord& cord) {
707
+ std::string initially_empty;
708
+ absl::AppendCordToString(cord, &initially_empty);
709
+ EXPECT_EQ(initially_empty, cord);
710
+
711
+ const absl::string_view kInitialContents = "initial contents.";
712
+ std::string expected_after_append =
713
+ absl::StrCat(kInitialContents, std::string(cord));
714
+
715
+ std::string no_reserve(kInitialContents);
716
+ absl::AppendCordToString(cord, &no_reserve);
717
+ EXPECT_EQ(no_reserve, expected_after_append);
718
+
719
+ std::string has_reserved_capacity(kInitialContents);
720
+ has_reserved_capacity.reserve(has_reserved_capacity.size() + cord.size());
721
+ const char* address_before_copy = has_reserved_capacity.data();
722
+ absl::AppendCordToString(cord, &has_reserved_capacity);
723
+ EXPECT_EQ(has_reserved_capacity, expected_after_append);
724
+ EXPECT_EQ(has_reserved_capacity.data(), address_before_copy)
725
+ << "AppendCordToString allocated new string storage; "
726
+ "has_reserved_capacity = \""
727
+ << has_reserved_capacity << "\"";
728
+ }
729
+
730
+ TEST_P(CordTest, AppendToString) {
731
+ VerifyAppendCordToString(absl::Cord()); // empty cords cannot carry CRCs
732
+ VerifyAppendCordToString(MaybeHardened(absl::Cord("small cord")));
733
+ VerifyAppendCordToString(MaybeHardened(
734
+ absl::MakeFragmentedCord({"fragmented ", "cord ", "to ", "test ",
735
+ "appending ", "to ", "a ", "string."})));
736
+ }
737
+
738
+ TEST_P(CordTest, AppendEmptyBuffer) {
739
+ absl::Cord cord;
740
+ cord.Append(absl::CordBuffer());
741
+ cord.Append(absl::CordBuffer::CreateWithDefaultLimit(2000));
742
+ }
743
+
744
+ TEST_P(CordTest, AppendEmptyBufferToFlat) {
745
+ absl::Cord cord(std::string(2000, 'x'));
746
+ cord.Append(absl::CordBuffer());
747
+ cord.Append(absl::CordBuffer::CreateWithDefaultLimit(2000));
748
+ }
749
+
750
+ TEST_P(CordTest, AppendEmptyBufferToTree) {
751
+ absl::Cord cord(std::string(2000, 'x'));
752
+ cord.Append(std::string(2000, 'y'));
753
+ cord.Append(absl::CordBuffer());
754
+ cord.Append(absl::CordBuffer::CreateWithDefaultLimit(2000));
755
+ }
756
+
757
+ TEST_P(CordTest, AppendSmallBuffer) {
758
+ absl::Cord cord;
759
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(3);
760
+ ASSERT_THAT(buffer.capacity(), Le(15));
761
+ memcpy(buffer.data(), "Abc", 3);
762
+ buffer.SetLength(3);
763
+ cord.Append(std::move(buffer));
764
+ EXPECT_EQ(buffer.length(), 0); // NOLINT
765
+ EXPECT_GT(buffer.capacity(), 0); // NOLINT
766
+
767
+ buffer = absl::CordBuffer::CreateWithDefaultLimit(3);
768
+ memcpy(buffer.data(), "defgh", 5);
769
+ buffer.SetLength(5);
770
+ cord.Append(std::move(buffer));
771
+ EXPECT_EQ(buffer.length(), 0); // NOLINT
772
+ EXPECT_GT(buffer.capacity(), 0); // NOLINT
773
+
774
+ EXPECT_THAT(cord.Chunks(), ElementsAre("Abcdefgh"));
775
+ }
776
+
777
+ TEST_P(CordTest, AppendAndPrependBufferArePrecise) {
778
+ // Create a cord large enough to force 40KB flats.
779
+ std::string test_data(absl::cord_internal::kMaxFlatLength * 10, 'x');
780
+ absl::Cord cord1(test_data);
781
+ absl::Cord cord2(test_data);
782
+ const size_t size1 = cord1.EstimatedMemoryUsage();
783
+ const size_t size2 = cord2.EstimatedMemoryUsage();
784
+
785
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(3);
786
+ memcpy(buffer.data(), "Abc", 3);
787
+ buffer.SetLength(3);
788
+ cord1.Append(std::move(buffer));
789
+
790
+ buffer = absl::CordBuffer::CreateWithDefaultLimit(3);
791
+ memcpy(buffer.data(), "Abc", 3);
792
+ buffer.SetLength(3);
793
+ cord2.Prepend(std::move(buffer));
794
+
795
+ #ifndef NDEBUG
796
+ // Allow 32 bytes new CordRepFlat, and 128 bytes for 'glue nodes'
797
+ constexpr size_t kMaxDelta = 128 + 32;
798
+ #else
799
+ // Allow 256 bytes extra for 'allocation debug overhead'
800
+ constexpr size_t kMaxDelta = 128 + 32 + 256;
801
+ #endif
802
+
803
+ EXPECT_LE(cord1.EstimatedMemoryUsage() - size1, kMaxDelta);
804
+ EXPECT_LE(cord2.EstimatedMemoryUsage() - size2, kMaxDelta);
805
+
806
+ EXPECT_EQ(cord1, absl::StrCat(test_data, "Abc"));
807
+ EXPECT_EQ(cord2, absl::StrCat("Abc", test_data));
808
+ }
809
+
810
+ TEST_P(CordTest, PrependSmallBuffer) {
811
+ absl::Cord cord;
812
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(3);
813
+ ASSERT_THAT(buffer.capacity(), Le(15));
814
+ memcpy(buffer.data(), "Abc", 3);
815
+ buffer.SetLength(3);
816
+ cord.Prepend(std::move(buffer));
817
+ EXPECT_EQ(buffer.length(), 0); // NOLINT
818
+ EXPECT_GT(buffer.capacity(), 0); // NOLINT
819
+
820
+ buffer = absl::CordBuffer::CreateWithDefaultLimit(3);
821
+ memcpy(buffer.data(), "defgh", 5);
822
+ buffer.SetLength(5);
823
+ cord.Prepend(std::move(buffer));
824
+ EXPECT_EQ(buffer.length(), 0); // NOLINT
825
+ EXPECT_GT(buffer.capacity(), 0); // NOLINT
826
+
827
+ EXPECT_THAT(cord.Chunks(), ElementsAre("defghAbc"));
828
+ }
829
+
830
+ TEST_P(CordTest, AppendLargeBuffer) {
831
+ absl::Cord cord;
832
+
833
+ std::string s1(700, '1');
834
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(s1.size());
835
+ memcpy(buffer.data(), s1.data(), s1.size());
836
+ buffer.SetLength(s1.size());
837
+ cord.Append(std::move(buffer));
838
+ EXPECT_EQ(buffer.length(), 0); // NOLINT
839
+ EXPECT_GT(buffer.capacity(), 0); // NOLINT
840
+
841
+ std::string s2(1000, '2');
842
+ buffer = absl::CordBuffer::CreateWithDefaultLimit(s2.size());
843
+ memcpy(buffer.data(), s2.data(), s2.size());
844
+ buffer.SetLength(s2.size());
845
+ cord.Append(std::move(buffer));
846
+ EXPECT_EQ(buffer.length(), 0); // NOLINT
847
+ EXPECT_GT(buffer.capacity(), 0); // NOLINT
848
+
849
+ EXPECT_THAT(cord.Chunks(), ElementsAre(s1, s2));
850
+ }
851
+
852
+ TEST_P(CordTest, PrependLargeBuffer) {
853
+ absl::Cord cord;
854
+
855
+ std::string s1(700, '1');
856
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(s1.size());
857
+ memcpy(buffer.data(), s1.data(), s1.size());
858
+ buffer.SetLength(s1.size());
859
+ cord.Prepend(std::move(buffer));
860
+ EXPECT_EQ(buffer.length(), 0); // NOLINT
861
+ EXPECT_GT(buffer.capacity(), 0); // NOLINT
862
+
863
+ std::string s2(1000, '2');
864
+ buffer = absl::CordBuffer::CreateWithDefaultLimit(s2.size());
865
+ memcpy(buffer.data(), s2.data(), s2.size());
866
+ buffer.SetLength(s2.size());
867
+ cord.Prepend(std::move(buffer));
868
+ EXPECT_EQ(buffer.length(), 0); // NOLINT
869
+ EXPECT_GT(buffer.capacity(), 0); // NOLINT
870
+
871
+ EXPECT_THAT(cord.Chunks(), ElementsAre(s2, s1));
872
+ }
873
+
874
+ class CordAppendBufferTest : public testing::TestWithParam<bool> {
875
+ public:
876
+ size_t is_default() const { return GetParam(); }
877
+
878
+ // Returns human readable string representation of the test parameter.
879
+ static std::string ToString(testing::TestParamInfo<bool> param) {
880
+ return param.param ? "DefaultLimit" : "CustomLimit";
881
+ }
882
+
883
+ size_t limit() const {
884
+ return is_default() ? absl::CordBuffer::kDefaultLimit
885
+ : absl::CordBuffer::kCustomLimit;
886
+ }
887
+
888
+ size_t maximum_payload() const {
889
+ return is_default() ? absl::CordBuffer::MaximumPayload()
890
+ : absl::CordBuffer::MaximumPayload(limit());
891
+ }
892
+
893
+ absl::CordBuffer GetAppendBuffer(absl::Cord& cord, size_t capacity,
894
+ size_t min_capacity = 16) {
895
+ return is_default()
896
+ ? cord.GetAppendBuffer(capacity, min_capacity)
897
+ : cord.GetCustomAppendBuffer(limit(), capacity, min_capacity);
898
+ }
899
+ };
900
+
901
+ INSTANTIATE_TEST_SUITE_P(WithParam, CordAppendBufferTest, testing::Bool(),
902
+ CordAppendBufferTest::ToString);
903
+
904
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnEmptyCord) {
905
+ absl::Cord cord;
906
+ absl::CordBuffer buffer = GetAppendBuffer(cord, 1000);
907
+ EXPECT_GE(buffer.capacity(), 1000);
908
+ EXPECT_EQ(buffer.length(), 0);
909
+ }
910
+
911
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnInlinedCord) {
912
+ static constexpr int kInlinedSize = sizeof(absl::CordBuffer) - 1;
913
+ for (int size : {6, kInlinedSize - 3, kInlinedSize - 2, 1000}) {
914
+ absl::Cord cord("Abc");
915
+ absl::CordBuffer buffer = GetAppendBuffer(cord, size, 1);
916
+ EXPECT_GE(buffer.capacity(), 3 + size);
917
+ EXPECT_EQ(buffer.length(), 3);
918
+ EXPECT_EQ(absl::string_view(buffer.data(), buffer.length()), "Abc");
919
+ EXPECT_TRUE(cord.empty());
920
+ }
921
+ }
922
+
923
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnInlinedCordCapacityCloseToMax) {
924
+ // Cover the use case where we have a non empty inlined cord with some size
925
+ // 'n', and ask for something like 'uint64_max - k', assuming internal logic
926
+ // could overflow on 'uint64_max - k + size', and return a valid, but
927
+ // inefficiently smaller buffer if it would provide is the max allowed size.
928
+ for (size_t dist_from_max = 0; dist_from_max <= 4; ++dist_from_max) {
929
+ absl::Cord cord("Abc");
930
+ size_t size = std::numeric_limits<size_t>::max() - dist_from_max;
931
+ absl::CordBuffer buffer = GetAppendBuffer(cord, size, 1);
932
+ EXPECT_GE(buffer.capacity(), maximum_payload());
933
+ EXPECT_EQ(buffer.length(), 3);
934
+ EXPECT_EQ(absl::string_view(buffer.data(), buffer.length()), "Abc");
935
+ EXPECT_TRUE(cord.empty());
936
+ }
937
+ }
938
+
939
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnFlat) {
940
+ // Create a cord with a single flat and extra capacity
941
+ absl::Cord cord;
942
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(500);
943
+ const size_t expected_capacity = buffer.capacity();
944
+ buffer.SetLength(3);
945
+ memcpy(buffer.data(), "Abc", 3);
946
+ cord.Append(std::move(buffer));
947
+
948
+ buffer = GetAppendBuffer(cord, 6);
949
+ EXPECT_EQ(buffer.capacity(), expected_capacity);
950
+ EXPECT_EQ(buffer.length(), 3);
951
+ EXPECT_EQ(absl::string_view(buffer.data(), buffer.length()), "Abc");
952
+ EXPECT_TRUE(cord.empty());
953
+ }
954
+
955
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnFlatWithoutMinCapacity) {
956
+ // Create a cord with a single flat and extra capacity
957
+ absl::Cord cord;
958
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(500);
959
+ buffer.SetLength(30);
960
+ memset(buffer.data(), 'x', 30);
961
+ cord.Append(std::move(buffer));
962
+
963
+ buffer = GetAppendBuffer(cord, 1000, 900);
964
+ EXPECT_GE(buffer.capacity(), 1000);
965
+ EXPECT_EQ(buffer.length(), 0);
966
+ EXPECT_EQ(cord, std::string(30, 'x'));
967
+ }
968
+
969
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnTree) {
970
+ RandomEngine rng;
971
+ for (int num_flats : {2, 3, 100}) {
972
+ // Create a cord with `num_flats` flats and extra capacity
973
+ absl::Cord cord;
974
+ std::string prefix;
975
+ std::string last;
976
+ for (int i = 0; i < num_flats - 1; ++i) {
977
+ prefix += last;
978
+ last = RandomLowercaseString(&rng, 10);
979
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(500);
980
+ buffer.SetLength(10);
981
+ memcpy(buffer.data(), last.data(), 10);
982
+ cord.Append(std::move(buffer));
983
+ }
984
+ absl::CordBuffer buffer = GetAppendBuffer(cord, 6);
985
+ EXPECT_GE(buffer.capacity(), 500);
986
+ EXPECT_EQ(buffer.length(), 10);
987
+ EXPECT_EQ(absl::string_view(buffer.data(), buffer.length()), last);
988
+ EXPECT_EQ(cord, prefix);
989
+ }
990
+ }
991
+
992
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnTreeWithoutMinCapacity) {
993
+ absl::Cord cord;
994
+ for (int i = 0; i < 2; ++i) {
995
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(500);
996
+ buffer.SetLength(3);
997
+ memcpy(buffer.data(), i ? "def" : "Abc", 3);
998
+ cord.Append(std::move(buffer));
999
+ }
1000
+ absl::CordBuffer buffer = GetAppendBuffer(cord, 1000, 900);
1001
+ EXPECT_GE(buffer.capacity(), 1000);
1002
+ EXPECT_EQ(buffer.length(), 0);
1003
+ EXPECT_EQ(cord, "Abcdef");
1004
+ }
1005
+
1006
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnSubstring) {
1007
+ // Create a large cord with a single flat and some extra capacity
1008
+ absl::Cord cord;
1009
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(500);
1010
+ buffer.SetLength(450);
1011
+ memset(buffer.data(), 'x', 450);
1012
+ cord.Append(std::move(buffer));
1013
+ cord.RemovePrefix(1);
1014
+
1015
+ // Deny on substring
1016
+ buffer = GetAppendBuffer(cord, 6);
1017
+ EXPECT_EQ(buffer.length(), 0);
1018
+ EXPECT_EQ(cord, std::string(449, 'x'));
1019
+ }
1020
+
1021
+ TEST_P(CordAppendBufferTest, GetAppendBufferOnSharedCord) {
1022
+ // Create a shared cord with a single flat and extra capacity
1023
+ absl::Cord cord;
1024
+ absl::CordBuffer buffer = absl::CordBuffer::CreateWithDefaultLimit(500);
1025
+ buffer.SetLength(3);
1026
+ memcpy(buffer.data(), "Abc", 3);
1027
+ cord.Append(std::move(buffer));
1028
+ absl::Cord shared_cord = cord;
1029
+
1030
+ // Deny on flat
1031
+ buffer = GetAppendBuffer(cord, 6);
1032
+ EXPECT_EQ(buffer.length(), 0);
1033
+ EXPECT_EQ(cord, "Abc");
1034
+
1035
+ buffer = absl::CordBuffer::CreateWithDefaultLimit(500);
1036
+ buffer.SetLength(3);
1037
+ memcpy(buffer.data(), "def", 3);
1038
+ cord.Append(std::move(buffer));
1039
+ shared_cord = cord;
1040
+
1041
+ // Deny on tree
1042
+ buffer = GetAppendBuffer(cord, 6);
1043
+ EXPECT_EQ(buffer.length(), 0);
1044
+ EXPECT_EQ(cord, "Abcdef");
1045
+ }
1046
+
1047
+ TEST_P(CordTest, TryFlatEmpty) {
1048
+ absl::Cord c;
1049
+ EXPECT_EQ(c.TryFlat(), "");
1050
+ }
1051
+
1052
+ TEST_P(CordTest, TryFlatFlat) {
1053
+ absl::Cord c("hello");
1054
+ MaybeHarden(c);
1055
+ EXPECT_EQ(c.TryFlat(), "hello");
1056
+ }
1057
+
1058
+ TEST_P(CordTest, TryFlatSubstrInlined) {
1059
+ absl::Cord c("hello");
1060
+ c.RemovePrefix(1);
1061
+ MaybeHarden(c);
1062
+ EXPECT_EQ(c.TryFlat(), "ello");
1063
+ }
1064
+
1065
+ TEST_P(CordTest, TryFlatSubstrFlat) {
1066
+ absl::Cord c("longer than 15 bytes");
1067
+ absl::Cord sub = absl::CordTestPeer::MakeSubstring(c, 1, c.size() - 1);
1068
+ MaybeHarden(sub);
1069
+ EXPECT_EQ(sub.TryFlat(), "onger than 15 bytes");
1070
+ }
1071
+
1072
+ TEST_P(CordTest, TryFlatConcat) {
1073
+ absl::Cord c = absl::MakeFragmentedCord({"hel", "lo"});
1074
+ MaybeHarden(c);
1075
+ EXPECT_EQ(c.TryFlat(), absl::nullopt);
1076
+ }
1077
+
1078
+ TEST_P(CordTest, TryFlatExternal) {
1079
+ absl::Cord c = absl::MakeCordFromExternal("hell", [](absl::string_view) {});
1080
+ MaybeHarden(c);
1081
+ EXPECT_EQ(c.TryFlat(), "hell");
1082
+ }
1083
+
1084
+ TEST_P(CordTest, TryFlatSubstrExternal) {
1085
+ absl::Cord c = absl::MakeCordFromExternal("hell", [](absl::string_view) {});
1086
+ absl::Cord sub = absl::CordTestPeer::MakeSubstring(c, 1, c.size() - 1);
1087
+ MaybeHarden(sub);
1088
+ EXPECT_EQ(sub.TryFlat(), "ell");
1089
+ }
1090
+
1091
+ TEST_P(CordTest, TryFlatCommonlyAssumedInvariants) {
1092
+ // The behavior tested below is not part of the API contract of Cord, but it's
1093
+ // something we intend to be true in our current implementation. This test
1094
+ // exists to detect and prevent accidental breakage of the implementation.
1095
+ absl::string_view fragments[] = {"A fragmented test",
1096
+ " cord",
1097
+ " to test subcords",
1098
+ " of ",
1099
+ "a",
1100
+ " cord for",
1101
+ " each chunk "
1102
+ "returned by the ",
1103
+ "iterator"};
1104
+ absl::Cord c = absl::MakeFragmentedCord(fragments);
1105
+ MaybeHarden(c);
1106
+ int fragment = 0;
1107
+ int offset = 0;
1108
+ absl::Cord::CharIterator itc = c.char_begin();
1109
+ for (absl::string_view sv : c.Chunks()) {
1110
+ absl::string_view expected = fragments[fragment];
1111
+ absl::Cord subcord1 = c.Subcord(offset, sv.length());
1112
+ absl::Cord subcord2 = absl::Cord::AdvanceAndRead(&itc, sv.size());
1113
+ EXPECT_EQ(subcord1.TryFlat(), expected);
1114
+ EXPECT_EQ(subcord2.TryFlat(), expected);
1115
+ ++fragment;
1116
+ offset += sv.length();
1117
+ }
1118
+ }
1119
+
1120
+ static bool IsFlat(const absl::Cord& c) {
1121
+ return c.chunk_begin() == c.chunk_end() || ++c.chunk_begin() == c.chunk_end();
1122
+ }
1123
+
1124
+ static void VerifyFlatten(absl::Cord c) {
1125
+ std::string old_contents(c);
1126
+ absl::string_view old_flat;
1127
+ bool already_flat_and_non_empty = IsFlat(c) && !c.empty();
1128
+ if (already_flat_and_non_empty) {
1129
+ old_flat = *c.chunk_begin();
1130
+ }
1131
+ absl::string_view new_flat = c.Flatten();
1132
+
1133
+ // Verify that the contents of the flattened Cord are correct.
1134
+ EXPECT_EQ(new_flat, old_contents);
1135
+ EXPECT_EQ(std::string(c), old_contents);
1136
+
1137
+ // If the Cord contained data and was already flat, verify that the data
1138
+ // wasn't copied.
1139
+ if (already_flat_and_non_empty) {
1140
+ EXPECT_EQ(old_flat.data(), new_flat.data())
1141
+ << "Allocated new memory even though the Cord was already flat.";
1142
+ }
1143
+
1144
+ // Verify that the flattened Cord is in fact flat.
1145
+ EXPECT_TRUE(IsFlat(c));
1146
+ }
1147
+
1148
+ TEST_P(CordTest, Flatten) {
1149
+ VerifyFlatten(absl::Cord());
1150
+ VerifyFlatten(MaybeHardened(absl::Cord("small cord")));
1151
+ VerifyFlatten(
1152
+ MaybeHardened(absl::Cord("larger than small buffer optimization")));
1153
+ VerifyFlatten(MaybeHardened(
1154
+ absl::MakeFragmentedCord({"small ", "fragmented ", "cord"})));
1155
+
1156
+ // Test with a cord that is longer than the largest flat buffer
1157
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
1158
+ VerifyFlatten(MaybeHardened(absl::Cord(RandomLowercaseString(&rng, 8192))));
1159
+ }
1160
+
1161
+ // Test data
1162
+ namespace {
1163
+ class TestData {
1164
+ private:
1165
+ std::vector<std::string> data_;
1166
+
1167
+ // Return a std::string of the specified length.
1168
+ static std::string MakeString(int length) {
1169
+ std::string result;
1170
+ char buf[30];
1171
+ snprintf(buf, sizeof(buf), "(%d)", length);
1172
+ while (result.size() < length) {
1173
+ result += buf;
1174
+ }
1175
+ result.resize(length);
1176
+ return result;
1177
+ }
1178
+
1179
+ public:
1180
+ TestData() {
1181
+ // short strings increasing in length by one
1182
+ for (int i = 0; i < 30; i++) {
1183
+ data_.push_back(MakeString(i));
1184
+ }
1185
+
1186
+ // strings around half kMaxFlatLength
1187
+ static const int kMaxFlatLength = 4096 - 9;
1188
+ static const int kHalf = kMaxFlatLength / 2;
1189
+
1190
+ for (int i = -10; i <= +10; i++) {
1191
+ data_.push_back(MakeString(kHalf + i));
1192
+ }
1193
+
1194
+ for (int i = -10; i <= +10; i++) {
1195
+ data_.push_back(MakeString(kMaxFlatLength + i));
1196
+ }
1197
+ }
1198
+
1199
+ size_t size() const { return data_.size(); }
1200
+ const std::string& data(size_t i) const { return data_[i]; }
1201
+ };
1202
+ } // namespace
1203
+
1204
+ TEST_P(CordTest, MultipleLengths) {
1205
+ TestData d;
1206
+ for (size_t i = 0; i < d.size(); i++) {
1207
+ std::string a = d.data(i);
1208
+
1209
+ { // Construct from Cord
1210
+ absl::Cord tmp(a);
1211
+ absl::Cord x(tmp);
1212
+ MaybeHarden(x);
1213
+ EXPECT_EQ(a, std::string(x)) << "'" << a << "'";
1214
+ }
1215
+
1216
+ { // Construct from absl::string_view
1217
+ absl::Cord x(a);
1218
+ MaybeHarden(x);
1219
+ EXPECT_EQ(a, std::string(x)) << "'" << a << "'";
1220
+ }
1221
+
1222
+ { // Append cord to self
1223
+ absl::Cord self(a);
1224
+ MaybeHarden(self);
1225
+ self.Append(self);
1226
+ EXPECT_EQ(a + a, std::string(self)) << "'" << a << "' + '" << a << "'";
1227
+ }
1228
+
1229
+ { // Prepend cord to self
1230
+ absl::Cord self(a);
1231
+ MaybeHarden(self);
1232
+ self.Prepend(self);
1233
+ EXPECT_EQ(a + a, std::string(self)) << "'" << a << "' + '" << a << "'";
1234
+ }
1235
+
1236
+ // Try to append/prepend others
1237
+ for (size_t j = 0; j < d.size(); j++) {
1238
+ std::string b = d.data(j);
1239
+
1240
+ { // CopyFrom Cord
1241
+ absl::Cord x(a);
1242
+ absl::Cord y(b);
1243
+ MaybeHarden(x);
1244
+ x = y;
1245
+ EXPECT_EQ(b, std::string(x)) << "'" << a << "' + '" << b << "'";
1246
+ }
1247
+
1248
+ { // CopyFrom absl::string_view
1249
+ absl::Cord x(a);
1250
+ MaybeHarden(x);
1251
+ x = b;
1252
+ EXPECT_EQ(b, std::string(x)) << "'" << a << "' + '" << b << "'";
1253
+ }
1254
+
1255
+ { // Cord::Append(Cord)
1256
+ absl::Cord x(a);
1257
+ absl::Cord y(b);
1258
+ MaybeHarden(x);
1259
+ x.Append(y);
1260
+ EXPECT_EQ(a + b, std::string(x)) << "'" << a << "' + '" << b << "'";
1261
+ }
1262
+
1263
+ { // Cord::Append(absl::string_view)
1264
+ absl::Cord x(a);
1265
+ MaybeHarden(x);
1266
+ x.Append(b);
1267
+ EXPECT_EQ(a + b, std::string(x)) << "'" << a << "' + '" << b << "'";
1268
+ }
1269
+
1270
+ { // Cord::Prepend(Cord)
1271
+ absl::Cord x(a);
1272
+ absl::Cord y(b);
1273
+ MaybeHarden(x);
1274
+ x.Prepend(y);
1275
+ EXPECT_EQ(b + a, std::string(x)) << "'" << b << "' + '" << a << "'";
1276
+ }
1277
+
1278
+ { // Cord::Prepend(absl::string_view)
1279
+ absl::Cord x(a);
1280
+ MaybeHarden(x);
1281
+ x.Prepend(b);
1282
+ EXPECT_EQ(b + a, std::string(x)) << "'" << b << "' + '" << a << "'";
1283
+ }
1284
+ }
1285
+ }
1286
+ }
1287
+
1288
+ namespace {
1289
+
1290
+ TEST_P(CordTest, RemoveSuffixWithExternalOrSubstring) {
1291
+ absl::Cord cord = absl::MakeCordFromExternal(
1292
+ "foo bar baz", [](absl::string_view s) { DoNothing(s, nullptr); });
1293
+ EXPECT_EQ("foo bar baz", std::string(cord));
1294
+
1295
+ MaybeHarden(cord);
1296
+
1297
+ // This RemoveSuffix() will wrap the EXTERNAL node in a SUBSTRING node.
1298
+ cord.RemoveSuffix(4);
1299
+ EXPECT_EQ("foo bar", std::string(cord));
1300
+
1301
+ MaybeHarden(cord);
1302
+
1303
+ // This RemoveSuffix() will adjust the SUBSTRING node in-place.
1304
+ cord.RemoveSuffix(4);
1305
+ EXPECT_EQ("foo", std::string(cord));
1306
+ }
1307
+
1308
+ TEST_P(CordTest, RemoveSuffixMakesZeroLengthNode) {
1309
+ absl::Cord c;
1310
+ c.Append(absl::Cord(std::string(100, 'x')));
1311
+ absl::Cord other_ref = c; // Prevent inplace appends
1312
+ EXPECT_THAT(other_ref, testing::Eq(c));
1313
+ MaybeHarden(c);
1314
+ c.Append(absl::Cord(std::string(200, 'y')));
1315
+ c.RemoveSuffix(200);
1316
+ EXPECT_EQ(std::string(100, 'x'), std::string(c));
1317
+ }
1318
+
1319
+ } // namespace
1320
+
1321
+ // CordSpliceTest contributed by hendrie.
1322
+ namespace {
1323
+
1324
+ // Create a cord with an external memory block filled with 'z'
1325
+ absl::Cord CordWithZedBlock(size_t size) {
1326
+ char* data = new char[size];
1327
+ if (size > 0) {
1328
+ memset(data, 'z', size);
1329
+ }
1330
+ absl::Cord cord = absl::MakeCordFromExternal(
1331
+ absl::string_view(data, size),
1332
+ [](absl::string_view s) { delete[] s.data(); });
1333
+ return cord;
1334
+ }
1335
+
1336
+ // Establish that ZedBlock does what we think it does.
1337
+ TEST_P(CordTest, CordSpliceTestZedBlock) {
1338
+ absl::Cord blob = CordWithZedBlock(10);
1339
+ MaybeHarden(blob);
1340
+ EXPECT_EQ(10, blob.size());
1341
+ std::string s;
1342
+ absl::CopyCordToString(blob, &s);
1343
+ EXPECT_EQ("zzzzzzzzzz", s);
1344
+ }
1345
+
1346
+ TEST_P(CordTest, CordSpliceTestZedBlock0) {
1347
+ absl::Cord blob = CordWithZedBlock(0);
1348
+ MaybeHarden(blob);
1349
+ EXPECT_EQ(0, blob.size());
1350
+ std::string s;
1351
+ absl::CopyCordToString(blob, &s);
1352
+ EXPECT_EQ("", s);
1353
+ }
1354
+
1355
+ TEST_P(CordTest, CordSpliceTestZedBlockSuffix1) {
1356
+ absl::Cord blob = CordWithZedBlock(10);
1357
+ MaybeHarden(blob);
1358
+ EXPECT_EQ(10, blob.size());
1359
+ absl::Cord suffix(blob);
1360
+ suffix.RemovePrefix(9);
1361
+ EXPECT_EQ(1, suffix.size());
1362
+ std::string s;
1363
+ absl::CopyCordToString(suffix, &s);
1364
+ EXPECT_EQ("z", s);
1365
+ }
1366
+
1367
+ // Remove all of a prefix block
1368
+ TEST_P(CordTest, CordSpliceTestZedBlockSuffix0) {
1369
+ absl::Cord blob = CordWithZedBlock(10);
1370
+ MaybeHarden(blob);
1371
+ EXPECT_EQ(10, blob.size());
1372
+ absl::Cord suffix(blob);
1373
+ suffix.RemovePrefix(10);
1374
+ EXPECT_EQ(0, suffix.size());
1375
+ std::string s;
1376
+ absl::CopyCordToString(suffix, &s);
1377
+ EXPECT_EQ("", s);
1378
+ }
1379
+
1380
+ absl::Cord BigCord(size_t len, char v) {
1381
+ std::string s(len, v);
1382
+ return absl::Cord(s);
1383
+ }
1384
+
1385
+ // Splice block into cord.
1386
+ absl::Cord SpliceCord(const absl::Cord& blob, int64_t offset,
1387
+ const absl::Cord& block) {
1388
+ CHECK_GE(offset, 0);
1389
+ CHECK_LE(static_cast<size_t>(offset) + block.size(), blob.size());
1390
+ absl::Cord result(blob);
1391
+ result.RemoveSuffix(blob.size() - offset);
1392
+ result.Append(block);
1393
+ absl::Cord suffix(blob);
1394
+ suffix.RemovePrefix(offset + block.size());
1395
+ result.Append(suffix);
1396
+ CHECK_EQ(blob.size(), result.size());
1397
+ return result;
1398
+ }
1399
+
1400
+ // Taking an empty suffix of a block breaks appending.
1401
+ TEST_P(CordTest, CordSpliceTestRemoveEntireBlock1) {
1402
+ absl::Cord zero = CordWithZedBlock(10);
1403
+ MaybeHarden(zero);
1404
+ absl::Cord suffix(zero);
1405
+ suffix.RemovePrefix(10);
1406
+ absl::Cord result;
1407
+ result.Append(suffix);
1408
+ }
1409
+
1410
+ TEST_P(CordTest, CordSpliceTestRemoveEntireBlock2) {
1411
+ absl::Cord zero = CordWithZedBlock(10);
1412
+ MaybeHarden(zero);
1413
+ absl::Cord prefix(zero);
1414
+ prefix.RemoveSuffix(10);
1415
+ absl::Cord suffix(zero);
1416
+ suffix.RemovePrefix(10);
1417
+ absl::Cord result(prefix);
1418
+ result.Append(suffix);
1419
+ }
1420
+
1421
+ TEST_P(CordTest, CordSpliceTestRemoveEntireBlock3) {
1422
+ absl::Cord blob = CordWithZedBlock(10);
1423
+ absl::Cord block = BigCord(10, 'b');
1424
+ MaybeHarden(blob);
1425
+ MaybeHarden(block);
1426
+ blob = SpliceCord(blob, 0, block);
1427
+ }
1428
+
1429
+ struct CordCompareTestCase {
1430
+ template <typename LHS, typename RHS>
1431
+ CordCompareTestCase(const LHS& lhs, const RHS& rhs, bool use_crc)
1432
+ : lhs_cord(lhs), rhs_cord(rhs) {
1433
+ if (use_crc) {
1434
+ lhs_cord.SetExpectedChecksum(1);
1435
+ }
1436
+ }
1437
+
1438
+ absl::Cord lhs_cord;
1439
+ absl::Cord rhs_cord;
1440
+ };
1441
+
1442
+ const auto sign = [](int x) { return x == 0 ? 0 : (x > 0 ? 1 : -1); };
1443
+
1444
+ void VerifyComparison(const CordCompareTestCase& test_case) {
1445
+ std::string lhs_string(test_case.lhs_cord);
1446
+ std::string rhs_string(test_case.rhs_cord);
1447
+ int expected = sign(lhs_string.compare(rhs_string));
1448
+ EXPECT_EQ(expected, test_case.lhs_cord.Compare(test_case.rhs_cord))
1449
+ << "LHS=" << lhs_string << "; RHS=" << rhs_string;
1450
+ EXPECT_EQ(expected, test_case.lhs_cord.Compare(rhs_string))
1451
+ << "LHS=" << lhs_string << "; RHS=" << rhs_string;
1452
+ EXPECT_EQ(-expected, test_case.rhs_cord.Compare(test_case.lhs_cord))
1453
+ << "LHS=" << rhs_string << "; RHS=" << lhs_string;
1454
+ EXPECT_EQ(-expected, test_case.rhs_cord.Compare(lhs_string))
1455
+ << "LHS=" << rhs_string << "; RHS=" << lhs_string;
1456
+ }
1457
+
1458
+ TEST_P(CordTest, Compare) {
1459
+ absl::Cord subcord("aaaaaBBBBBcccccDDDDD");
1460
+ subcord = subcord.Subcord(3, 10);
1461
+
1462
+ absl::Cord tmp("aaaaaaaaaaaaaaaa");
1463
+ tmp.Append("BBBBBBBBBBBBBBBB");
1464
+ absl::Cord concat = absl::Cord("cccccccccccccccc");
1465
+ concat.Append("DDDDDDDDDDDDDDDD");
1466
+ concat.Prepend(tmp);
1467
+
1468
+ absl::Cord concat2("aaaaaaaaaaaaa");
1469
+ concat2.Append("aaaBBBBBBBBBBBBBBBBccccc");
1470
+ concat2.Append("cccccccccccDDDDDDDDDDDDDD");
1471
+ concat2.Append("DD");
1472
+
1473
+ const bool use_crc = UseCrc();
1474
+
1475
+ std::vector<CordCompareTestCase> test_cases = {{
1476
+ // Inline cords
1477
+ {"abcdef", "abcdef", use_crc},
1478
+ {"abcdef", "abcdee", use_crc},
1479
+ {"abcdef", "abcdeg", use_crc},
1480
+ {"bbcdef", "abcdef", use_crc},
1481
+ {"bbcdef", "abcdeg", use_crc},
1482
+ {"abcdefa", "abcdef", use_crc},
1483
+ {"abcdef", "abcdefa", use_crc},
1484
+
1485
+ // Small flat cords
1486
+ {"aaaaaBBBBBcccccDDDDD", "aaaaaBBBBBcccccDDDDD", use_crc},
1487
+ {"aaaaaBBBBBcccccDDDDD", "aaaaaBBBBBxccccDDDDD", use_crc},
1488
+ {"aaaaaBBBBBcxcccDDDDD", "aaaaaBBBBBcccccDDDDD", use_crc},
1489
+ {"aaaaaBBBBBxccccDDDDD", "aaaaaBBBBBcccccDDDDX", use_crc},
1490
+ {"aaaaaBBBBBcccccDDDDDa", "aaaaaBBBBBcccccDDDDD", use_crc},
1491
+ {"aaaaaBBBBBcccccDDDDD", "aaaaaBBBBBcccccDDDDDa", use_crc},
1492
+
1493
+ // Subcords
1494
+ {subcord, subcord, use_crc},
1495
+ {subcord, "aaBBBBBccc", use_crc},
1496
+ {subcord, "aaBBBBBccd", use_crc},
1497
+ {subcord, "aaBBBBBccb", use_crc},
1498
+ {subcord, "aaBBBBBxcb", use_crc},
1499
+ {subcord, "aaBBBBBccca", use_crc},
1500
+ {subcord, "aaBBBBBcc", use_crc},
1501
+
1502
+ // Concats
1503
+ {concat, concat, use_crc},
1504
+ {concat,
1505
+ "aaaaaaaaaaaaaaaaBBBBBBBBBBBBBBBBccccccccccccccccDDDDDDDDDDDDDDDD",
1506
+ use_crc},
1507
+ {concat,
1508
+ "aaaaaaaaaaaaaaaaBBBBBBBBBBBBBBBBcccccccccccccccxDDDDDDDDDDDDDDDD",
1509
+ use_crc},
1510
+ {concat,
1511
+ "aaaaaaaaaaaaaaaaBBBBBBBBBBBBBBBBacccccccccccccccDDDDDDDDDDDDDDDD",
1512
+ use_crc},
1513
+ {concat,
1514
+ "aaaaaaaaaaaaaaaaBBBBBBBBBBBBBBBBccccccccccccccccDDDDDDDDDDDDDDD",
1515
+ use_crc},
1516
+ {concat,
1517
+ "aaaaaaaaaaaaaaaaBBBBBBBBBBBBBBBBccccccccccccccccDDDDDDDDDDDDDDDDe",
1518
+ use_crc},
1519
+
1520
+ {concat, concat2, use_crc},
1521
+ }};
1522
+
1523
+ for (const auto& tc : test_cases) {
1524
+ VerifyComparison(tc);
1525
+ }
1526
+ }
1527
+
1528
+ TEST_P(CordTest, CompareAfterAssign) {
1529
+ absl::Cord a("aaaaaa1111111");
1530
+ absl::Cord b("aaaaaa2222222");
1531
+ MaybeHarden(a);
1532
+ a = "cccccc";
1533
+ b = "cccccc";
1534
+ EXPECT_EQ(a, b);
1535
+ EXPECT_FALSE(a < b);
1536
+
1537
+ a = "aaaa";
1538
+ b = "bbbbb";
1539
+ a = "";
1540
+ b = "";
1541
+ EXPECT_EQ(a, b);
1542
+ EXPECT_FALSE(a < b);
1543
+ }
1544
+
1545
+ // Test CompareTo() and ComparePrefix() against string and substring
1546
+ // comparison methods from basic_string.
1547
+ static void TestCompare(const absl::Cord& c, const absl::Cord& d,
1548
+ RandomEngine* rng) {
1549
+ // char_traits<char>::lt is guaranteed to do an unsigned comparison:
1550
+ // https://en.cppreference.com/w/cpp/string/char_traits/cmp. We also expect
1551
+ // Cord comparisons to be based on unsigned byte comparisons regardless of
1552
+ // whether char is signed.
1553
+ int expected = sign(std::string(c).compare(std::string(d)));
1554
+ EXPECT_EQ(expected, sign(c.Compare(d))) << c << ", " << d;
1555
+ }
1556
+
1557
+ TEST_P(CordTest, CompareComparisonIsUnsigned) {
1558
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
1559
+ std::uniform_int_distribution<uint32_t> uniform_uint8(0, 255);
1560
+ char x = static_cast<char>(uniform_uint8(rng));
1561
+ TestCompare(
1562
+ absl::Cord(std::string(GetUniformRandomUpTo(&rng, 100), x)),
1563
+ absl::Cord(std::string(GetUniformRandomUpTo(&rng, 100), x ^ 0x80)), &rng);
1564
+ }
1565
+
1566
+ TEST_P(CordTest, CompareRandomComparisons) {
1567
+ const int kIters = 5000;
1568
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
1569
+
1570
+ int n = GetUniformRandomUpTo(&rng, 5000);
1571
+ absl::Cord a[] = {MakeExternalCord(n),
1572
+ absl::Cord("ant"),
1573
+ absl::Cord("elephant"),
1574
+ absl::Cord("giraffe"),
1575
+ absl::Cord(std::string(GetUniformRandomUpTo(&rng, 100),
1576
+ GetUniformRandomUpTo(&rng, 100))),
1577
+ absl::Cord(""),
1578
+ absl::Cord("x"),
1579
+ absl::Cord("A"),
1580
+ absl::Cord("B"),
1581
+ absl::Cord("C")};
1582
+ for (int i = 0; i < kIters; i++) {
1583
+ absl::Cord c, d;
1584
+ for (int j = 0; j < (i % 7) + 1; j++) {
1585
+ c.Append(a[GetUniformRandomUpTo(&rng, ABSL_ARRAYSIZE(a))]);
1586
+ d.Append(a[GetUniformRandomUpTo(&rng, ABSL_ARRAYSIZE(a))]);
1587
+ }
1588
+ std::bernoulli_distribution coin_flip(0.5);
1589
+ MaybeHarden(c);
1590
+ MaybeHarden(d);
1591
+ TestCompare(coin_flip(rng) ? c : absl::Cord(std::string(c)),
1592
+ coin_flip(rng) ? d : absl::Cord(std::string(d)), &rng);
1593
+ }
1594
+ }
1595
+
1596
+ template <typename T1, typename T2>
1597
+ void CompareOperators() {
1598
+ const T1 a("a");
1599
+ const T2 b("b");
1600
+
1601
+ EXPECT_TRUE(a == a);
1602
+ // For pointer type (i.e. `const char*`), operator== compares the address
1603
+ // instead of the string, so `a == const char*("a")` isn't necessarily true.
1604
+ EXPECT_TRUE(std::is_pointer<T1>::value || a == T1("a"));
1605
+ EXPECT_TRUE(std::is_pointer<T2>::value || a == T2("a"));
1606
+ EXPECT_FALSE(a == b);
1607
+
1608
+ EXPECT_TRUE(a != b);
1609
+ EXPECT_FALSE(a != a);
1610
+
1611
+ EXPECT_TRUE(a < b);
1612
+ EXPECT_FALSE(b < a);
1613
+
1614
+ EXPECT_TRUE(b > a);
1615
+ EXPECT_FALSE(a > b);
1616
+
1617
+ EXPECT_TRUE(a >= a);
1618
+ EXPECT_TRUE(b >= a);
1619
+ EXPECT_FALSE(a >= b);
1620
+
1621
+ EXPECT_TRUE(a <= a);
1622
+ EXPECT_TRUE(a <= b);
1623
+ EXPECT_FALSE(b <= a);
1624
+ }
1625
+
1626
+ TEST_P(CordTest, ComparisonOperators_Cord_Cord) {
1627
+ CompareOperators<absl::Cord, absl::Cord>();
1628
+ }
1629
+
1630
+ TEST_P(CordTest, ComparisonOperators_Cord_StringPiece) {
1631
+ CompareOperators<absl::Cord, absl::string_view>();
1632
+ }
1633
+
1634
+ TEST_P(CordTest, ComparisonOperators_StringPiece_Cord) {
1635
+ CompareOperators<absl::string_view, absl::Cord>();
1636
+ }
1637
+
1638
+ TEST_P(CordTest, ComparisonOperators_Cord_string) {
1639
+ CompareOperators<absl::Cord, std::string>();
1640
+ }
1641
+
1642
+ TEST_P(CordTest, ComparisonOperators_string_Cord) {
1643
+ CompareOperators<std::string, absl::Cord>();
1644
+ }
1645
+
1646
+ TEST_P(CordTest, ComparisonOperators_stdstring_Cord) {
1647
+ CompareOperators<std::string, absl::Cord>();
1648
+ }
1649
+
1650
+ TEST_P(CordTest, ComparisonOperators_Cord_stdstring) {
1651
+ CompareOperators<absl::Cord, std::string>();
1652
+ }
1653
+
1654
+ TEST_P(CordTest, ComparisonOperators_charstar_Cord) {
1655
+ CompareOperators<const char*, absl::Cord>();
1656
+ }
1657
+
1658
+ TEST_P(CordTest, ComparisonOperators_Cord_charstar) {
1659
+ CompareOperators<absl::Cord, const char*>();
1660
+ }
1661
+
1662
+ TEST_P(CordTest, ConstructFromExternalReleaserInvoked) {
1663
+ // Empty external memory means the releaser should be called immediately.
1664
+ {
1665
+ bool invoked = false;
1666
+ auto releaser = [&invoked](absl::string_view) { invoked = true; };
1667
+ {
1668
+ auto c = absl::MakeCordFromExternal("", releaser);
1669
+ EXPECT_THAT(c, testing::Eq(""));
1670
+ EXPECT_TRUE(invoked);
1671
+ }
1672
+ }
1673
+
1674
+ // If the size of the data is small enough, a future constructor
1675
+ // implementation may copy the bytes and immediately invoke the releaser
1676
+ // instead of creating an external node. We make a large dummy std::string to
1677
+ // make this test independent of such an optimization.
1678
+ std::string large_dummy(2048, 'c');
1679
+ {
1680
+ bool invoked = false;
1681
+ auto releaser = [&invoked](absl::string_view) { invoked = true; };
1682
+ {
1683
+ auto c = absl::MakeCordFromExternal(large_dummy, releaser);
1684
+ EXPECT_THAT(c, testing::Eq(large_dummy));
1685
+ EXPECT_FALSE(invoked);
1686
+ }
1687
+ EXPECT_TRUE(invoked);
1688
+ }
1689
+
1690
+ {
1691
+ bool invoked = false;
1692
+ auto releaser = [&invoked](absl::string_view) { invoked = true; };
1693
+ {
1694
+ absl::Cord copy;
1695
+ {
1696
+ auto c = absl::MakeCordFromExternal(large_dummy, releaser);
1697
+ copy = c;
1698
+ EXPECT_FALSE(invoked);
1699
+ }
1700
+ EXPECT_FALSE(invoked);
1701
+ }
1702
+ EXPECT_TRUE(invoked);
1703
+ }
1704
+ }
1705
+
1706
+ TEST_P(CordTest, ConstructFromExternalCompareContents) {
1707
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
1708
+
1709
+ for (int length = 1; length <= 2048; length *= 2) {
1710
+ std::string data = RandomLowercaseString(&rng, length);
1711
+ auto* external = new std::string(data);
1712
+ auto cord =
1713
+ absl::MakeCordFromExternal(*external, [external](absl::string_view sv) {
1714
+ EXPECT_EQ(external->data(), sv.data());
1715
+ EXPECT_EQ(external->size(), sv.size());
1716
+ delete external;
1717
+ });
1718
+ MaybeHarden(cord);
1719
+ EXPECT_EQ(data, cord);
1720
+ }
1721
+ }
1722
+
1723
+ TEST_P(CordTest, ConstructFromExternalLargeReleaser) {
1724
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
1725
+ constexpr size_t kLength = 256;
1726
+ std::string data = RandomLowercaseString(&rng, kLength);
1727
+ std::array<char, kLength> data_array;
1728
+ for (size_t i = 0; i < kLength; ++i) data_array[i] = data[i];
1729
+ bool invoked = false;
1730
+ auto releaser = [data_array, &invoked](absl::string_view data) {
1731
+ EXPECT_EQ(data, absl::string_view(data_array.data(), data_array.size()));
1732
+ invoked = true;
1733
+ };
1734
+ (void)MaybeHardened(absl::MakeCordFromExternal(data, releaser));
1735
+ EXPECT_TRUE(invoked);
1736
+ }
1737
+
1738
+ TEST_P(CordTest, ConstructFromExternalFunctionPointerReleaser) {
1739
+ static absl::string_view data("hello world");
1740
+ static bool invoked;
1741
+ auto* releaser =
1742
+ static_cast<void (*)(absl::string_view)>([](absl::string_view sv) {
1743
+ EXPECT_EQ(data, sv);
1744
+ invoked = true;
1745
+ });
1746
+ invoked = false;
1747
+ (void)MaybeHardened(absl::MakeCordFromExternal(data, releaser));
1748
+ EXPECT_TRUE(invoked);
1749
+
1750
+ invoked = false;
1751
+ (void)MaybeHardened(absl::MakeCordFromExternal(data, *releaser));
1752
+ EXPECT_TRUE(invoked);
1753
+ }
1754
+
1755
+ TEST_P(CordTest, ConstructFromExternalMoveOnlyReleaser) {
1756
+ struct Releaser {
1757
+ explicit Releaser(bool* invoked) : invoked(invoked) {}
1758
+ Releaser(Releaser&& other) noexcept : invoked(other.invoked) {}
1759
+ void operator()(absl::string_view) const { *invoked = true; }
1760
+
1761
+ bool* invoked;
1762
+ };
1763
+
1764
+ bool invoked = false;
1765
+ (void)MaybeHardened(absl::MakeCordFromExternal("dummy", Releaser(&invoked)));
1766
+ EXPECT_TRUE(invoked);
1767
+ }
1768
+
1769
+ TEST_P(CordTest, ConstructFromExternalNoArgLambda) {
1770
+ bool invoked = false;
1771
+ (void)MaybeHardened(
1772
+ absl::MakeCordFromExternal("dummy", [&invoked]() { invoked = true; }));
1773
+ EXPECT_TRUE(invoked);
1774
+ }
1775
+
1776
+ TEST_P(CordTest, ConstructFromExternalStringViewArgLambda) {
1777
+ bool invoked = false;
1778
+ (void)MaybeHardened(absl::MakeCordFromExternal(
1779
+ "dummy", [&invoked](absl::string_view) { invoked = true; }));
1780
+ EXPECT_TRUE(invoked);
1781
+ }
1782
+
1783
+ TEST_P(CordTest, ConstructFromExternalNonTrivialReleaserDestructor) {
1784
+ struct Releaser {
1785
+ explicit Releaser(bool* destroyed) : destroyed(destroyed) {}
1786
+ ~Releaser() { *destroyed = true; }
1787
+ void operator()(absl::string_view) const {}
1788
+
1789
+ bool* destroyed;
1790
+ };
1791
+
1792
+ bool destroyed = false;
1793
+ Releaser releaser(&destroyed);
1794
+ (void)MaybeHardened(absl::MakeCordFromExternal("dummy", releaser));
1795
+ EXPECT_TRUE(destroyed);
1796
+ }
1797
+
1798
+ TEST_P(CordTest, ConstructFromExternalReferenceQualifierOverloads) {
1799
+ enum InvokedAs { kMissing, kLValue, kRValue };
1800
+ enum CopiedAs { kNone, kMove, kCopy };
1801
+ struct Tracker {
1802
+ CopiedAs copied_as = kNone;
1803
+ InvokedAs invoked_as = kMissing;
1804
+
1805
+ void Record(InvokedAs rhs) {
1806
+ ASSERT_EQ(invoked_as, kMissing);
1807
+ invoked_as = rhs;
1808
+ }
1809
+
1810
+ void Record(CopiedAs rhs) {
1811
+ if (copied_as == kNone || rhs == kCopy) copied_as = rhs;
1812
+ }
1813
+ } tracker;
1814
+
1815
+ class Releaser {
1816
+ public:
1817
+ explicit Releaser(Tracker* tracker) : tr_(tracker) { *tracker = Tracker(); }
1818
+ Releaser(Releaser&& rhs) : tr_(rhs.tr_) { tr_->Record(kMove); }
1819
+ Releaser(const Releaser& rhs) : tr_(rhs.tr_) { tr_->Record(kCopy); }
1820
+
1821
+ void operator()(absl::string_view) & { tr_->Record(kLValue); }
1822
+ void operator()(absl::string_view) && { tr_->Record(kRValue); }
1823
+
1824
+ private:
1825
+ Tracker* tr_;
1826
+ };
1827
+
1828
+ const Releaser releaser1(&tracker);
1829
+ (void)MaybeHardened(absl::MakeCordFromExternal("", releaser1));
1830
+ EXPECT_EQ(tracker.copied_as, kCopy);
1831
+ EXPECT_EQ(tracker.invoked_as, kRValue);
1832
+
1833
+ const Releaser releaser2(&tracker);
1834
+ (void)MaybeHardened(absl::MakeCordFromExternal("", releaser2));
1835
+ EXPECT_EQ(tracker.copied_as, kCopy);
1836
+ EXPECT_EQ(tracker.invoked_as, kRValue);
1837
+
1838
+ Releaser releaser3(&tracker);
1839
+ (void)MaybeHardened(absl::MakeCordFromExternal("", std::move(releaser3)));
1840
+ EXPECT_EQ(tracker.copied_as, kMove);
1841
+ EXPECT_EQ(tracker.invoked_as, kRValue);
1842
+
1843
+ Releaser releaser4(&tracker);
1844
+ (void)MaybeHardened(absl::MakeCordFromExternal("dummy", releaser4));
1845
+ EXPECT_EQ(tracker.copied_as, kCopy);
1846
+ EXPECT_EQ(tracker.invoked_as, kRValue);
1847
+
1848
+ const Releaser releaser5(&tracker);
1849
+ (void)MaybeHardened(absl::MakeCordFromExternal("dummy", releaser5));
1850
+ EXPECT_EQ(tracker.copied_as, kCopy);
1851
+ EXPECT_EQ(tracker.invoked_as, kRValue);
1852
+
1853
+ Releaser releaser6(&tracker);
1854
+ (void)MaybeHardened(absl::MakeCordFromExternal("foo", std::move(releaser6)));
1855
+ EXPECT_EQ(tracker.copied_as, kMove);
1856
+ EXPECT_EQ(tracker.invoked_as, kRValue);
1857
+ }
1858
+
1859
+ TEST_P(CordTest, ExternalMemoryBasicUsage) {
1860
+ static const char* strings[] = {"", "hello", "there"};
1861
+ for (const char* str : strings) {
1862
+ absl::Cord dst("(prefix)");
1863
+ MaybeHarden(dst);
1864
+ AddExternalMemory(str, &dst);
1865
+ MaybeHarden(dst);
1866
+ dst.Append("(suffix)");
1867
+ EXPECT_EQ((std::string("(prefix)") + str + std::string("(suffix)")),
1868
+ std::string(dst));
1869
+ }
1870
+ }
1871
+
1872
+ TEST_P(CordTest, ExternalMemoryRemovePrefixSuffix) {
1873
+ // Exhaustively try all sub-strings.
1874
+ absl::Cord cord = MakeComposite();
1875
+ std::string s = std::string(cord);
1876
+ for (int offset = 0; offset <= s.size(); offset++) {
1877
+ for (int length = 0; length <= s.size() - offset; length++) {
1878
+ absl::Cord result(cord);
1879
+ MaybeHarden(result);
1880
+ result.RemovePrefix(offset);
1881
+ MaybeHarden(result);
1882
+ result.RemoveSuffix(result.size() - length);
1883
+ EXPECT_EQ(s.substr(offset, length), std::string(result))
1884
+ << offset << " " << length;
1885
+ }
1886
+ }
1887
+ }
1888
+
1889
+ TEST_P(CordTest, ExternalMemoryGet) {
1890
+ absl::Cord cord("hello");
1891
+ AddExternalMemory(" world!", &cord);
1892
+ MaybeHarden(cord);
1893
+ AddExternalMemory(" how are ", &cord);
1894
+ cord.Append(" you?");
1895
+ MaybeHarden(cord);
1896
+ std::string s = std::string(cord);
1897
+ for (int i = 0; i < s.size(); i++) {
1898
+ EXPECT_EQ(s[i], cord[i]);
1899
+ }
1900
+ }
1901
+
1902
+ // CordMemoryUsage tests verify the correctness of the EstimatedMemoryUsage()
1903
+ // We use whiteboxed expectations based on our knowledge of the layout and size
1904
+ // of empty and inlined cords, and flat nodes.
1905
+
1906
+ constexpr auto kFairShare = absl::CordMemoryAccounting::kFairShare;
1907
+ constexpr auto kTotalMorePrecise =
1908
+ absl::CordMemoryAccounting::kTotalMorePrecise;
1909
+
1910
+ // Creates a cord of `n` `c` values, making sure no string stealing occurs.
1911
+ absl::Cord MakeCord(size_t n, char c) {
1912
+ const std::string s(n, c);
1913
+ return absl::Cord(s);
1914
+ }
1915
+
1916
+ TEST(CordTest, CordMemoryUsageEmpty) {
1917
+ absl::Cord cord;
1918
+ EXPECT_EQ(sizeof(absl::Cord), cord.EstimatedMemoryUsage());
1919
+ EXPECT_EQ(sizeof(absl::Cord), cord.EstimatedMemoryUsage(kFairShare));
1920
+ EXPECT_EQ(sizeof(absl::Cord), cord.EstimatedMemoryUsage(kTotalMorePrecise));
1921
+ }
1922
+
1923
+ TEST(CordTest, CordMemoryUsageInlined) {
1924
+ absl::Cord a("hello");
1925
+ EXPECT_EQ(a.EstimatedMemoryUsage(), sizeof(absl::Cord));
1926
+ EXPECT_EQ(a.EstimatedMemoryUsage(kFairShare), sizeof(absl::Cord));
1927
+ EXPECT_EQ(a.EstimatedMemoryUsage(kTotalMorePrecise), sizeof(absl::Cord));
1928
+ }
1929
+
1930
+ TEST(CordTest, CordMemoryUsageExternalMemory) {
1931
+ absl::Cord cord;
1932
+ AddExternalMemory(std::string(1000, 'x'), &cord);
1933
+ const size_t expected =
1934
+ sizeof(absl::Cord) + 1000 + sizeof(CordRepExternal) + sizeof(intptr_t);
1935
+ EXPECT_EQ(cord.EstimatedMemoryUsage(), expected);
1936
+ EXPECT_EQ(cord.EstimatedMemoryUsage(kFairShare), expected);
1937
+ EXPECT_EQ(cord.EstimatedMemoryUsage(kTotalMorePrecise), expected);
1938
+ }
1939
+
1940
+ TEST(CordTest, CordMemoryUsageFlat) {
1941
+ absl::Cord cord = MakeCord(1000, 'a');
1942
+ const size_t flat_size =
1943
+ absl::CordTestPeer::Tree(cord)->flat()->AllocatedSize();
1944
+ EXPECT_EQ(cord.EstimatedMemoryUsage(), sizeof(absl::Cord) + flat_size);
1945
+ EXPECT_EQ(cord.EstimatedMemoryUsage(kFairShare),
1946
+ sizeof(absl::Cord) + flat_size);
1947
+ EXPECT_EQ(cord.EstimatedMemoryUsage(kTotalMorePrecise),
1948
+ sizeof(absl::Cord) + flat_size);
1949
+ }
1950
+
1951
+ TEST(CordTest, CordMemoryUsageSubStringSharedFlat) {
1952
+ absl::Cord flat = MakeCord(2000, 'a');
1953
+ const size_t flat_size =
1954
+ absl::CordTestPeer::Tree(flat)->flat()->AllocatedSize();
1955
+ absl::Cord cord = flat.Subcord(500, 1000);
1956
+ EXPECT_EQ(cord.EstimatedMemoryUsage(),
1957
+ sizeof(absl::Cord) + sizeof(CordRepSubstring) + flat_size);
1958
+ EXPECT_EQ(cord.EstimatedMemoryUsage(kTotalMorePrecise),
1959
+ sizeof(absl::Cord) + sizeof(CordRepSubstring) + flat_size);
1960
+ EXPECT_EQ(cord.EstimatedMemoryUsage(kFairShare),
1961
+ sizeof(absl::Cord) + sizeof(CordRepSubstring) + flat_size / 2);
1962
+ }
1963
+
1964
+ TEST(CordTest, CordMemoryUsageFlatShared) {
1965
+ absl::Cord shared = MakeCord(1000, 'a');
1966
+ absl::Cord cord(shared);
1967
+ const size_t flat_size =
1968
+ absl::CordTestPeer::Tree(cord)->flat()->AllocatedSize();
1969
+ EXPECT_EQ(cord.EstimatedMemoryUsage(), sizeof(absl::Cord) + flat_size);
1970
+ EXPECT_EQ(cord.EstimatedMemoryUsage(kTotalMorePrecise),
1971
+ sizeof(absl::Cord) + flat_size);
1972
+ EXPECT_EQ(cord.EstimatedMemoryUsage(kFairShare),
1973
+ sizeof(absl::Cord) + flat_size / 2);
1974
+ }
1975
+
1976
+ TEST(CordTest, CordMemoryUsageFlatHardenedAndShared) {
1977
+ absl::Cord shared = MakeCord(1000, 'a');
1978
+ absl::Cord cord(shared);
1979
+ const size_t flat_size =
1980
+ absl::CordTestPeer::Tree(cord)->flat()->AllocatedSize();
1981
+ cord.SetExpectedChecksum(1);
1982
+ EXPECT_EQ(cord.EstimatedMemoryUsage(),
1983
+ sizeof(absl::Cord) + sizeof(CordRepCrc) + flat_size);
1984
+ EXPECT_EQ(cord.EstimatedMemoryUsage(kFairShare),
1985
+ sizeof(absl::Cord) + sizeof(CordRepCrc) + flat_size / 2);
1986
+
1987
+ absl::Cord cord2(cord);
1988
+ EXPECT_EQ(cord2.EstimatedMemoryUsage(),
1989
+ sizeof(absl::Cord) + sizeof(CordRepCrc) + flat_size);
1990
+ EXPECT_EQ(cord2.EstimatedMemoryUsage(kTotalMorePrecise),
1991
+ sizeof(absl::Cord) + sizeof(CordRepCrc) + flat_size);
1992
+ EXPECT_EQ(cord2.EstimatedMemoryUsage(kFairShare),
1993
+ sizeof(absl::Cord) + (sizeof(CordRepCrc) + flat_size / 2) / 2);
1994
+ }
1995
+
1996
+ TEST(CordTest, CordMemoryUsageBTree) {
1997
+ absl::Cord cord1;
1998
+ size_t flats1_size = 0;
1999
+ absl::Cord flats1[4] = {MakeCord(1000, 'a'), MakeCord(1100, 'a'),
2000
+ MakeCord(1200, 'a'), MakeCord(1300, 'a')};
2001
+ for (absl::Cord flat : flats1) {
2002
+ flats1_size += absl::CordTestPeer::Tree(flat)->flat()->AllocatedSize();
2003
+ cord1.Append(std::move(flat));
2004
+ }
2005
+
2006
+ // Make sure the created cord is a BTREE tree. Under some builds such as
2007
+ // windows DLL, we may have ODR like effects on the flag, meaning the DLL
2008
+ // code will run with the picked up default.
2009
+ if (!absl::CordTestPeer::Tree(cord1)->IsBtree()) {
2010
+ LOG(WARNING) << "Cord library code not respecting btree flag";
2011
+ return;
2012
+ }
2013
+
2014
+ size_t rep1_size = sizeof(CordRepBtree) + flats1_size;
2015
+ size_t rep1_shared_size = sizeof(CordRepBtree) + flats1_size / 2;
2016
+
2017
+ EXPECT_EQ(cord1.EstimatedMemoryUsage(), sizeof(absl::Cord) + rep1_size);
2018
+ EXPECT_EQ(cord1.EstimatedMemoryUsage(kTotalMorePrecise),
2019
+ sizeof(absl::Cord) + rep1_size);
2020
+ EXPECT_EQ(cord1.EstimatedMemoryUsage(kFairShare),
2021
+ sizeof(absl::Cord) + rep1_shared_size);
2022
+
2023
+ absl::Cord cord2;
2024
+ size_t flats2_size = 0;
2025
+ absl::Cord flats2[4] = {MakeCord(600, 'a'), MakeCord(700, 'a'),
2026
+ MakeCord(800, 'a'), MakeCord(900, 'a')};
2027
+ for (absl::Cord& flat : flats2) {
2028
+ flats2_size += absl::CordTestPeer::Tree(flat)->flat()->AllocatedSize();
2029
+ cord2.Append(std::move(flat));
2030
+ }
2031
+ size_t rep2_size = sizeof(CordRepBtree) + flats2_size;
2032
+
2033
+ EXPECT_EQ(cord2.EstimatedMemoryUsage(), sizeof(absl::Cord) + rep2_size);
2034
+ EXPECT_EQ(cord2.EstimatedMemoryUsage(kTotalMorePrecise),
2035
+ sizeof(absl::Cord) + rep2_size);
2036
+ EXPECT_EQ(cord2.EstimatedMemoryUsage(kFairShare),
2037
+ sizeof(absl::Cord) + rep2_size);
2038
+
2039
+ absl::Cord cord(cord1);
2040
+ cord.Append(std::move(cord2));
2041
+
2042
+ EXPECT_EQ(cord.EstimatedMemoryUsage(),
2043
+ sizeof(absl::Cord) + sizeof(CordRepBtree) + rep1_size + rep2_size);
2044
+ EXPECT_EQ(cord.EstimatedMemoryUsage(kTotalMorePrecise),
2045
+ sizeof(absl::Cord) + sizeof(CordRepBtree) + rep1_size + rep2_size);
2046
+ EXPECT_EQ(cord.EstimatedMemoryUsage(kFairShare),
2047
+ sizeof(absl::Cord) + sizeof(CordRepBtree) + rep1_shared_size / 2 +
2048
+ rep2_size);
2049
+ }
2050
+
2051
+ TEST(CordTest, TestHashFragmentation) {
2052
+ // Make sure we hit these boundary cases precisely.
2053
+ EXPECT_EQ(1024, absl::hash_internal::PiecewiseChunkSize());
2054
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly({
2055
+ absl::Cord(),
2056
+ absl::MakeFragmentedCord({std::string(600, 'a'), std::string(600, 'a')}),
2057
+ absl::MakeFragmentedCord({std::string(1200, 'a')}),
2058
+ absl::MakeFragmentedCord({std::string(900, 'b'), std::string(900, 'b')}),
2059
+ absl::MakeFragmentedCord({std::string(1800, 'b')}),
2060
+ absl::MakeFragmentedCord(
2061
+ {std::string(2000, 'c'), std::string(2000, 'c')}),
2062
+ absl::MakeFragmentedCord({std::string(4000, 'c')}),
2063
+ absl::MakeFragmentedCord({std::string(1024, 'd')}),
2064
+ absl::MakeFragmentedCord({std::string(1023, 'd'), "d"}),
2065
+ absl::MakeFragmentedCord({std::string(1025, 'e')}),
2066
+ absl::MakeFragmentedCord({std::string(1024, 'e'), "e"}),
2067
+ absl::MakeFragmentedCord({std::string(1023, 'e'), "e", "e"}),
2068
+ }));
2069
+ }
2070
+
2071
+ // Regtest for a change that had to be rolled back because it expanded out
2072
+ // of the InlineRep too soon, which was observable through MemoryUsage().
2073
+ TEST_P(CordTest, CordMemoryUsageInlineRep) {
2074
+ constexpr size_t kMaxInline = 15; // Cord::InlineRep::N
2075
+ const std::string small_string(kMaxInline, 'x');
2076
+ absl::Cord c1(small_string);
2077
+
2078
+ absl::Cord c2;
2079
+ c2.Append(small_string);
2080
+ EXPECT_EQ(c1, c2);
2081
+ EXPECT_EQ(c1.EstimatedMemoryUsage(), c2.EstimatedMemoryUsage());
2082
+ }
2083
+
2084
+ TEST_P(CordTest, CordMemoryUsageTotalMorePreciseMode) {
2085
+ constexpr size_t kChunkSize = 2000;
2086
+ std::string tmp_str(kChunkSize, 'x');
2087
+ const absl::Cord flat(std::move(tmp_str));
2088
+
2089
+ // Construct `fragmented` with two references into the same
2090
+ // underlying buffer shared with `flat`:
2091
+ absl::Cord fragmented(flat);
2092
+ fragmented.Append(flat);
2093
+
2094
+ // Memory usage of `flat`, minus the top-level Cord object:
2095
+ const size_t flat_internal_usage =
2096
+ flat.EstimatedMemoryUsage() - sizeof(absl::Cord);
2097
+
2098
+ // `fragmented` holds a Cord and a CordRepBtree. That tree points to two
2099
+ // copies of flat's internals, which we expect to dedup:
2100
+ EXPECT_EQ(fragmented.EstimatedMemoryUsage(kTotalMorePrecise),
2101
+ sizeof(absl::Cord) +
2102
+ sizeof(CordRepBtree) +
2103
+ flat_internal_usage);
2104
+
2105
+ // This is a case where kTotal produces an overestimate:
2106
+ EXPECT_EQ(fragmented.EstimatedMemoryUsage(),
2107
+ sizeof(absl::Cord) +
2108
+ sizeof(CordRepBtree) +
2109
+ 2 * flat_internal_usage);
2110
+ }
2111
+
2112
+ TEST_P(CordTest, CordMemoryUsageTotalMorePreciseModeWithSubstring) {
2113
+ constexpr size_t kChunkSize = 2000;
2114
+ std::string tmp_str(kChunkSize, 'x');
2115
+ const absl::Cord flat(std::move(tmp_str));
2116
+
2117
+ // Construct `fragmented` with two references into the same
2118
+ // underlying buffer shared with `flat`.
2119
+ //
2120
+ // This time, each reference is through a Subcord():
2121
+ absl::Cord fragmented;
2122
+ fragmented.Append(flat.Subcord(1, kChunkSize - 2));
2123
+ fragmented.Append(flat.Subcord(1, kChunkSize - 2));
2124
+
2125
+ // Memory usage of `flat`, minus the top-level Cord object:
2126
+ const size_t flat_internal_usage =
2127
+ flat.EstimatedMemoryUsage() - sizeof(absl::Cord);
2128
+
2129
+ // `fragmented` holds a Cord and a CordRepBtree. That tree points to two
2130
+ // CordRepSubstrings, each pointing at flat's internals.
2131
+ EXPECT_EQ(fragmented.EstimatedMemoryUsage(kTotalMorePrecise),
2132
+ sizeof(absl::Cord) +
2133
+ sizeof(CordRepBtree) +
2134
+ 2 * sizeof(CordRepSubstring) +
2135
+ flat_internal_usage);
2136
+
2137
+ // This is a case where kTotal produces an overestimate:
2138
+ EXPECT_EQ(fragmented.EstimatedMemoryUsage(),
2139
+ sizeof(absl::Cord) +
2140
+ sizeof(CordRepBtree) +
2141
+ 2 * sizeof(CordRepSubstring) +
2142
+ 2 * flat_internal_usage);
2143
+ }
2144
+ } // namespace
2145
+
2146
+ // Regtest for 7510292 (fix a bug introduced by 7465150)
2147
+ TEST_P(CordTest, Concat_Append) {
2148
+ // Create a rep of type CONCAT
2149
+ absl::Cord s1("foobarbarbarbarbar");
2150
+ MaybeHarden(s1);
2151
+ s1.Append("abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefg");
2152
+ size_t size = s1.size();
2153
+
2154
+ // Create a copy of s1 and append to it.
2155
+ absl::Cord s2 = s1;
2156
+ MaybeHarden(s2);
2157
+ s2.Append("x");
2158
+
2159
+ // 7465150 modifies s1 when it shouldn't.
2160
+ EXPECT_EQ(s1.size(), size);
2161
+ EXPECT_EQ(s2.size(), size + 1);
2162
+ }
2163
+
2164
+ TEST_P(CordTest, DiabolicalGrowth) {
2165
+ // This test exercises a diabolical Append(<one char>) on a cord, making the
2166
+ // cord shared before each Append call resulting in a terribly fragmented
2167
+ // resulting cord.
2168
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
2169
+ const std::string expected = RandomLowercaseString(&rng, 5000);
2170
+ absl::Cord cord;
2171
+ for (char c : expected) {
2172
+ absl::Cord shared(cord);
2173
+ EXPECT_THAT(cord, testing::Eq(shared));
2174
+ cord.Append(absl::string_view(&c, 1));
2175
+ MaybeHarden(cord);
2176
+ }
2177
+ std::string value;
2178
+ absl::CopyCordToString(cord, &value);
2179
+ EXPECT_EQ(value, expected);
2180
+ LOG(INFO) << "Diabolical size allocated = " << cord.EstimatedMemoryUsage();
2181
+ }
2182
+
2183
+ // The following tests check support for >4GB cords in 64-bit binaries, and
2184
+ // 2GB-4GB cords in 32-bit binaries. This function returns the large cord size
2185
+ // that's appropriate for the binary.
2186
+
2187
+ // Construct a huge cord with the specified valid prefix.
2188
+ static absl::Cord MakeHuge(absl::string_view prefix) {
2189
+ absl::Cord cord;
2190
+ if (sizeof(size_t) > 4) {
2191
+ // In 64-bit binaries, test 64-bit Cord support.
2192
+ const size_t size =
2193
+ static_cast<size_t>(std::numeric_limits<uint32_t>::max()) + 314;
2194
+ cord.Append(absl::MakeCordFromExternal(
2195
+ absl::string_view(prefix.data(), size),
2196
+ [](absl::string_view s) { DoNothing(s, nullptr); }));
2197
+ } else {
2198
+ // Cords are limited to 32-bit lengths in 32-bit binaries. The following
2199
+ // tests check for use of "signed int" to represent Cord length/offset.
2200
+ // However absl::string_view does not allow lengths >= (1u<<31), so we need
2201
+ // to append in two parts;
2202
+ const size_t s1 = (1u << 31) - 1;
2203
+ // For shorter cord, `Append` copies the data rather than allocating a new
2204
+ // node. The threshold is currently set to 511, so `s2` needs to be bigger
2205
+ // to not trigger the copy.
2206
+ const size_t s2 = 600;
2207
+ cord.Append(absl::MakeCordFromExternal(
2208
+ absl::string_view(prefix.data(), s1),
2209
+ [](absl::string_view s) { DoNothing(s, nullptr); }));
2210
+ cord.Append(absl::MakeCordFromExternal(
2211
+ absl::string_view("", s2),
2212
+ [](absl::string_view s) { DoNothing(s, nullptr); }));
2213
+ }
2214
+ return cord;
2215
+ }
2216
+
2217
+ TEST_P(CordTest, HugeCord) {
2218
+ absl::Cord cord = MakeHuge("huge cord");
2219
+ MaybeHarden(cord);
2220
+
2221
+ const size_t acceptable_delta =
2222
+ 100 + (UseCrc() ? sizeof(absl::cord_internal::CordRepCrc) : 0);
2223
+ EXPECT_LE(cord.size(), cord.EstimatedMemoryUsage());
2224
+ EXPECT_GE(cord.size() + acceptable_delta, cord.EstimatedMemoryUsage());
2225
+ }
2226
+
2227
+ // Tests that Append() works ok when handed a self reference
2228
+ TEST_P(CordTest, AppendSelf) {
2229
+ // Test the empty case.
2230
+ absl::Cord empty;
2231
+ MaybeHarden(empty);
2232
+ empty.Append(empty);
2233
+ ASSERT_EQ(empty, "");
2234
+
2235
+ // We run the test until data is ~16K
2236
+ // This guarantees it covers small, medium and large data.
2237
+ std::string control_data = "Abc";
2238
+ absl::Cord data(control_data);
2239
+ while (control_data.length() < 0x4000) {
2240
+ MaybeHarden(data);
2241
+ data.Append(data);
2242
+ control_data.append(control_data);
2243
+ ASSERT_EQ(control_data, data);
2244
+ }
2245
+ }
2246
+
2247
+ TEST_P(CordTest, MakeFragmentedCordFromInitializerList) {
2248
+ absl::Cord fragmented =
2249
+ absl::MakeFragmentedCord({"A ", "fragmented ", "Cord"});
2250
+
2251
+ MaybeHarden(fragmented);
2252
+
2253
+ EXPECT_EQ("A fragmented Cord", fragmented);
2254
+
2255
+ auto chunk_it = fragmented.chunk_begin();
2256
+
2257
+ ASSERT_TRUE(chunk_it != fragmented.chunk_end());
2258
+ EXPECT_EQ("A ", *chunk_it);
2259
+
2260
+ ASSERT_TRUE(++chunk_it != fragmented.chunk_end());
2261
+ EXPECT_EQ("fragmented ", *chunk_it);
2262
+
2263
+ ASSERT_TRUE(++chunk_it != fragmented.chunk_end());
2264
+ EXPECT_EQ("Cord", *chunk_it);
2265
+
2266
+ ASSERT_TRUE(++chunk_it == fragmented.chunk_end());
2267
+ }
2268
+
2269
+ TEST_P(CordTest, MakeFragmentedCordFromVector) {
2270
+ std::vector<absl::string_view> chunks = {"A ", "fragmented ", "Cord"};
2271
+ absl::Cord fragmented = absl::MakeFragmentedCord(chunks);
2272
+
2273
+ MaybeHarden(fragmented);
2274
+
2275
+ EXPECT_EQ("A fragmented Cord", fragmented);
2276
+
2277
+ auto chunk_it = fragmented.chunk_begin();
2278
+
2279
+ ASSERT_TRUE(chunk_it != fragmented.chunk_end());
2280
+ EXPECT_EQ("A ", *chunk_it);
2281
+
2282
+ ASSERT_TRUE(++chunk_it != fragmented.chunk_end());
2283
+ EXPECT_EQ("fragmented ", *chunk_it);
2284
+
2285
+ ASSERT_TRUE(++chunk_it != fragmented.chunk_end());
2286
+ EXPECT_EQ("Cord", *chunk_it);
2287
+
2288
+ ASSERT_TRUE(++chunk_it == fragmented.chunk_end());
2289
+ }
2290
+
2291
+ TEST_P(CordTest, CordChunkIteratorTraits) {
2292
+ static_assert(std::is_copy_constructible<absl::Cord::ChunkIterator>::value,
2293
+ "");
2294
+ static_assert(std::is_copy_assignable<absl::Cord::ChunkIterator>::value, "");
2295
+
2296
+ // Move semantics to satisfy swappable via std::swap
2297
+ static_assert(std::is_move_constructible<absl::Cord::ChunkIterator>::value,
2298
+ "");
2299
+ static_assert(std::is_move_assignable<absl::Cord::ChunkIterator>::value, "");
2300
+
2301
+ static_assert(
2302
+ std::is_same<
2303
+ std::iterator_traits<absl::Cord::ChunkIterator>::iterator_category,
2304
+ std::input_iterator_tag>::value,
2305
+ "");
2306
+ static_assert(
2307
+ std::is_same<std::iterator_traits<absl::Cord::ChunkIterator>::value_type,
2308
+ absl::string_view>::value,
2309
+ "");
2310
+ static_assert(
2311
+ std::is_same<
2312
+ std::iterator_traits<absl::Cord::ChunkIterator>::difference_type,
2313
+ ptrdiff_t>::value,
2314
+ "");
2315
+ static_assert(
2316
+ std::is_same<std::iterator_traits<absl::Cord::ChunkIterator>::pointer,
2317
+ const absl::string_view*>::value,
2318
+ "");
2319
+ static_assert(
2320
+ std::is_same<std::iterator_traits<absl::Cord::ChunkIterator>::reference,
2321
+ absl::string_view>::value,
2322
+ "");
2323
+ }
2324
+
2325
+ static void VerifyChunkIterator(const absl::Cord& cord,
2326
+ size_t expected_chunks) {
2327
+ EXPECT_EQ(cord.chunk_begin() == cord.chunk_end(), cord.empty()) << cord;
2328
+ EXPECT_EQ(cord.chunk_begin() != cord.chunk_end(), !cord.empty());
2329
+
2330
+ absl::Cord::ChunkRange range = cord.Chunks();
2331
+ EXPECT_EQ(range.begin() == range.end(), cord.empty());
2332
+ EXPECT_EQ(range.begin() != range.end(), !cord.empty());
2333
+
2334
+ std::string content(cord);
2335
+ size_t pos = 0;
2336
+ auto pre_iter = cord.chunk_begin(), post_iter = cord.chunk_begin();
2337
+ size_t n_chunks = 0;
2338
+ while (pre_iter != cord.chunk_end() && post_iter != cord.chunk_end()) {
2339
+ EXPECT_FALSE(pre_iter == cord.chunk_end()); // NOLINT: explicitly test ==
2340
+ EXPECT_FALSE(post_iter == cord.chunk_end()); // NOLINT
2341
+
2342
+ EXPECT_EQ(pre_iter, post_iter);
2343
+ EXPECT_EQ(*pre_iter, *post_iter);
2344
+
2345
+ EXPECT_EQ(pre_iter->data(), (*pre_iter).data());
2346
+ EXPECT_EQ(pre_iter->size(), (*pre_iter).size());
2347
+
2348
+ absl::string_view chunk = *pre_iter;
2349
+ EXPECT_FALSE(chunk.empty());
2350
+ EXPECT_LE(pos + chunk.size(), content.size());
2351
+ EXPECT_EQ(absl::string_view(content.c_str() + pos, chunk.size()), chunk);
2352
+
2353
+ int n_equal_iterators = 0;
2354
+ for (absl::Cord::ChunkIterator it = range.begin(); it != range.end();
2355
+ ++it) {
2356
+ n_equal_iterators += static_cast<int>(it == pre_iter);
2357
+ }
2358
+ EXPECT_EQ(n_equal_iterators, 1);
2359
+
2360
+ ++pre_iter;
2361
+ EXPECT_EQ(*post_iter++, chunk);
2362
+
2363
+ pos += chunk.size();
2364
+ ++n_chunks;
2365
+ }
2366
+ EXPECT_EQ(expected_chunks, n_chunks);
2367
+ EXPECT_EQ(pos, content.size());
2368
+ EXPECT_TRUE(pre_iter == cord.chunk_end()); // NOLINT: explicitly test ==
2369
+ EXPECT_TRUE(post_iter == cord.chunk_end()); // NOLINT
2370
+ }
2371
+
2372
+ TEST_P(CordTest, CordChunkIteratorOperations) {
2373
+ absl::Cord empty_cord;
2374
+ VerifyChunkIterator(empty_cord, 0);
2375
+
2376
+ absl::Cord small_buffer_cord("small cord");
2377
+ MaybeHarden(small_buffer_cord);
2378
+ VerifyChunkIterator(small_buffer_cord, 1);
2379
+
2380
+ absl::Cord flat_node_cord("larger than small buffer optimization");
2381
+ MaybeHarden(flat_node_cord);
2382
+ VerifyChunkIterator(flat_node_cord, 1);
2383
+
2384
+ VerifyChunkIterator(MaybeHardened(absl::MakeFragmentedCord(
2385
+ {"a ", "small ", "fragmented ", "cord ", "for ",
2386
+ "testing ", "chunk ", "iterations."})),
2387
+ 8);
2388
+
2389
+ absl::Cord reused_nodes_cord(std::string(40, 'c'));
2390
+ reused_nodes_cord.Prepend(absl::Cord(std::string(40, 'b')));
2391
+ MaybeHarden(reused_nodes_cord);
2392
+ reused_nodes_cord.Prepend(absl::Cord(std::string(40, 'a')));
2393
+ size_t expected_chunks = 3;
2394
+ for (int i = 0; i < 8; ++i) {
2395
+ reused_nodes_cord.Prepend(reused_nodes_cord);
2396
+ MaybeHarden(reused_nodes_cord);
2397
+ expected_chunks *= 2;
2398
+ VerifyChunkIterator(reused_nodes_cord, expected_chunks);
2399
+ }
2400
+
2401
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
2402
+ absl::Cord flat_cord(RandomLowercaseString(&rng, 256));
2403
+ absl::Cord subcords;
2404
+ for (int i = 0; i < 128; ++i) subcords.Prepend(flat_cord.Subcord(i, 128));
2405
+ VerifyChunkIterator(subcords, 128);
2406
+ }
2407
+
2408
+
2409
+ TEST_P(CordTest, AdvanceAndReadOnDataEdge) {
2410
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
2411
+ const std::string data = RandomLowercaseString(&rng, 2000);
2412
+ for (bool as_flat : {true, false}) {
2413
+ SCOPED_TRACE(as_flat ? "Flat" : "External");
2414
+
2415
+ absl::Cord cord =
2416
+ as_flat ? absl::Cord(data)
2417
+ : absl::MakeCordFromExternal(data, [](absl::string_view) {});
2418
+ auto it = cord.Chars().begin();
2419
+ #if !defined(NDEBUG) || ABSL_OPTION_HARDENED
2420
+ EXPECT_DEATH_IF_SUPPORTED(cord.AdvanceAndRead(&it, 2001), ".*");
2421
+ #endif
2422
+
2423
+ it = cord.Chars().begin();
2424
+ absl::Cord frag = cord.AdvanceAndRead(&it, 2000);
2425
+ EXPECT_EQ(frag, data);
2426
+ EXPECT_TRUE(it == cord.Chars().end());
2427
+
2428
+ it = cord.Chars().begin();
2429
+ frag = cord.AdvanceAndRead(&it, 200);
2430
+ EXPECT_EQ(frag, data.substr(0, 200));
2431
+ EXPECT_FALSE(it == cord.Chars().end());
2432
+
2433
+ frag = cord.AdvanceAndRead(&it, 1500);
2434
+ EXPECT_EQ(frag, data.substr(200, 1500));
2435
+ EXPECT_FALSE(it == cord.Chars().end());
2436
+
2437
+ frag = cord.AdvanceAndRead(&it, 300);
2438
+ EXPECT_EQ(frag, data.substr(1700, 300));
2439
+ EXPECT_TRUE(it == cord.Chars().end());
2440
+ }
2441
+ }
2442
+
2443
+ TEST_P(CordTest, AdvanceAndReadOnSubstringDataEdge) {
2444
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
2445
+ const std::string data = RandomLowercaseString(&rng, 2500);
2446
+ for (bool as_flat : {true, false}) {
2447
+ SCOPED_TRACE(as_flat ? "Flat" : "External");
2448
+
2449
+ absl::Cord cord =
2450
+ as_flat ? absl::Cord(data)
2451
+ : absl::MakeCordFromExternal(data, [](absl::string_view) {});
2452
+ cord = cord.Subcord(200, 2000);
2453
+ const std::string substr = data.substr(200, 2000);
2454
+
2455
+ auto it = cord.Chars().begin();
2456
+ #if !defined(NDEBUG) || ABSL_OPTION_HARDENED
2457
+ EXPECT_DEATH_IF_SUPPORTED(cord.AdvanceAndRead(&it, 2001), ".*");
2458
+ #endif
2459
+
2460
+ it = cord.Chars().begin();
2461
+ absl::Cord frag = cord.AdvanceAndRead(&it, 2000);
2462
+ EXPECT_EQ(frag, substr);
2463
+ EXPECT_TRUE(it == cord.Chars().end());
2464
+
2465
+ it = cord.Chars().begin();
2466
+ frag = cord.AdvanceAndRead(&it, 200);
2467
+ EXPECT_EQ(frag, substr.substr(0, 200));
2468
+ EXPECT_FALSE(it == cord.Chars().end());
2469
+
2470
+ frag = cord.AdvanceAndRead(&it, 1500);
2471
+ EXPECT_EQ(frag, substr.substr(200, 1500));
2472
+ EXPECT_FALSE(it == cord.Chars().end());
2473
+
2474
+ frag = cord.AdvanceAndRead(&it, 300);
2475
+ EXPECT_EQ(frag, substr.substr(1700, 300));
2476
+ EXPECT_TRUE(it == cord.Chars().end());
2477
+ }
2478
+ }
2479
+
2480
+ TEST_P(CordTest, CharIteratorTraits) {
2481
+ static_assert(std::is_copy_constructible<absl::Cord::CharIterator>::value,
2482
+ "");
2483
+ static_assert(std::is_copy_assignable<absl::Cord::CharIterator>::value, "");
2484
+
2485
+ // Move semantics to satisfy swappable via std::swap
2486
+ static_assert(std::is_move_constructible<absl::Cord::CharIterator>::value,
2487
+ "");
2488
+ static_assert(std::is_move_assignable<absl::Cord::CharIterator>::value, "");
2489
+
2490
+ static_assert(
2491
+ std::is_same<
2492
+ std::iterator_traits<absl::Cord::CharIterator>::iterator_category,
2493
+ std::input_iterator_tag>::value,
2494
+ "");
2495
+ static_assert(
2496
+ std::is_same<std::iterator_traits<absl::Cord::CharIterator>::value_type,
2497
+ char>::value,
2498
+ "");
2499
+ static_assert(
2500
+ std::is_same<
2501
+ std::iterator_traits<absl::Cord::CharIterator>::difference_type,
2502
+ ptrdiff_t>::value,
2503
+ "");
2504
+ static_assert(
2505
+ std::is_same<std::iterator_traits<absl::Cord::CharIterator>::pointer,
2506
+ const char*>::value,
2507
+ "");
2508
+ static_assert(
2509
+ std::is_same<std::iterator_traits<absl::Cord::CharIterator>::reference,
2510
+ const char&>::value,
2511
+ "");
2512
+ }
2513
+
2514
+ static void VerifyCharIterator(const absl::Cord& cord) {
2515
+ EXPECT_EQ(cord.char_begin() == cord.char_end(), cord.empty());
2516
+ EXPECT_EQ(cord.char_begin() != cord.char_end(), !cord.empty());
2517
+
2518
+ absl::Cord::CharRange range = cord.Chars();
2519
+ EXPECT_EQ(range.begin() == range.end(), cord.empty());
2520
+ EXPECT_EQ(range.begin() != range.end(), !cord.empty());
2521
+ EXPECT_EQ(absl::Cord::Distance(range.begin(), range.end()),
2522
+ static_cast<ptrdiff_t>(cord.size()));
2523
+ EXPECT_EQ(absl::Cord::Distance(range.end(), range.begin()),
2524
+ -static_cast<ptrdiff_t>(cord.size()));
2525
+
2526
+ size_t i = 0;
2527
+ absl::Cord::CharIterator pre_iter = cord.char_begin();
2528
+ absl::Cord::CharIterator post_iter = cord.char_begin();
2529
+ std::string content(cord);
2530
+ while (pre_iter != cord.char_end() && post_iter != cord.char_end()) {
2531
+ EXPECT_FALSE(pre_iter == cord.char_end()); // NOLINT: explicitly test ==
2532
+ EXPECT_FALSE(post_iter == cord.char_end()); // NOLINT
2533
+
2534
+ EXPECT_LT(i, cord.size());
2535
+ EXPECT_EQ(content[i], *pre_iter);
2536
+
2537
+ EXPECT_EQ(pre_iter, post_iter);
2538
+ EXPECT_EQ(*pre_iter, *post_iter);
2539
+ EXPECT_EQ(&*pre_iter, &*post_iter);
2540
+
2541
+ const char* character_address = &*pre_iter;
2542
+ absl::Cord::CharIterator copy = pre_iter;
2543
+ ++copy;
2544
+ EXPECT_EQ(character_address, &*pre_iter);
2545
+
2546
+ int n_equal_iterators = 0;
2547
+ for (absl::Cord::CharIterator it = range.begin(); it != range.end(); ++it) {
2548
+ n_equal_iterators += static_cast<int>(it == pre_iter);
2549
+ }
2550
+ EXPECT_EQ(n_equal_iterators, 1);
2551
+
2552
+ absl::Cord::CharIterator advance_iter = range.begin();
2553
+ absl::Cord::Advance(&advance_iter, i);
2554
+ EXPECT_EQ(pre_iter, advance_iter);
2555
+ EXPECT_EQ(absl::Cord::Distance(range.begin(), advance_iter),
2556
+ static_cast<ptrdiff_t>(i));
2557
+
2558
+ advance_iter = range.begin();
2559
+ EXPECT_EQ(absl::Cord::AdvanceAndRead(&advance_iter, i), cord.Subcord(0, i));
2560
+ EXPECT_EQ(pre_iter, advance_iter);
2561
+ EXPECT_EQ(absl::Cord::Distance(range.begin(), advance_iter),
2562
+ static_cast<ptrdiff_t>(i));
2563
+
2564
+ advance_iter = pre_iter;
2565
+ absl::Cord::Advance(&advance_iter, cord.size() - i);
2566
+ EXPECT_EQ(range.end(), advance_iter);
2567
+ EXPECT_EQ(absl::Cord::Distance(range.begin(), advance_iter),
2568
+ static_cast<ptrdiff_t>(cord.size()));
2569
+ EXPECT_EQ(absl::Cord::Distance(advance_iter, range.end()), 0);
2570
+
2571
+ advance_iter = pre_iter;
2572
+ EXPECT_EQ(absl::Cord::AdvanceAndRead(&advance_iter, cord.size() - i),
2573
+ cord.Subcord(i, cord.size() - i));
2574
+ EXPECT_EQ(range.end(), advance_iter);
2575
+ EXPECT_EQ(absl::Cord::Distance(range.begin(), advance_iter),
2576
+ static_cast<ptrdiff_t>(cord.size()));
2577
+ EXPECT_EQ(absl::Cord::Distance(advance_iter, range.end()), 0);
2578
+
2579
+ ++i;
2580
+ ++pre_iter;
2581
+ post_iter++;
2582
+ }
2583
+ EXPECT_EQ(i, cord.size());
2584
+ EXPECT_TRUE(pre_iter == cord.char_end()); // NOLINT: explicitly test ==
2585
+ EXPECT_TRUE(post_iter == cord.char_end()); // NOLINT
2586
+
2587
+ absl::Cord::CharIterator zero_advanced_end = cord.char_end();
2588
+ absl::Cord::Advance(&zero_advanced_end, 0);
2589
+ EXPECT_EQ(zero_advanced_end, cord.char_end());
2590
+
2591
+ absl::Cord::CharIterator it = cord.char_begin();
2592
+ for (absl::string_view chunk : cord.Chunks()) {
2593
+ while (!chunk.empty()) {
2594
+ EXPECT_EQ(absl::Cord::ChunkRemaining(it), chunk);
2595
+ chunk.remove_prefix(1);
2596
+ ++it;
2597
+ }
2598
+ }
2599
+ }
2600
+
2601
+ TEST_P(CordTest, CharIteratorOperations) {
2602
+ absl::Cord empty_cord;
2603
+ VerifyCharIterator(empty_cord);
2604
+
2605
+ absl::Cord small_buffer_cord("small cord");
2606
+ MaybeHarden(small_buffer_cord);
2607
+ VerifyCharIterator(small_buffer_cord);
2608
+
2609
+ absl::Cord flat_node_cord("larger than small buffer optimization");
2610
+ MaybeHarden(flat_node_cord);
2611
+ VerifyCharIterator(flat_node_cord);
2612
+
2613
+ VerifyCharIterator(MaybeHardened(
2614
+ absl::MakeFragmentedCord({"a ", "small ", "fragmented ", "cord ", "for ",
2615
+ "testing ", "character ", "iteration."})));
2616
+
2617
+ absl::Cord reused_nodes_cord("ghi");
2618
+ reused_nodes_cord.Prepend(absl::Cord("def"));
2619
+ reused_nodes_cord.Prepend(absl::Cord("abc"));
2620
+ for (int i = 0; i < 4; ++i) {
2621
+ reused_nodes_cord.Prepend(reused_nodes_cord);
2622
+ MaybeHarden(reused_nodes_cord);
2623
+ VerifyCharIterator(reused_nodes_cord);
2624
+ }
2625
+
2626
+ RandomEngine rng(GTEST_FLAG_GET(random_seed));
2627
+ absl::Cord flat_cord(RandomLowercaseString(&rng, 256));
2628
+ absl::Cord subcords;
2629
+ for (int i = 0; i < 4; ++i) {
2630
+ subcords.Prepend(flat_cord.Subcord(16 * i, 128));
2631
+ MaybeHarden(subcords);
2632
+ }
2633
+ VerifyCharIterator(subcords);
2634
+ }
2635
+
2636
+ TEST_P(CordTest, CharIteratorAdvanceAndRead) {
2637
+ // Create a Cord holding 6 flats of 2500 bytes each, and then iterate over it
2638
+ // reading 150, 1500, 2500 and 3000 bytes. This will result in all possible
2639
+ // partial, full and straddled read combinations including reads below
2640
+ // kMaxBytesToCopy. b/197776822 surfaced a bug for a specific partial, small
2641
+ // read 'at end' on Cord which caused a failure on attempting to read past the
2642
+ // end in CordRepBtreeReader which was not covered by any existing test.
2643
+ constexpr int kBlocks = 6;
2644
+ constexpr size_t kBlockSize = 2500;
2645
+ constexpr size_t kChunkSize1 = 1500;
2646
+ constexpr size_t kChunkSize2 = 2500;
2647
+ constexpr size_t kChunkSize3 = 3000;
2648
+ constexpr size_t kChunkSize4 = 150;
2649
+ RandomEngine rng;
2650
+ std::string data = RandomLowercaseString(&rng, kBlocks * kBlockSize);
2651
+ absl::Cord cord;
2652
+ for (int i = 0; i < kBlocks; ++i) {
2653
+ const std::string block = data.substr(i * kBlockSize, kBlockSize);
2654
+ cord.Append(absl::Cord(block));
2655
+ }
2656
+
2657
+ MaybeHarden(cord);
2658
+
2659
+
2660
+ for (size_t chunk_size :
2661
+ {kChunkSize1, kChunkSize2, kChunkSize3, kChunkSize4}) {
2662
+ absl::Cord::CharIterator it = cord.char_begin();
2663
+ size_t it_remaining = cord.size();
2664
+ size_t it_advanced = 0;
2665
+ size_t offset = 0;
2666
+ while (offset < data.length()) {
2667
+ EXPECT_EQ(absl::Cord::Distance(it, cord.char_end()), it_remaining);
2668
+ EXPECT_EQ(absl::Cord::Distance(cord.char_begin(), it), it_advanced);
2669
+ const size_t n = std::min<size_t>(data.length() - offset, chunk_size);
2670
+ absl::Cord chunk = cord.AdvanceAndRead(&it, n);
2671
+ ASSERT_EQ(chunk.size(), n);
2672
+ ASSERT_EQ(chunk.Compare(data.substr(offset, n)), 0);
2673
+ offset += n;
2674
+ it_remaining -= n;
2675
+ it_advanced += n;
2676
+ EXPECT_EQ(absl::Cord::Distance(it, cord.char_end()), it_remaining);
2677
+ EXPECT_EQ(absl::Cord::Distance(cord.char_begin(), it), it_advanced);
2678
+ }
2679
+ }
2680
+ }
2681
+
2682
+ TEST_P(CordTest, StreamingOutput) {
2683
+ absl::Cord c =
2684
+ absl::MakeFragmentedCord({"A ", "small ", "fragmented ", "Cord", "."});
2685
+ MaybeHarden(c);
2686
+ std::stringstream output;
2687
+ output << c;
2688
+ EXPECT_EQ("A small fragmented Cord.", output.str());
2689
+ }
2690
+
2691
+ TEST_P(CordTest, ForEachChunk) {
2692
+ for (int num_elements : {1, 10, 200}) {
2693
+ SCOPED_TRACE(num_elements);
2694
+ std::vector<std::string> cord_chunks;
2695
+ for (int i = 0; i < num_elements; ++i) {
2696
+ cord_chunks.push_back(absl::StrCat("[", i, "]"));
2697
+ }
2698
+ absl::Cord c = absl::MakeFragmentedCord(cord_chunks);
2699
+ MaybeHarden(c);
2700
+
2701
+ std::vector<std::string> iterated_chunks;
2702
+ absl::CordTestPeer::ForEachChunk(c,
2703
+ [&iterated_chunks](absl::string_view sv) {
2704
+ iterated_chunks.emplace_back(sv);
2705
+ });
2706
+ EXPECT_EQ(iterated_chunks, cord_chunks);
2707
+ }
2708
+ }
2709
+
2710
+ TEST_P(CordTest, SmallBufferAssignFromOwnData) {
2711
+ constexpr size_t kMaxInline = 15;
2712
+ std::string contents = "small buff cord";
2713
+ EXPECT_EQ(contents.size(), kMaxInline);
2714
+ for (size_t pos = 0; pos < contents.size(); ++pos) {
2715
+ for (size_t count = contents.size() - pos; count > 0; --count) {
2716
+ absl::Cord c(contents);
2717
+ MaybeHarden(c);
2718
+ absl::string_view flat = c.Flatten();
2719
+ c = flat.substr(pos, count);
2720
+ EXPECT_EQ(c, contents.substr(pos, count))
2721
+ << "pos = " << pos << "; count = " << count;
2722
+ }
2723
+ }
2724
+ }
2725
+
2726
+ TEST_P(CordTest, Format) {
2727
+ absl::Cord c;
2728
+ absl::Format(&c, "There were %04d little %s.", 3, "pigs");
2729
+ EXPECT_EQ(c, "There were 0003 little pigs.");
2730
+ MaybeHarden(c);
2731
+ absl::Format(&c, "And %-3llx bad wolf!", 1);
2732
+ MaybeHarden(c);
2733
+ EXPECT_EQ(c, "There were 0003 little pigs.And 1 bad wolf!");
2734
+ }
2735
+
2736
+ TEST_P(CordTest, Stringify) {
2737
+ absl::Cord c =
2738
+ absl::MakeFragmentedCord({"A ", "small ", "fragmented ", "Cord", "."});
2739
+ MaybeHarden(c);
2740
+ EXPECT_EQ(absl::StrCat(c), "A small fragmented Cord.");
2741
+ }
2742
+
2743
+ TEST_P(CordTest, Hardening) {
2744
+ absl::Cord cord("hello");
2745
+ MaybeHarden(cord);
2746
+
2747
+ // These statement should abort the program in all builds modes.
2748
+ EXPECT_DEATH_IF_SUPPORTED(cord.RemovePrefix(6), "");
2749
+ EXPECT_DEATH_IF_SUPPORTED(cord.RemoveSuffix(6), "");
2750
+
2751
+ bool test_hardening = false;
2752
+ ABSL_HARDENING_ASSERT([&]() {
2753
+ // This only runs when ABSL_HARDENING_ASSERT is active.
2754
+ test_hardening = true;
2755
+ return true;
2756
+ }());
2757
+ if (!test_hardening) return;
2758
+
2759
+ EXPECT_DEATH_IF_SUPPORTED(cord[5], "");
2760
+ EXPECT_DEATH_IF_SUPPORTED(*cord.chunk_end(), "");
2761
+ EXPECT_DEATH_IF_SUPPORTED(static_cast<void>(cord.chunk_end()->empty()), "");
2762
+ EXPECT_DEATH_IF_SUPPORTED(++cord.chunk_end(), "");
2763
+ }
2764
+
2765
+ // This test mimics a specific (and rare) application repeatedly splitting a
2766
+ // cord, inserting (overwriting) a string value, and composing a new cord from
2767
+ // the three pieces. This is hostile towards a Btree implementation: A split of
2768
+ // a node at any level is likely to have the right-most edge of the left split,
2769
+ // and the left-most edge of the right split shared. For example, splitting a
2770
+ // leaf node with 6 edges will result likely in a 1-6, 2-5, 3-4, etc. split,
2771
+ // sharing the 'split node'. When recomposing such nodes, we 'injected' an edge
2772
+ // in that node. As this happens with some probability on each level of the
2773
+ // tree, this will quickly grow the tree until it reaches maximum height.
2774
+ TEST_P(CordTest, BtreeHostileSplitInsertJoin) {
2775
+ absl::BitGen bitgen;
2776
+
2777
+ // Start with about 1GB of data
2778
+ std::string data(1 << 10, 'x');
2779
+ absl::Cord buffer(data);
2780
+ absl::Cord cord;
2781
+ for (int i = 0; i < 1000000; ++i) {
2782
+ cord.Append(buffer);
2783
+ }
2784
+
2785
+ for (int j = 0; j < 1000; ++j) {
2786
+ MaybeHarden(cord);
2787
+ size_t offset = absl::Uniform(bitgen, 0u, cord.size());
2788
+ size_t length = absl::Uniform(bitgen, 100u, data.size());
2789
+ if (cord.size() == offset) {
2790
+ cord.Append(absl::string_view(data.data(), length));
2791
+ } else {
2792
+ absl::Cord suffix;
2793
+ if (offset + length < cord.size()) {
2794
+ suffix = cord;
2795
+ suffix.RemovePrefix(offset + length);
2796
+ }
2797
+ if (cord.size() > offset) {
2798
+ cord.RemoveSuffix(cord.size() - offset);
2799
+ }
2800
+ cord.Append(absl::string_view(data.data(), length));
2801
+ if (!suffix.empty()) {
2802
+ cord.Append(suffix);
2803
+ }
2804
+ }
2805
+ }
2806
+ }
2807
+
2808
+ class AfterExitCordTester {
2809
+ public:
2810
+ bool Set(absl::Cord* cord, absl::string_view expected) {
2811
+ cord_ = cord;
2812
+ expected_ = expected;
2813
+ return true;
2814
+ }
2815
+
2816
+ ~AfterExitCordTester() {
2817
+ EXPECT_EQ(*cord_, expected_);
2818
+ }
2819
+ private:
2820
+ absl::Cord* cord_;
2821
+ absl::string_view expected_;
2822
+ };
2823
+
2824
+ template <typename Str>
2825
+ void TestAfterExit(Str) {
2826
+ const auto expected = Str::value;
2827
+ // Defined before `cord` to be destroyed after it.
2828
+ static AfterExitCordTester exit_tester; // NOLINT
2829
+ static absl::NoDestructor<absl::Cord> cord_leaker(Str{});
2830
+ // cord_leaker is static, so this reference will remain valid through the end
2831
+ // of program execution.
2832
+ static absl::Cord& cord = *cord_leaker;
2833
+ static bool init_exit_tester = exit_tester.Set(&cord, expected);
2834
+ (void)init_exit_tester;
2835
+
2836
+ EXPECT_EQ(cord, expected);
2837
+ // Copy the object and test the copy, and the original.
2838
+ {
2839
+ absl::Cord copy = cord;
2840
+ EXPECT_EQ(copy, expected);
2841
+ }
2842
+ // The original still works
2843
+ EXPECT_EQ(cord, expected);
2844
+
2845
+ // Try making adding more structure to the tree.
2846
+ {
2847
+ absl::Cord copy = cord;
2848
+ std::string expected_copy(expected);
2849
+ for (int i = 0; i < 10; ++i) {
2850
+ copy.Append(cord);
2851
+ absl::StrAppend(&expected_copy, expected);
2852
+ EXPECT_EQ(copy, expected_copy);
2853
+ }
2854
+ }
2855
+
2856
+ // Make sure we are using the right branch during constant evaluation.
2857
+ EXPECT_EQ(absl::CordTestPeer::IsTree(cord), cord.size() >= 16);
2858
+
2859
+ for (int i = 0; i < 10; ++i) {
2860
+ // Make a few more Cords from the same global rep.
2861
+ // This tests what happens when the refcount for it gets below 1.
2862
+ EXPECT_EQ(expected, absl::Cord(Str{}));
2863
+ }
2864
+ }
2865
+
2866
+ constexpr int SimpleStrlen(const char* p) {
2867
+ return *p ? 1 + SimpleStrlen(p + 1) : 0;
2868
+ }
2869
+
2870
+ struct ShortView {
2871
+ constexpr absl::string_view operator()() const {
2872
+ return absl::string_view("SSO string", SimpleStrlen("SSO string"));
2873
+ }
2874
+ };
2875
+
2876
+ struct LongView {
2877
+ constexpr absl::string_view operator()() const {
2878
+ return absl::string_view("String that does not fit SSO.",
2879
+ SimpleStrlen("String that does not fit SSO."));
2880
+ }
2881
+ };
2882
+
2883
+
2884
+ TEST_P(CordTest, AfterExit) {
2885
+ TestAfterExit(absl::strings_internal::MakeStringConstant(ShortView{}));
2886
+ TestAfterExit(absl::strings_internal::MakeStringConstant(LongView{}));
2887
+ }
2888
+
2889
+ namespace {
2890
+
2891
+ // Test helper that generates a populated cord for future manipulation.
2892
+ //
2893
+ // By test convention, all generated cords begin with the characters "abcde" at
2894
+ // the start of the first chunk.
2895
+ class PopulatedCordFactory {
2896
+ public:
2897
+ constexpr PopulatedCordFactory(absl::string_view name,
2898
+ absl::Cord (*generator)())
2899
+ : name_(name), generator_(generator) {}
2900
+
2901
+ absl::string_view Name() const { return name_; }
2902
+ absl::Cord Generate() const { return generator_(); }
2903
+
2904
+ private:
2905
+ absl::string_view name_;
2906
+ absl::Cord (*generator_)();
2907
+ };
2908
+
2909
+ // clang-format off
2910
+ // This array is constant-initialized in conformant compilers.
2911
+ PopulatedCordFactory cord_factories[] = {
2912
+ {"sso", [] { return absl::Cord("abcde"); }},
2913
+ {"flat", [] {
2914
+ // Too large to live in SSO space, but small enough to be a simple FLAT.
2915
+ absl::Cord flat(absl::StrCat("abcde", std::string(1000, 'x')));
2916
+ flat.Flatten();
2917
+ return flat;
2918
+ }},
2919
+ {"external", [] {
2920
+ // A cheat: we are using a string literal as the external storage, so a
2921
+ // no-op releaser is correct here.
2922
+ return absl::MakeCordFromExternal("abcde External!", []{});
2923
+ }},
2924
+ {"external substring", [] {
2925
+ // A cheat: we are using a string literal as the external storage, so a
2926
+ // no-op releaser is correct here.
2927
+ absl::Cord ext = absl::MakeCordFromExternal("-abcde External!", []{});
2928
+ return absl::CordTestPeer::MakeSubstring(ext, 1, ext.size() - 1);
2929
+ }},
2930
+ {"substring", [] {
2931
+ absl::Cord flat(absl::StrCat("-abcde", std::string(1000, 'x')));
2932
+ flat.Flatten();
2933
+ return flat.Subcord(1, 998);
2934
+ }},
2935
+ {"fragmented", [] {
2936
+ std::string fragment = absl::StrCat("abcde", std::string(195, 'x'));
2937
+ std::vector<std::string> fragments(200, fragment);
2938
+ absl::Cord cord = absl::MakeFragmentedCord(fragments);
2939
+ assert(cord.size() == 40000);
2940
+ return cord;
2941
+ }},
2942
+ };
2943
+ // clang-format on
2944
+
2945
+ // Test helper that can mutate a cord, and possibly undo the mutation, for
2946
+ // testing.
2947
+ class CordMutator {
2948
+ public:
2949
+ constexpr CordMutator(absl::string_view name, void (*mutate)(absl::Cord&),
2950
+ void (*undo)(absl::Cord&) = nullptr)
2951
+ : name_(name), mutate_(mutate), undo_(undo) {}
2952
+
2953
+ absl::string_view Name() const { return name_; }
2954
+ void Mutate(absl::Cord& cord) const { mutate_(cord); }
2955
+ bool CanUndo() const { return undo_ != nullptr; }
2956
+ void Undo(absl::Cord& cord) const { undo_(cord); }
2957
+
2958
+ private:
2959
+ absl::string_view name_;
2960
+ void (*mutate_)(absl::Cord&);
2961
+ void (*undo_)(absl::Cord&);
2962
+ };
2963
+
2964
+ // clang-format off
2965
+ // This array is constant-initialized in conformant compilers.
2966
+ CordMutator cord_mutators[] = {
2967
+ {"clear", [](absl::Cord& c) { c.Clear(); }},
2968
+ {"overwrite", [](absl::Cord& c) { c = "overwritten"; }},
2969
+ {
2970
+ "append string",
2971
+ [](absl::Cord& c) { c.Append("0123456789"); },
2972
+ [](absl::Cord& c) { c.RemoveSuffix(10); }
2973
+ },
2974
+ {
2975
+ "append cord",
2976
+ [](absl::Cord& c) {
2977
+ c.Append(absl::MakeFragmentedCord({"12345", "67890"}));
2978
+ },
2979
+ [](absl::Cord& c) { c.RemoveSuffix(10); }
2980
+ },
2981
+ {
2982
+ "append checksummed cord",
2983
+ [](absl::Cord& c) {
2984
+ absl::Cord to_append = absl::MakeFragmentedCord({"12345", "67890"});
2985
+ to_append.SetExpectedChecksum(999);
2986
+ c.Append(to_append);
2987
+ },
2988
+ [](absl::Cord& c) { c.RemoveSuffix(10); }
2989
+ },
2990
+ {
2991
+ "append self",
2992
+ [](absl::Cord& c) { c.Append(c); },
2993
+ [](absl::Cord& c) { c.RemoveSuffix(c.size() / 2); }
2994
+ },
2995
+ {
2996
+ "append empty string",
2997
+ [](absl::Cord& c) { c.Append(""); },
2998
+ [](absl::Cord& c) { }
2999
+ },
3000
+ {
3001
+ "append empty cord",
3002
+ [](absl::Cord& c) { c.Append(absl::Cord()); },
3003
+ [](absl::Cord& c) { }
3004
+ },
3005
+ {
3006
+ "append empty checksummed cord",
3007
+ [](absl::Cord& c) {
3008
+ absl::Cord to_append;
3009
+ to_append.SetExpectedChecksum(999);
3010
+ c.Append(to_append);
3011
+ },
3012
+ [](absl::Cord& c) { }
3013
+ },
3014
+ {
3015
+ "prepend string",
3016
+ [](absl::Cord& c) { c.Prepend("9876543210"); },
3017
+ [](absl::Cord& c) { c.RemovePrefix(10); }
3018
+ },
3019
+ {
3020
+ "prepend cord",
3021
+ [](absl::Cord& c) {
3022
+ c.Prepend(absl::MakeFragmentedCord({"98765", "43210"}));
3023
+ },
3024
+ [](absl::Cord& c) { c.RemovePrefix(10); }
3025
+ },
3026
+ {
3027
+ "prepend checksummed cord",
3028
+ [](absl::Cord& c) {
3029
+ absl::Cord to_prepend = absl::MakeFragmentedCord({"98765", "43210"});
3030
+ to_prepend.SetExpectedChecksum(999);
3031
+ c.Prepend(to_prepend);
3032
+ },
3033
+ [](absl::Cord& c) { c.RemovePrefix(10); }
3034
+ },
3035
+ {
3036
+ "prepend empty string",
3037
+ [](absl::Cord& c) { c.Prepend(""); },
3038
+ [](absl::Cord& c) { }
3039
+ },
3040
+ {
3041
+ "prepend empty cord",
3042
+ [](absl::Cord& c) { c.Prepend(absl::Cord()); },
3043
+ [](absl::Cord& c) { }
3044
+ },
3045
+ {
3046
+ "prepend empty checksummed cord",
3047
+ [](absl::Cord& c) {
3048
+ absl::Cord to_prepend;
3049
+ to_prepend.SetExpectedChecksum(999);
3050
+ c.Prepend(to_prepend);
3051
+ },
3052
+ [](absl::Cord& c) { }
3053
+ },
3054
+ {
3055
+ "prepend self",
3056
+ [](absl::Cord& c) { c.Prepend(c); },
3057
+ [](absl::Cord& c) { c.RemovePrefix(c.size() / 2); }
3058
+ },
3059
+ {"remove prefix", [](absl::Cord& c) { c.RemovePrefix(c.size() / 2); }},
3060
+ {"remove suffix", [](absl::Cord& c) { c.RemoveSuffix(c.size() / 2); }},
3061
+ {"remove 0-prefix", [](absl::Cord& c) { c.RemovePrefix(0); }},
3062
+ {"remove 0-suffix", [](absl::Cord& c) { c.RemoveSuffix(0); }},
3063
+ {"subcord", [](absl::Cord& c) { c = c.Subcord(1, c.size() - 2); }},
3064
+ {
3065
+ "swap inline",
3066
+ [](absl::Cord& c) {
3067
+ absl::Cord other("swap");
3068
+ c.swap(other);
3069
+ }
3070
+ },
3071
+ {
3072
+ "swap tree",
3073
+ [](absl::Cord& c) {
3074
+ absl::Cord other(std::string(10000, 'x'));
3075
+ c.swap(other);
3076
+ }
3077
+ },
3078
+ };
3079
+ // clang-format on
3080
+ } // namespace
3081
+
3082
+ TEST_P(CordTest, ExpectedChecksum) {
3083
+ for (const PopulatedCordFactory& factory : cord_factories) {
3084
+ SCOPED_TRACE(factory.Name());
3085
+ for (bool shared : {false, true}) {
3086
+ SCOPED_TRACE(shared);
3087
+
3088
+ absl::Cord shared_cord_source = factory.Generate();
3089
+ auto make_instance = [=] {
3090
+ return shared ? shared_cord_source : factory.Generate();
3091
+ };
3092
+
3093
+ const absl::Cord base_value = factory.Generate();
3094
+ const std::string base_value_as_string(factory.Generate().Flatten());
3095
+
3096
+ absl::Cord c1 = make_instance();
3097
+ EXPECT_FALSE(c1.ExpectedChecksum().has_value());
3098
+
3099
+ // Setting an expected checksum works, and retains the cord's bytes
3100
+ c1.SetExpectedChecksum(12345);
3101
+ EXPECT_EQ(c1.ExpectedChecksum().value_or(0), 12345);
3102
+ EXPECT_EQ(c1, base_value);
3103
+
3104
+ // Test that setting an expected checksum again doesn't crash or leak
3105
+ // memory.
3106
+ c1.SetExpectedChecksum(12345);
3107
+ EXPECT_EQ(c1.ExpectedChecksum().value_or(0), 12345);
3108
+ EXPECT_EQ(c1, base_value);
3109
+
3110
+ // CRC persists through copies, assignments, and moves:
3111
+ absl::Cord c1_copy_construct = c1;
3112
+ EXPECT_EQ(c1_copy_construct.ExpectedChecksum().value_or(0), 12345);
3113
+
3114
+ absl::Cord c1_copy_assign;
3115
+ c1_copy_assign = c1;
3116
+ EXPECT_EQ(c1_copy_assign.ExpectedChecksum().value_or(0), 12345);
3117
+
3118
+ absl::Cord c1_move(std::move(c1_copy_assign));
3119
+ EXPECT_EQ(c1_move.ExpectedChecksum().value_or(0), 12345);
3120
+
3121
+ EXPECT_EQ(c1.ExpectedChecksum().value_or(0), 12345);
3122
+
3123
+ // A CRC Cord compares equal to its non-CRC value.
3124
+ EXPECT_EQ(c1, make_instance());
3125
+
3126
+ for (const CordMutator& mutator : cord_mutators) {
3127
+ SCOPED_TRACE(mutator.Name());
3128
+
3129
+ // Test that mutating a cord removes its stored checksum
3130
+ absl::Cord c2 = make_instance();
3131
+ c2.SetExpectedChecksum(24680);
3132
+
3133
+ mutator.Mutate(c2);
3134
+
3135
+ if (c1 == c2) {
3136
+ // Not a mutation (for example, appending the empty string).
3137
+ // Whether the checksum is removed is not defined.
3138
+ continue;
3139
+ }
3140
+
3141
+ EXPECT_EQ(c2.ExpectedChecksum(), absl::nullopt);
3142
+
3143
+ if (mutator.CanUndo()) {
3144
+ // Undoing an operation should not restore the checksum
3145
+ mutator.Undo(c2);
3146
+ EXPECT_EQ(c2, base_value);
3147
+ EXPECT_EQ(c2.ExpectedChecksum(), absl::nullopt);
3148
+ }
3149
+ }
3150
+
3151
+ absl::Cord c3 = make_instance();
3152
+ c3.SetExpectedChecksum(999);
3153
+ const absl::Cord& cc3 = c3;
3154
+
3155
+ // Test that all cord reading operations function in the face of an
3156
+ // expected checksum.
3157
+
3158
+ // Test data precondition
3159
+ ASSERT_TRUE(cc3.StartsWith("abcde"));
3160
+
3161
+ EXPECT_EQ(cc3.size(), base_value_as_string.size());
3162
+ EXPECT_FALSE(cc3.empty());
3163
+ EXPECT_EQ(cc3.Compare(base_value), 0);
3164
+ EXPECT_EQ(cc3.Compare(base_value_as_string), 0);
3165
+ EXPECT_EQ(cc3.Compare("wxyz"), -1);
3166
+ EXPECT_EQ(cc3.Compare(absl::Cord("wxyz")), -1);
3167
+ EXPECT_EQ(cc3.Compare("aaaa"), 1);
3168
+ EXPECT_EQ(cc3.Compare(absl::Cord("aaaa")), 1);
3169
+ EXPECT_EQ(absl::Cord("wxyz").Compare(cc3), 1);
3170
+ EXPECT_EQ(absl::Cord("aaaa").Compare(cc3), -1);
3171
+ EXPECT_TRUE(cc3.StartsWith("abcd"));
3172
+ EXPECT_EQ(std::string(cc3), base_value_as_string);
3173
+
3174
+ std::string dest;
3175
+ absl::CopyCordToString(cc3, &dest);
3176
+ EXPECT_EQ(dest, base_value_as_string);
3177
+
3178
+ bool first_pass = true;
3179
+ for (absl::string_view chunk : cc3.Chunks()) {
3180
+ if (first_pass) {
3181
+ EXPECT_TRUE(absl::StartsWith(chunk, "abcde"));
3182
+ }
3183
+ first_pass = false;
3184
+ }
3185
+ first_pass = true;
3186
+ for (char ch : cc3.Chars()) {
3187
+ if (first_pass) {
3188
+ EXPECT_EQ(ch, 'a');
3189
+ }
3190
+ first_pass = false;
3191
+ }
3192
+ EXPECT_TRUE(absl::StartsWith(*cc3.chunk_begin(), "abcde"));
3193
+ EXPECT_EQ(*cc3.char_begin(), 'a');
3194
+
3195
+ auto char_it = cc3.char_begin();
3196
+ absl::Cord::Advance(&char_it, 2);
3197
+ EXPECT_EQ(absl::Cord::AdvanceAndRead(&char_it, 2), "cd");
3198
+ EXPECT_EQ(*char_it, 'e');
3199
+ char_it = cc3.char_begin();
3200
+ absl::Cord::Advance(&char_it, 2);
3201
+ EXPECT_TRUE(absl::StartsWith(absl::Cord::ChunkRemaining(char_it), "cde"));
3202
+
3203
+ EXPECT_EQ(cc3[0], 'a');
3204
+ EXPECT_EQ(cc3[4], 'e');
3205
+ EXPECT_EQ(absl::HashOf(cc3), absl::HashOf(base_value));
3206
+ EXPECT_EQ(absl::HashOf(cc3), absl::HashOf(base_value_as_string));
3207
+ }
3208
+ }
3209
+ }
3210
+
3211
+ // Test the special cases encountered with an empty checksummed cord.
3212
+ TEST_P(CordTest, ChecksummedEmptyCord) {
3213
+ absl::Cord c1;
3214
+ EXPECT_FALSE(c1.ExpectedChecksum().has_value());
3215
+
3216
+ // Setting an expected checksum works.
3217
+ c1.SetExpectedChecksum(12345);
3218
+ EXPECT_EQ(c1.ExpectedChecksum().value_or(0), 12345);
3219
+ EXPECT_EQ(c1, "");
3220
+ EXPECT_TRUE(c1.empty());
3221
+
3222
+ // Test that setting an expected checksum again doesn't crash or leak memory.
3223
+ c1.SetExpectedChecksum(12345);
3224
+ EXPECT_EQ(c1.ExpectedChecksum().value_or(0), 12345);
3225
+ EXPECT_EQ(c1, "");
3226
+ EXPECT_TRUE(c1.empty());
3227
+
3228
+ // CRC persists through copies, assignments, and moves:
3229
+ absl::Cord c1_copy_construct = c1;
3230
+ EXPECT_EQ(c1_copy_construct.ExpectedChecksum().value_or(0), 12345);
3231
+
3232
+ absl::Cord c1_copy_assign;
3233
+ c1_copy_assign = c1;
3234
+ EXPECT_EQ(c1_copy_assign.ExpectedChecksum().value_or(0), 12345);
3235
+
3236
+ absl::Cord c1_move(std::move(c1_copy_assign));
3237
+ EXPECT_EQ(c1_move.ExpectedChecksum().value_or(0), 12345);
3238
+
3239
+ EXPECT_EQ(c1.ExpectedChecksum().value_or(0), 12345);
3240
+
3241
+ // A CRC Cord compares equal to its non-CRC value.
3242
+ EXPECT_EQ(c1, absl::Cord());
3243
+
3244
+ for (const CordMutator& mutator : cord_mutators) {
3245
+ SCOPED_TRACE(mutator.Name());
3246
+
3247
+ // Exercise mutating an empty checksummed cord to catch crashes and exercise
3248
+ // memory sanitizers.
3249
+ absl::Cord c2;
3250
+ c2.SetExpectedChecksum(24680);
3251
+ mutator.Mutate(c2);
3252
+
3253
+ if (c2.empty()) {
3254
+ // Not a mutation
3255
+ continue;
3256
+ }
3257
+ EXPECT_EQ(c2.ExpectedChecksum(), absl::nullopt);
3258
+
3259
+ if (mutator.CanUndo()) {
3260
+ mutator.Undo(c2);
3261
+ }
3262
+ }
3263
+
3264
+ absl::Cord c3;
3265
+ c3.SetExpectedChecksum(999);
3266
+ const absl::Cord& cc3 = c3;
3267
+
3268
+ // Test that all cord reading operations function in the face of an
3269
+ // expected checksum.
3270
+ EXPECT_TRUE(cc3.StartsWith(""));
3271
+ EXPECT_TRUE(cc3.EndsWith(""));
3272
+ EXPECT_TRUE(cc3.empty());
3273
+ EXPECT_EQ(cc3, "");
3274
+ EXPECT_EQ(cc3, absl::Cord());
3275
+ EXPECT_EQ(cc3.size(), 0);
3276
+ EXPECT_EQ(cc3.Compare(absl::Cord()), 0);
3277
+ EXPECT_EQ(cc3.Compare(c1), 0);
3278
+ EXPECT_EQ(cc3.Compare(cc3), 0);
3279
+ EXPECT_EQ(cc3.Compare(""), 0);
3280
+ EXPECT_EQ(cc3.Compare("wxyz"), -1);
3281
+ EXPECT_EQ(cc3.Compare(absl::Cord("wxyz")), -1);
3282
+ EXPECT_EQ(absl::Cord("wxyz").Compare(cc3), 1);
3283
+ EXPECT_EQ(std::string(cc3), "");
3284
+
3285
+ std::string dest;
3286
+ absl::CopyCordToString(cc3, &dest);
3287
+ EXPECT_EQ(dest, "");
3288
+
3289
+ for (absl::string_view chunk : cc3.Chunks()) { // NOLINT(unreachable loop)
3290
+ static_cast<void>(chunk);
3291
+ GTEST_FAIL() << "no chunks expected";
3292
+ }
3293
+ EXPECT_TRUE(cc3.chunk_begin() == cc3.chunk_end());
3294
+
3295
+ for (char ch : cc3.Chars()) { // NOLINT(unreachable loop)
3296
+ static_cast<void>(ch);
3297
+ GTEST_FAIL() << "no chars expected";
3298
+ }
3299
+ EXPECT_TRUE(cc3.char_begin() == cc3.char_end());
3300
+
3301
+ EXPECT_EQ(cc3.TryFlat(), "");
3302
+ EXPECT_EQ(absl::HashOf(c3), absl::HashOf(absl::Cord()));
3303
+ EXPECT_EQ(absl::HashOf(c3), absl::HashOf(absl::string_view()));
3304
+ }
3305
+
3306
+ // This must not be static to avoid aggressive optimizations.
3307
+ ABSL_ATTRIBUTE_WEAK
3308
+ size_t FalseReport(const absl::Cord& a, bool f);
3309
+
3310
+ ABSL_ATTRIBUTE_NOINLINE
3311
+ size_t FalseReport(const absl::Cord& a, bool f) {
3312
+ absl::Cord b;
3313
+ const absl::Cord& ref = f ? b : a;
3314
+ // Test that sanitizers report nothing here. Without
3315
+ // InlineData::Rep::annotated_this() compiler can unconditionally load
3316
+ // poisoned parts, assuming that local variable is fully accessible.
3317
+ return ref.size();
3318
+ }
3319
+
3320
+ TEST(CordSanitizerTest, SanitizesCordFalseReport) {
3321
+ absl::Cord c;
3322
+ for (int i = 0; i < 1000; ++i) c.Append("a");
3323
+ FalseReport(c, false);
3324
+ }
3325
+
3326
+ TEST(CrcCordTest, ChecksummedEmptyCordEstimateMemoryUsage) {
3327
+ absl::Cord cord;
3328
+ cord.SetExpectedChecksum(0);
3329
+ EXPECT_NE(cord.EstimatedMemoryUsage(), 0);
3330
+ }
3331
+
3332
+ TEST(CordThreeWayComparisonTest, CompareCords) {
3333
+ #ifndef __cpp_impl_three_way_comparison
3334
+ GTEST_SKIP() << "C++20 three-way <=> comparison not supported";
3335
+ #else
3336
+ EXPECT_EQ(absl::Cord("a") <=> absl::Cord("a"), std::strong_ordering::equal);
3337
+ EXPECT_EQ(absl::Cord("aaaa") <=> absl::Cord("aaab"),
3338
+ std::strong_ordering::less);
3339
+ EXPECT_EQ(absl::Cord("baaa") <=> absl::Cord("a"),
3340
+ std::strong_ordering::greater);
3341
+ #endif
3342
+ }
3343
+
3344
+ TEST(CordThreeWayComparisonTest, CompareCordsAndStringViews) {
3345
+ #ifndef __cpp_impl_three_way_comparison
3346
+ GTEST_SKIP() << "C++20 three-way <=> comparison not supported";
3347
+ #else
3348
+ EXPECT_EQ(absl::string_view("a") <=> absl::Cord("a"),
3349
+ std::strong_ordering::equal);
3350
+ EXPECT_EQ(absl::Cord("a") <=> absl::string_view("b"),
3351
+ std::strong_ordering::less);
3352
+ EXPECT_EQ(absl::string_view("b") <=> absl::Cord("a"),
3353
+ std::strong_ordering::greater);
3354
+ #endif
3355
+ }
3356
+
3357
+ #if defined(GTEST_HAS_DEATH_TEST) && defined(ABSL_INTERNAL_CORD_HAVE_SANITIZER)
3358
+
3359
+ // Returns an expected poison / uninitialized death message expression.
3360
+ const char* MASanDeathExpr() {
3361
+ return "(use-after-poison|use-of-uninitialized-value)";
3362
+ }
3363
+
3364
+ TEST(CordSanitizerTest, SanitizesEmptyCord) {
3365
+ absl::Cord cord;
3366
+ const char* data = cord.Flatten().data();
3367
+ EXPECT_DEATH(EXPECT_EQ(data[0], 0), MASanDeathExpr());
3368
+ }
3369
+
3370
+ TEST(CordSanitizerTest, SanitizesSmallCord) {
3371
+ absl::Cord cord("Hello");
3372
+ const char* data = cord.Flatten().data();
3373
+ EXPECT_DEATH(EXPECT_EQ(data[5], 0), MASanDeathExpr());
3374
+ }
3375
+
3376
+ TEST(CordSanitizerTest, SanitizesCordOnSetSSOValue) {
3377
+ absl::Cord cord("String that is too big to be an SSO value");
3378
+ cord = "Hello";
3379
+ const char* data = cord.Flatten().data();
3380
+ EXPECT_DEATH(EXPECT_EQ(data[5], 0), MASanDeathExpr());
3381
+ }
3382
+
3383
+ TEST(CordSanitizerTest, SanitizesCordOnCopyCtor) {
3384
+ absl::Cord src("hello");
3385
+ absl::Cord dst(src);
3386
+ const char* data = dst.Flatten().data();
3387
+ EXPECT_DEATH(EXPECT_EQ(data[5], 0), MASanDeathExpr());
3388
+ }
3389
+
3390
+ TEST(CordSanitizerTest, SanitizesCordOnMoveCtor) {
3391
+ absl::Cord src("hello");
3392
+ absl::Cord dst(std::move(src));
3393
+ const char* data = dst.Flatten().data();
3394
+ EXPECT_DEATH(EXPECT_EQ(data[5], 0), MASanDeathExpr());
3395
+ }
3396
+
3397
+ TEST(CordSanitizerTest, SanitizesCordOnAssign) {
3398
+ absl::Cord src("hello");
3399
+ absl::Cord dst;
3400
+ dst = src;
3401
+ const char* data = dst.Flatten().data();
3402
+ EXPECT_DEATH(EXPECT_EQ(data[5], 0), MASanDeathExpr());
3403
+ }
3404
+
3405
+ TEST(CordSanitizerTest, SanitizesCordOnMoveAssign) {
3406
+ absl::Cord src("hello");
3407
+ absl::Cord dst;
3408
+ dst = std::move(src);
3409
+ const char* data = dst.Flatten().data();
3410
+ EXPECT_DEATH(EXPECT_EQ(data[5], 0), MASanDeathExpr());
3411
+ }
3412
+
3413
+ TEST(CordSanitizerTest, SanitizesCordOnSsoAssign) {
3414
+ absl::Cord src("hello");
3415
+ absl::Cord dst("String that is too big to be an SSO value");
3416
+ dst = src;
3417
+ const char* data = dst.Flatten().data();
3418
+ EXPECT_DEATH(EXPECT_EQ(data[5], 0), MASanDeathExpr());
3419
+ }
3420
+
3421
+ #endif // GTEST_HAS_DEATH_TEST && ABSL_INTERNAL_CORD_HAVE_SANITIZER