re2 1.23.0 → 1.23.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/README.md +2 -0
  2. package/binding.gyp +3 -2
  3. package/package.json +5 -5
  4. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +25 -4
  5. package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +6 -1
  6. package/vendor/abseil-cpp/CMakeLists.txt +2 -2
  7. package/vendor/abseil-cpp/MODULE.bazel +2 -2
  8. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +0 -1
  9. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +0 -2
  10. package/vendor/abseil-cpp/absl/algorithm/container.h +191 -140
  11. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +818 -0
  12. package/vendor/abseil-cpp/absl/base/BUILD.bazel +44 -5
  13. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +42 -3
  14. package/vendor/abseil-cpp/absl/base/attributes.h +5 -1
  15. package/vendor/abseil-cpp/absl/base/call_once_test.cc +10 -10
  16. package/vendor/abseil-cpp/absl/base/casts.cc +61 -0
  17. package/vendor/abseil-cpp/absl/base/casts.h +128 -2
  18. package/vendor/abseil-cpp/absl/base/casts_test.cc +151 -0
  19. package/vendor/abseil-cpp/absl/base/config.h +13 -37
  20. package/vendor/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
  21. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +4 -0
  22. package/vendor/abseil-cpp/absl/base/internal/nullability_traits.h +71 -0
  23. package/vendor/abseil-cpp/absl/base/internal/nullability_traits_test.cc +98 -0
  24. package/vendor/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
  25. package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +13 -7
  26. package/vendor/abseil-cpp/absl/base/internal/spinlock.h +16 -11
  27. package/vendor/abseil-cpp/absl/base/internal/strerror_test.cc +2 -1
  28. package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +0 -9
  29. package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +0 -6
  30. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -1
  31. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
  32. package/vendor/abseil-cpp/absl/base/macros.h +40 -17
  33. package/vendor/abseil-cpp/absl/base/nullability.h +1 -1
  34. package/vendor/abseil-cpp/absl/base/optimization.h +1 -3
  35. package/vendor/abseil-cpp/absl/base/options.h +1 -27
  36. package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +5 -8
  37. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +4 -0
  38. package/vendor/abseil-cpp/absl/container/BUILD.bazel +195 -2
  39. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +136 -2
  40. package/vendor/abseil-cpp/absl/container/btree_map.h +56 -6
  41. package/vendor/abseil-cpp/absl/container/btree_set.h +52 -6
  42. package/vendor/abseil-cpp/absl/container/btree_test.cc +107 -1
  43. package/vendor/abseil-cpp/absl/container/chunked_queue.h +755 -0
  44. package/vendor/abseil-cpp/absl/container/chunked_queue_benchmark.cc +386 -0
  45. package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +768 -0
  46. package/vendor/abseil-cpp/absl/container/fixed_array.h +4 -6
  47. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +16 -6
  48. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +1 -2
  49. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +16 -6
  50. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +0 -2
  51. package/vendor/abseil-cpp/absl/container/inlined_vector.h +12 -4
  52. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +21 -0
  53. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +14 -5
  54. package/vendor/abseil-cpp/absl/container/internal/chunked_queue.h +173 -0
  55. package/vendor/abseil-cpp/absl/container/internal/common.h +51 -0
  56. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +7 -1
  57. package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +11 -0
  58. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +0 -2
  59. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +1 -2
  60. package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +0 -14
  61. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +11 -8
  62. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +3 -4
  63. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +23 -6
  64. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +31 -15
  65. package/vendor/abseil-cpp/absl/container/internal/heterogeneous_lookup_testing.h +80 -0
  66. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +4 -12
  67. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +35 -10
  68. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +149 -23
  69. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +120 -126
  70. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +4 -0
  71. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +8 -0
  72. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +14 -59
  73. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +111 -22
  74. package/vendor/abseil-cpp/absl/container/internal/unordered_map_constructor_test.h +53 -112
  75. package/vendor/abseil-cpp/absl/container/internal/unordered_map_lookup_test.h +10 -15
  76. package/vendor/abseil-cpp/absl/container/internal/unordered_map_members_test.h +3 -3
  77. package/vendor/abseil-cpp/absl/container/internal/unordered_map_modifiers_test.h +45 -61
  78. package/vendor/abseil-cpp/absl/container/internal/unordered_set_constructor_test.h +53 -112
  79. package/vendor/abseil-cpp/absl/container/internal/unordered_set_lookup_test.h +6 -9
  80. package/vendor/abseil-cpp/absl/container/internal/unordered_set_members_test.h +3 -3
  81. package/vendor/abseil-cpp/absl/container/internal/unordered_set_modifiers_test.h +25 -31
  82. package/vendor/abseil-cpp/absl/container/linked_hash_map.h +666 -0
  83. package/vendor/abseil-cpp/absl/container/linked_hash_map_benchmark.cc +140 -0
  84. package/vendor/abseil-cpp/absl/container/linked_hash_map_test.cc +987 -0
  85. package/vendor/abseil-cpp/absl/container/linked_hash_set.h +527 -0
  86. package/vendor/abseil-cpp/absl/container/linked_hash_set_benchmark.cc +84 -0
  87. package/vendor/abseil-cpp/absl/container/linked_hash_set_test.cc +947 -0
  88. package/vendor/abseil-cpp/absl/container/node_hash_map.h +17 -6
  89. package/vendor/abseil-cpp/absl/container/node_hash_set.h +16 -5
  90. package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +1 -2
  91. package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +79 -0
  92. package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +79 -0
  93. package/vendor/abseil-cpp/absl/copts/copts.py +17 -4
  94. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +67 -13
  95. package/vendor/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
  96. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +31 -0
  97. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +34 -0
  98. package/vendor/abseil-cpp/absl/debugging/failure_signal_handler.cc +2 -2
  99. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +118 -0
  100. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +71 -0
  101. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +97 -0
  102. package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
  103. package/vendor/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
  104. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +4 -0
  105. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -0
  106. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +1 -1
  107. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +0 -7
  108. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
  109. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +2 -1
  110. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  111. package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +2 -2
  112. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +35 -67
  113. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +3 -0
  114. package/vendor/abseil-cpp/absl/debugging/stacktrace_benchmark.cc +24 -1
  115. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +39 -15
  116. package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
  117. package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +25 -40
  118. package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
  119. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +1 -0
  120. package/vendor/abseil-cpp/absl/flags/declare.h +9 -0
  121. package/vendor/abseil-cpp/absl/flags/flag.h +2 -1
  122. package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
  123. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +3 -2
  124. package/vendor/abseil-cpp/absl/flags/marshalling.cc +1 -16
  125. package/vendor/abseil-cpp/absl/flags/parse.cc +4 -2
  126. package/vendor/abseil-cpp/absl/flags/parse_test.cc +1 -1
  127. package/vendor/abseil-cpp/absl/flags/reflection.cc +4 -3
  128. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +4 -0
  129. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +4 -0
  130. package/vendor/abseil-cpp/absl/functional/any_invocable.h +3 -1
  131. package/vendor/abseil-cpp/absl/functional/function_ref.h +125 -20
  132. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +122 -9
  133. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +13 -2
  134. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +42 -4
  135. package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +11 -0
  136. package/vendor/abseil-cpp/absl/hash/hash_test.cc +5 -2
  137. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +184 -53
  138. package/vendor/abseil-cpp/absl/hash/internal/hash.h +116 -10
  139. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +43 -4
  140. package/vendor/abseil-cpp/absl/log/BUILD.bazel +2 -0
  141. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +35 -1
  142. package/vendor/abseil-cpp/absl/log/check_test_impl.inc +59 -4
  143. package/vendor/abseil-cpp/absl/log/die_if_null.cc +3 -1
  144. package/vendor/abseil-cpp/absl/log/die_if_null.h +24 -3
  145. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +31 -1
  146. package/vendor/abseil-cpp/absl/log/internal/check_impl.h +2 -1
  147. package/vendor/abseil-cpp/absl/log/internal/check_op.cc +3 -1
  148. package/vendor/abseil-cpp/absl/log/internal/check_op.h +44 -18
  149. package/vendor/abseil-cpp/absl/log/internal/conditions.h +38 -35
  150. package/vendor/abseil-cpp/absl/log/internal/container.h +312 -0
  151. package/vendor/abseil-cpp/absl/log/internal/container_test.cc +254 -0
  152. package/vendor/abseil-cpp/absl/log/internal/log_impl.h +108 -110
  153. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -2
  154. package/vendor/abseil-cpp/absl/log/internal/log_message.h +5 -1
  155. package/vendor/abseil-cpp/absl/log/internal/strip.h +30 -31
  156. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +19 -19
  157. package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
  158. package/vendor/abseil-cpp/absl/log/log.h +2 -2
  159. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +51 -0
  160. package/vendor/abseil-cpp/absl/meta/CMakeLists.txt +46 -0
  161. package/vendor/abseil-cpp/absl/meta/internal/constexpr_testing.h +73 -0
  162. package/vendor/abseil-cpp/absl/meta/internal/constexpr_testing_test.cc +40 -0
  163. package/vendor/abseil-cpp/absl/meta/internal/requires.h +67 -0
  164. package/vendor/abseil-cpp/absl/meta/internal/requires_test.cc +66 -0
  165. package/vendor/abseil-cpp/absl/meta/type_traits.h +42 -1
  166. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +14 -0
  167. package/vendor/abseil-cpp/absl/numeric/int128.h +41 -21
  168. package/vendor/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
  169. package/vendor/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
  170. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +52 -5
  171. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +1 -0
  172. package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +1 -0
  173. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +18 -7
  174. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +1 -0
  175. package/vendor/abseil-cpp/absl/random/internal/fastmath_test.cc +3 -5
  176. package/vendor/abseil-cpp/absl/random/internal/platform.h +0 -13
  177. package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +0 -1
  178. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +1 -27
  179. package/vendor/abseil-cpp/absl/status/BUILD.bazel +17 -0
  180. package/vendor/abseil-cpp/absl/status/CMakeLists.txt +16 -0
  181. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +4 -2
  182. package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +2 -2
  183. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +2 -1
  184. package/vendor/abseil-cpp/absl/status/status.cc +4 -0
  185. package/vendor/abseil-cpp/absl/status/status.h +5 -0
  186. package/vendor/abseil-cpp/absl/status/status_matchers.h +48 -0
  187. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +27 -0
  188. package/vendor/abseil-cpp/absl/status/status_test.cc +1 -0
  189. package/vendor/abseil-cpp/absl/status/statusor.h +1 -1
  190. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +101 -21
  191. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +99 -5
  192. package/vendor/abseil-cpp/absl/strings/ascii.h +9 -4
  193. package/vendor/abseil-cpp/absl/strings/cord.cc +15 -10
  194. package/vendor/abseil-cpp/absl/strings/cord.h +1 -1
  195. package/vendor/abseil-cpp/absl/strings/escaping.cc +126 -94
  196. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  197. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite_test.cc +95 -0
  198. package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +2 -0
  199. package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree_test.cc +8 -8
  200. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +24 -18
  201. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +10 -16
  202. package/vendor/abseil-cpp/absl/strings/internal/escaping.h +9 -7
  203. package/vendor/abseil-cpp/absl/strings/internal/generic_printer.cc +107 -0
  204. package/vendor/abseil-cpp/absl/strings/internal/generic_printer.h +115 -0
  205. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +423 -0
  206. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +685 -0
  207. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +0 -12
  208. package/vendor/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
  209. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +21 -7
  210. package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +495 -8
  211. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -15
  212. package/vendor/abseil-cpp/absl/strings/numbers.cc +71 -8
  213. package/vendor/abseil-cpp/absl/strings/numbers.h +25 -12
  214. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +70 -0
  215. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +194 -0
  216. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite_test.cc +154 -0
  217. package/vendor/abseil-cpp/absl/strings/str_cat.cc +96 -91
  218. package/vendor/abseil-cpp/absl/strings/str_cat.h +17 -12
  219. package/vendor/abseil-cpp/absl/strings/str_format_test.cc +4 -4
  220. package/vendor/abseil-cpp/absl/strings/str_split.h +1 -1
  221. package/vendor/abseil-cpp/absl/strings/str_split_test.cc +1 -1
  222. package/vendor/abseil-cpp/absl/strings/string_view.h +8 -718
  223. package/vendor/abseil-cpp/absl/strings/string_view_test.cc +1 -1265
  224. package/vendor/abseil-cpp/absl/strings/substitute.cc +24 -24
  225. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +2 -3
  226. package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +1 -0
  227. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
  228. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout_test.cc +15 -5
  229. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +2 -1
  230. package/vendor/abseil-cpp/absl/synchronization/mutex.h +47 -23
  231. package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
  232. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +2 -0
  233. package/vendor/abseil-cpp/absl/time/civil_time_benchmark.cc +1 -2
  234. package/vendor/abseil-cpp/absl/time/civil_time_test.cc +58 -103
  235. package/vendor/abseil-cpp/absl/time/clock.cc +18 -16
  236. package/vendor/abseil-cpp/absl/time/clock_test.cc +2 -2
  237. package/vendor/abseil-cpp/absl/time/duration_benchmark.cc +144 -0
  238. package/vendor/abseil-cpp/absl/time/duration_test.cc +26 -29
  239. package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +7 -1
  240. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +4 -2
  241. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
  242. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +186 -0
  243. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  244. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  245. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ensenada +0 -0
  246. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santa_Isabel +0 -0
  247. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tijuana +0 -0
  248. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaNorte +0 -0
  249. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/iso3166.tab +9 -9
  250. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +12 -12
  251. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +47 -47
  252. package/vendor/abseil-cpp/absl/time/time.cc +4 -4
  253. package/vendor/abseil-cpp/absl/time/time.h +10 -10
  254. package/vendor/abseil-cpp/absl/time/time_test.cc +1 -0
  255. package/vendor/abseil-cpp/absl/types/compare.h +62 -61
  256. package/vendor/abseil-cpp/absl/types/compare_test.cc +3 -3
  257. package/vendor/abseil-cpp/absl/types/internal/span.h +1 -0
  258. package/vendor/abseil-cpp/absl/types/optional.h +2 -2
  259. package/vendor/abseil-cpp/absl/types/span.h +10 -2
  260. package/vendor/abseil-cpp/absl/utility/utility.h +13 -0
  261. package/vendor/abseil-cpp/ci/absl_alternate_options.h +0 -1
  262. package/vendor/abseil-cpp/ci/cmake_common.sh +1 -1
  263. package/vendor/abseil-cpp/ci/cmake_install_test.sh +6 -0
  264. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +1 -0
  265. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +2 -0
  266. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +1 -0
  267. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +1 -0
  268. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +1 -0
  269. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +1 -0
  270. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +1 -0
  271. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +6 -0
  272. package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +6 -0
  273. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +3 -2
  274. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +5 -0
  275. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -0
  276. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -0
  277. package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +6 -1
  278. package/vendor/abseil-cpp/absl/base/internal/identity.h +0 -39
  279. package/vendor/abseil-cpp/absl/strings/string_view.cc +0 -257
  280. package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +0 -380
@@ -0,0 +1,768 @@
1
+ // Copyright 2025 The Abseil Authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include "absl/container/chunked_queue.h"
16
+
17
+ #include <algorithm>
18
+ #include <cstddef>
19
+ #include <cstdint>
20
+ #include <deque>
21
+ #include <forward_list>
22
+ #include <iterator>
23
+ #include <list>
24
+ #include <memory>
25
+ #include <string>
26
+ #include <type_traits>
27
+ #include <utility>
28
+ #include <vector>
29
+
30
+ #include "gmock/gmock.h"
31
+ #include "gtest/gtest.h"
32
+ #include "absl/base/macros.h"
33
+ #include "absl/container/internal/test_allocator.h"
34
+ #include "absl/strings/str_cat.h"
35
+
36
+ using ::testing::ElementsAre;
37
+ using ::testing::Pair;
38
+ using ::testing::Pointee;
39
+ using ::testing::SizeIs;
40
+
41
+ // Hide in a namespace to make sure swap is found via ADL.
42
+ namespace adl_namespace {
43
+ namespace {
44
+ TEST(ChunkedQueueADLTest, Swap) {
45
+ absl::chunked_queue<int64_t> q1;
46
+ absl::chunked_queue<int64_t> q2;
47
+ q1.push_back(4);
48
+ q2.push_back(5);
49
+ q2.push_back(6);
50
+ swap(q1, q2);
51
+ EXPECT_THAT(q1, ElementsAre(5, 6));
52
+ EXPECT_THAT(q2, ElementsAre(4));
53
+ }
54
+ } // namespace
55
+ } // namespace adl_namespace
56
+
57
+ namespace {
58
+
59
+ template <class T>
60
+ using ChunkedQueueBlock =
61
+ absl::container_internal::ChunkedQueueBlock<T, std::allocator<T>>;
62
+
63
+ TEST(Internal, elements_in_bytes) {
64
+ EXPECT_EQ(size_t{1}, ChunkedQueueBlock<int>::block_size_from_bytes(0));
65
+ EXPECT_EQ(size_t{1}, ChunkedQueueBlock<int>::block_size_from_bytes(
66
+ sizeof(ChunkedQueueBlock<int>)));
67
+ EXPECT_EQ(size_t{1},
68
+ ChunkedQueueBlock<int>::block_size_from_bytes(sizeof(int)));
69
+ EXPECT_EQ(size_t{2}, ChunkedQueueBlock<int>::block_size_from_bytes(
70
+ sizeof(ChunkedQueueBlock<int>) + 2 * sizeof(int)));
71
+ }
72
+
73
+ TEST(Internal, BlockSizedDelete) {
74
+ struct Item {
75
+ int i;
76
+ char c;
77
+ };
78
+ std::allocator<Item> allocator;
79
+ auto* block = ChunkedQueueBlock<Item>::New(3, &allocator);
80
+ ChunkedQueueBlock<Item>::Delete(block, &allocator);
81
+ }
82
+
83
+ template <size_t elem_size>
84
+ void BlockSizeRounding() {
85
+ struct Elem {
86
+ char data[elem_size];
87
+ };
88
+ typedef ChunkedQueueBlock<Elem> Block;
89
+ for (size_t n = 1; n < 100; ++n) {
90
+ SCOPED_TRACE(n);
91
+ std::allocator<Elem> allocator;
92
+ Block* b = Block::New(n, &allocator);
93
+ EXPECT_GE(b->size(), n);
94
+ Block::Delete(b, &allocator);
95
+ }
96
+ }
97
+
98
+ TEST(Internal, BlockSizeRounding1) { BlockSizeRounding<1>(); }
99
+ TEST(Internal, BlockSizeRounding17) { BlockSizeRounding<17>(); }
100
+ TEST(Internal, BlockSizeRounding101) { BlockSizeRounding<101>(); }
101
+ TEST(Internal, BlockSizeRounding528) { BlockSizeRounding<528>(); }
102
+
103
+ TEST(ChunkedQueue, MinMaxBlockSize) {
104
+ absl::chunked_queue<int64_t, 1, 2> q = {1, 2, 3};
105
+ EXPECT_THAT(q, ElementsAre(1, 2, 3));
106
+ }
107
+
108
+ TEST(ChunkedQueue, Empty) {
109
+ absl::chunked_queue<int64_t> q;
110
+ EXPECT_TRUE(q.empty());
111
+ q.push_back(10);
112
+ EXPECT_FALSE(q.empty());
113
+ EXPECT_EQ(q.front(), 10);
114
+ EXPECT_EQ(q.back(), 10);
115
+ q.pop_front();
116
+ EXPECT_TRUE(q.empty());
117
+ q.clear();
118
+ EXPECT_TRUE(q.empty());
119
+ }
120
+
121
+ TEST(ChunkedQueue, CopyConstruct) {
122
+ absl::chunked_queue<int64_t> q;
123
+ q.push_back(1);
124
+ absl::chunked_queue<int64_t> r(q);
125
+ EXPECT_THAT(r, ElementsAre(1));
126
+ EXPECT_EQ(1, r.size());
127
+ }
128
+
129
+ TEST(ChunkedQueue, CopyConstructMultipleChunks) {
130
+ absl::chunked_queue<int64_t, 2> q;
131
+ q.push_back(1);
132
+ q.push_back(2);
133
+ q.push_back(3);
134
+ absl::chunked_queue<int64_t, 2> r(q);
135
+ EXPECT_THAT(r, ElementsAre(1, 2, 3));
136
+ EXPECT_EQ(3, r.size());
137
+ }
138
+
139
+ TEST(ChunkedQueue, BeginEndConstruct) {
140
+ std::vector<int64_t> src = {1, 2, 3, 4, 5};
141
+ absl::chunked_queue<int64_t, 2> q(src.begin(), src.end());
142
+ EXPECT_THAT(q, ElementsAre(1, 2, 3, 4, 5));
143
+ EXPECT_EQ(5, q.size());
144
+ }
145
+
146
+ TEST(ChunkedQueue, InitializerListConstruct) {
147
+ absl::chunked_queue<int64_t, 2> q = {1, 2, 3, 4, 5};
148
+ EXPECT_THAT(q, ElementsAre(1, 2, 3, 4, 5));
149
+ EXPECT_EQ(5, q.size());
150
+ }
151
+
152
+ TEST(ChunkedQueue, CountConstruct) {
153
+ absl::chunked_queue<int64_t> q(3);
154
+ EXPECT_THAT(q, ElementsAre(0, 0, 0));
155
+ EXPECT_EQ(3, q.size());
156
+ }
157
+
158
+ TEST(ChunkedQueue, CountValueConstruct) {
159
+ absl::chunked_queue<int64_t> q(3, 10);
160
+ EXPECT_THAT(q, ElementsAre(10, 10, 10));
161
+ EXPECT_EQ(3, q.size());
162
+ }
163
+
164
+ TEST(ChunkedQueue, InitializerListAssign) {
165
+ absl::chunked_queue<int64_t, 2> q;
166
+ q = {1, 2, 3, 4, 5};
167
+ EXPECT_THAT(q, ElementsAre(1, 2, 3, 4, 5));
168
+ EXPECT_EQ(5, q.size());
169
+ }
170
+
171
+ TEST(ChunkedQueue, CopyAssign) {
172
+ absl::chunked_queue<int64_t> q;
173
+ q.push_back(1);
174
+ absl::chunked_queue<int64_t> r = q;
175
+ EXPECT_THAT(r, ElementsAre(1));
176
+ }
177
+
178
+ TEST(ChunkedQueue, CopyAssignSelf) {
179
+ absl::chunked_queue<int64_t> q;
180
+ q.push_back(1);
181
+ q = *&q; // Avoid -Wself-assign.
182
+ EXPECT_THAT(q, ElementsAre(1));
183
+ EXPECT_EQ(1, q.size());
184
+ }
185
+
186
+ TEST(ChunkedQueue, CopyAssignDestinationBigger) {
187
+ absl::chunked_queue<int64_t> q;
188
+ q.push_back(1);
189
+ absl::chunked_queue<int64_t> r;
190
+ r.push_back(9);
191
+ r.push_back(9);
192
+ r.push_back(9);
193
+ r = q;
194
+ EXPECT_THAT(r, ElementsAre(1));
195
+ EXPECT_EQ(1, r.size());
196
+ }
197
+
198
+ TEST(ChunkedQueue, CopyAssignSourceBiggerMultipleChunks) {
199
+ absl::chunked_queue<int64_t, 2> q;
200
+ q.push_back(1);
201
+ q.push_back(2);
202
+ q.push_back(3);
203
+ absl::chunked_queue<int64_t, 2> r;
204
+ r.push_back(9);
205
+ r = q;
206
+ EXPECT_THAT(r, ElementsAre(1, 2, 3));
207
+ EXPECT_EQ(3, r.size());
208
+ }
209
+
210
+ TEST(ChunkedQueue, CopyAssignDestinationBiggerMultipleChunks) {
211
+ absl::chunked_queue<int64_t, 2> q;
212
+ q.push_back(1);
213
+ absl::chunked_queue<int64_t, 2> r;
214
+ r.push_back(9);
215
+ r.push_back(9);
216
+ r.push_back(9);
217
+ r = q;
218
+ EXPECT_THAT(r, ElementsAre(1));
219
+ EXPECT_EQ(1, r.size());
220
+ }
221
+
222
+ TEST(ChunkedQueue, AssignCountValue) {
223
+ absl::chunked_queue<int64_t> q;
224
+ q.assign(3, 10);
225
+ EXPECT_THAT(q, ElementsAre(10, 10, 10));
226
+ EXPECT_EQ(3, q.size());
227
+
228
+ q.assign(2, 20);
229
+ EXPECT_THAT(q, ElementsAre(20, 20));
230
+ EXPECT_EQ(2, q.size());
231
+ }
232
+
233
+ TEST(ChunkedQueue, MoveConstruct) {
234
+ absl::chunked_queue<int64_t> q;
235
+ q.push_back(1);
236
+ absl::chunked_queue<int64_t> r(std::move(q));
237
+ EXPECT_THAT(r, ElementsAre(1));
238
+ EXPECT_EQ(1, r.size());
239
+ }
240
+
241
+ TEST(ChunkedQueue, MoveAssign) {
242
+ absl::chunked_queue<int64_t> q;
243
+ q.push_back(1);
244
+ absl::chunked_queue<int64_t> r;
245
+ r = std::move(q);
246
+ EXPECT_THAT(r, ElementsAre(1));
247
+ EXPECT_EQ(1, r.size());
248
+ }
249
+
250
+ TEST(ChunkedQueue, MoveAssignImmovable) {
251
+ struct Immovable {
252
+ Immovable() = default;
253
+
254
+ Immovable(const Immovable&) = delete;
255
+ Immovable& operator=(const Immovable&) = delete;
256
+ Immovable(Immovable&&) = delete;
257
+ Immovable& operator=(Immovable&&) = delete;
258
+ };
259
+ absl::chunked_queue<Immovable> q;
260
+ q.emplace_back();
261
+ absl::chunked_queue<Immovable> r;
262
+ r = std::move(q);
263
+ EXPECT_THAT(r, SizeIs(1));
264
+ }
265
+
266
+ TEST(ChunkedQueue, MoveAssignSelf) {
267
+ absl::chunked_queue<int64_t> q;
268
+ absl::chunked_queue<int64_t>& q2 = q;
269
+ q.push_back(1);
270
+ q = std::move(q2);
271
+ EXPECT_THAT(q, ElementsAre(1));
272
+ EXPECT_EQ(1, q.size());
273
+ }
274
+
275
+ TEST(ChunkedQueue, MoveAssignDestinationBigger) {
276
+ absl::chunked_queue<int64_t> q;
277
+ q.push_back(1);
278
+ absl::chunked_queue<int64_t> r;
279
+ r.push_back(9);
280
+ r.push_back(9);
281
+ r.push_back(9);
282
+ r = std::move(q);
283
+ EXPECT_THAT(r, ElementsAre(1));
284
+ EXPECT_EQ(1, r.size());
285
+ }
286
+
287
+ TEST(ChunkedQueue, MoveAssignDestinationBiggerMultipleChunks) {
288
+ absl::chunked_queue<int64_t, 2> q;
289
+ q.push_back(1);
290
+ absl::chunked_queue<int64_t, 2> r;
291
+ r.push_back(9);
292
+ r.push_back(9);
293
+ r.push_back(9);
294
+ r = std::move(q);
295
+ EXPECT_THAT(r, ElementsAre(1));
296
+ EXPECT_EQ(1, r.size());
297
+ }
298
+
299
+ TEST(ChunkedQueue, ConstFrontBack) {
300
+ absl::chunked_queue<int64_t> q;
301
+ q.push_back(10);
302
+ EXPECT_EQ(q.front(), 10);
303
+ EXPECT_EQ(q.back(), 10);
304
+ q.front() = 12;
305
+ EXPECT_EQ(q.front(), 12);
306
+ EXPECT_EQ(q.back(), 12);
307
+
308
+ const absl::chunked_queue<int64_t>& qref = q;
309
+ EXPECT_EQ(qref.front(), 12);
310
+ EXPECT_EQ(qref.back(), 12);
311
+
312
+ q.pop_front();
313
+
314
+ // Test at block bloundary and beyond
315
+ for (int i = 0; i < 64; ++i) q.push_back(i + 10);
316
+ EXPECT_EQ(q.front(), 10);
317
+ EXPECT_EQ(q.back(), 73);
318
+
319
+ for (int i = 64; i < 128; ++i) q.push_back(i + 10);
320
+ EXPECT_EQ(q.front(), 10);
321
+ EXPECT_EQ(q.back(), 137);
322
+ q.clear();
323
+ EXPECT_TRUE(q.empty());
324
+ }
325
+
326
+ TEST(ChunkedQueue, PushAndPop) {
327
+ absl::chunked_queue<int64_t> q;
328
+ EXPECT_TRUE(q.empty());
329
+ EXPECT_EQ(0, q.size());
330
+ for (int i = 0; i < 10000; i++) {
331
+ q.push_back(i);
332
+ EXPECT_EQ(q.front(), 0) << ": iteration " << i;
333
+ EXPECT_FALSE(q.empty());
334
+ EXPECT_EQ(i + 1, q.size());
335
+ }
336
+ for (int i = 0; i < 10000; i++) {
337
+ EXPECT_FALSE(q.empty());
338
+ EXPECT_EQ(10000 - i, q.size());
339
+ EXPECT_EQ(q.front(), i);
340
+ q.pop_front();
341
+ }
342
+ EXPECT_TRUE(q.empty());
343
+ EXPECT_EQ(0, q.size());
344
+ }
345
+
346
+ TEST(ChunkedQueue, Swap) {
347
+ absl::chunked_queue<int64_t> q1;
348
+ absl::chunked_queue<int64_t> q2;
349
+ q1.push_back(4);
350
+ q2.push_back(5);
351
+ q2.push_back(6);
352
+ q2.swap(q1);
353
+ EXPECT_EQ(2, q1.size());
354
+ EXPECT_EQ(5, q1.front());
355
+ EXPECT_EQ(1, q2.size());
356
+ EXPECT_EQ(4, q2.front());
357
+ q1.pop_front();
358
+ q1.swap(q2);
359
+ EXPECT_EQ(1, q1.size());
360
+ EXPECT_EQ(4, q1.front());
361
+ EXPECT_EQ(1, q2.size());
362
+ EXPECT_EQ(6, q2.front());
363
+ q1.pop_front();
364
+ q1.swap(q2);
365
+ EXPECT_EQ(1, q1.size());
366
+ EXPECT_EQ(6, q1.front());
367
+ EXPECT_EQ(0, q2.size());
368
+ q1.clear();
369
+ EXPECT_TRUE(q1.empty());
370
+ }
371
+
372
+ TEST(ChunkedQueue, ShrinkToFit) {
373
+ absl::chunked_queue<int64_t> q;
374
+ q.shrink_to_fit(); // Should work on empty
375
+ EXPECT_TRUE(q.empty());
376
+
377
+ q.push_back(1);
378
+ q.shrink_to_fit(); // Should work on non-empty
379
+ EXPECT_THAT(q, ElementsAre(1));
380
+
381
+ q.clear();
382
+ // We know clear leaves a block and shrink_to_fit should remove it.
383
+ // Hard to test internal memory state without mocks or inspection.
384
+ // But at least we verify it doesn't crash or corrupt.
385
+ q.shrink_to_fit();
386
+ EXPECT_TRUE(q.empty());
387
+ }
388
+
389
+ TEST(ChunkedQueue, ResizeExtends) {
390
+ absl::chunked_queue<int64_t> q;
391
+ q.resize(2);
392
+ EXPECT_THAT(q, ElementsAre(0, 0));
393
+ EXPECT_EQ(2, q.size());
394
+ }
395
+
396
+ TEST(ChunkedQueue, ResizeShrinks) {
397
+ absl::chunked_queue<int64_t> q;
398
+ q.push_back(1);
399
+ q.push_back(2);
400
+ q.resize(1);
401
+ EXPECT_THAT(q, ElementsAre(1));
402
+ EXPECT_EQ(1, q.size());
403
+ }
404
+
405
+ TEST(ChunkedQueue, ResizeExtendsMultipleBlocks) {
406
+ absl::chunked_queue<int64_t, 2> q;
407
+ q.resize(3);
408
+ EXPECT_THAT(q, ElementsAre(0, 0, 0));
409
+ EXPECT_EQ(3, q.size());
410
+ }
411
+
412
+ TEST(ChunkedQueue, ResizeShrinksMultipleBlocks) {
413
+ absl::chunked_queue<int64_t, 2> q;
414
+ q.push_back(1);
415
+ q.push_back(2);
416
+ q.push_back(3);
417
+ q.resize(1);
418
+ EXPECT_THAT(q, ElementsAre(1));
419
+ EXPECT_EQ(1, q.size());
420
+ }
421
+
422
+ TEST(ChunkedQueue, ResizeValue) {
423
+ absl::chunked_queue<int64_t> q;
424
+ q.resize(3, 10);
425
+ EXPECT_THAT(q, ElementsAre(10, 10, 10));
426
+ EXPECT_EQ(3, q.size());
427
+
428
+ q.resize(5, 20);
429
+ EXPECT_THAT(q, ElementsAre(10, 10, 10, 20, 20));
430
+ EXPECT_EQ(5, q.size());
431
+
432
+ q.resize(2, 30);
433
+ EXPECT_THAT(q, ElementsAre(10, 10));
434
+ EXPECT_EQ(2, q.size());
435
+ }
436
+
437
+ TEST(ChunkedQueue, MaxSize) {
438
+ absl::chunked_queue<int64_t> q;
439
+ EXPECT_GE(q.max_size(),
440
+ size_t{1} << (sizeof(size_t) * 8 - sizeof(int64_t) - 4));
441
+ }
442
+
443
+ TEST(ChunkedQueue, AssignExtends) {
444
+ absl::chunked_queue<int64_t, 2> q;
445
+ std::vector<int64_t> v = {1, 2, 3, 4, 5};
446
+ q.assign(v.begin(), v.end());
447
+ EXPECT_THAT(q, ElementsAre(1, 2, 3, 4, 5));
448
+ EXPECT_EQ(5, q.size());
449
+ }
450
+
451
+ TEST(ChunkedQueue, AssignShrinks) {
452
+ absl::chunked_queue<int64_t, 2> q = {1, 2, 3, 4, 5};
453
+ std::vector<int64_t> v = {1};
454
+ q.assign(v.begin(), v.end());
455
+ EXPECT_THAT(q, ElementsAre(1));
456
+ EXPECT_EQ(1, q.size());
457
+ }
458
+
459
+ TEST(ChunkedQueue, AssignBoundaryCondition) {
460
+ // Create a queue with fixed block size of 4.
461
+ // 3 blocks: [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]
462
+ absl::chunked_queue<int, 4> q = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
463
+
464
+ // Assign a range that fills exactly the first block (4 elements).
465
+ // This triggers the boundary condition where the assignment loop ends
466
+ // exactly at the limit of the first block.
467
+ std::vector<int> v = {101, 102, 103, 104};
468
+ q.assign(v.begin(), v.end());
469
+
470
+ EXPECT_EQ(q.size(), 4);
471
+ EXPECT_EQ(q.front(), 101);
472
+ // Verify back() is valid. If tail_ was incorrectly pointing to the start
473
+ // of the (now deleted) second block, this might access invalid memory
474
+ // or fail assertions.
475
+ EXPECT_EQ(q.back(), 104);
476
+
477
+ // Verify we can continue to push elements correctly.
478
+ q.push_back(105);
479
+ EXPECT_EQ(q.size(), 5);
480
+ EXPECT_EQ(q.back(), 105);
481
+ }
482
+
483
+ TEST(ChunkedQueue, Iterator) {
484
+ absl::chunked_queue<int64_t> q;
485
+ EXPECT_TRUE(q.begin() == q.end());
486
+
487
+ q.push_back(1);
488
+ absl::chunked_queue<int64_t>::const_iterator iter = q.begin();
489
+ ASSERT_FALSE(iter == q.end());
490
+ ASSERT_EQ(*iter, 1);
491
+ ++iter;
492
+ ASSERT_TRUE(iter == q.end());
493
+
494
+ q.push_back(2);
495
+ iter = q.begin();
496
+ ASSERT_EQ(*iter, 1);
497
+ ++iter;
498
+ absl::chunked_queue<int64_t>::const_iterator copy_iter = iter;
499
+ ASSERT_FALSE(copy_iter == q.end());
500
+ ASSERT_EQ(*copy_iter, 2);
501
+ ++copy_iter;
502
+ ASSERT_TRUE(copy_iter == q.end());
503
+
504
+ copy_iter = iter;
505
+ ASSERT_FALSE(iter == q.end());
506
+ ASSERT_EQ(*iter, 2);
507
+ ++iter;
508
+ ASSERT_TRUE(iter == q.end());
509
+
510
+ ASSERT_FALSE(copy_iter == q.end());
511
+ ASSERT_EQ(*copy_iter, 2);
512
+ ++copy_iter;
513
+ ASSERT_TRUE(copy_iter == q.end());
514
+ }
515
+
516
+ TEST(ChunkedQueue, IteratorDefaultConstructor) {
517
+ using ConstIter = absl::chunked_queue<int64_t>::const_iterator;
518
+ using Iter = absl::chunked_queue<int64_t>::iterator;
519
+ ConstIter const_iter;
520
+ EXPECT_TRUE(const_iter == ConstIter());
521
+ Iter iter;
522
+ EXPECT_TRUE(iter == Iter());
523
+ }
524
+
525
+ TEST(ChunkedQueue, IteratorConversion) {
526
+ using ConstIter = absl::chunked_queue<int64_t>::const_iterator;
527
+ using Iter = absl::chunked_queue<int64_t>::iterator;
528
+ EXPECT_FALSE((std::is_convertible<ConstIter, Iter>::value));
529
+ EXPECT_TRUE((std::is_convertible<Iter, ConstIter>::value));
530
+ absl::chunked_queue<int64_t> q;
531
+ ConstIter it1 = q.begin();
532
+ ConstIter it2 = q.cbegin();
533
+ Iter it3 = q.begin();
534
+ it1 = q.end();
535
+ it2 = q.cend();
536
+ it3 = q.end();
537
+ EXPECT_FALSE((std::is_assignable<Iter, ConstIter>::value));
538
+ }
539
+
540
+ struct TestEntry {
541
+ int x, y;
542
+ };
543
+
544
+ TEST(ChunkedQueue, Iterator2) {
545
+ absl::chunked_queue<TestEntry> q;
546
+ TestEntry e;
547
+ e.x = 1;
548
+ e.y = 2;
549
+ q.push_back(e);
550
+ e.x = 3;
551
+ e.y = 4;
552
+ q.push_back(e);
553
+
554
+ absl::chunked_queue<TestEntry>::const_iterator iter = q.begin();
555
+ EXPECT_EQ(iter->x, 1);
556
+ EXPECT_EQ(iter->y, 2);
557
+ ++iter;
558
+ EXPECT_EQ(iter->x, 3);
559
+ EXPECT_EQ(iter->y, 4);
560
+ ++iter;
561
+ EXPECT_TRUE(iter == q.end());
562
+ }
563
+
564
+ TEST(ChunkedQueue, Iterator_MultipleBlocks) {
565
+ absl::chunked_queue<int64_t> q;
566
+ for (int i = 0; i < 130; ++i) {
567
+ absl::chunked_queue<int64_t>::const_iterator iter = q.begin();
568
+ for (int j = 0; j < i; ++j) {
569
+ ASSERT_FALSE(iter == q.end());
570
+ EXPECT_EQ(*iter, j);
571
+ ++iter;
572
+ }
573
+ ASSERT_TRUE(iter == q.end());
574
+ q.push_back(i);
575
+ }
576
+
577
+ for (int i = 0; i < 130; ++i) {
578
+ absl::chunked_queue<int64_t>::const_iterator iter = q.begin();
579
+ for (int j = i; j < 130; ++j) {
580
+ ASSERT_FALSE(iter == q.end());
581
+ EXPECT_EQ(*iter, j);
582
+ ++iter;
583
+ }
584
+ q.pop_front();
585
+ }
586
+ EXPECT_TRUE(q.empty());
587
+ EXPECT_TRUE(q.begin() == q.end());
588
+ }
589
+
590
+ TEST(ChunkedQueue, Iterator_PopFrontInvalidate) {
591
+ absl::chunked_queue<int64_t> q;
592
+ for (int i = 0; i < 130; ++i) {
593
+ q.push_back(i);
594
+ }
595
+
596
+ auto iter = q.begin();
597
+ for (int i = 0; i < 130; ++i) {
598
+ auto prev = iter++;
599
+ ASSERT_FALSE(prev == q.end());
600
+ EXPECT_EQ(*prev, i);
601
+ q.pop_front();
602
+ }
603
+ ASSERT_TRUE(q.empty());
604
+ }
605
+
606
+ TEST(ChunkedQueue, Iterator_PushBackInvalidate) {
607
+ absl::chunked_queue<int64_t, 2> q;
608
+ q.push_back(0);
609
+ auto i = q.begin();
610
+ EXPECT_EQ(*i, 0);
611
+ q.push_back(1);
612
+ EXPECT_EQ(*++i, 1);
613
+ q.push_back(2);
614
+ EXPECT_EQ(*++i, 2);
615
+ }
616
+
617
+ struct MyType {
618
+ static int constructor_calls;
619
+ static int destructor_calls;
620
+
621
+ explicit MyType(int x) : val(x) { constructor_calls++; }
622
+ MyType(const MyType& t) : val(t.val) { constructor_calls++; }
623
+ ~MyType() { destructor_calls++; }
624
+
625
+ int val;
626
+ };
627
+
628
+ int MyType::constructor_calls = 0;
629
+ int MyType::destructor_calls = 0;
630
+
631
+ TEST(ChunkedQueue, ConstructorDestructorCalls) {
632
+ for (int i = 0; i < 100; i++) {
633
+ std::vector<MyType> vals;
634
+ for (int j = 0; j < i; j++) {
635
+ vals.push_back(MyType(j));
636
+ }
637
+ MyType::constructor_calls = 0;
638
+ MyType::destructor_calls = 0;
639
+ {
640
+ absl::chunked_queue<MyType> q;
641
+ for (int j = 0; j < i; j++) {
642
+ q.push_back(vals[j]);
643
+ }
644
+ if (i % 10 == 0) {
645
+ q.clear();
646
+ } else {
647
+ for (int j = 0; j < i; j++) {
648
+ EXPECT_EQ(q.front().val, j);
649
+ q.pop_front();
650
+ }
651
+ }
652
+ }
653
+ EXPECT_EQ(MyType::constructor_calls, i);
654
+ EXPECT_EQ(MyType::destructor_calls, i);
655
+ }
656
+ }
657
+
658
+ TEST(ChunkedQueue, MoveObjects) {
659
+ absl::chunked_queue<std::unique_ptr<int>> q;
660
+ q.push_back(std::make_unique<int>(10));
661
+ q.push_back(std::make_unique<int>(11));
662
+
663
+ EXPECT_EQ(10, *q.front());
664
+ q.pop_front();
665
+ EXPECT_EQ(11, *q.front());
666
+ q.pop_front();
667
+ }
668
+
669
+ TEST(ChunkedQueue, EmplaceBack1) {
670
+ absl::chunked_queue<std::pair<int, int>> q;
671
+ auto& v = q.emplace_back(1, 2);
672
+ EXPECT_THAT(v, Pair(1, 2));
673
+ EXPECT_THAT(q.front(), Pair(1, 2));
674
+ EXPECT_EQ(&v, &q.back());
675
+ }
676
+
677
+ TEST(ChunkedQueue, EmplaceBack2) {
678
+ absl::chunked_queue<std::pair<std::unique_ptr<int>, std::string>> q;
679
+ auto& v = q.emplace_back(std::make_unique<int>(11), "val12");
680
+ EXPECT_THAT(v, Pair(Pointee(11), "val12"));
681
+ EXPECT_THAT(q.front(), Pair(Pointee(11), "val12"));
682
+ }
683
+
684
+ TEST(ChunkedQueue, OveralignmentEmplaceBack) {
685
+ struct alignas(64) Overaligned {
686
+ int x;
687
+ int y;
688
+ };
689
+ absl::chunked_queue<Overaligned, 1, 8> q;
690
+ for (int i = 0; i < 10; ++i) {
691
+ auto& v = q.emplace_back(Overaligned{i, i});
692
+ EXPECT_EQ(reinterpret_cast<uintptr_t>(&v) % 64, 0);
693
+ }
694
+ }
695
+
696
+ TEST(ChunkedQueue, StatelessAllocatorDoesntAffectObjectSizes) {
697
+ // When a stateless allocator type is used -- such as when no explicit
698
+ // allocator type is given, and the stateless default is used -- it does not
699
+ // increase the object sizes from what they used to be before allocator
700
+ // support was added. (In practice this verifies that allocator support makes
701
+ // use of the empty base-class optimization.)
702
+ //
703
+ // These "Mock*" structs model the data members of absl::chunked_queue<> and
704
+ // its internal ChunkedQueueBlock<> type, without any extra storage for
705
+ // allocator state. (We use these to generate expected stateless-allocator
706
+ // object sizes in a portable way.)
707
+ struct MockQueue {
708
+ struct MockIterator {
709
+ void* block;
710
+ void* ptr;
711
+ void* limit;
712
+ };
713
+ MockIterator head;
714
+ MockIterator tail;
715
+ size_t size;
716
+ };
717
+ struct MockBlock {
718
+ void* next;
719
+ void* limit;
720
+ };
721
+ using TestQueueType = absl::chunked_queue<int64_t, 1, 16>;
722
+ EXPECT_EQ(sizeof(TestQueueType), sizeof(MockQueue));
723
+ EXPECT_EQ(sizeof(absl::container_internal::ChunkedQueueBlock<
724
+ TestQueueType::value_type, TestQueueType::allocator_type>),
725
+ sizeof(MockBlock));
726
+ }
727
+
728
+ TEST(ChunkedQueue, DoesNotRoundBlockSizesUpWithNonDefaultAllocator) {
729
+ using OneByte = uint8_t;
730
+ using CustomAllocator = absl::container_internal::CountingAllocator<OneByte>;
731
+ using Block =
732
+ absl::container_internal::ChunkedQueueBlock<OneByte, CustomAllocator>;
733
+ int64_t allocator_live_bytes = 0;
734
+ CustomAllocator allocator(&allocator_live_bytes);
735
+ // Create a Block big enough to accomodate at least 1 OneByte.
736
+ Block* b = Block::New(1, &allocator);
737
+ ASSERT_TRUE(b != nullptr);
738
+ // With a non-default allocator in play, the resulting block should have
739
+ // capacity for exactly 1 element -- the implementation should not round the
740
+ // allocation size up, which may be inappropriate for non-default allocators.
741
+ //
742
+ // (Note that we don't always round up even with the default allocator in use,
743
+ // e.g. when compiling for ASAN analysis.)
744
+ EXPECT_EQ(b->size(), 1);
745
+ Block::Delete(b, &allocator);
746
+ }
747
+
748
+ TEST(ChunkedQueue, Hardening) {
749
+ bool hardened = false;
750
+ ABSL_HARDENING_ASSERT([&hardened]() {
751
+ hardened = true;
752
+ return true;
753
+ }());
754
+ if (!hardened) {
755
+ GTEST_SKIP() << "Not a hardened build";
756
+ }
757
+
758
+ absl::chunked_queue<int> q;
759
+ EXPECT_DEATH(q.front(), "");
760
+ EXPECT_DEATH(q.back(), "");
761
+ EXPECT_DEATH(q.pop_front(), "");
762
+
763
+ const absl::chunked_queue<int> cq;
764
+ EXPECT_DEATH(cq.front(), "");
765
+ EXPECT_DEATH(cq.back(), "");
766
+ }
767
+
768
+ } // namespace