re2 1.22.2 → 1.23.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 (495) hide show
  1. package/README.md +60 -4
  2. package/binding.gyp +5 -1
  3. package/lib/addon.cc +4 -0
  4. package/lib/new.cc +1 -246
  5. package/lib/pattern.cc +252 -0
  6. package/lib/pattern.h +10 -0
  7. package/lib/set.cc +777 -0
  8. package/lib/wrapped_re2_set.h +42 -0
  9. package/package.json +21 -9
  10. package/re2.d.ts +46 -9
  11. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +14 -24
  12. package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +3 -3
  13. package/vendor/abseil-cpp/CMake/README.md +2 -2
  14. package/vendor/abseil-cpp/CMakeLists.txt +3 -3
  15. package/vendor/abseil-cpp/MODULE.bazel +6 -9
  16. package/vendor/abseil-cpp/README.md +6 -8
  17. package/vendor/abseil-cpp/absl/abseil.podspec.gen.py +6 -4
  18. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +3 -0
  19. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +1 -0
  20. package/vendor/abseil-cpp/absl/algorithm/container.h +2 -19
  21. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +4 -11
  22. package/vendor/abseil-cpp/absl/base/BUILD.bazel +60 -45
  23. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +57 -38
  24. package/vendor/abseil-cpp/absl/base/attributes.h +76 -7
  25. package/vendor/abseil-cpp/absl/base/attributes_test.cc +43 -0
  26. package/vendor/abseil-cpp/absl/base/call_once.h +11 -12
  27. package/vendor/abseil-cpp/absl/base/config.h +22 -129
  28. package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -4
  29. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  30. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id_test.cc → fast_type_id_test.cc} +34 -30
  31. package/vendor/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  32. package/vendor/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  33. package/vendor/abseil-cpp/absl/base/internal/endian.h +34 -38
  34. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  35. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
  36. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
  37. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -9
  38. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  39. package/vendor/abseil-cpp/absl/base/internal/poison.cc +7 -6
  40. package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +15 -28
  41. package/vendor/abseil-cpp/absl/base/internal/spinlock.h +65 -35
  42. package/vendor/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +2 -2
  43. package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +2 -2
  44. package/vendor/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +1 -1
  45. package/vendor/abseil-cpp/absl/base/internal/thread_identity_test.cc +4 -4
  46. package/vendor/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  47. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +4 -0
  48. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  49. package/vendor/abseil-cpp/absl/base/no_destructor.h +11 -32
  50. package/vendor/abseil-cpp/absl/base/no_destructor_test.cc +0 -4
  51. package/vendor/abseil-cpp/absl/base/nullability.h +83 -72
  52. package/vendor/abseil-cpp/absl/base/nullability_test.cc +25 -64
  53. package/vendor/abseil-cpp/absl/base/options.h +3 -80
  54. package/vendor/abseil-cpp/absl/base/policy_checks.h +7 -7
  55. package/vendor/abseil-cpp/absl/base/raw_logging_test.cc +15 -0
  56. package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +50 -30
  57. package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -1
  58. package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -1
  59. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  60. package/vendor/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -2
  61. package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  62. package/vendor/abseil-cpp/absl/container/BUILD.bazel +74 -1
  63. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +73 -0
  64. package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +51 -9
  65. package/vendor/abseil-cpp/absl/container/btree_map.h +8 -6
  66. package/vendor/abseil-cpp/absl/container/btree_set.h +8 -6
  67. package/vendor/abseil-cpp/absl/container/btree_test.cc +89 -4
  68. package/vendor/abseil-cpp/absl/container/fixed_array.h +7 -15
  69. package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +17 -0
  70. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +20 -15
  71. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +8 -14
  72. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +19 -14
  73. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +46 -0
  74. package/vendor/abseil-cpp/absl/container/inlined_vector.h +7 -6
  75. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +28 -0
  76. package/vendor/abseil-cpp/absl/container/internal/btree.h +132 -29
  77. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  78. package/vendor/abseil-cpp/absl/container/internal/common.h +43 -0
  79. package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  80. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +28 -24
  81. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +4 -17
  82. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +80 -17
  83. package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +32 -2
  84. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +13 -8
  85. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +1 -52
  86. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +9 -31
  87. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +23 -32
  88. package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +5 -1
  89. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +11 -23
  90. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +14 -9
  91. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +516 -0
  92. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
  93. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -6
  94. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +32 -13
  95. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +8 -8
  96. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  97. package/vendor/abseil-cpp/absl/container/internal/layout.h +26 -42
  98. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  99. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +1506 -213
  100. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +1095 -1658
  101. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +3 -2
  102. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +31 -29
  103. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +51 -20
  104. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
  105. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
  106. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +707 -363
  107. package/vendor/abseil-cpp/absl/container/node_hash_map.h +20 -15
  108. package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +0 -3
  109. package/vendor/abseil-cpp/absl/container/node_hash_set.h +18 -13
  110. package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +3 -8
  111. package/vendor/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +1 -1
  112. package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +9 -20
  113. package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +9 -20
  114. package/vendor/abseil-cpp/absl/copts/copts.py +24 -15
  115. package/vendor/abseil-cpp/absl/crc/BUILD.bazel +3 -0
  116. package/vendor/abseil-cpp/absl/crc/crc32c.cc +0 -4
  117. package/vendor/abseil-cpp/absl/crc/crc32c.h +7 -5
  118. package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +17 -4
  119. package/vendor/abseil-cpp/absl/crc/crc32c_test.cc +30 -0
  120. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +17 -0
  121. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  122. package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  123. package/vendor/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  124. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +136 -165
  125. package/vendor/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
  126. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +7 -0
  127. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +4 -0
  128. package/vendor/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  129. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  130. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  131. package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  132. package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  133. package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +11 -10
  134. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  135. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  136. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  137. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  138. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  139. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  140. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  141. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  142. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  143. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -14
  144. package/vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  145. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +161 -27
  146. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  147. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +435 -1
  148. package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +55 -63
  149. package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  150. package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  151. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -0
  152. package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +3 -0
  153. package/vendor/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  154. package/vendor/abseil-cpp/absl/flags/flag.h +4 -3
  155. package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  156. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +14 -13
  157. package/vendor/abseil-cpp/absl/flags/internal/flag.h +34 -34
  158. package/vendor/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  159. package/vendor/abseil-cpp/absl/flags/internal/registry.h +4 -3
  160. package/vendor/abseil-cpp/absl/flags/internal/usage.cc +2 -2
  161. package/vendor/abseil-cpp/absl/flags/parse.cc +10 -6
  162. package/vendor/abseil-cpp/absl/flags/reflection.cc +9 -7
  163. package/vendor/abseil-cpp/absl/flags/usage.cc +2 -2
  164. package/vendor/abseil-cpp/absl/flags/usage_config.cc +2 -2
  165. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +7 -6
  166. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +2 -4
  167. package/vendor/abseil-cpp/absl/functional/any_invocable.h +15 -15
  168. package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +10 -42
  169. package/vendor/abseil-cpp/absl/functional/function_ref.h +2 -9
  170. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +10 -0
  171. package/vendor/abseil-cpp/absl/functional/function_type_benchmark.cc +1 -1
  172. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +112 -227
  173. package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  174. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  175. package/vendor/abseil-cpp/absl/functional/overload.h +0 -20
  176. package/vendor/abseil-cpp/absl/functional/overload_test.cc +1 -7
  177. package/vendor/abseil-cpp/absl/hash/BUILD.bazel +16 -9
  178. package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +6 -9
  179. package/vendor/abseil-cpp/absl/hash/hash.h +18 -0
  180. package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +3 -0
  181. package/vendor/abseil-cpp/absl/hash/hash_instantiated_test.cc +1 -1
  182. package/vendor/abseil-cpp/absl/hash/hash_test.cc +131 -30
  183. package/vendor/abseil-cpp/absl/hash/hash_testing.h +20 -20
  184. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +129 -17
  185. package/vendor/abseil-cpp/absl/hash/internal/hash.h +326 -362
  186. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +54 -151
  187. package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +14 -2
  188. package/vendor/abseil-cpp/absl/{strings/cord_buffer.cc → hash/internal/weakly_mixed_integer.h} +14 -6
  189. package/vendor/abseil-cpp/absl/log/BUILD.bazel +4 -0
  190. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +7 -0
  191. package/vendor/abseil-cpp/absl/log/check.h +2 -1
  192. package/vendor/abseil-cpp/absl/log/check_test_impl.inc +308 -14
  193. package/vendor/abseil-cpp/absl/log/die_if_null.h +2 -2
  194. package/vendor/abseil-cpp/absl/log/flags_test.cc +7 -0
  195. package/vendor/abseil-cpp/absl/log/globals.h +4 -5
  196. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +13 -9
  197. package/vendor/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  198. package/vendor/abseil-cpp/absl/log/internal/check_op.cc +24 -22
  199. package/vendor/abseil-cpp/absl/log/internal/check_op.h +149 -94
  200. package/vendor/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  201. package/vendor/abseil-cpp/absl/log/internal/conditions.h +7 -2
  202. package/vendor/abseil-cpp/absl/log/internal/fnmatch_test.cc +1 -0
  203. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  204. package/vendor/abseil-cpp/absl/log/internal/log_message.h +84 -59
  205. package/vendor/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  206. package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  207. package/vendor/abseil-cpp/absl/log/internal/proto.cc +3 -2
  208. package/vendor/abseil-cpp/absl/log/internal/proto.h +3 -3
  209. package/vendor/abseil-cpp/absl/log/internal/strip.h +4 -12
  210. package/vendor/abseil-cpp/absl/log/internal/structured.h +3 -7
  211. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +9 -9
  212. package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  213. package/vendor/abseil-cpp/absl/log/internal/voidify.h +10 -4
  214. package/vendor/abseil-cpp/absl/log/log.h +48 -35
  215. package/vendor/abseil-cpp/absl/log/log_basic_test_impl.inc +45 -0
  216. package/vendor/abseil-cpp/absl/log/log_entry.cc +241 -19
  217. package/vendor/abseil-cpp/absl/log/log_entry.h +2 -0
  218. package/vendor/abseil-cpp/absl/log/log_format_test.cc +412 -6
  219. package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +20 -0
  220. package/vendor/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  221. package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +15 -2
  222. package/vendor/abseil-cpp/absl/log/scoped_mock_log.h +7 -1
  223. package/vendor/abseil-cpp/absl/log/structured_test.cc +1 -0
  224. package/vendor/abseil-cpp/absl/memory/BUILD.bazel +2 -0
  225. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
  226. package/vendor/abseil-cpp/absl/meta/type_traits.h +46 -175
  227. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +1 -478
  228. package/vendor/abseil-cpp/absl/numeric/BUILD.bazel +7 -3
  229. package/vendor/abseil-cpp/absl/numeric/CMakeLists.txt +2 -0
  230. package/vendor/abseil-cpp/absl/numeric/bits.h +68 -2
  231. package/vendor/abseil-cpp/absl/numeric/bits_benchmark.cc +1 -1
  232. package/vendor/abseil-cpp/absl/numeric/bits_test.cc +83 -0
  233. package/vendor/abseil-cpp/absl/numeric/int128.cc +0 -52
  234. package/vendor/abseil-cpp/absl/numeric/int128_benchmark.cc +14 -15
  235. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +13 -8
  236. package/vendor/abseil-cpp/absl/numeric/internal/bits.h +39 -7
  237. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +47 -0
  238. package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +38 -0
  239. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +124 -0
  240. package/vendor/abseil-cpp/absl/profiling/hashtable.h +40 -0
  241. package/vendor/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  242. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +462 -0
  243. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +138 -0
  244. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  245. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +7 -3
  246. package/vendor/abseil-cpp/absl/random/BUILD.bazel +6 -4
  247. package/vendor/abseil-cpp/absl/random/CMakeLists.txt +20 -19
  248. package/vendor/abseil-cpp/absl/random/benchmarks.cc +16 -23
  249. package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  250. package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +7 -2
  251. package/vendor/abseil-cpp/absl/random/distributions.h +6 -8
  252. package/vendor/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  253. package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +19 -20
  254. package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  255. package/vendor/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +24 -92
  256. package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h} +14 -6
  257. package/vendor/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
  258. package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +6 -7
  259. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  260. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +39 -0
  261. package/vendor/abseil-cpp/absl/random/internal/randen_benchmarks.cc +8 -6
  262. package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  263. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  264. package/vendor/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  265. package/vendor/abseil-cpp/absl/random/internal/seed_material_test.cc +3 -0
  266. package/vendor/abseil-cpp/absl/random/mock_distributions_test.cc +5 -4
  267. package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +8 -10
  268. package/vendor/abseil-cpp/absl/random/random.h +88 -53
  269. package/vendor/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  270. package/vendor/abseil-cpp/absl/status/BUILD.bazel +26 -0
  271. package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  272. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  273. package/vendor/abseil-cpp/absl/status/internal/status_matchers.cc +4 -3
  274. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +194 -32
  275. package/vendor/abseil-cpp/absl/status/status.cc +4 -8
  276. package/vendor/abseil-cpp/absl/status/status.h +8 -8
  277. package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc} +20 -10
  278. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +65 -0
  279. package/vendor/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  280. package/vendor/abseil-cpp/absl/status/statusor.cc +2 -2
  281. package/vendor/abseil-cpp/absl/status/statusor.h +49 -102
  282. package/vendor/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
  283. package/vendor/abseil-cpp/absl/status/statusor_test.cc +323 -1
  284. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +70 -34
  285. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +6 -3
  286. package/vendor/abseil-cpp/absl/strings/ascii.cc +9 -9
  287. package/vendor/abseil-cpp/absl/strings/ascii.h +18 -18
  288. package/vendor/abseil-cpp/absl/strings/ascii_benchmark.cc +5 -8
  289. package/vendor/abseil-cpp/absl/strings/charconv.cc +21 -22
  290. package/vendor/abseil-cpp/absl/strings/charconv.h +5 -5
  291. package/vendor/abseil-cpp/absl/strings/charconv_benchmark.cc +1 -2
  292. package/vendor/abseil-cpp/absl/strings/charset_benchmark.cc +1 -1
  293. package/vendor/abseil-cpp/absl/strings/cord.cc +54 -58
  294. package/vendor/abseil-cpp/absl/strings/cord.h +94 -84
  295. package/vendor/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  296. package/vendor/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  297. package/vendor/abseil-cpp/absl/strings/cord_test.cc +23 -0
  298. package/vendor/abseil-cpp/absl/strings/cordz_test_helpers.h +4 -5
  299. package/vendor/abseil-cpp/absl/strings/escaping.cc +130 -149
  300. package/vendor/abseil-cpp/absl/strings/escaping.h +9 -10
  301. package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +2 -3
  302. package/vendor/abseil-cpp/absl/strings/escaping_test.cc +19 -9
  303. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  304. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +1 -1
  305. package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +6 -10
  306. package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  307. package/vendor/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  308. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +5 -9
  309. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +2 -4
  310. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
  311. package/vendor/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +2 -3
  312. package/vendor/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +1 -2
  313. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  314. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  315. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1 -6
  316. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  317. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +3 -2
  318. package/vendor/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  319. package/vendor/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  320. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  321. package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +7 -2
  322. package/vendor/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  323. package/vendor/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  324. package/vendor/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  325. package/vendor/abseil-cpp/absl/strings/internal/utf8_test.cc +196 -3
  326. package/vendor/abseil-cpp/absl/strings/numbers.cc +53 -32
  327. package/vendor/abseil-cpp/absl/strings/numbers.h +87 -58
  328. package/vendor/abseil-cpp/absl/strings/numbers_benchmark.cc +1 -1
  329. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +634 -120
  330. package/vendor/abseil-cpp/absl/strings/str_cat.cc +6 -7
  331. package/vendor/abseil-cpp/absl/strings/str_cat.h +32 -32
  332. package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +25 -1
  333. package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +2 -7
  334. package/vendor/abseil-cpp/absl/strings/str_format.h +18 -18
  335. package/vendor/abseil-cpp/absl/strings/str_format_test.cc +8 -14
  336. package/vendor/abseil-cpp/absl/strings/str_join_benchmark.cc +2 -3
  337. package/vendor/abseil-cpp/absl/strings/str_replace.cc +3 -3
  338. package/vendor/abseil-cpp/absl/strings/str_replace.h +6 -6
  339. package/vendor/abseil-cpp/absl/strings/str_replace_benchmark.cc +2 -3
  340. package/vendor/abseil-cpp/absl/strings/str_split.h +2 -2
  341. package/vendor/abseil-cpp/absl/strings/str_split_benchmark.cc +2 -3
  342. package/vendor/abseil-cpp/absl/strings/string_view.cc +4 -9
  343. package/vendor/abseil-cpp/absl/strings/string_view.h +38 -39
  344. package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +4 -6
  345. package/vendor/abseil-cpp/absl/strings/string_view_test.cc +2 -50
  346. package/vendor/abseil-cpp/absl/strings/strip.h +4 -4
  347. package/vendor/abseil-cpp/absl/strings/substitute.cc +5 -4
  348. package/vendor/abseil-cpp/absl/strings/substitute.h +66 -64
  349. package/vendor/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
  350. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +6 -1
  351. package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +2 -1
  352. package/vendor/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  353. package/vendor/abseil-cpp/absl/synchronization/barrier_test.cc +3 -3
  354. package/vendor/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  355. package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  356. package/vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  357. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  358. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +2 -3
  359. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +6 -5
  360. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  361. package/vendor/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  362. package/vendor/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  363. package/vendor/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  364. package/vendor/abseil-cpp/absl/synchronization/internal/thread_pool.h +3 -3
  365. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  366. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_test.cc +12 -3
  367. package/vendor/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  368. package/vendor/abseil-cpp/absl/synchronization/lifetime_test.cc +4 -4
  369. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +27 -29
  370. package/vendor/abseil-cpp/absl/synchronization/mutex.h +205 -126
  371. package/vendor/abseil-cpp/absl/synchronization/mutex_benchmark.cc +13 -31
  372. package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +183 -169
  373. package/vendor/abseil-cpp/absl/synchronization/notification.cc +5 -5
  374. package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
  375. package/vendor/abseil-cpp/absl/synchronization/notification_test.cc +3 -3
  376. package/vendor/abseil-cpp/absl/time/BUILD.bazel +9 -1
  377. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +3 -1
  378. package/vendor/abseil-cpp/absl/time/civil_time.cc +1 -0
  379. package/vendor/abseil-cpp/absl/time/civil_time_test.cc +134 -0
  380. package/vendor/abseil-cpp/absl/time/clock.cc +11 -14
  381. package/vendor/abseil-cpp/absl/time/duration.cc +14 -9
  382. package/vendor/abseil-cpp/absl/time/duration_test.cc +6 -7
  383. package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +14 -3
  384. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  385. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  386. package/vendor/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +4 -490
  387. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
  388. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
  389. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +41 -4
  390. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +22 -23
  391. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  392. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +1 -488
  393. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  394. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
  395. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
  396. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
  397. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +2 -1
  398. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +1 -1
  399. package/vendor/abseil-cpp/absl/time/time.h +24 -18
  400. package/vendor/abseil-cpp/absl/time/time_test.cc +26 -0
  401. package/vendor/abseil-cpp/absl/types/BUILD.bazel +11 -164
  402. package/vendor/abseil-cpp/absl/types/CMakeLists.txt +23 -167
  403. package/vendor/abseil-cpp/absl/types/any.h +9 -484
  404. package/vendor/abseil-cpp/absl/types/optional.h +7 -747
  405. package/vendor/abseil-cpp/absl/types/span.h +46 -19
  406. package/vendor/abseil-cpp/absl/types/span_test.cc +27 -0
  407. package/vendor/abseil-cpp/absl/types/variant.h +5 -784
  408. package/vendor/abseil-cpp/absl/types/variant_test.cc +43 -2597
  409. package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -41
  410. package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +0 -40
  411. package/vendor/abseil-cpp/absl/utility/utility.h +10 -185
  412. package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -3
  413. package/vendor/abseil-cpp/ci/cmake_common.sh +2 -2
  414. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +12 -13
  415. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +24 -21
  416. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +12 -12
  417. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +23 -22
  418. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +20 -19
  419. package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
  420. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +17 -17
  421. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +10 -10
  422. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +1 -1
  423. package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +1 -1
  424. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +9 -10
  425. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +9 -1
  426. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +14 -6
  427. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +14 -6
  428. package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +1 -1
  429. package/vendor/re2/.bazelrc +4 -4
  430. package/vendor/re2/.bcr/metadata.template.json +16 -0
  431. package/vendor/re2/.bcr/presubmit.yml +57 -0
  432. package/vendor/re2/.bcr/source.template.json +5 -0
  433. package/vendor/re2/.github/bazel.sh +1 -7
  434. package/vendor/re2/.github/workflows/ci-bazel.yml +5 -5
  435. package/vendor/re2/.github/workflows/ci-cmake.yml +4 -4
  436. package/vendor/re2/.github/workflows/ci.yml +5 -6
  437. package/vendor/re2/.github/workflows/pages.yml +3 -3
  438. package/vendor/re2/.github/workflows/python.yml +29 -24
  439. package/vendor/re2/.github/workflows/release-bazel.yml +42 -0
  440. package/vendor/re2/.github/workflows/release.yml +15 -4
  441. package/vendor/re2/BUILD.bazel +25 -0
  442. package/vendor/re2/CMakeLists.txt +100 -85
  443. package/vendor/re2/CONTRIBUTING.md +0 -1
  444. package/vendor/re2/MODULE.bazel +10 -10
  445. package/vendor/re2/Makefile +1 -1
  446. package/vendor/re2/README.md +259 -0
  447. package/vendor/re2/python/BUILD.bazel +8 -0
  448. package/vendor/re2/python/re2.py +1 -1
  449. package/vendor/re2/python/re2_test.py +6 -0
  450. package/vendor/re2/python/setup.py +3 -3
  451. package/vendor/re2/re2/bitmap256.cc +3 -4
  452. package/vendor/re2/re2/bitstate.cc +15 -10
  453. package/vendor/re2/re2/dfa.cc +1 -2
  454. package/vendor/re2/re2/parse.cc +3 -4
  455. package/vendor/re2/re2/prog.cc +1 -2
  456. package/vendor/re2/re2/prog.h +1 -0
  457. package/vendor/re2/re2/re2.cc +5 -0
  458. package/vendor/re2/re2/re2.h +9 -9
  459. package/vendor/re2/re2/set.cc +6 -0
  460. package/vendor/re2/re2/set.h +5 -0
  461. package/vendor/re2/re2/testing/re2_arg_test.cc +3 -3
  462. package/vendor/re2/re2/testing/re2_test.cc +8 -0
  463. package/vendor/re2/re2/testing/set_test.cc +5 -0
  464. package/vendor/re2/re2/walker-inl.h +1 -1
  465. package/vendor/abseil-cpp/WORKSPACE +0 -76
  466. package/vendor/abseil-cpp/WORKSPACE.bzlmod +0 -19
  467. package/vendor/abseil-cpp/absl/base/inline_variable_test.cc +0 -64
  468. package/vendor/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  469. package/vendor/abseil-cpp/absl/base/internal/inline_variable_testing.h +0 -46
  470. package/vendor/abseil-cpp/absl/base/internal/invoke.h +0 -241
  471. package/vendor/abseil-cpp/absl/base/internal/nullability_impl.h +0 -69
  472. package/vendor/abseil-cpp/absl/base/invoke_test.cc +0 -331
  473. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -148
  474. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -54
  475. package/vendor/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  476. package/vendor/abseil-cpp/absl/random/internal/pool_urbg_test.cc +0 -182
  477. package/vendor/abseil-cpp/absl/types/any_exception_safety_test.cc +0 -173
  478. package/vendor/abseil-cpp/absl/types/any_test.cc +0 -778
  479. package/vendor/abseil-cpp/absl/types/bad_any_cast.cc +0 -64
  480. package/vendor/abseil-cpp/absl/types/bad_any_cast.h +0 -75
  481. package/vendor/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  482. package/vendor/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  483. package/vendor/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  484. package/vendor/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  485. package/vendor/abseil-cpp/absl/types/internal/optional.h +0 -352
  486. package/vendor/abseil-cpp/absl/types/internal/variant.h +0 -1622
  487. package/vendor/abseil-cpp/absl/types/optional_exception_safety_test.cc +0 -292
  488. package/vendor/abseil-cpp/absl/types/optional_test.cc +0 -1615
  489. package/vendor/abseil-cpp/absl/types/variant_benchmark.cc +0 -222
  490. package/vendor/abseil-cpp/absl/types/variant_exception_safety_test.cc +0 -532
  491. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr.h +0 -70
  492. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr_test.cc +0 -79
  493. package/vendor/abseil-cpp/absl/utility/utility_test.cc +0 -239
  494. package/vendor/re2/.github/workflows/pr.yml +0 -34
  495. package/vendor/re2/README +0 -47
@@ -14,6 +14,9 @@
14
14
  # limitations under the License.
15
15
  #
16
16
 
17
+ load("@rules_cc//cc:cc_binary.bzl", "cc_binary")
18
+ load("@rules_cc//cc:cc_library.bzl", "cc_library")
19
+ load("@rules_cc//cc:cc_test.bzl", "cc_test")
17
20
  load(
18
21
  "//absl:copts/configure_copts.bzl",
19
22
  "ABSL_DEFAULT_COPTS",
@@ -43,10 +46,11 @@ cc_library(
43
46
  linkopts = ABSL_DEFAULT_LINKOPTS,
44
47
  deps = [
45
48
  ":city",
46
- ":low_level_hash",
49
+ ":weakly_mixed_integer",
47
50
  "//absl/base:config",
48
51
  "//absl/base:core_headers",
49
52
  "//absl/base:endian",
53
+ "//absl/base:prefetch",
50
54
  "//absl/container:fixed_array",
51
55
  "//absl/functional:function_ref",
52
56
  "//absl/meta:type_traits",
@@ -75,6 +79,7 @@ cc_library(
75
79
 
76
80
  cc_test(
77
81
  name = "hash_test",
82
+ size = "large",
78
83
  srcs = [
79
84
  "hash_test.cc",
80
85
  "internal/hash_test.h",
@@ -86,6 +91,7 @@ cc_test(
86
91
  ":hash_testing",
87
92
  ":spy_hash_state",
88
93
  "//absl/base:config",
94
+ "//absl/container:flat_hash_map",
89
95
  "//absl/container:flat_hash_set",
90
96
  "//absl/memory",
91
97
  "//absl/meta:type_traits",
@@ -150,6 +156,7 @@ cc_library(
150
156
  visibility = ["//visibility:private"],
151
157
  deps = [
152
158
  ":hash",
159
+ ":weakly_mixed_integer",
153
160
  "//absl/strings",
154
161
  "//absl/strings:str_format",
155
162
  ],
@@ -183,17 +190,17 @@ cc_test(
183
190
  )
184
191
 
185
192
  cc_library(
186
- name = "low_level_hash",
187
- srcs = ["internal/low_level_hash.cc"],
188
- hdrs = ["internal/low_level_hash.h"],
193
+ name = "weakly_mixed_integer",
194
+ hdrs = ["internal/weakly_mixed_integer.h"],
189
195
  copts = ABSL_DEFAULT_COPTS,
190
196
  linkopts = ABSL_DEFAULT_LINKOPTS,
191
- visibility = ["//visibility:private"],
197
+ visibility = [
198
+ "//absl/container:__pkg__",
199
+ "//absl/strings:__pkg__",
200
+ "//absl/types:__pkg__",
201
+ ],
192
202
  deps = [
193
203
  "//absl/base:config",
194
- "//absl/base:endian",
195
- "//absl/base:prefetch",
196
- "//absl/numeric:int128",
197
204
  ],
198
205
  )
199
206
 
@@ -204,7 +211,7 @@ cc_test(
204
211
  linkopts = ABSL_DEFAULT_LINKOPTS,
205
212
  visibility = ["//visibility:private"],
206
213
  deps = [
207
- ":low_level_hash",
214
+ ":hash",
208
215
  "//absl/strings",
209
216
  "@googletest//:gtest",
210
217
  "@googletest//:gtest_main",
@@ -38,7 +38,7 @@ absl_cc_library(
38
38
  absl::optional
39
39
  absl::variant
40
40
  absl::utility
41
- absl::low_level_hash
41
+ absl::weakly_mixed_integer
42
42
  PUBLIC
43
43
  )
44
44
 
@@ -70,6 +70,7 @@ absl_cc_test(
70
70
  DEPS
71
71
  absl::bits
72
72
  absl::cord_test_helpers
73
+ absl::flat_hash_map
73
74
  absl::flat_hash_set
74
75
  absl::hash
75
76
  absl::hash_testing
@@ -118,6 +119,7 @@ absl_cc_library(
118
119
  absl::hash
119
120
  absl::strings
120
121
  absl::str_format
122
+ absl::weakly_mixed_integer
121
123
  TESTONLY
122
124
  PUBLIC
123
125
  )
@@ -153,18 +155,13 @@ absl_cc_test(
153
155
  # Internal-only target, do not depend on directly.
154
156
  absl_cc_library(
155
157
  NAME
156
- low_level_hash
158
+ weakly_mixed_integer
157
159
  HDRS
158
- "internal/low_level_hash.h"
159
- SRCS
160
- "internal/low_level_hash.cc"
160
+ "internal/weakly_mixed_integer.h"
161
161
  COPTS
162
162
  ${ABSL_DEFAULT_COPTS}
163
163
  DEPS
164
164
  absl::config
165
- absl::endian
166
- absl::int128
167
- absl::prefetch
168
165
  )
169
166
 
170
167
  absl_cc_test(
@@ -175,7 +172,7 @@ absl_cc_test(
175
172
  COPTS
176
173
  ${ABSL_TEST_COPTS}
177
174
  DEPS
178
- absl::low_level_hash
175
+ absl::hash
179
176
  absl::strings
180
177
  GTest::gmock_main
181
178
  )
@@ -87,6 +87,7 @@
87
87
  #include "absl/base/config.h"
88
88
  #include "absl/functional/function_ref.h"
89
89
  #include "absl/hash/internal/hash.h"
90
+ #include "absl/hash/internal/weakly_mixed_integer.h"
90
91
  #include "absl/meta/type_traits.h"
91
92
 
92
93
  namespace absl {
@@ -356,6 +357,12 @@ class HashState : public hash_internal::HashStateBase<HashState> {
356
357
  hash_state.combine_contiguous_(hash_state.state_, first, size);
357
358
  return hash_state;
358
359
  }
360
+
361
+ static HashState combine_weakly_mixed_integer(
362
+ HashState hash_state, hash_internal::WeaklyMixedInteger value) {
363
+ hash_state.combine_weakly_mixed_integer_(hash_state.state_, value);
364
+ return hash_state;
365
+ }
359
366
  using HashState::HashStateBase::combine_contiguous;
360
367
 
361
368
  private:
@@ -371,6 +378,13 @@ class HashState : public hash_internal::HashStateBase<HashState> {
371
378
  state = T::combine_contiguous(std::move(state), first, size);
372
379
  }
373
380
 
381
+ template <typename T>
382
+ static void CombineWeaklyMixedIntegerImpl(
383
+ void* p, hash_internal::WeaklyMixedInteger value) {
384
+ T& state = *static_cast<T*>(p);
385
+ state = T::combine_weakly_mixed_integer(std::move(state), value);
386
+ }
387
+
374
388
  static HashState combine_raw(HashState hash_state, uint64_t value) {
375
389
  hash_state.combine_raw_(hash_state.state_, value);
376
390
  return hash_state;
@@ -385,6 +399,7 @@ class HashState : public hash_internal::HashStateBase<HashState> {
385
399
  template <typename T>
386
400
  void Init(T* state) {
387
401
  state_ = state;
402
+ combine_weakly_mixed_integer_ = &CombineWeaklyMixedIntegerImpl<T>;
388
403
  combine_contiguous_ = &CombineContiguousImpl<T>;
389
404
  combine_raw_ = &CombineRawImpl<T>;
390
405
  run_combine_unordered_ = &RunCombineUnorderedImpl<T>;
@@ -424,6 +439,7 @@ class HashState : public hash_internal::HashStateBase<HashState> {
424
439
  // Do not erase an already erased state.
425
440
  void Init(HashState* state) {
426
441
  state_ = state->state_;
442
+ combine_weakly_mixed_integer_ = state->combine_weakly_mixed_integer_;
427
443
  combine_contiguous_ = state->combine_contiguous_;
428
444
  combine_raw_ = state->combine_raw_;
429
445
  run_combine_unordered_ = state->run_combine_unordered_;
@@ -435,6 +451,8 @@ class HashState : public hash_internal::HashStateBase<HashState> {
435
451
  }
436
452
 
437
453
  void* state_;
454
+ void (*combine_weakly_mixed_integer_)(
455
+ void*, absl::hash_internal::WeaklyMixedInteger);
438
456
  void (*combine_contiguous_)(void*, const unsigned char*, size_t);
439
457
  void (*combine_raw_)(void*, uint64_t);
440
458
  HashState (*run_combine_unordered_)(
@@ -378,7 +378,10 @@ struct StringRand {
378
378
 
379
379
  MAKE_LATENCY_BENCHMARK(AbslHash, Int32, PodRand<int32_t>)
380
380
  MAKE_LATENCY_BENCHMARK(AbslHash, Int64, PodRand<int64_t>)
381
+ MAKE_LATENCY_BENCHMARK(AbslHash, String3, StringRand<3>)
382
+ MAKE_LATENCY_BENCHMARK(AbslHash, String5, StringRand<5>)
381
383
  MAKE_LATENCY_BENCHMARK(AbslHash, String9, StringRand<9>)
384
+ MAKE_LATENCY_BENCHMARK(AbslHash, String17, StringRand<17>)
382
385
  MAKE_LATENCY_BENCHMARK(AbslHash, String33, StringRand<33>)
383
386
  MAKE_LATENCY_BENCHMARK(AbslHash, String65, StringRand<65>)
384
387
  MAKE_LATENCY_BENCHMARK(AbslHash, String257, StringRand<257>)
@@ -51,7 +51,7 @@ using ::absl::hash_test_internal::TypeErasedContainer;
51
51
 
52
52
  // Dummy type with unordered equality and hashing semantics. This preserves
53
53
  // input order internally, and is used below to ensure we get test coverage
54
- // for equal sequences with different iteraton orders.
54
+ // for equal sequences with different iteration orders.
55
55
  template <typename T>
56
56
  class UnorderedSequence {
57
57
  public:
@@ -29,6 +29,7 @@
29
29
  #include <ostream>
30
30
  #include <set>
31
31
  #include <string>
32
+ #include <string_view>
32
33
  #include <tuple>
33
34
  #include <type_traits>
34
35
  #include <unordered_map>
@@ -38,6 +39,7 @@
38
39
  #include "gmock/gmock.h"
39
40
  #include "gtest/gtest.h"
40
41
  #include "absl/base/config.h"
42
+ #include "absl/container/flat_hash_map.h"
41
43
  #include "absl/container/flat_hash_set.h"
42
44
  #include "absl/hash/hash_testing.h"
43
45
  #include "absl/hash/internal/hash_test.h"
@@ -54,23 +56,19 @@
54
56
  #include <filesystem> // NOLINT
55
57
  #endif
56
58
 
57
- #ifdef ABSL_HAVE_STD_STRING_VIEW
58
- #include <string_view>
59
- #endif
60
-
61
59
  namespace {
62
60
 
61
+ using ::absl::Hash;
62
+ using ::absl::container_internal::hashtable_debug_internal::
63
+ HashtableDebugAccess;
64
+ using ::absl::hash_internal::SpyHashState;
63
65
  using ::absl::hash_test_internal::is_hashable;
64
66
  using ::absl::hash_test_internal::TypeErasedContainer;
65
67
  using ::absl::hash_test_internal::TypeErasedValue;
66
- using ::testing::SizeIs;
67
68
 
68
69
  template <typename T>
69
70
  using TypeErasedVector = TypeErasedContainer<std::vector<T>>;
70
71
 
71
- using absl::Hash;
72
- using absl::hash_internal::SpyHashState;
73
-
74
72
  template <typename T>
75
73
  class HashValueIntTest : public testing::Test {
76
74
  };
@@ -173,6 +171,9 @@ TEST(HashValueTest, PointerAlignment) {
173
171
  constexpr size_t kLog2NumValues = 5;
174
172
  constexpr size_t kNumValues = 1 << kLog2NumValues;
175
173
 
174
+ int64_t test_count = 0;
175
+ int64_t total_stuck_bit_count = 0;
176
+
176
177
  for (size_t align = 1; align < kTotalSize / kNumValues;
177
178
  align < 8 ? align += 1 : align < 1024 ? align += 8 : align += 32) {
178
179
  SCOPED_TRACE(align);
@@ -190,10 +191,17 @@ TEST(HashValueTest, PointerAlignment) {
190
191
  // Limit the scope to the bits we would be using for Swisstable.
191
192
  constexpr size_t kMask = (1 << (kLog2NumValues + 7)) - 1;
192
193
  size_t stuck_bits = (~bits_or | bits_and) & kMask;
193
- // Test that there are at most 2 stuck bits. Sometimes we see stuck_bits
194
- // of 0x3.
195
- EXPECT_LE(absl::popcount(stuck_bits), 2) << "0x" << std::hex << stuck_bits;
194
+ int stuck_bit_count = absl::popcount(stuck_bits);
195
+ size_t max_stuck_bits = 5;
196
+ EXPECT_LE(stuck_bit_count, max_stuck_bits)
197
+ << "0x" << std::hex << stuck_bits;
198
+
199
+ total_stuck_bit_count += stuck_bit_count;
200
+ ++test_count;
196
201
  }
202
+ // Test that average across alignments are at most 0.2 stuck bits.
203
+ // As of 2025-05-30 test is also passing with 0.07 stuck bits.
204
+ EXPECT_LE(total_stuck_bit_count, 0.2 * test_count);
197
205
  }
198
206
 
199
207
  TEST(HashValueTest, PointerToMember) {
@@ -400,7 +408,7 @@ TEST(HashValueTest, TestIntrinsicInt128) {
400
408
  EXPECT_TRUE((is_hashable<__int128_t>::value));
401
409
  EXPECT_TRUE((is_hashable<__uint128_t>::value));
402
410
 
403
- absl::flat_hash_set<size_t> hashes;
411
+ absl::flat_hash_map<size_t, int> hash_to_index;
404
412
  std::vector<__uint128_t> values;
405
413
  for (int i = 0; i < 128; ++i) {
406
414
  // Some arbitrary pattern to check if changing each bit changes the hash.
@@ -411,13 +419,14 @@ TEST(HashValueTest, TestIntrinsicInt128) {
411
419
  const __int128_t as_signed = static_cast<__int128_t>(value);
412
420
 
413
421
  values.push_back(value);
414
- hashes.insert(absl::Hash<__uint128_t>{}(value));
422
+ auto [it, inserted] =
423
+ hash_to_index.insert({absl::Hash<__uint128_t>{}(value), i});
424
+ ASSERT_TRUE(inserted) << "Duplicate hash: " << i << " vs " << it->second;
415
425
 
416
426
  // Verify that the fast-path for MixingHashState does not break the hash.
417
427
  EXPECT_EQ(absl::HashOf(value), absl::Hash<__uint128_t>{}(value));
418
428
  EXPECT_EQ(absl::HashOf(as_signed), absl::Hash<__int128_t>{}(as_signed));
419
429
  }
420
- EXPECT_THAT(hashes, SizeIs(128));
421
430
 
422
431
  EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly(values));
423
432
  EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly(
@@ -494,22 +503,15 @@ TEST(HashValueTest, U32String) {
494
503
  }
495
504
 
496
505
  TEST(HashValueTest, WStringView) {
497
- #ifndef ABSL_HAVE_STD_STRING_VIEW
498
- GTEST_SKIP();
499
- #else
500
506
  EXPECT_TRUE((is_hashable<std::wstring_view>::value));
501
507
 
502
508
  EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly(std::make_tuple(
503
509
  std::wstring_view(), std::wstring_view(L"ABC"), std::wstring_view(L"ABC"),
504
510
  std::wstring_view(L"Some other different string_view"),
505
511
  std::wstring_view(L"Iñtërnâtiônàlizætiøn"))));
506
- #endif
507
512
  }
508
513
 
509
514
  TEST(HashValueTest, U16StringView) {
510
- #ifndef ABSL_HAVE_STD_STRING_VIEW
511
- GTEST_SKIP();
512
- #else
513
515
  EXPECT_TRUE((is_hashable<std::u16string_view>::value));
514
516
 
515
517
  EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly(
@@ -517,13 +519,9 @@ TEST(HashValueTest, U16StringView) {
517
519
  std::u16string_view(u"ABC"),
518
520
  std::u16string_view(u"Some other different string_view"),
519
521
  std::u16string_view(u"Iñtërnâtiônàlizætiøn"))));
520
- #endif
521
522
  }
522
523
 
523
524
  TEST(HashValueTest, U32StringView) {
524
- #ifndef ABSL_HAVE_STD_STRING_VIEW
525
- GTEST_SKIP();
526
- #else
527
525
  EXPECT_TRUE((is_hashable<std::u32string_view>::value));
528
526
 
529
527
  EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly(
@@ -531,7 +529,6 @@ TEST(HashValueTest, U32StringView) {
531
529
  std::u32string_view(U"ABC"),
532
530
  std::u32string_view(U"Some other different string_view"),
533
531
  std::u32string_view(U"Iñtërnâtiônàlizætiøn"))));
534
- #endif
535
532
  }
536
533
 
537
534
  TEST(HashValueTest, StdFilesystemPath) {
@@ -706,7 +703,9 @@ TEST(HashValueTest, CombinePiecewiseBuffer) {
706
703
  //
707
704
  // This test is run on a buffer that is a multiple of the stride size, and one
708
705
  // that isn't.
709
- for (size_t big_buffer_size : {1024u * 2 + 512u, 1024u * 3}) {
706
+ const size_t kChunkSize = absl::hash_internal::PiecewiseChunkSize();
707
+ for (size_t big_buffer_size :
708
+ {2 * kChunkSize + kChunkSize / 2, 3 * kChunkSize}) {
710
709
  SCOPED_TRACE(big_buffer_size);
711
710
  std::string big_buffer;
712
711
  for (size_t i = 0; i < big_buffer_size; ++i) {
@@ -716,8 +715,15 @@ TEST(HashValueTest, CombinePiecewiseBuffer) {
716
715
  auto big_buffer_hash = hash(PiecewiseHashTester(big_buffer));
717
716
 
718
717
  const int possible_breaks = 9;
719
- size_t breaks[possible_breaks] = {1, 512, 1023, 1024, 1025,
720
- 1536, 2047, 2048, 2049};
718
+ size_t breaks[possible_breaks] = {1,
719
+ kChunkSize / 2,
720
+ kChunkSize - 1,
721
+ kChunkSize,
722
+ kChunkSize + 1,
723
+ kChunkSize + kChunkSize / 2,
724
+ 2 * kChunkSize - 1,
725
+ 2 * kChunkSize,
726
+ 2 * kChunkSize + 1};
721
727
  for (unsigned test_mask = 0; test_mask < (1u << possible_breaks);
722
728
  ++test_mask) {
723
729
  SCOPED_TRACE(test_mask);
@@ -727,7 +733,7 @@ TEST(HashValueTest, CombinePiecewiseBuffer) {
727
733
  break_locations.insert(breaks[j]);
728
734
  }
729
735
  }
730
- EXPECT_EQ(
736
+ ASSERT_EQ(
731
737
  hash(PiecewiseHashTester(big_buffer, std::move(break_locations))),
732
738
  big_buffer_hash);
733
739
  }
@@ -1213,4 +1219,99 @@ TEST(HashOf, MatchesTypeErasedHashState) {
1213
1219
  TypeErasedHashStateUser{1, s}));
1214
1220
  }
1215
1221
 
1222
+ struct AutoReturnTypeUser {
1223
+ int a;
1224
+ std::string b;
1225
+
1226
+ template <typename H>
1227
+ friend auto AbslHashValue(H state, const AutoReturnTypeUser& value) {
1228
+ return H::combine(std::move(state), value.a, value.b);
1229
+ }
1230
+ };
1231
+
1232
+ TEST(HashOf, AutoReturnTypeUser) {
1233
+ std::string s = "s";
1234
+ EXPECT_EQ(absl::HashOf(1, s),
1235
+ absl::Hash<AutoReturnTypeUser>{}(AutoReturnTypeUser{1, s}));
1236
+ }
1237
+
1238
+ TEST(HashOf, DoubleSignCollision) {
1239
+ // These values differ only in their most significant bit.
1240
+ EXPECT_NE(absl::HashOf(-1.0), absl::HashOf(1.0));
1241
+ }
1242
+
1243
+ // Test for collisions in short strings if PrecombineLengthMix is low quality.
1244
+ TEST(PrecombineLengthMix, ShortStringCollision) {
1245
+ std::string s1 = "00";
1246
+ std::string s2 = "000";
1247
+ constexpr char kMinChar = 0;
1248
+ constexpr char kMaxChar = 32;
1249
+ for (s1[0] = kMinChar; s1[0] < kMaxChar; ++s1[0]) {
1250
+ for (s1[1] = kMinChar; s1[1] < kMaxChar; ++s1[1]) {
1251
+ for (s2[0] = kMinChar; s2[0] < kMaxChar; ++s2[0]) {
1252
+ for (s2[1] = kMinChar; s2[1] < kMaxChar; ++s2[1]) {
1253
+ for (s2[2] = kMinChar; s2[2] < kMaxChar; ++s2[2]) {
1254
+ ASSERT_NE(absl::HashOf(s1), absl::HashOf(s2))
1255
+ << "s1[0]: " << static_cast<int>(s1[0])
1256
+ << "; s1[1]: " << static_cast<int>(s1[1])
1257
+ << "; s2[0]: " << static_cast<int>(s2[0])
1258
+ << "; s2[1]: " << static_cast<int>(s2[1])
1259
+ << "; s2[2]: " << static_cast<int>(s2[2]);
1260
+ }
1261
+ }
1262
+ }
1263
+ }
1264
+ }
1265
+ }
1266
+
1267
+ // Test that we don't cause excessive collisions on the hash table for
1268
+ // doubles in the range [-1024, 1024]. See cl/773069881 for more information.
1269
+ TEST(SwisstableCollisions, DoubleRange) {
1270
+ absl::flat_hash_set<double> set;
1271
+ for (double t = -1024.0; t < 1024.0; t += 1.0) {
1272
+ set.insert(t);
1273
+ ASSERT_LT(HashtableDebugAccess<decltype(set)>::GetNumProbes(set, t), 64)
1274
+ << t;
1275
+ }
1276
+ }
1277
+
1278
+ // Test that for each pair of adjacent bytes in a string, if there's only
1279
+ // entropy in those two bytes, then we don't have excessive collisions.
1280
+ TEST(SwisstableCollisions, LowEntropyStrings) {
1281
+ constexpr char kMinChar = 0;
1282
+ constexpr char kMaxChar = 64;
1283
+ // These sizes cover the different hashing cases.
1284
+ for (size_t size : {8u, 16u, 32u, 64u}) {
1285
+ for (size_t b = 0; b < size - 1; ++b) {
1286
+ absl::flat_hash_set<std::string> set;
1287
+ std::string s(size, '\0');
1288
+ for (char c1 = kMinChar; c1 < kMaxChar; ++c1) {
1289
+ for (char c2 = kMinChar; c2 < kMaxChar; ++c2) {
1290
+ s[b] = c1;
1291
+ s[b + 1] = c2;
1292
+ set.insert(s);
1293
+ ASSERT_LT(HashtableDebugAccess<decltype(set)>::GetNumProbes(set, s),
1294
+ 64)
1295
+ << "size: " << size << "; bit: " << b;
1296
+ }
1297
+ }
1298
+ }
1299
+ }
1300
+ }
1301
+
1302
+ // Test that we don't have excessive collisions when keys are consecutive
1303
+ // integers rotated by N bits.
1304
+ TEST(SwisstableCollisions, LowEntropyInts) {
1305
+ constexpr int kSizeTBits = sizeof(size_t) * 8;
1306
+ for (int bit = 0; bit < kSizeTBits; ++bit) {
1307
+ absl::flat_hash_set<size_t> set;
1308
+ for (size_t i = 0; i < 128 * 1024; ++i) {
1309
+ size_t v = absl::rotl(i, bit);
1310
+ set.insert(v);
1311
+ ASSERT_LT(HashtableDebugAccess<decltype(set)>::GetNumProbes(set, v), 32)
1312
+ << bit << " " << i;
1313
+ }
1314
+ }
1315
+ }
1316
+
1216
1317
  } // namespace
@@ -15,7 +15,9 @@
15
15
  #ifndef ABSL_HASH_HASH_TESTING_H_
16
16
  #define ABSL_HASH_HASH_TESTING_H_
17
17
 
18
+ #include <cstddef>
18
19
  #include <initializer_list>
20
+ #include <string>
19
21
  #include <tuple>
20
22
  #include <type_traits>
21
23
  #include <vector>
@@ -141,21 +143,20 @@ ABSL_NAMESPACE_BEGIN
141
143
  // }
142
144
  //
143
145
  template <int&... ExplicitBarrier, typename Container>
144
- ABSL_MUST_USE_RESULT testing::AssertionResult
145
- VerifyTypeImplementsAbslHashCorrectly(const Container& values);
146
+ testing::AssertionResult VerifyTypeImplementsAbslHashCorrectly(
147
+ const Container& values);
146
148
 
147
149
  template <int&... ExplicitBarrier, typename Container, typename Eq>
148
- ABSL_MUST_USE_RESULT testing::AssertionResult
149
- VerifyTypeImplementsAbslHashCorrectly(const Container& values, Eq equals);
150
+ testing::AssertionResult VerifyTypeImplementsAbslHashCorrectly(
151
+ const Container& values, Eq equals);
150
152
 
151
153
  template <int&..., typename T>
152
- ABSL_MUST_USE_RESULT testing::AssertionResult
153
- VerifyTypeImplementsAbslHashCorrectly(std::initializer_list<T> values);
154
+ testing::AssertionResult VerifyTypeImplementsAbslHashCorrectly(
155
+ std::initializer_list<T> values);
154
156
 
155
157
  template <int&..., typename T, typename Eq>
156
- ABSL_MUST_USE_RESULT testing::AssertionResult
157
- VerifyTypeImplementsAbslHashCorrectly(std::initializer_list<T> values,
158
- Eq equals);
158
+ testing::AssertionResult VerifyTypeImplementsAbslHashCorrectly(
159
+ std::initializer_list<T> values, Eq equals);
159
160
 
160
161
  namespace hash_internal {
161
162
 
@@ -184,8 +185,8 @@ struct ExpandVisitor {
184
185
  };
185
186
 
186
187
  template <typename Container, typename Eq>
187
- ABSL_MUST_USE_RESULT testing::AssertionResult
188
- VerifyTypeImplementsAbslHashCorrectly(const Container& values, Eq equals) {
188
+ testing::AssertionResult VerifyTypeImplementsAbslHashCorrectly(
189
+ const Container& values, Eq equals) {
189
190
  using V = typename Container::value_type;
190
191
 
191
192
  struct Info {
@@ -343,32 +344,31 @@ struct DefaultEquals {
343
344
  } // namespace hash_internal
344
345
 
345
346
  template <int&..., typename Container>
346
- ABSL_MUST_USE_RESULT testing::AssertionResult
347
- VerifyTypeImplementsAbslHashCorrectly(const Container& values) {
347
+ testing::AssertionResult VerifyTypeImplementsAbslHashCorrectly(
348
+ const Container& values) {
348
349
  return hash_internal::VerifyTypeImplementsAbslHashCorrectly(
349
350
  hash_internal::ContainerAsVector<Container>::Do(values),
350
351
  hash_internal::DefaultEquals{});
351
352
  }
352
353
 
353
354
  template <int&..., typename Container, typename Eq>
354
- ABSL_MUST_USE_RESULT testing::AssertionResult
355
- VerifyTypeImplementsAbslHashCorrectly(const Container& values, Eq equals) {
355
+ testing::AssertionResult VerifyTypeImplementsAbslHashCorrectly(
356
+ const Container& values, Eq equals) {
356
357
  return hash_internal::VerifyTypeImplementsAbslHashCorrectly(
357
358
  hash_internal::ContainerAsVector<Container>::Do(values), equals);
358
359
  }
359
360
 
360
361
  template <int&..., typename T>
361
- ABSL_MUST_USE_RESULT testing::AssertionResult
362
- VerifyTypeImplementsAbslHashCorrectly(std::initializer_list<T> values) {
362
+ testing::AssertionResult VerifyTypeImplementsAbslHashCorrectly(
363
+ std::initializer_list<T> values) {
363
364
  return hash_internal::VerifyTypeImplementsAbslHashCorrectly(
364
365
  hash_internal::ContainerAsVector<std::initializer_list<T>>::Do(values),
365
366
  hash_internal::DefaultEquals{});
366
367
  }
367
368
 
368
369
  template <int&..., typename T, typename Eq>
369
- ABSL_MUST_USE_RESULT testing::AssertionResult
370
- VerifyTypeImplementsAbslHashCorrectly(std::initializer_list<T> values,
371
- Eq equals) {
370
+ testing::AssertionResult VerifyTypeImplementsAbslHashCorrectly(
371
+ std::initializer_list<T> values, Eq equals) {
372
372
  return hash_internal::VerifyTypeImplementsAbslHashCorrectly(
373
373
  hash_internal::ContainerAsVector<std::initializer_list<T>>::Do(values),
374
374
  equals);