re2 1.24.0 → 1.25.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 (370) hide show
  1. package/LICENSE +15 -20
  2. package/README.md +63 -4
  3. package/binding.gyp +1 -2
  4. package/lib/addon.cc +9 -5
  5. package/lib/exec.cc +4 -4
  6. package/lib/match.cc +4 -4
  7. package/lib/new.cc +6 -6
  8. package/lib/pattern.cc +148 -1
  9. package/lib/replace.cc +5 -4
  10. package/lib/search.cc +1 -1
  11. package/lib/set.cc +85 -10
  12. package/lib/test.cc +1 -1
  13. package/lib/unicode_properties.h +15840 -0
  14. package/lib/wrapped_re2.h +40 -4
  15. package/lib/wrapped_re2_set.h +3 -1
  16. package/llms-full.txt +497 -0
  17. package/llms.txt +135 -0
  18. package/package.json +19 -11
  19. package/re2.d.ts +2 -0
  20. package/re2.js +1 -0
  21. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +87 -74
  22. package/vendor/abseil-cpp/CMakeLists.txt +3 -3
  23. package/vendor/abseil-cpp/FAQ.md +130 -79
  24. package/vendor/abseil-cpp/MODULE.bazel +6 -7
  25. package/vendor/abseil-cpp/absl/BUILD.bazel +6 -0
  26. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +4 -0
  27. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +4 -0
  28. package/vendor/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  29. package/vendor/abseil-cpp/absl/algorithm/container.h +164 -17
  30. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +390 -13
  31. package/vendor/abseil-cpp/absl/base/BUILD.bazel +53 -6
  32. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +28 -4
  33. package/vendor/abseil-cpp/absl/base/attributes.h +61 -42
  34. package/vendor/abseil-cpp/absl/base/call_once.h +1 -0
  35. package/vendor/abseil-cpp/absl/base/casts.h +8 -1
  36. package/vendor/abseil-cpp/absl/base/casts_test.cc +3 -6
  37. package/vendor/abseil-cpp/absl/base/config.h +53 -9
  38. package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +9 -9
  39. package/vendor/abseil-cpp/absl/base/fast_type_id.h +30 -2
  40. package/vendor/abseil-cpp/absl/base/fast_type_id_test.cc +3 -0
  41. package/vendor/abseil-cpp/absl/base/internal/exception_safety_testing.h +15 -12
  42. package/vendor/abseil-cpp/absl/base/internal/hardening.h +136 -0
  43. package/vendor/abseil-cpp/absl/base/internal/hardening_test.cc +168 -0
  44. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +2 -2
  45. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -0
  46. package/vendor/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  47. package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +1 -2
  48. package/vendor/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  49. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  50. package/vendor/abseil-cpp/absl/base/macros.h +36 -20
  51. package/vendor/abseil-cpp/absl/base/nullability.h +4 -3
  52. package/vendor/abseil-cpp/absl/base/optimization.h +3 -2
  53. package/vendor/abseil-cpp/absl/base/optimization_test.cc +4 -3
  54. package/vendor/abseil-cpp/absl/base/options.h +55 -1
  55. package/vendor/abseil-cpp/absl/base/policy_checks.h +5 -5
  56. package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  57. package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  58. package/vendor/abseil-cpp/absl/base/throw_delegate_test.cc +19 -28
  59. package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -0
  60. package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +2 -0
  61. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +3 -2
  62. package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  63. package/vendor/abseil-cpp/absl/container/BUILD.bazel +19 -7
  64. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +6 -5
  65. package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +3 -5
  66. package/vendor/abseil-cpp/absl/container/btree_set.h +5 -5
  67. package/vendor/abseil-cpp/absl/container/btree_test.cc +11 -14
  68. package/vendor/abseil-cpp/absl/container/chunked_queue.h +8 -6
  69. package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +5 -5
  70. package/vendor/abseil-cpp/absl/container/fixed_array.h +14 -13
  71. package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +3 -3
  72. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +18 -6
  73. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +34 -1
  74. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +21 -7
  75. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +39 -7
  76. package/vendor/abseil-cpp/absl/container/inlined_vector.h +29 -29
  77. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +2 -2
  78. package/vendor/abseil-cpp/absl/container/internal/btree.h +32 -24
  79. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +16 -17
  80. package/vendor/abseil-cpp/absl/container/internal/common.h +6 -5
  81. package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  82. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +16 -16
  83. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +13 -13
  84. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +41 -31
  85. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +2 -2
  86. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +4 -4
  87. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +3 -3
  88. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +27 -19
  89. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -2
  90. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -17
  91. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +12 -30
  92. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +28 -28
  93. package/vendor/abseil-cpp/absl/container/internal/layout.h +13 -13
  94. package/vendor/abseil-cpp/absl/container/internal/layout_test.cc +3 -2
  95. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +60 -62
  96. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +59 -39
  97. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +619 -326
  98. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +25 -2
  99. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +4 -4
  100. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +575 -159
  101. package/vendor/abseil-cpp/absl/container/linked_hash_map.h +2 -2
  102. package/vendor/abseil-cpp/absl/container/node_hash_map.h +27 -15
  103. package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +34 -0
  104. package/vendor/abseil-cpp/absl/container/node_hash_set.h +25 -11
  105. package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +39 -7
  106. package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +7 -4
  107. package/vendor/abseil-cpp/absl/crc/BUILD.bazel +0 -1
  108. package/vendor/abseil-cpp/absl/crc/CMakeLists.txt +2 -3
  109. package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +2 -1
  110. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +6 -6
  111. package/vendor/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  112. package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  113. package/vendor/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  114. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +143 -81
  115. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +9 -31
  116. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +3 -33
  117. package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  118. package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +2 -1
  119. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +12 -2
  120. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +2 -3
  121. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -0
  122. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -4
  123. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  124. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +4 -0
  125. package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +46 -36
  126. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +18 -58
  127. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +5 -48
  128. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +10 -124
  129. package/vendor/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  130. package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +58 -106
  131. package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +37 -36
  132. package/vendor/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  133. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -3
  134. package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +1 -1
  135. package/vendor/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  136. package/vendor/abseil-cpp/absl/flags/commandlineflag_test.cc +1 -1
  137. package/vendor/abseil-cpp/absl/flags/flag_benchmark.cc +5 -5
  138. package/vendor/abseil-cpp/absl/flags/flag_test.cc +30 -30
  139. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +4 -4
  140. package/vendor/abseil-cpp/absl/flags/internal/flag.h +6 -6
  141. package/vendor/abseil-cpp/absl/flags/marshalling.h +2 -28
  142. package/vendor/abseil-cpp/absl/flags/marshalling_test.cc +12 -11
  143. package/vendor/abseil-cpp/absl/flags/reflection_test.cc +1 -1
  144. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +26 -1
  145. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +29 -1
  146. package/vendor/abseil-cpp/absl/functional/any_invocable.h +13 -14
  147. package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +46 -47
  148. package/vendor/abseil-cpp/absl/functional/bind_back.h +79 -0
  149. package/vendor/abseil-cpp/absl/functional/bind_back_test.cc +237 -0
  150. package/vendor/abseil-cpp/absl/functional/bind_front.h +7 -1
  151. package/vendor/abseil-cpp/absl/functional/bind_front_test.cc +4 -4
  152. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +2 -2
  153. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +28 -28
  154. package/vendor/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
  155. package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  156. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  157. package/vendor/abseil-cpp/absl/functional/overload_test.cc +13 -13
  158. package/vendor/abseil-cpp/absl/hash/BUILD.bazel +1 -2
  159. package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +1 -2
  160. package/vendor/abseil-cpp/absl/hash/hash.h +1 -1
  161. package/vendor/abseil-cpp/absl/hash/hash_test.cc +14 -20
  162. package/vendor/abseil-cpp/absl/hash/hash_testing.h +11 -9
  163. package/vendor/abseil-cpp/absl/hash/internal/city.cc +39 -51
  164. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +165 -47
  165. package/vendor/abseil-cpp/absl/hash/internal/hash.h +86 -27
  166. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +36 -1
  167. package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +8 -5
  168. package/vendor/abseil-cpp/absl/log/BUILD.bazel +5 -2
  169. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +5 -3
  170. package/vendor/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  171. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +15 -1
  172. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -4
  173. package/vendor/abseil-cpp/absl/log/internal/log_message.h +14 -0
  174. package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  175. package/vendor/abseil-cpp/absl/log/internal/proto.cc +13 -0
  176. package/vendor/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  177. package/vendor/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  178. package/vendor/abseil-cpp/absl/log/internal/structured_proto_test.cc +3 -3
  179. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +2 -2
  180. package/vendor/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +3 -3
  181. package/vendor/abseil-cpp/absl/log/log_format_test.cc +19 -2
  182. package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +18 -0
  183. package/vendor/abseil-cpp/absl/log/log_streamer.h +29 -2
  184. package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +18 -0
  185. package/vendor/abseil-cpp/absl/log/scoped_mock_log_test.cc +1 -1
  186. package/vendor/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  187. package/vendor/abseil-cpp/absl/log/vlog_is_on_test.cc +6 -5
  188. package/vendor/abseil-cpp/absl/memory/memory.h +55 -5
  189. package/vendor/abseil-cpp/absl/memory/memory_test.cc +55 -1
  190. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
  191. package/vendor/abseil-cpp/absl/meta/internal/requires.h +1 -1
  192. package/vendor/abseil-cpp/absl/meta/type_traits.h +119 -55
  193. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +7 -7
  194. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +6 -6
  195. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +3 -1
  196. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +0 -4
  197. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +32 -33
  198. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +25 -2
  199. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +8 -5
  200. package/vendor/abseil-cpp/absl/random/BUILD.bazel +13 -1
  201. package/vendor/abseil-cpp/absl/random/CMakeLists.txt +23 -2
  202. package/vendor/abseil-cpp/absl/random/benchmarks.cc +1 -1
  203. package/vendor/abseil-cpp/absl/random/beta_distribution.h +2 -2
  204. package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  205. package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +43 -0
  206. package/vendor/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  207. package/vendor/abseil-cpp/absl/random/distributions.h +17 -17
  208. package/vendor/abseil-cpp/absl/random/distributions_test.cc +4 -4
  209. package/vendor/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  210. package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +4 -2
  211. package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  212. package/vendor/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  213. package/vendor/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  214. package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  215. package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +3 -2
  216. package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +14 -40
  217. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  218. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +2 -2
  219. package/vendor/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  220. package/vendor/abseil-cpp/absl/random/internal/pcg_engine_test.cc +3 -2
  221. package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  222. package/vendor/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  223. package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +3 -2
  224. package/vendor/abseil-cpp/absl/random/internal/randen_test.cc +3 -2
  225. package/vendor/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  226. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +4 -4
  227. package/vendor/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  228. package/vendor/abseil-cpp/absl/random/internal/traits.h +21 -0
  229. package/vendor/abseil-cpp/absl/random/internal/traits_test.cc +5 -0
  230. package/vendor/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  231. package/vendor/abseil-cpp/absl/random/internal/uniform_helper_test.cc +2 -1
  232. package/vendor/abseil-cpp/absl/random/mocking_access.h +74 -0
  233. package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +9 -19
  234. package/vendor/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  235. package/vendor/abseil-cpp/absl/status/BUILD.bazel +81 -0
  236. package/vendor/abseil-cpp/absl/status/CMakeLists.txt +91 -0
  237. package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  238. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +26 -2
  239. package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +22 -8
  240. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +43 -43
  241. package/vendor/abseil-cpp/absl/status/status.cc +62 -70
  242. package/vendor/abseil-cpp/absl/status/status.h +249 -23
  243. package/vendor/abseil-cpp/absl/status/status_benchmark.cc +12 -0
  244. package/vendor/abseil-cpp/absl/status/status_builder.cc +196 -0
  245. package/vendor/abseil-cpp/absl/status/status_builder.h +978 -0
  246. package/vendor/abseil-cpp/absl/status/status_builder_test.cc +380 -0
  247. package/vendor/abseil-cpp/absl/status/status_macros.h +484 -0
  248. package/vendor/abseil-cpp/absl/status/status_macros_test.cc +634 -0
  249. package/vendor/abseil-cpp/absl/status/status_matchers.h +2 -1
  250. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +3 -4
  251. package/vendor/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  252. package/vendor/abseil-cpp/absl/status/status_test.cc +443 -13
  253. package/vendor/abseil-cpp/absl/status/statusor.h +69 -36
  254. package/vendor/abseil-cpp/absl/status/statusor_test.cc +132 -35
  255. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +42 -7
  256. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +33 -4
  257. package/vendor/abseil-cpp/absl/strings/ascii.h +1 -2
  258. package/vendor/abseil-cpp/absl/strings/atod_manual_test.cc +5 -5
  259. package/vendor/abseil-cpp/absl/strings/cord.cc +26 -7
  260. package/vendor/abseil-cpp/absl/strings/cord.h +23 -13
  261. package/vendor/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  262. package/vendor/abseil-cpp/absl/strings/cord_test.cc +85 -9
  263. package/vendor/abseil-cpp/absl/strings/escaping.cc +183 -35
  264. package/vendor/abseil-cpp/absl/strings/escaping.h +12 -2
  265. package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +1 -3
  266. package/vendor/abseil-cpp/absl/strings/escaping_test.cc +22 -18
  267. package/vendor/abseil-cpp/absl/strings/has_absl_stringify_test.cc +2 -2
  268. package/vendor/abseil-cpp/absl/strings/has_ostream_operator_test.cc +2 -2
  269. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +10 -10
  270. package/vendor/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +1 -1
  271. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  272. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  273. package/vendor/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  274. package/vendor/abseil-cpp/absl/strings/internal/escaping.h +2 -26
  275. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +23 -2
  276. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +6 -2
  277. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -24
  278. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +16 -41
  279. package/vendor/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  280. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  281. package/vendor/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  282. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +12 -20
  283. package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +510 -307
  284. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -1
  285. package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +9 -10
  286. package/vendor/abseil-cpp/absl/strings/internal/string_constant_test.cc +6 -5
  287. package/vendor/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  288. package/vendor/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
  289. package/vendor/abseil-cpp/absl/strings/internal/stringify_stream_test.cc +111 -0
  290. package/vendor/abseil-cpp/absl/strings/numbers.cc +406 -0
  291. package/vendor/abseil-cpp/absl/strings/numbers.h +4 -0
  292. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +33 -0
  293. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +10 -6
  294. package/vendor/abseil-cpp/absl/strings/str_cat.h +36 -1
  295. package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +1 -2
  296. package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +28 -0
  297. package/vendor/abseil-cpp/absl/strings/str_join_test.cc +4 -4
  298. package/vendor/abseil-cpp/absl/strings/str_split.h +11 -6
  299. package/vendor/abseil-cpp/absl/strings/str_split_test.cc +13 -0
  300. package/vendor/abseil-cpp/absl/strings/substitute.h +2 -2
  301. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +3 -0
  302. package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +21 -0
  303. package/vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  304. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +13 -0
  305. package/vendor/abseil-cpp/absl/synchronization/mutex.h +32 -2
  306. package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +17 -3
  307. package/vendor/abseil-cpp/absl/time/BUILD.bazel +80 -0
  308. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +73 -0
  309. package/vendor/abseil-cpp/absl/time/clock.h +3 -0
  310. package/vendor/abseil-cpp/absl/time/clock_interface.cc +71 -0
  311. package/vendor/abseil-cpp/absl/time/clock_interface.h +93 -0
  312. package/vendor/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
  313. package/vendor/abseil-cpp/absl/time/format.cc +3 -10
  314. package/vendor/abseil-cpp/absl/time/format_test.cc +12 -0
  315. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +90 -89
  316. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +80 -5
  317. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +1 -2
  318. package/vendor/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  319. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  320. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
  321. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
  322. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
  323. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
  324. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
  325. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
  326. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
  327. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
  328. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
  329. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +1 -1
  330. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +3 -3
  331. package/vendor/abseil-cpp/absl/time/simulated_clock.cc +225 -0
  332. package/vendor/abseil-cpp/absl/time/simulated_clock.h +109 -0
  333. package/vendor/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
  334. package/vendor/abseil-cpp/absl/types/BUILD.bazel +116 -0
  335. package/vendor/abseil-cpp/absl/types/CMakeLists.txt +100 -0
  336. package/vendor/abseil-cpp/absl/types/any.h +26 -4
  337. package/vendor/abseil-cpp/absl/types/any_span.h +1067 -0
  338. package/vendor/abseil-cpp/absl/types/any_span_benchmark.cc +258 -0
  339. package/vendor/abseil-cpp/absl/types/any_span_test.cc +1210 -0
  340. package/vendor/abseil-cpp/absl/types/compare.h +4 -4
  341. package/vendor/abseil-cpp/absl/types/internal/any_span.h +477 -0
  342. package/vendor/abseil-cpp/absl/types/internal/span.h +5 -6
  343. package/vendor/abseil-cpp/absl/types/optional.h +30 -3
  344. package/vendor/abseil-cpp/absl/types/optional_ref.h +295 -0
  345. package/vendor/abseil-cpp/absl/types/optional_ref_test.cc +370 -0
  346. package/vendor/abseil-cpp/absl/types/source_location.cc +18 -0
  347. package/vendor/abseil-cpp/absl/types/source_location.h +172 -0
  348. package/vendor/abseil-cpp/absl/types/source_location_test.cc +139 -0
  349. package/vendor/abseil-cpp/absl/types/span.h +19 -23
  350. package/vendor/abseil-cpp/absl/types/variant.h +75 -18
  351. package/vendor/abseil-cpp/absl/types/variant_test.cc +23 -23
  352. package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -0
  353. package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +1 -0
  354. package/vendor/abseil-cpp/absl/utility/utility.h +99 -16
  355. package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -0
  356. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +10 -4
  357. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +13 -6
  358. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +10 -4
  359. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +12 -5
  360. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +9 -2
  361. package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
  362. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +10 -3
  363. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +8 -2
  364. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +4 -3
  365. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +2 -2
  366. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -1
  367. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -1
  368. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
  369. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
  370. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +0 -97
@@ -17,6 +17,7 @@
17
17
  #include <algorithm>
18
18
  #include <array>
19
19
  #include <cstddef>
20
+ #include <forward_list>
20
21
  #include <functional>
21
22
  #include <initializer_list>
22
23
  #include <iterator>
@@ -25,6 +26,7 @@
25
26
  #include <ostream>
26
27
  #include <random>
27
28
  #include <set>
29
+ #include <type_traits>
28
30
  #include <unordered_set>
29
31
  #include <utility>
30
32
  #include <valarray>
@@ -36,6 +38,7 @@
36
38
  #include "absl/base/config.h"
37
39
  #include "absl/base/macros.h"
38
40
  #include "absl/memory/memory.h"
41
+ #include "absl/meta/type_traits.h"
39
42
  #include "absl/random/random.h"
40
43
  #include "absl/types/span.h"
41
44
 
@@ -712,6 +715,190 @@ TEST(MutatingTest, CopyN) {
712
715
  EXPECT_EQ(expected, actual);
713
716
  }
714
717
 
718
+ TEST(MutatingTest, CopyNWithNegativeN) {
719
+ #ifdef _LIBCPP_VERSION
720
+ GTEST_SKIP() << "libc++ does not handle negative counts correctly";
721
+ #else
722
+ const std::vector<int> input = {1, 2, 3};
723
+ std::vector<int> actual = {0, 0, 0};
724
+ absl::c_copy_n(input, -1, actual.begin());
725
+ EXPECT_THAT(actual, ElementsAre(0, 0, 0));
726
+ #endif
727
+ }
728
+
729
+ TEST(MutatingTest, CopyToContainer) {
730
+ const std::vector<int> input = {1, 2, 3};
731
+ std::vector<int> actual = {0, 0, 0, 4, 5};
732
+ absl::c_copy(input, actual);
733
+ EXPECT_THAT(actual, ElementsAre(1, 2, 3, 4, 5));
734
+ }
735
+
736
+ TEST(MutatingTest, CopyNToContainer) {
737
+ const std::vector<int> input = {1, 2, 3, 4, 5};
738
+ std::vector<int> actual = {0, 0, 0, 0, 0};
739
+ absl::c_copy_n(input, 2, actual);
740
+ EXPECT_THAT(actual, ElementsAre(1, 2, 0, 0, 0));
741
+ }
742
+
743
+ TEST(MutatingTest, CopyNToContainerWithZeroN) {
744
+ const std::vector<int> input = {1, 2, 3, 4, 5};
745
+ std::vector<int> actual = {0, 0, 0, 0, 0};
746
+ absl::c_copy_n(input, 0, actual);
747
+ EXPECT_THAT(actual, ElementsAre(0, 0, 0, 0, 0));
748
+ }
749
+
750
+ TEST(MutatingTest, CopyNToContainerWithNegativeN) {
751
+ #ifdef _LIBCPP_VERSION
752
+ GTEST_SKIP() << "libc++ does not handle negative counts correctly";
753
+ #else
754
+ const std::vector<int> input = {1, 2, 3};
755
+ std::vector<int> actual = {0, 0, 0};
756
+ absl::c_copy_n(input, -1, actual);
757
+ EXPECT_THAT(actual, ElementsAre(0, 0, 0));
758
+ #endif
759
+ }
760
+
761
+ TEST(MutatingTest, CopyToDifferentContainerType) {
762
+ const std::list<int> input = {1, 2, 3};
763
+ std::array<int, 5> actual = {0, 0, 0, 4, 5};
764
+ absl::c_copy(input, actual);
765
+ EXPECT_THAT(actual, ElementsAre(1, 2, 3, 4, 5));
766
+ }
767
+
768
+ TEST(MutatingTest, CopyNToDifferentContainerType) {
769
+ const std::list<int> input = {1, 2, 3, 4, 5};
770
+ std::array<int, 5> actual = {0, 0, 0, 0, 0};
771
+ absl::c_copy_n(input, 2, actual);
772
+ EXPECT_THAT(actual, ElementsAre(1, 2, 0, 0, 0));
773
+ }
774
+
775
+ TEST(MutatingTest, CopyToCArray) {
776
+ const std::vector<int> input = {1, 2, 3};
777
+ int actual[5] = {0, 0, 0, 4, 5};
778
+ absl::c_copy(input, actual);
779
+ EXPECT_THAT(actual, ElementsAre(1, 2, 3, 4, 5));
780
+ }
781
+
782
+ TEST(MutatingTest, CopyNToCArray) {
783
+ const std::vector<int> input = {1, 2, 3, 4, 5};
784
+ int actual[5] = {0, 0, 0, 0, 0};
785
+ absl::c_copy_n(input, 2, actual);
786
+ EXPECT_THAT(actual, ElementsAre(1, 2, 0, 0, 0));
787
+ }
788
+
789
+ TEST(MutatingTest, CopyFromCArray) {
790
+ const int input[5] = {1, 2, 3, 4, 5};
791
+ std::vector<int> actual = {0, 0, 0, 0, 0};
792
+ absl::c_copy(input, actual);
793
+ EXPECT_THAT(actual, ElementsAre(1, 2, 3, 4, 5));
794
+ }
795
+
796
+ TEST(MutatingTest, CopyNFromCArray) {
797
+ const int input[5] = {1, 2, 3, 4, 5};
798
+ std::vector<int> actual = {0, 0, 0, 0, 0};
799
+ absl::c_copy_n(input, 2, actual);
800
+ EXPECT_THAT(actual, ElementsAre(1, 2, 0, 0, 0));
801
+ }
802
+
803
+ TEST(MutatingTest, CopyContainerWithNoSizeMethod) {
804
+ const std::forward_list<int> input = {1, 2, 3};
805
+ std::forward_list<int> actual = {0, 0, 0, 4, 5};
806
+ absl::c_copy(input, actual);
807
+ EXPECT_THAT(actual, ElementsAre(1, 2, 3, 4, 5));
808
+ }
809
+
810
+ TEST(MutatingTest, CopyNContainerWithNoSizeMethod) {
811
+ const std::forward_list<int> input = {1, 2, 3, 4, 5};
812
+ std::forward_list<int> actual = {0, 0, 0, 0, 0};
813
+ absl::c_copy_n(input, 2, actual);
814
+ EXPECT_THAT(actual, ElementsAre(1, 2, 0, 0, 0));
815
+ }
816
+
817
+ #if GTEST_HAS_DEATH_TEST
818
+
819
+ bool IsHardened() {
820
+ bool hardened = false;
821
+ ABSL_HARDENING_ASSERT([&hardened]() {
822
+ hardened = true;
823
+ return true;
824
+ }());
825
+ return hardened;
826
+ }
827
+
828
+ TEST(MutatingTest, CopyToCArrayInvalidSize) {
829
+ const std::vector<int> input = {1, 2, 3};
830
+ int actual[2] = {0, 0};
831
+ if (IsHardened()) {
832
+ EXPECT_DEATH(absl::c_copy(input, actual), "");
833
+ }
834
+ }
835
+
836
+ TEST(MutatingTest, CopyNToCArrayInvalidSize) {
837
+ const std::vector<int> input = {1, 2, 3};
838
+ int actual[2] = {0, 0};
839
+ if (IsHardened()) {
840
+ EXPECT_DEATH(absl::c_copy_n(input, 3, actual), "");
841
+ }
842
+ }
843
+
844
+ TEST(MutatingTest, CopyNToCArrayNGreaterThanInput) {
845
+ const std::vector<int> input = {1, 2, 3};
846
+ int actual[4] = {0, 0, 0, 0};
847
+ if (IsHardened()) {
848
+ EXPECT_DEATH(absl::c_copy_n(input, 4, actual), "");
849
+ }
850
+ }
851
+
852
+ TEST(MutatingTest, CopyToContainerInvalidSize) {
853
+ const std::list<int> input = {1, 2, 3, 4, 5};
854
+ std::list<int> actual = {0, 0, 0};
855
+ if (IsHardened()) {
856
+ EXPECT_DEATH(absl::c_copy(input, actual), "");
857
+ }
858
+ }
859
+
860
+ TEST(MutatingTest, CopyNToContainerNGreaterThanInput) {
861
+ const std::vector<int> input = {1, 2, 3};
862
+ std::vector<int> actual = {0, 0, 0, 0};
863
+ if (IsHardened()) {
864
+ EXPECT_DEATH(absl::c_copy_n(input, 4, actual), "");
865
+ }
866
+ }
867
+
868
+ TEST(MutatingTest, CopyNToContainerNGreaterThanOutput) {
869
+ const std::vector<int> input = {1, 2, 3};
870
+ std::vector<int> actual = {0, 0};
871
+ if (IsHardened()) {
872
+ EXPECT_DEATH(absl::c_copy_n(input, 3, actual), "");
873
+ }
874
+ }
875
+
876
+ TEST(MutatingTest, CopyToForwardListInvalidSize) {
877
+ const std::forward_list<int> input = {1, 2, 3, 4, 5};
878
+ std::forward_list<int> actual = {0, 0, 0};
879
+ if (IsHardened()) {
880
+ EXPECT_DEATH(absl::c_copy(input, actual), "");
881
+ }
882
+ }
883
+
884
+ TEST(MutatingTest, CopyNToForwardListNGreaterThanInput) {
885
+ const std::forward_list<int> input = {1, 2, 3};
886
+ std::forward_list<int> actual = {0, 0, 0, 0};
887
+ if (IsHardened()) {
888
+ EXPECT_DEATH(absl::c_copy_n(input, 4, actual), "");
889
+ }
890
+ }
891
+
892
+ TEST(MutatingTest, CopyNToForwardListNGreaterThanOutput) {
893
+ const std::forward_list<int> input = {1, 2, 3};
894
+ std::forward_list<int> actual = {0, 0};
895
+ if (IsHardened()) {
896
+ EXPECT_DEATH(absl::c_copy_n(input, 3, actual), "");
897
+ }
898
+ }
899
+
900
+ #endif // GTEST_HAS_DEATH_TEST
901
+
715
902
  TEST(MutatingTest, CopyIf) {
716
903
  const std::list<int> input = {1, 2, 3};
717
904
  std::vector<int> output;
@@ -729,11 +916,11 @@ TEST(MutatingTest, CopyBackward) {
729
916
 
730
917
  TEST(MutatingTest, Move) {
731
918
  std::vector<std::unique_ptr<int>> src;
732
- src.emplace_back(absl::make_unique<int>(1));
733
- src.emplace_back(absl::make_unique<int>(2));
734
- src.emplace_back(absl::make_unique<int>(3));
735
- src.emplace_back(absl::make_unique<int>(4));
736
- src.emplace_back(absl::make_unique<int>(5));
919
+ src.emplace_back(std::make_unique<int>(1));
920
+ src.emplace_back(std::make_unique<int>(2));
921
+ src.emplace_back(std::make_unique<int>(3));
922
+ src.emplace_back(std::make_unique<int>(4));
923
+ src.emplace_back(std::make_unique<int>(5));
737
924
 
738
925
  std::vector<std::unique_ptr<int>> dest = {};
739
926
  absl::c_move(src, std::back_inserter(dest));
@@ -744,11 +931,11 @@ TEST(MutatingTest, Move) {
744
931
 
745
932
  TEST(MutatingTest, MoveBackward) {
746
933
  std::vector<std::unique_ptr<int>> actual;
747
- actual.emplace_back(absl::make_unique<int>(1));
748
- actual.emplace_back(absl::make_unique<int>(2));
749
- actual.emplace_back(absl::make_unique<int>(3));
750
- actual.emplace_back(absl::make_unique<int>(4));
751
- actual.emplace_back(absl::make_unique<int>(5));
934
+ actual.emplace_back(std::make_unique<int>(1));
935
+ actual.emplace_back(std::make_unique<int>(2));
936
+ actual.emplace_back(std::make_unique<int>(3));
937
+ actual.emplace_back(std::make_unique<int>(4));
938
+ actual.emplace_back(std::make_unique<int>(5));
752
939
  auto subrange = absl::MakeSpan(actual.data(), 3);
753
940
  absl::c_move_backward(subrange, actual.end());
754
941
  EXPECT_THAT(actual, ElementsAre(IsNull(), IsNull(), Pointee(1), Pointee(2),
@@ -758,9 +945,9 @@ TEST(MutatingTest, MoveBackward) {
758
945
  TEST(MutatingTest, MoveWithRvalue) {
759
946
  auto MakeRValueSrc = [] {
760
947
  std::vector<std::unique_ptr<int>> src;
761
- src.emplace_back(absl::make_unique<int>(1));
762
- src.emplace_back(absl::make_unique<int>(2));
763
- src.emplace_back(absl::make_unique<int>(3));
948
+ src.emplace_back(std::make_unique<int>(1));
949
+ src.emplace_back(std::make_unique<int>(2));
950
+ src.emplace_back(std::make_unique<int>(3));
764
951
  return src;
765
952
  };
766
953
 
@@ -770,6 +957,95 @@ TEST(MutatingTest, MoveWithRvalue) {
770
957
  Pointee(2), Pointee(3)));
771
958
  }
772
959
 
960
+ TEST(MutatingTest, MoveToContainer) {
961
+ std::vector<std::unique_ptr<int>> input;
962
+ input.push_back(std::make_unique<int>(1));
963
+ input.push_back(std::make_unique<int>(2));
964
+ input.push_back(std::make_unique<int>(3));
965
+
966
+ std::vector<std::unique_ptr<int>> actual(5);
967
+ absl::c_move(input, actual);
968
+
969
+ EXPECT_EQ(input[0], nullptr);
970
+ EXPECT_EQ(input[1], nullptr);
971
+ EXPECT_EQ(input[2], nullptr);
972
+
973
+ ASSERT_NE(actual[0], nullptr);
974
+ EXPECT_EQ(*actual[0], 1);
975
+ ASSERT_NE(actual[1], nullptr);
976
+ EXPECT_EQ(*actual[1], 2);
977
+ ASSERT_NE(actual[2], nullptr);
978
+ EXPECT_EQ(*actual[2], 3);
979
+ EXPECT_EQ(actual[3], nullptr);
980
+ }
981
+
982
+ TEST(MutatingTest, MoveToDifferentContainerType) {
983
+ std::list<std::unique_ptr<int>> input;
984
+ input.push_back(std::make_unique<int>(1));
985
+ input.push_back(std::make_unique<int>(2));
986
+
987
+ std::array<std::unique_ptr<int>, 3> actual;
988
+ absl::c_move(input, actual);
989
+
990
+ EXPECT_EQ(input.front(), nullptr);
991
+ ASSERT_NE(actual[0], nullptr);
992
+ EXPECT_EQ(*actual[0], 1);
993
+ }
994
+
995
+ TEST(MutatingTest, MoveToCArray) {
996
+ std::vector<std::unique_ptr<int>> input;
997
+ input.push_back(std::make_unique<int>(1));
998
+ input.push_back(std::make_unique<int>(2));
999
+
1000
+ std::unique_ptr<int> actual[3];
1001
+ absl::c_move(input, actual);
1002
+
1003
+ EXPECT_EQ(input.front(), nullptr);
1004
+ ASSERT_NE(actual[0], nullptr);
1005
+ EXPECT_EQ(*actual[0], 1);
1006
+ }
1007
+
1008
+ TEST(MutatingTest, MoveFromCArray) {
1009
+ std::unique_ptr<int> input[2];
1010
+ input[0] = std::make_unique<int>(1);
1011
+ input[1] = std::make_unique<int>(2);
1012
+
1013
+ std::vector<std::unique_ptr<int>> actual(3);
1014
+ absl::c_move(input, actual);
1015
+
1016
+ EXPECT_EQ(input[0], nullptr);
1017
+ ASSERT_NE(actual[0], nullptr);
1018
+ EXPECT_EQ(*actual[0], 1);
1019
+ }
1020
+
1021
+ #if GTEST_HAS_DEATH_TEST
1022
+
1023
+ TEST(MutatingTest, MoveToCArrayInvalidSize) {
1024
+ std::vector<int> input = {1, 2, 3};
1025
+ int actual[2] = {0, 0};
1026
+ if (IsHardened()) {
1027
+ EXPECT_DEATH(absl::c_move(input, actual), "");
1028
+ }
1029
+ }
1030
+
1031
+ TEST(MutatingTest, MoveToContainerInvalidSize) {
1032
+ std::list<int> input = {1, 2, 3, 4, 5};
1033
+ std::list<int> actual = {0, 0, 0};
1034
+ if (IsHardened()) {
1035
+ EXPECT_DEATH(absl::c_move(input, actual), "");
1036
+ }
1037
+ }
1038
+
1039
+ TEST(MutatingTest, MoveToForwardListInvalidSize) {
1040
+ std::forward_list<int> input = {1, 2, 3, 4, 5};
1041
+ std::forward_list<int> actual = {0, 0, 0};
1042
+ if (IsHardened()) {
1043
+ EXPECT_DEATH(absl::c_move(input, actual), "");
1044
+ }
1045
+ }
1046
+
1047
+ #endif // GTEST_HAS_DEATH_TEST
1048
+
773
1049
  TEST(MutatingTest, SwapRanges) {
774
1050
  std::vector<int> odds = {2, 4, 6};
775
1051
  std::vector<int> evens = {1, 3, 5};
@@ -2229,4 +2505,105 @@ TEST(ConstexprTest, PartialSumWithPredicate) {
2229
2505
  #endif // defined(ABSL_INTERNAL_CPLUSPLUS_LANG) &&
2230
2506
  // ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L
2231
2507
 
2508
+ // A type that acts as both a container and an iterator.
2509
+ struct AmbiguousType {
2510
+ // Container requirements
2511
+ int* begin() { return nullptr; }
2512
+ int* end() { return nullptr; }
2513
+
2514
+ // Iterator requirements
2515
+ using iterator_category = std::input_iterator_tag;
2516
+ using value_type = int;
2517
+ using difference_type = std::ptrdiff_t;
2518
+ using pointer = int*;
2519
+ using reference = int&;
2520
+
2521
+ int& operator*() {
2522
+ static int x;
2523
+ return x;
2524
+ }
2525
+ AmbiguousType& operator++() { return *this; }
2526
+ AmbiguousType operator++(int) { return *this; }
2527
+ friend bool operator==(const AmbiguousType&, const AmbiguousType&) {
2528
+ return true;
2529
+ }
2530
+ friend bool operator!=(const AmbiguousType&, const AmbiguousType&) {
2531
+ return false;
2532
+ }
2533
+ };
2534
+
2535
+ template <typename Container, typename Output, typename = void>
2536
+ struct CanCopy : std::false_type {};
2537
+ template <typename Container, typename Output>
2538
+ struct CanCopy<Container, Output,
2539
+ absl::void_t<decltype(absl::c_copy(std::declval<Container>(),
2540
+ std::declval<Output>()))>>
2541
+ : std::true_type {};
2542
+
2543
+ template <typename Container, typename Output, typename = void>
2544
+ struct CanCopyN : std::false_type {};
2545
+ template <typename Container, typename Output>
2546
+ struct CanCopyN<Container, Output,
2547
+ absl::void_t<decltype(absl::c_copy_n(
2548
+ std::declval<Container>(), std::declval<ptrdiff_t>(),
2549
+ std::declval<Output>()))>> : std::true_type {};
2550
+
2551
+ template <typename Container, typename Output, typename = void>
2552
+ struct CanMove : std::false_type {};
2553
+ template <typename Container, typename Output>
2554
+ struct CanMove<Container, Output,
2555
+ absl::void_t<decltype(absl::c_move(std::declval<Container>(),
2556
+ std::declval<Output>()))>>
2557
+ : std::true_type {};
2558
+
2559
+ TEST(CanCopyTest, CopyToMultiDimArray) {
2560
+ static_assert(CanCopy<std::vector<int>, int (&)[10]>::value);
2561
+ static_assert(!CanCopy<std::vector<int>, int (&)[2][2]>::value);
2562
+ static_assert(CanCopyN<std::vector<int>, int (&)[10]>::value);
2563
+ static_assert(!CanCopyN<std::vector<int>, int (&)[2][2]>::value);
2564
+
2565
+ static_assert(CanCopy<int[10], int (&)[10]>::value);
2566
+ static_assert(!CanCopy<int[10], int (&)[2][2]>::value);
2567
+ static_assert(CanCopyN<int[10], int (&)[10]>::value);
2568
+ static_assert(!CanCopyN<int[10], int (&)[2][2]>::value);
2569
+ static_assert(!CanCopy<int[2][2], int (&)[4]>::value);
2570
+ static_assert(!CanCopy<int[2][2], int (&)[2][2]>::value);
2571
+ static_assert(!CanCopyN<int[2][2], int (&)[4]>::value);
2572
+ static_assert(!CanCopyN<int[2][2], int (&)[2][2]>::value);
2573
+ }
2574
+
2575
+ TEST(CanCopyTest, BlockNonWritableIterators) {
2576
+ using Vec = std::vector<int>;
2577
+
2578
+ static_assert(CanCopy<Vec, Vec::iterator>::value);
2579
+ static_assert(CanCopy<Vec, std::back_insert_iterator<Vec>>::value);
2580
+ }
2581
+
2582
+ TEST(CanCopyTest, AmbiguousTypeFailsToCompile) {
2583
+ using Vec = std::vector<int>;
2584
+ // Because AmbiguousType is both an iterator and a container,
2585
+ // the compiler should fail to resolve the c_copy overload.
2586
+ static_assert(!CanCopy<Vec, AmbiguousType>::value,
2587
+ "Ambiguous types should not compile!");
2588
+ static_assert(!CanCopyN<Vec, AmbiguousType>::value,
2589
+ "Ambiguous types should not compile!");
2590
+ }
2591
+
2592
+ TEST(CanMoveTest, MoveToMultiDimArray) {
2593
+ static_assert(CanMove<std::vector<int>, int (&)[10]>::value);
2594
+ static_assert(!CanMove<std::vector<int>, int (&)[2][2]>::value);
2595
+
2596
+ static_assert(CanMove<int[10], int (&)[10]>::value);
2597
+ static_assert(!CanMove<int[10], int (&)[2][2]>::value);
2598
+ static_assert(!CanMove<int[2][2], int (&)[4]>::value);
2599
+ static_assert(!CanMove<int[2][2], int (&)[2][2]>::value);
2600
+ }
2601
+
2602
+ TEST(CanMoveTest, AmbiguousTypeFailsToCompile) {
2603
+ using Vec = std::vector<int>;
2604
+ // Because AmbiguousType is both an iterator and a container,
2605
+ // the compiler should fail to resolve the c_move overload.
2606
+ static_assert(!CanMove<Vec, AmbiguousType>::value,
2607
+ "Ambiguous types should not compile!");
2608
+ }
2232
2609
  } // namespace
@@ -56,10 +56,28 @@ cc_library(
56
56
  linkopts = ABSL_DEFAULT_LINKOPTS,
57
57
  visibility = [
58
58
  "//absl:__subpackages__",
59
+ "//absl:friends",
59
60
  ],
60
61
  deps = [":config"],
61
62
  )
62
63
 
64
+ cc_library(
65
+ name = "hardening",
66
+ hdrs = [
67
+ "internal/hardening.h",
68
+ ],
69
+ copts = ABSL_DEFAULT_COPTS,
70
+ linkopts = ABSL_DEFAULT_LINKOPTS,
71
+ visibility = [
72
+ "//absl:__subpackages__",
73
+ "//absl:friends",
74
+ ],
75
+ deps = [
76
+ ":config",
77
+ ":core_headers",
78
+ ],
79
+ )
80
+
63
81
  cc_library(
64
82
  name = "log_severity",
65
83
  srcs = ["log_severity.cc"],
@@ -113,6 +131,7 @@ cc_library(
113
131
  linkopts = ABSL_DEFAULT_LINKOPTS,
114
132
  visibility = [
115
133
  "//absl:__subpackages__",
134
+ "//absl:friends",
116
135
  ],
117
136
  deps = [
118
137
  ":atomic_hook",
@@ -136,6 +155,7 @@ cc_library(
136
155
  copts = ABSL_DEFAULT_COPTS,
137
156
  linkopts = ABSL_DEFAULT_LINKOPTS,
138
157
  visibility = [
158
+ "//absl:friends",
139
159
  "//absl/base:__pkg__",
140
160
  ],
141
161
  deps = [
@@ -166,6 +186,7 @@ cc_library(
166
186
  linkopts = ABSL_DEFAULT_LINKOPTS,
167
187
  visibility = [
168
188
  "//absl:__subpackages__",
189
+ "//absl:friends",
169
190
  ],
170
191
  deps = [
171
192
  ":base_internal",
@@ -247,6 +268,7 @@ cc_library(
247
268
  linkopts = ABSL_DEFAULT_LINKOPTS,
248
269
  visibility = [
249
270
  "//absl:__subpackages__",
271
+ "//absl:friends",
250
272
  ],
251
273
  deps = [
252
274
  ":config",
@@ -377,13 +399,14 @@ cc_test(
377
399
 
378
400
  cc_library(
379
401
  name = "throw_delegate",
380
- srcs = ["internal/throw_delegate.cc"],
381
- hdrs = ["internal/throw_delegate.h"],
402
+ srcs = [
403
+ "throw_delegate.cc",
404
+ ],
405
+ hdrs = [
406
+ "throw_delegate.h",
407
+ ],
382
408
  copts = ABSL_DEFAULT_COPTS,
383
409
  linkopts = ABSL_DEFAULT_LINKOPTS,
384
- visibility = [
385
- "//absl:__subpackages__",
386
- ],
387
410
  deps = [
388
411
  ":config",
389
412
  ":raw_logging_internal",
@@ -425,6 +448,7 @@ cc_library(
425
448
  linkopts = ABSL_DEFAULT_LINKOPTS,
426
449
  visibility = [
427
450
  "//absl:__subpackages__",
451
+ "//absl:friends",
428
452
  ],
429
453
  deps = [
430
454
  ":config",
@@ -438,6 +462,7 @@ cc_library(
438
462
  linkopts = ABSL_DEFAULT_LINKOPTS,
439
463
  visibility = [
440
464
  "//absl:__subpackages__",
465
+ "//absl:friends",
441
466
  ],
442
467
  )
443
468
 
@@ -518,6 +543,7 @@ cc_library(
518
543
  copts = ABSL_TEST_COPTS,
519
544
  linkopts = ABSL_DEFAULT_LINKOPTS,
520
545
  visibility = [
546
+ "//absl:friends",
521
547
  "//absl/base:__pkg__",
522
548
  ],
523
549
  deps = [
@@ -553,6 +579,7 @@ cc_library(
553
579
  linkopts = ABSL_DEFAULT_LINKOPTS,
554
580
  visibility = [
555
581
  "//absl:__subpackages__",
582
+ "//absl:friends",
556
583
  ],
557
584
  deps = [
558
585
  ":base",
@@ -617,6 +644,23 @@ cc_test(
617
644
  ],
618
645
  )
619
646
 
647
+ cc_test(
648
+ name = "hardening_test",
649
+ size = "small",
650
+ srcs = [
651
+ "internal/hardening_test.cc",
652
+ ],
653
+ copts = ABSL_TEST_COPTS,
654
+ linkopts = ABSL_DEFAULT_LINKOPTS,
655
+ deps = [
656
+ ":config",
657
+ ":core_headers",
658
+ ":hardening",
659
+ "@googletest//:gtest",
660
+ "@googletest//:gtest_main",
661
+ ],
662
+ )
663
+
620
664
  cc_test(
621
665
  name = "no_destructor_test",
622
666
  srcs = ["no_destructor_test.cc"],
@@ -806,6 +850,7 @@ cc_library(
806
850
  linkopts = ABSL_DEFAULT_LINKOPTS,
807
851
  visibility = [
808
852
  "//absl:__subpackages__",
853
+ "//absl:friends",
809
854
  ],
810
855
  deps = [
811
856
  ":config",
@@ -904,6 +949,7 @@ cc_library(
904
949
  linkopts = ABSL_DEFAULT_LINKOPTS,
905
950
  visibility = [
906
951
  "//absl:__subpackages__",
952
+ "//absl:friends",
907
953
  ],
908
954
  deps = [
909
955
  ":config",
@@ -952,7 +998,6 @@ cc_test(
952
998
  linkopts = ABSL_DEFAULT_LINKOPTS,
953
999
  deps = [
954
1000
  ":core_headers",
955
- "//absl/types:optional",
956
1001
  "@googletest//:gtest",
957
1002
  "@googletest//:gtest_main",
958
1003
  ],
@@ -965,6 +1010,7 @@ cc_library(
965
1010
  linkopts = ABSL_DEFAULT_LINKOPTS,
966
1011
  visibility = [
967
1012
  "//absl:__subpackages__",
1013
+ "//absl:friends",
968
1014
  ],
969
1015
  deps = [
970
1016
  ":config",
@@ -994,6 +1040,7 @@ cc_library(
994
1040
  linkopts = ABSL_DEFAULT_LINKOPTS,
995
1041
  visibility = [
996
1042
  "//absl:__subpackages__",
1043
+ "//absl:friends",
997
1044
  ],
998
1045
  deps = [
999
1046
  "//absl/base:config",
@@ -41,6 +41,18 @@ absl_cc_library(
41
41
  ${ABSL_DEFAULT_COPTS}
42
42
  )
43
43
 
44
+ absl_cc_library(
45
+ NAME
46
+ hardening
47
+ HDRS
48
+ "internal/hardening.h"
49
+ DEPS
50
+ absl::config
51
+ absl::core_headers
52
+ COPTS
53
+ ${ABSL_DEFAULT_COPTS}
54
+ )
55
+
44
56
  absl_cc_library(
45
57
  NAME
46
58
  log_severity
@@ -290,14 +302,13 @@ absl_cc_library(
290
302
  PUBLIC
291
303
  )
292
304
 
293
- # Internal-only target, do not depend on directly.
294
305
  absl_cc_library(
295
306
  NAME
296
307
  throw_delegate
297
308
  HDRS
298
- "internal/throw_delegate.h"
309
+ "throw_delegate.h"
299
310
  SRCS
300
- "internal/throw_delegate.cc"
311
+ "throw_delegate.cc"
301
312
  COPTS
302
313
  ${ABSL_DEFAULT_COPTS}
303
314
  DEPS
@@ -405,6 +416,20 @@ absl_cc_test(
405
416
  GTest::gtest_main
406
417
  )
407
418
 
419
+ absl_cc_test(
420
+ NAME
421
+ hardening_test
422
+ SRCS
423
+ "internal/hardening_test.cc"
424
+ COPTS
425
+ ${ABSL_TEST_COPTS}
426
+ DEPS
427
+ absl::config
428
+ absl::core_headers
429
+ absl::hardening
430
+ GTest::gtest_main
431
+ )
432
+
408
433
  absl_cc_test(
409
434
  NAME
410
435
  bit_cast_test
@@ -766,7 +791,6 @@ absl_cc_test(
766
791
  ${ABSL_TEST_COPTS}
767
792
  DEPS
768
793
  absl::core_headers
769
- absl::optional
770
794
  GTest::gtest_main
771
795
  )
772
796