re2 1.24.1 → 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.
- package/LICENSE +15 -20
- package/README.md +62 -4
- package/binding.gyp +1 -2
- package/lib/addon.cc +7 -3
- package/lib/exec.cc +4 -4
- package/lib/match.cc +4 -4
- package/lib/pattern.cc +148 -1
- package/lib/replace.cc +5 -4
- package/lib/search.cc +1 -1
- package/lib/set.cc +75 -0
- package/lib/test.cc +1 -1
- package/lib/unicode_properties.h +15840 -0
- package/lib/wrapped_re2.h +11 -4
- package/lib/wrapped_re2_set.h +3 -1
- package/llms-full.txt +37 -7
- package/llms.txt +4 -1
- package/package.json +11 -10
- package/re2.d.ts +2 -0
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +87 -74
- package/vendor/abseil-cpp/CMakeLists.txt +3 -3
- package/vendor/abseil-cpp/FAQ.md +130 -79
- package/vendor/abseil-cpp/MODULE.bazel +6 -7
- package/vendor/abseil-cpp/absl/BUILD.bazel +6 -0
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/algorithm/algorithm.h +34 -2
- package/vendor/abseil-cpp/absl/algorithm/container.h +164 -17
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +390 -13
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +53 -6
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +28 -4
- package/vendor/abseil-cpp/absl/base/attributes.h +61 -42
- package/vendor/abseil-cpp/absl/base/call_once.h +1 -0
- package/vendor/abseil-cpp/absl/base/casts.h +8 -1
- package/vendor/abseil-cpp/absl/base/casts_test.cc +3 -6
- package/vendor/abseil-cpp/absl/base/config.h +54 -10
- package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +9 -9
- package/vendor/abseil-cpp/absl/base/fast_type_id.h +30 -2
- package/vendor/abseil-cpp/absl/base/fast_type_id_test.cc +3 -0
- package/vendor/abseil-cpp/absl/base/internal/exception_safety_testing.h +15 -12
- package/vendor/abseil-cpp/absl/base/internal/hardening.h +136 -0
- package/vendor/abseil-cpp/absl/base/internal/hardening_test.cc +168 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +2 -2
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -0
- package/vendor/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
- package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +1 -2
- package/vendor/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
- package/vendor/abseil-cpp/absl/base/macros.h +36 -20
- package/vendor/abseil-cpp/absl/base/nullability.h +4 -3
- package/vendor/abseil-cpp/absl/base/optimization.h +3 -2
- package/vendor/abseil-cpp/absl/base/optimization_test.cc +4 -3
- package/vendor/abseil-cpp/absl/base/options.h +55 -1
- package/vendor/abseil-cpp/absl/base/policy_checks.h +5 -5
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
- package/vendor/abseil-cpp/absl/base/throw_delegate_test.cc +19 -28
- package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +19 -7
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +6 -5
- package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +3 -5
- package/vendor/abseil-cpp/absl/container/btree_set.h +5 -5
- package/vendor/abseil-cpp/absl/container/btree_test.cc +11 -14
- package/vendor/abseil-cpp/absl/container/chunked_queue.h +8 -6
- package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +5 -5
- package/vendor/abseil-cpp/absl/container/fixed_array.h +14 -13
- package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +3 -3
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +18 -6
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +34 -1
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +21 -7
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +29 -29
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/btree.h +32 -24
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +16 -17
- package/vendor/abseil-cpp/absl/container/internal/common.h +6 -5
- package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +16 -16
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +13 -13
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +41 -31
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +4 -4
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +3 -3
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +27 -19
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -17
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +12 -30
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +28 -28
- package/vendor/abseil-cpp/absl/container/internal/layout.h +13 -13
- package/vendor/abseil-cpp/absl/container/internal/layout_test.cc +3 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +60 -62
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +59 -39
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +619 -326
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +25 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +4 -4
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +575 -159
- package/vendor/abseil-cpp/absl/container/linked_hash_map.h +2 -2
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +27 -15
- package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +34 -0
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +25 -11
- package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +7 -4
- package/vendor/abseil-cpp/absl/crc/BUILD.bazel +0 -1
- package/vendor/abseil-cpp/absl/crc/CMakeLists.txt +2 -3
- package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +2 -1
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc.cc +4 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
- package/vendor/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +143 -81
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +9 -31
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +3 -33
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +2 -1
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +12 -2
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +2 -3
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -0
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +46 -36
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +18 -58
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +5 -48
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +10 -124
- package/vendor/abseil-cpp/absl/debugging/symbolize.cc +20 -2
- package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +58 -106
- package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +37 -36
- package/vendor/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -3
- package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +1 -1
- package/vendor/abseil-cpp/absl/flags/commandlineflag.h +8 -6
- package/vendor/abseil-cpp/absl/flags/commandlineflag_test.cc +1 -1
- package/vendor/abseil-cpp/absl/flags/flag_benchmark.cc +5 -5
- package/vendor/abseil-cpp/absl/flags/flag_test.cc +30 -30
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +4 -4
- package/vendor/abseil-cpp/absl/flags/internal/flag.h +6 -6
- package/vendor/abseil-cpp/absl/flags/marshalling.h +2 -28
- package/vendor/abseil-cpp/absl/flags/marshalling_test.cc +12 -11
- package/vendor/abseil-cpp/absl/flags/reflection_test.cc +1 -1
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +26 -1
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +29 -1
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +13 -14
- package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +46 -47
- package/vendor/abseil-cpp/absl/functional/bind_back.h +79 -0
- package/vendor/abseil-cpp/absl/functional/bind_back_test.cc +237 -0
- package/vendor/abseil-cpp/absl/functional/bind_front.h +7 -1
- package/vendor/abseil-cpp/absl/functional/bind_front_test.cc +4 -4
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +2 -2
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +28 -28
- package/vendor/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
- package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
- package/vendor/abseil-cpp/absl/functional/overload_test.cc +13 -13
- package/vendor/abseil-cpp/absl/hash/BUILD.bazel +1 -2
- package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +1 -2
- package/vendor/abseil-cpp/absl/hash/hash.h +1 -1
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +14 -20
- package/vendor/abseil-cpp/absl/hash/hash_testing.h +11 -9
- package/vendor/abseil-cpp/absl/hash/internal/city.cc +39 -51
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +165 -47
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +82 -26
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +36 -1
- package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +8 -5
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +5 -2
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +5 -3
- package/vendor/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +15 -1
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -4
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +14 -0
- package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -1
- package/vendor/abseil-cpp/absl/log/internal/proto.cc +13 -0
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto_test.cc +3 -3
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +2 -2
- package/vendor/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +3 -3
- package/vendor/abseil-cpp/absl/log/log_format_test.cc +19 -2
- package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/log_streamer.h +29 -2
- package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/scoped_mock_log_test.cc +1 -1
- package/vendor/abseil-cpp/absl/log/vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/vlog_is_on_test.cc +6 -5
- package/vendor/abseil-cpp/absl/memory/memory.h +55 -5
- package/vendor/abseil-cpp/absl/memory/memory_test.cc +55 -1
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/internal/requires.h +1 -1
- package/vendor/abseil-cpp/absl/meta/type_traits.h +119 -55
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +7 -7
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +6 -6
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +3 -1
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +0 -4
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +32 -33
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +25 -2
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +8 -5
- package/vendor/abseil-cpp/absl/random/BUILD.bazel +13 -1
- package/vendor/abseil-cpp/absl/random/CMakeLists.txt +23 -2
- package/vendor/abseil-cpp/absl/random/benchmarks.cc +1 -1
- package/vendor/abseil-cpp/absl/random/beta_distribution.h +2 -2
- package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
- package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +43 -0
- package/vendor/abseil-cpp/absl/random/discrete_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/distributions.h +17 -17
- package/vendor/abseil-cpp/absl/random/distributions_test.cc +4 -4
- package/vendor/abseil-cpp/absl/random/exponential_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +4 -2
- package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
- package/vendor/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/generate_real.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +14 -40
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +2 -2
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +4 -4
- package/vendor/abseil-cpp/absl/random/internal/seed_material.h +2 -1
- package/vendor/abseil-cpp/absl/random/internal/traits.h +21 -0
- package/vendor/abseil-cpp/absl/random/internal/traits_test.cc +5 -0
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper_test.cc +2 -1
- package/vendor/abseil-cpp/absl/random/mocking_access.h +74 -0
- package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +9 -19
- package/vendor/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +81 -0
- package/vendor/abseil-cpp/absl/status/CMakeLists.txt +91 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +26 -2
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +22 -8
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +43 -43
- package/vendor/abseil-cpp/absl/status/status.cc +62 -70
- package/vendor/abseil-cpp/absl/status/status.h +249 -23
- package/vendor/abseil-cpp/absl/status/status_benchmark.cc +12 -0
- package/vendor/abseil-cpp/absl/status/status_builder.cc +196 -0
- package/vendor/abseil-cpp/absl/status/status_builder.h +978 -0
- package/vendor/abseil-cpp/absl/status/status_builder_test.cc +380 -0
- package/vendor/abseil-cpp/absl/status/status_macros.h +484 -0
- package/vendor/abseil-cpp/absl/status/status_macros_test.cc +634 -0
- package/vendor/abseil-cpp/absl/status/status_matchers.h +2 -1
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +3 -4
- package/vendor/abseil-cpp/absl/status/status_payload_printer.h +3 -2
- package/vendor/abseil-cpp/absl/status/status_test.cc +443 -13
- package/vendor/abseil-cpp/absl/status/statusor.h +69 -36
- package/vendor/abseil-cpp/absl/status/statusor_test.cc +132 -35
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +42 -7
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +33 -4
- package/vendor/abseil-cpp/absl/strings/ascii.h +1 -2
- package/vendor/abseil-cpp/absl/strings/atod_manual_test.cc +5 -5
- package/vendor/abseil-cpp/absl/strings/cord.cc +26 -7
- package/vendor/abseil-cpp/absl/strings/cord.h +23 -13
- package/vendor/abseil-cpp/absl/strings/cord_buffer.h +4 -2
- package/vendor/abseil-cpp/absl/strings/cord_test.cc +85 -9
- package/vendor/abseil-cpp/absl/strings/escaping.cc +176 -30
- package/vendor/abseil-cpp/absl/strings/escaping.h +12 -2
- package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +1 -3
- package/vendor/abseil-cpp/absl/strings/escaping_test.cc +18 -18
- package/vendor/abseil-cpp/absl/strings/has_absl_stringify_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/has_ostream_operator_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +10 -10
- package/vendor/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
- package/vendor/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
- package/vendor/abseil-cpp/absl/strings/internal/escaping.h +2 -26
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +23 -2
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +6 -2
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -24
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +16 -41
- package/vendor/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
- package/vendor/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +12 -20
- package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +510 -307
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -1
- package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +9 -10
- package/vendor/abseil-cpp/absl/strings/internal/string_constant_test.cc +6 -5
- package/vendor/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream_test.cc +111 -0
- package/vendor/abseil-cpp/absl/strings/numbers.cc +406 -0
- package/vendor/abseil-cpp/absl/strings/numbers.h +4 -0
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +33 -0
- package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +10 -6
- package/vendor/abseil-cpp/absl/strings/str_cat.h +36 -1
- package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +28 -0
- package/vendor/abseil-cpp/absl/strings/str_join_test.cc +4 -4
- package/vendor/abseil-cpp/absl/strings/str_split.h +11 -6
- package/vendor/abseil-cpp/absl/strings/str_split_test.cc +13 -0
- package/vendor/abseil-cpp/absl/strings/substitute.h +2 -2
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +21 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +13 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +32 -2
- package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +17 -3
- package/vendor/abseil-cpp/absl/time/BUILD.bazel +80 -0
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +73 -0
- package/vendor/abseil-cpp/absl/time/clock.h +3 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.cc +71 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.h +93 -0
- package/vendor/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
- package/vendor/abseil-cpp/absl/time/format.cc +3 -10
- package/vendor/abseil-cpp/absl/time/format_test.cc +12 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +90 -89
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +80 -5
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +1 -2
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +3 -3
- package/vendor/abseil-cpp/absl/time/simulated_clock.cc +225 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock.h +109 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
- package/vendor/abseil-cpp/absl/types/BUILD.bazel +116 -0
- package/vendor/abseil-cpp/absl/types/CMakeLists.txt +100 -0
- package/vendor/abseil-cpp/absl/types/any.h +26 -4
- package/vendor/abseil-cpp/absl/types/any_span.h +1067 -0
- package/vendor/abseil-cpp/absl/types/any_span_benchmark.cc +258 -0
- package/vendor/abseil-cpp/absl/types/any_span_test.cc +1210 -0
- package/vendor/abseil-cpp/absl/types/compare.h +4 -4
- package/vendor/abseil-cpp/absl/types/internal/any_span.h +477 -0
- package/vendor/abseil-cpp/absl/types/internal/span.h +5 -6
- package/vendor/abseil-cpp/absl/types/optional.h +30 -3
- package/vendor/abseil-cpp/absl/types/optional_ref.h +295 -0
- package/vendor/abseil-cpp/absl/types/optional_ref_test.cc +370 -0
- package/vendor/abseil-cpp/absl/types/source_location.cc +18 -0
- package/vendor/abseil-cpp/absl/types/source_location.h +172 -0
- package/vendor/abseil-cpp/absl/types/source_location_test.cc +139 -0
- package/vendor/abseil-cpp/absl/types/span.h +19 -23
- package/vendor/abseil-cpp/absl/types/variant.h +75 -18
- package/vendor/abseil-cpp/absl/types/variant_test.cc +23 -23
- package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -0
- package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/utility/utility.h +99 -16
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -0
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +13 -6
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +12 -5
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +9 -2
- package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +10 -3
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +8 -2
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +4 -3
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +2 -2
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -1
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -1
- package/AGENTS.md +0 -131
- package/ARCHITECTURE.md +0 -152
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +0 -97
|
@@ -27,41 +27,17 @@
|
|
|
27
27
|
#include <cstdint>
|
|
28
28
|
#include <limits>
|
|
29
29
|
#include <type_traits>
|
|
30
|
-
#include <utility>
|
|
31
30
|
|
|
32
31
|
#include "absl/base/attributes.h"
|
|
33
32
|
#include "absl/base/config.h"
|
|
34
33
|
#include "absl/base/fast_type_id.h"
|
|
35
34
|
#include "absl/meta/type_traits.h"
|
|
36
|
-
#include "absl/random/internal/distribution_caller.h"
|
|
37
35
|
#include "absl/random/internal/fast_uniform_bits.h"
|
|
36
|
+
#include "absl/random/internal/traits.h"
|
|
37
|
+
#include "absl/random/mocking_access.h"
|
|
38
38
|
|
|
39
39
|
namespace absl {
|
|
40
40
|
ABSL_NAMESPACE_BEGIN
|
|
41
|
-
namespace random_internal {
|
|
42
|
-
|
|
43
|
-
template <typename URBG, typename = void, typename = void, typename = void>
|
|
44
|
-
struct is_urbg : std::false_type {};
|
|
45
|
-
|
|
46
|
-
template <typename URBG>
|
|
47
|
-
struct is_urbg<
|
|
48
|
-
URBG,
|
|
49
|
-
absl::enable_if_t<std::is_same<
|
|
50
|
-
typename URBG::result_type,
|
|
51
|
-
typename std::decay<decltype((URBG::min)())>::type>::value>,
|
|
52
|
-
absl::enable_if_t<std::is_same<
|
|
53
|
-
typename URBG::result_type,
|
|
54
|
-
typename std::decay<decltype((URBG::max)())>::type>::value>,
|
|
55
|
-
absl::enable_if_t<std::is_same<
|
|
56
|
-
typename URBG::result_type,
|
|
57
|
-
typename std::decay<decltype(std::declval<URBG>()())>::type>::value>>
|
|
58
|
-
: std::true_type {};
|
|
59
|
-
|
|
60
|
-
template <typename>
|
|
61
|
-
struct DistributionCaller;
|
|
62
|
-
class MockHelpers;
|
|
63
|
-
|
|
64
|
-
} // namespace random_internal
|
|
65
41
|
|
|
66
42
|
// -----------------------------------------------------------------------------
|
|
67
43
|
// absl::BitGenRef
|
|
@@ -87,24 +63,18 @@ class MockHelpers;
|
|
|
87
63
|
// }
|
|
88
64
|
//
|
|
89
65
|
class BitGenRef {
|
|
90
|
-
// SFINAE to detect whether the URBG type includes a member matching
|
|
91
|
-
// bool InvokeMock(key_id, args_tuple*, result*).
|
|
92
|
-
//
|
|
93
|
-
// These live inside BitGenRef so that they have friend access
|
|
94
|
-
// to MockingBitGen. (see similar methods in DistributionCaller).
|
|
95
66
|
template <template <class...> class Trait, class AlwaysVoid, class... Args>
|
|
96
67
|
struct detector : std::false_type {};
|
|
97
68
|
template <template <class...> class Trait, class... Args>
|
|
98
|
-
struct detector<Trait,
|
|
69
|
+
struct detector<Trait, std::void_t<Trait<Args...>>, Args...>
|
|
99
70
|
: std::true_type {};
|
|
100
71
|
|
|
101
|
-
template <
|
|
102
|
-
using
|
|
103
|
-
std::declval<
|
|
104
|
-
std::declval<void*>()));
|
|
72
|
+
template <typename T>
|
|
73
|
+
using has_conversion_operator_t =
|
|
74
|
+
decltype(std::declval<T>().operator BitGenRef());
|
|
105
75
|
|
|
106
76
|
template <typename T>
|
|
107
|
-
using
|
|
77
|
+
using HasConversionOperator = detector<has_conversion_operator_t, void, T>;
|
|
108
78
|
|
|
109
79
|
public:
|
|
110
80
|
BitGenRef(const BitGenRef&) = default;
|
|
@@ -112,23 +82,28 @@ class BitGenRef {
|
|
|
112
82
|
BitGenRef& operator=(const BitGenRef&) = default;
|
|
113
83
|
BitGenRef& operator=(BitGenRef&&) = default;
|
|
114
84
|
|
|
115
|
-
template <
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
85
|
+
template <typename URBGRef, typename URBG = absl::remove_cvref_t<URBGRef>,
|
|
86
|
+
typename std::enable_if_t<
|
|
87
|
+
(!std::is_same<URBG, BitGenRef>::value &&
|
|
88
|
+
!std::is_base_of<BitGenRef, URBG>::value &&
|
|
89
|
+
!HasConversionOperator<URBG>::value &&
|
|
90
|
+
random_internal::is_urbg<URBG>::value &&
|
|
91
|
+
!RandomMockingAccess::HasInvokeMock<URBG>::value)>* = nullptr>
|
|
120
92
|
BitGenRef(URBGRef&& gen ABSL_ATTRIBUTE_LIFETIME_BOUND) // NOLINT
|
|
121
93
|
: t_erased_gen_ptr_(reinterpret_cast<uintptr_t>(&gen)),
|
|
122
94
|
mock_call_(NotAMock),
|
|
123
95
|
generate_impl_fn_(ImplFn<URBG>) {}
|
|
124
96
|
|
|
125
97
|
template <typename URBGRef, typename URBG = absl::remove_cvref_t<URBGRef>,
|
|
126
|
-
typename
|
|
127
|
-
|
|
128
|
-
|
|
98
|
+
typename std::enable_if_t<
|
|
99
|
+
(!std::is_same<URBG, BitGenRef>::value &&
|
|
100
|
+
!std::is_base_of<BitGenRef, URBG>::value &&
|
|
101
|
+
!HasConversionOperator<URBG>::value &&
|
|
102
|
+
random_internal::is_urbg<URBG>::value &&
|
|
103
|
+
RandomMockingAccess::HasInvokeMock<URBG>::value)>* = nullptr>
|
|
129
104
|
BitGenRef(URBGRef&& gen ABSL_ATTRIBUTE_LIFETIME_BOUND) // NOLINT
|
|
130
105
|
: t_erased_gen_ptr_(reinterpret_cast<uintptr_t>(&gen)),
|
|
131
|
-
mock_call_(
|
|
106
|
+
mock_call_(MockCall<URBG>),
|
|
132
107
|
generate_impl_fn_(ImplFn<URBG>) {}
|
|
133
108
|
|
|
134
109
|
using result_type = uint64_t;
|
|
@@ -157,10 +132,10 @@ class BitGenRef {
|
|
|
157
132
|
|
|
158
133
|
// Get a type-erased InvokeMock pointer.
|
|
159
134
|
template <typename URBG>
|
|
160
|
-
static bool MockCall(uintptr_t gen_ptr, FastTypeIdType key_id,
|
|
161
|
-
void*
|
|
162
|
-
return reinterpret_cast<URBG*>(gen_ptr)
|
|
163
|
-
|
|
135
|
+
static bool MockCall(uintptr_t gen_ptr, FastTypeIdType key_id,
|
|
136
|
+
void* args_tuple, void* result) {
|
|
137
|
+
return RandomMockingAccess::InvokeMock(reinterpret_cast<URBG*>(gen_ptr),
|
|
138
|
+
key_id, args_tuple, result);
|
|
164
139
|
}
|
|
165
140
|
static bool NotAMock(uintptr_t, FastTypeIdType, void*, void*) {
|
|
166
141
|
return false;
|
|
@@ -176,9 +151,7 @@ class BitGenRef {
|
|
|
176
151
|
mock_call_fn mock_call_;
|
|
177
152
|
impl_fn generate_impl_fn_;
|
|
178
153
|
|
|
179
|
-
|
|
180
|
-
friend struct ::absl::random_internal::DistributionCaller; // for InvokeMock
|
|
181
|
-
friend class ::absl::random_internal::MockHelpers; // for InvokeMock
|
|
154
|
+
friend class ::absl::RandomMockingAccess; // for InvokeMock
|
|
182
155
|
};
|
|
183
156
|
|
|
184
157
|
ABSL_NAMESPACE_END
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
#include <cstdint>
|
|
19
19
|
#include <random>
|
|
20
|
+
#include <type_traits>
|
|
20
21
|
#include <vector>
|
|
21
22
|
|
|
22
23
|
#include "gmock/gmock.h"
|
|
@@ -102,6 +103,48 @@ TEST(BitGenRefTest, MockingBitGenBaseOverrides) {
|
|
|
102
103
|
absl::BitGenRef gen_ref(const_gen);
|
|
103
104
|
EXPECT_EQ(FnTest(gen_ref), 42); // Copy
|
|
104
105
|
}
|
|
106
|
+
|
|
107
|
+
struct MinStdRand {
|
|
108
|
+
// The URBG just returns 0.
|
|
109
|
+
using result_type = absl::BitGen::result_type;
|
|
110
|
+
static constexpr result_type(min)() { return (absl::BitGen::min)(); }
|
|
111
|
+
static constexpr result_type(max)() { return (absl::BitGen::max)(); }
|
|
112
|
+
result_type operator()() { return 0; }
|
|
113
|
+
|
|
114
|
+
// Implicit conversions allow passing MinStdRand to functions taking
|
|
115
|
+
// absl::BitGenRef as well as explicitly constructing an absl::BitGenRef from
|
|
116
|
+
// a MinStdRand.
|
|
117
|
+
operator absl::BitGenRef() const {
|
|
118
|
+
conversion_count++;
|
|
119
|
+
return absl::BitGenRef(minstd_gen);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
std::minstd_rand minstd_gen;
|
|
123
|
+
mutable int conversion_count = 0;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
TEST(BitGenRefTest, IsConvertibleTest) {
|
|
127
|
+
// Verify that MinStdRandBitGen is convertible to absl::BitGenRef.
|
|
128
|
+
EXPECT_TRUE((std::is_convertible<MinStdRand, absl::BitGenRef>::value));
|
|
129
|
+
|
|
130
|
+
// Explicit construction should trigger the conversion.
|
|
131
|
+
{
|
|
132
|
+
MinStdRand minstd;
|
|
133
|
+
absl::BitGenRef gen_ref(minstd);
|
|
134
|
+
EXPECT_EQ(minstd.conversion_count, 1);
|
|
135
|
+
(void)gen_ref;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Calling a function that accepts absl::BitGenRef should trigger the
|
|
139
|
+
// conversion. This tests implicit conversion.
|
|
140
|
+
{
|
|
141
|
+
MinStdRand minstd;
|
|
142
|
+
auto result = FnTest(minstd);
|
|
143
|
+
EXPECT_EQ(minstd.conversion_count, 1);
|
|
144
|
+
EXPECT_GE(result, 1);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
105
148
|
} // namespace
|
|
106
149
|
ABSL_NAMESPACE_END
|
|
107
150
|
} // namespace absl
|
|
@@ -38,7 +38,7 @@ ABSL_NAMESPACE_BEGIN
|
|
|
38
38
|
// A discrete distribution produces random integers i, where 0 <= i < n
|
|
39
39
|
// distributed according to the discrete probability function:
|
|
40
40
|
//
|
|
41
|
-
// P(i|p0,...,pn
|
|
41
|
+
// P(i|p0,...,pn-1)=pi
|
|
42
42
|
//
|
|
43
43
|
// This class is an implementation of discrete_distribution (see
|
|
44
44
|
// [rand.dist.samp.discrete]).
|
|
@@ -117,11 +117,11 @@ inline constexpr IntervalOpenClosedTag IntervalOpenClosed = {};
|
|
|
117
117
|
// auto x = absl::Uniform<float>(bitgen, 0, 1);
|
|
118
118
|
//
|
|
119
119
|
template <typename R = void, typename TagType, typename URBG>
|
|
120
|
-
typename
|
|
120
|
+
typename std::enable_if_t<!std::is_same<R, void>::value, R> //
|
|
121
121
|
Uniform(TagType tag,
|
|
122
122
|
URBG&& urbg, // NOLINT(runtime/references)
|
|
123
123
|
R lo, R hi) {
|
|
124
|
-
using gen_t =
|
|
124
|
+
using gen_t = std::decay_t<URBG>;
|
|
125
125
|
using distribution_t = random_internal::UniformDistributionWrapper<R>;
|
|
126
126
|
|
|
127
127
|
auto a = random_internal::uniform_lower_bound(tag, lo, hi);
|
|
@@ -137,10 +137,10 @@ Uniform(TagType tag,
|
|
|
137
137
|
// Overload of `Uniform()` using the default closed-open interval of [lo, hi),
|
|
138
138
|
// and returning values of type `T`
|
|
139
139
|
template <typename R = void, typename URBG>
|
|
140
|
-
typename
|
|
140
|
+
typename std::enable_if_t<!std::is_same<R, void>::value, R> //
|
|
141
141
|
Uniform(URBG&& urbg, // NOLINT(runtime/references)
|
|
142
142
|
R lo, R hi) {
|
|
143
|
-
using gen_t =
|
|
143
|
+
using gen_t = std::decay_t<URBG>;
|
|
144
144
|
using distribution_t = random_internal::UniformDistributionWrapper<R>;
|
|
145
145
|
constexpr auto tag = absl::IntervalClosedOpen;
|
|
146
146
|
|
|
@@ -159,12 +159,12 @@ Uniform(URBG&& urbg, // NOLINT(runtime/references)
|
|
|
159
159
|
// correctly from the passed types.
|
|
160
160
|
template <typename R = void, typename TagType, typename URBG, typename A,
|
|
161
161
|
typename B>
|
|
162
|
-
typename
|
|
162
|
+
typename std::enable_if_t<std::is_same<R, void>::value,
|
|
163
163
|
random_internal::uniform_inferred_return_t<A, B>>
|
|
164
164
|
Uniform(TagType tag,
|
|
165
165
|
URBG&& urbg, // NOLINT(runtime/references)
|
|
166
166
|
A lo, B hi) {
|
|
167
|
-
using gen_t =
|
|
167
|
+
using gen_t = std::decay_t<URBG>;
|
|
168
168
|
using return_t = typename random_internal::uniform_inferred_return_t<A, B>;
|
|
169
169
|
using distribution_t = random_internal::UniformDistributionWrapper<return_t>;
|
|
170
170
|
|
|
@@ -183,11 +183,11 @@ Uniform(TagType tag,
|
|
|
183
183
|
// default closed-open interval of [lo, hi). Note that a compile-error will
|
|
184
184
|
// result if the return type cannot be deduced correctly from the passed types.
|
|
185
185
|
template <typename R = void, typename URBG, typename A, typename B>
|
|
186
|
-
typename
|
|
186
|
+
typename std::enable_if_t<std::is_same<R, void>::value,
|
|
187
187
|
random_internal::uniform_inferred_return_t<A, B>>
|
|
188
188
|
Uniform(URBG&& urbg, // NOLINT(runtime/references)
|
|
189
189
|
A lo, B hi) {
|
|
190
|
-
using gen_t =
|
|
190
|
+
using gen_t = std::decay_t<URBG>;
|
|
191
191
|
using return_t = typename random_internal::uniform_inferred_return_t<A, B>;
|
|
192
192
|
using distribution_t = random_internal::UniformDistributionWrapper<return_t>;
|
|
193
193
|
|
|
@@ -206,9 +206,9 @@ Uniform(URBG&& urbg, // NOLINT(runtime/references)
|
|
|
206
206
|
// Overload of Uniform() using the minimum and maximum values of a given type
|
|
207
207
|
// `T` (which must be unsigned), returning a value of type `unsigned T`
|
|
208
208
|
template <typename R, typename URBG>
|
|
209
|
-
typename
|
|
209
|
+
typename std::enable_if_t<!std::numeric_limits<R>::is_signed, R> //
|
|
210
210
|
Uniform(URBG&& urbg) { // NOLINT(runtime/references)
|
|
211
|
-
using gen_t =
|
|
211
|
+
using gen_t = std::decay_t<URBG>;
|
|
212
212
|
using distribution_t = random_internal::UniformDistributionWrapper<R>;
|
|
213
213
|
|
|
214
214
|
return random_internal::DistributionCaller<gen_t>::template Call<
|
|
@@ -238,7 +238,7 @@ Uniform(URBG&& urbg) { // NOLINT(runtime/references)
|
|
|
238
238
|
template <typename URBG>
|
|
239
239
|
bool Bernoulli(URBG&& urbg, // NOLINT(runtime/references)
|
|
240
240
|
double p) {
|
|
241
|
-
using gen_t =
|
|
241
|
+
using gen_t = std::decay_t<URBG>;
|
|
242
242
|
using distribution_t = absl::bernoulli_distribution;
|
|
243
243
|
|
|
244
244
|
return random_internal::DistributionCaller<gen_t>::template Call<
|
|
@@ -270,7 +270,7 @@ RealType Beta(URBG&& urbg, // NOLINT(runtime/references)
|
|
|
270
270
|
"Template-argument 'RealType' must be a floating-point type, in "
|
|
271
271
|
"absl::Beta<RealType, URBG>(...)");
|
|
272
272
|
|
|
273
|
-
using gen_t =
|
|
273
|
+
using gen_t = std::decay_t<URBG>;
|
|
274
274
|
using distribution_t = typename absl::beta_distribution<RealType>;
|
|
275
275
|
|
|
276
276
|
return random_internal::DistributionCaller<gen_t>::template Call<
|
|
@@ -302,7 +302,7 @@ RealType Exponential(URBG&& urbg, // NOLINT(runtime/references)
|
|
|
302
302
|
"Template-argument 'RealType' must be a floating-point type, in "
|
|
303
303
|
"absl::Exponential<RealType, URBG>(...)");
|
|
304
304
|
|
|
305
|
-
using gen_t =
|
|
305
|
+
using gen_t = std::decay_t<URBG>;
|
|
306
306
|
using distribution_t = typename absl::exponential_distribution<RealType>;
|
|
307
307
|
|
|
308
308
|
return random_internal::DistributionCaller<gen_t>::template Call<
|
|
@@ -333,7 +333,7 @@ RealType Gaussian(URBG&& urbg, // NOLINT(runtime/references)
|
|
|
333
333
|
"Template-argument 'RealType' must be a floating-point type, in "
|
|
334
334
|
"absl::Gaussian<RealType, URBG>(...)");
|
|
335
335
|
|
|
336
|
-
using gen_t =
|
|
336
|
+
using gen_t = std::decay_t<URBG>;
|
|
337
337
|
using distribution_t = typename absl::gaussian_distribution<RealType>;
|
|
338
338
|
|
|
339
339
|
return random_internal::DistributionCaller<gen_t>::template Call<
|
|
@@ -375,7 +375,7 @@ IntType LogUniform(URBG&& urbg, // NOLINT(runtime/references)
|
|
|
375
375
|
"Template-argument 'IntType' must be an integral type, in "
|
|
376
376
|
"absl::LogUniform<IntType, URBG>(...)");
|
|
377
377
|
|
|
378
|
-
using gen_t =
|
|
378
|
+
using gen_t = std::decay_t<URBG>;
|
|
379
379
|
using distribution_t = typename absl::log_uniform_int_distribution<IntType>;
|
|
380
380
|
|
|
381
381
|
return random_internal::DistributionCaller<gen_t>::template Call<
|
|
@@ -405,7 +405,7 @@ IntType Poisson(URBG&& urbg, // NOLINT(runtime/references)
|
|
|
405
405
|
"Template-argument 'IntType' must be an integral type, in "
|
|
406
406
|
"absl::Poisson<IntType, URBG>(...)");
|
|
407
407
|
|
|
408
|
-
using gen_t =
|
|
408
|
+
using gen_t = std::decay_t<URBG>;
|
|
409
409
|
using distribution_t = typename absl::poisson_distribution<IntType>;
|
|
410
410
|
|
|
411
411
|
return random_internal::DistributionCaller<gen_t>::template Call<
|
|
@@ -437,7 +437,7 @@ IntType Zipf(URBG&& urbg, // NOLINT(runtime/references)
|
|
|
437
437
|
"Template-argument 'IntType' must be an integral type, in "
|
|
438
438
|
"absl::Zipf<IntType, URBG>(...)");
|
|
439
439
|
|
|
440
|
-
using gen_t =
|
|
440
|
+
using gen_t = std::decay_t<URBG>;
|
|
441
441
|
using distribution_t = typename absl::zipf_distribution<IntType>;
|
|
442
442
|
|
|
443
443
|
return random_internal::DistributionCaller<gen_t>::template Call<
|
|
@@ -80,13 +80,13 @@ Invalid InferredTaggedUniformReturnT(...);
|
|
|
80
80
|
template <typename A, typename B, typename Expect>
|
|
81
81
|
void CheckArgsInferType() {
|
|
82
82
|
static_assert(
|
|
83
|
-
|
|
83
|
+
std::conjunction<
|
|
84
84
|
std::is_same<Expect, decltype(InferredUniformReturnT<A, B>(0))>,
|
|
85
85
|
std::is_same<Expect,
|
|
86
86
|
decltype(InferredUniformReturnT<B, A>(0))>>::value,
|
|
87
87
|
"");
|
|
88
88
|
static_assert(
|
|
89
|
-
|
|
89
|
+
std::conjunction<
|
|
90
90
|
std::is_same<Expect, decltype(InferredTaggedUniformReturnT<
|
|
91
91
|
absl::IntervalOpenOpenTag, A, B>(0))>,
|
|
92
92
|
std::is_same<Expect,
|
|
@@ -121,14 +121,14 @@ Invalid ExplicitTaggedUniformReturnT(...);
|
|
|
121
121
|
template <typename A, typename B, typename Expect>
|
|
122
122
|
void CheckArgsReturnExpectedType() {
|
|
123
123
|
static_assert(
|
|
124
|
-
|
|
124
|
+
std::conjunction<
|
|
125
125
|
std::is_same<Expect,
|
|
126
126
|
decltype(ExplicitUniformReturnT<A, B, Expect>(0))>,
|
|
127
127
|
std::is_same<Expect, decltype(ExplicitUniformReturnT<B, A, Expect>(
|
|
128
128
|
0))>>::value,
|
|
129
129
|
"");
|
|
130
130
|
static_assert(
|
|
131
|
-
|
|
131
|
+
std::conjunction<
|
|
132
132
|
std::is_same<Expect,
|
|
133
133
|
decltype(ExplicitTaggedUniformReturnT<
|
|
134
134
|
absl::IntervalOpenOpenTag, A, B, Expect>(0))>,
|
|
@@ -124,7 +124,7 @@ exponential_distribution<RealType>::operator()(
|
|
|
124
124
|
using random_internal::GenerateNegativeTag;
|
|
125
125
|
using random_internal::GenerateRealFromBits;
|
|
126
126
|
using real_type =
|
|
127
|
-
|
|
127
|
+
std::conditional_t<std::is_same<RealType, float>::value, float, double>;
|
|
128
128
|
|
|
129
129
|
const result_type u = GenerateRealFromBits<real_type, GenerateNegativeTag,
|
|
130
130
|
false>(fast_u64_(g)); // U(-1, 0)
|
|
@@ -29,6 +29,7 @@ load(
|
|
|
29
29
|
|
|
30
30
|
default_package_visibility = [
|
|
31
31
|
"//absl/random:__pkg__",
|
|
32
|
+
"//absl:friends",
|
|
32
33
|
]
|
|
33
34
|
|
|
34
35
|
package(
|
|
@@ -115,6 +116,7 @@ cc_library(
|
|
|
115
116
|
linkopts = ABSL_DEFAULT_LINKOPTS,
|
|
116
117
|
deps = [
|
|
117
118
|
"//absl/base:config",
|
|
119
|
+
"//absl/meta:type_traits",
|
|
118
120
|
"//absl/numeric:bits",
|
|
119
121
|
"//absl/numeric:int128",
|
|
120
122
|
],
|
|
@@ -129,6 +131,7 @@ cc_library(
|
|
|
129
131
|
"//absl/base:config",
|
|
130
132
|
"//absl/base:fast_type_id",
|
|
131
133
|
"//absl/meta:type_traits",
|
|
134
|
+
"//absl/random:mocking_access",
|
|
132
135
|
"//absl/utility",
|
|
133
136
|
],
|
|
134
137
|
)
|
|
@@ -399,7 +402,6 @@ cc_library(
|
|
|
399
402
|
":platform",
|
|
400
403
|
":randen_hwaes_impl",
|
|
401
404
|
"//absl/base:config",
|
|
402
|
-
"//absl/types:optional",
|
|
403
405
|
],
|
|
404
406
|
)
|
|
405
407
|
|
|
@@ -592,7 +594,7 @@ cc_library(
|
|
|
592
594
|
deps = [
|
|
593
595
|
"//absl/base:config",
|
|
594
596
|
"//absl/base:fast_type_id",
|
|
595
|
-
"//absl/
|
|
597
|
+
"//absl/random:mocking_access",
|
|
596
598
|
],
|
|
597
599
|
)
|
|
598
600
|
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
#include "absl/base/config.h"
|
|
25
25
|
#include "absl/base/fast_type_id.h"
|
|
26
26
|
#include "absl/meta/type_traits.h"
|
|
27
|
+
#include "absl/random/mocking_access.h"
|
|
27
28
|
#include "absl/utility/utility.h"
|
|
28
29
|
|
|
29
30
|
namespace absl {
|
|
@@ -37,23 +38,8 @@ template <typename URBG>
|
|
|
37
38
|
struct DistributionCaller {
|
|
38
39
|
static_assert(!std::is_pointer<URBG>::value,
|
|
39
40
|
"You must pass a reference, not a pointer.");
|
|
40
|
-
// SFINAE to detect whether the URBG type includes a member matching
|
|
41
|
-
// bool InvokeMock(key_id, args_tuple*, result*).
|
|
42
|
-
//
|
|
43
|
-
// These live inside BitGenRef so that they have friend access
|
|
44
|
-
// to MockingBitGen. (see similar methods in DistributionCaller).
|
|
45
|
-
template <template <class...> class Trait, class AlwaysVoid, class... Args>
|
|
46
|
-
struct detector : std::false_type {};
|
|
47
|
-
template <template <class...> class Trait, class... Args>
|
|
48
|
-
struct detector<Trait, absl::void_t<Trait<Args...>>, Args...>
|
|
49
|
-
: std::true_type {};
|
|
50
41
|
|
|
51
|
-
|
|
52
|
-
using invoke_mock_t = decltype(std::declval<T*>()->InvokeMock(
|
|
53
|
-
std::declval<FastTypeIdType>(), std::declval<void*>(),
|
|
54
|
-
std::declval<void*>()));
|
|
55
|
-
|
|
56
|
-
using HasInvokeMock = typename detector<invoke_mock_t, void, URBG>::type;
|
|
42
|
+
using RandomMockingAccess = ::absl::RandomMockingAccess;
|
|
57
43
|
|
|
58
44
|
// Default implementation of distribution caller.
|
|
59
45
|
template <typename DistrT, typename... Args>
|
|
@@ -69,13 +55,14 @@ struct DistributionCaller {
|
|
|
69
55
|
static typename DistrT::result_type Impl(std::true_type, URBG* urbg,
|
|
70
56
|
Args&&... args) {
|
|
71
57
|
using ResultT = typename DistrT::result_type;
|
|
72
|
-
using ArgTupleT = std::tuple<
|
|
58
|
+
using ArgTupleT = std::tuple<std::decay_t<Args>...>;
|
|
73
59
|
using KeyT = ResultT(DistrT, ArgTupleT);
|
|
74
60
|
|
|
75
61
|
ArgTupleT arg_tuple(std::forward<Args>(args)...);
|
|
76
62
|
ResultT result;
|
|
77
|
-
if (!
|
|
78
|
-
|
|
63
|
+
if (!RandomMockingAccess::InvokeMock<URBG>(urbg, FastTypeId<KeyT>(),
|
|
64
|
+
&arg_tuple, &result)) {
|
|
65
|
+
auto dist = std::make_from_tuple<DistrT>(arg_tuple);
|
|
79
66
|
result = dist(*urbg);
|
|
80
67
|
}
|
|
81
68
|
return result;
|
|
@@ -84,8 +71,8 @@ struct DistributionCaller {
|
|
|
84
71
|
// Default implementation of distribution caller.
|
|
85
72
|
template <typename DistrT, typename... Args>
|
|
86
73
|
static typename DistrT::result_type Call(URBG* urbg, Args&&... args) {
|
|
87
|
-
return Impl<DistrT, Args...>(HasInvokeMock{},
|
|
88
|
-
std::forward<Args>(args)...);
|
|
74
|
+
return Impl<DistrT, Args...>(RandomMockingAccess::HasInvokeMock<URBG>{},
|
|
75
|
+
urbg, std::forward<Args>(args)...);
|
|
89
76
|
}
|
|
90
77
|
};
|
|
91
78
|
|
|
@@ -126,7 +126,7 @@ FastUniformBits<UIntType>::operator()(URBG& g) { // NOLINT(runtime/references)
|
|
|
126
126
|
static_assert((URBG::max)() > (URBG::min)(),
|
|
127
127
|
"URBG::max and URBG::min may not be equal.");
|
|
128
128
|
|
|
129
|
-
using tag =
|
|
129
|
+
using tag = std::conditional_t<IsPowerOfTwoOrZero(RangeSize<URBG>()),
|
|
130
130
|
SimplifiedLoopTag, RejectionLoopTag>;
|
|
131
131
|
return Generate(g, tag{});
|
|
132
132
|
}
|
|
@@ -69,7 +69,7 @@ template <typename RealType, // Real type, either float or double.
|
|
|
69
69
|
bool IncludeZero = true>
|
|
70
70
|
inline RealType GenerateRealFromBits(uint64_t bits, int exp_bias = 0) {
|
|
71
71
|
using real_type = RealType;
|
|
72
|
-
using uint_type =
|
|
72
|
+
using uint_type = std::conditional_t<std::is_same<real_type, float>::value,
|
|
73
73
|
uint32_t, uint64_t>;
|
|
74
74
|
|
|
75
75
|
static_assert(
|
|
@@ -95,7 +95,7 @@ ostream_state_saver<std::basic_ostream<CharT, Traits>> make_ostream_state_saver(
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
template <typename T>
|
|
98
|
-
typename
|
|
98
|
+
typename std::enable_if_t<!std::is_base_of<std::ios_base, T>::value,
|
|
99
99
|
null_state_saver<T>>
|
|
100
100
|
make_ostream_state_saver(T& is, // NOLINT(runtime/references)
|
|
101
101
|
std::ios_base::fmtflags flags = std::ios_base::dec) {
|
|
@@ -159,7 +159,7 @@ istream_state_saver<std::basic_istream<CharT, Traits>> make_istream_state_saver(
|
|
|
159
159
|
}
|
|
160
160
|
|
|
161
161
|
template <typename T>
|
|
162
|
-
typename
|
|
162
|
+
typename std::enable_if_t<!std::is_base_of<std::ios_base, T>::value,
|
|
163
163
|
null_state_saver<T>>
|
|
164
164
|
make_istream_state_saver(T& is, // NOLINT(runtime/references)
|
|
165
165
|
std::ios_base::fmtflags flags = std::ios_base::dec) {
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
#include <sstream>
|
|
21
21
|
#include <string>
|
|
22
|
+
#include <type_traits>
|
|
22
23
|
|
|
23
24
|
#include "gtest/gtest.h"
|
|
24
25
|
|
|
@@ -29,7 +30,7 @@ using absl::random_internal::make_ostream_state_saver;
|
|
|
29
30
|
using absl::random_internal::stream_precision_helper;
|
|
30
31
|
|
|
31
32
|
template <typename T>
|
|
32
|
-
typename
|
|
33
|
+
typename std::enable_if_t<std::is_integral<T>::value, T> //
|
|
33
34
|
StreamRoundTrip(T t) {
|
|
34
35
|
std::stringstream ss;
|
|
35
36
|
{
|
|
@@ -53,7 +54,7 @@ StreamRoundTrip(T t) {
|
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
template <typename T>
|
|
56
|
-
typename
|
|
57
|
+
typename std::enable_if_t<std::is_floating_point<T>::value, T> //
|
|
57
58
|
StreamRoundTrip(T t) {
|
|
58
59
|
std::stringstream ss;
|
|
59
60
|
{
|
|
@@ -16,11 +16,12 @@
|
|
|
16
16
|
#ifndef ABSL_RANDOM_INTERNAL_MOCK_HELPERS_H_
|
|
17
17
|
#define ABSL_RANDOM_INTERNAL_MOCK_HELPERS_H_
|
|
18
18
|
|
|
19
|
+
#include <optional>
|
|
19
20
|
#include <utility>
|
|
20
21
|
|
|
21
22
|
#include "absl/base/config.h"
|
|
22
23
|
#include "absl/base/fast_type_id.h"
|
|
23
|
-
#include "absl/
|
|
24
|
+
#include "absl/random/mocking_access.h"
|
|
24
25
|
|
|
25
26
|
namespace absl {
|
|
26
27
|
ABSL_NAMESPACE_BEGIN
|
|
@@ -49,6 +50,7 @@ struct NoOpValidator {
|
|
|
49
50
|
//
|
|
50
51
|
class MockHelpers {
|
|
51
52
|
using IdType = ::absl::FastTypeIdType;
|
|
53
|
+
using RandomMockingAccess = ::absl::RandomMockingAccess;
|
|
52
54
|
|
|
53
55
|
// Given a key signature type used to index the mock, extract the components.
|
|
54
56
|
// KeyT is expected to have the form:
|
|
@@ -63,39 +65,7 @@ class MockHelpers {
|
|
|
63
65
|
using arg_tuple_type = ArgTupleT;
|
|
64
66
|
};
|
|
65
67
|
|
|
66
|
-
// Detector for InvokeMock.
|
|
67
|
-
template <class T>
|
|
68
|
-
using invoke_mock_t = decltype(std::declval<T*>()->InvokeMock(
|
|
69
|
-
std::declval<IdType>(), std::declval<void*>(), std::declval<void*>()));
|
|
70
|
-
|
|
71
|
-
// Empty implementation of InvokeMock.
|
|
72
|
-
template <typename KeyT, typename ReturnT, typename ArgTupleT, typename URBG,
|
|
73
|
-
typename... Args>
|
|
74
|
-
static absl::optional<ReturnT> InvokeMockImpl(char, URBG*, Args&&...) {
|
|
75
|
-
return absl::nullopt;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// Non-empty implementation of InvokeMock.
|
|
79
|
-
template <typename KeyT, typename ReturnT, typename ArgTupleT, typename URBG,
|
|
80
|
-
typename = invoke_mock_t<URBG>, typename... Args>
|
|
81
|
-
static absl::optional<ReturnT> InvokeMockImpl(int, URBG* urbg,
|
|
82
|
-
Args&&... args) {
|
|
83
|
-
ArgTupleT arg_tuple(std::forward<Args>(args)...);
|
|
84
|
-
ReturnT result;
|
|
85
|
-
if (urbg->InvokeMock(FastTypeId<KeyT>(), &arg_tuple, &result)) {
|
|
86
|
-
return result;
|
|
87
|
-
}
|
|
88
|
-
return absl::nullopt;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
68
|
public:
|
|
92
|
-
// InvokeMock is private; this provides access for some specialized use cases.
|
|
93
|
-
template <typename URBG>
|
|
94
|
-
static inline bool PrivateInvokeMock(URBG* urbg, IdType key_id,
|
|
95
|
-
void* args_tuple, void* result) {
|
|
96
|
-
return urbg->InvokeMock(key_id, args_tuple, result);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
69
|
// Invoke a mock for the KeyT (may or may not be a signature).
|
|
100
70
|
//
|
|
101
71
|
// KeyT is used to generate a typeid-based lookup key for the mock.
|
|
@@ -108,13 +78,17 @@ class MockHelpers {
|
|
|
108
78
|
// the underlying mechanism requires a pointer to an argument tuple.
|
|
109
79
|
template <typename KeyT, typename URBG, typename... Args>
|
|
110
80
|
static auto MaybeInvokeMock(URBG* urbg, Args&&... args)
|
|
111
|
-
->
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
81
|
+
-> std::optional<typename KeySignature<KeyT>::result_type> {
|
|
82
|
+
if constexpr (RandomMockingAccess::HasInvokeMock<URBG>::value) {
|
|
83
|
+
typename KeySignature<KeyT>::arg_tuple_type arg_tuple(
|
|
84
|
+
std::forward<Args>(args)...);
|
|
85
|
+
typename KeySignature<KeyT>::result_type result;
|
|
86
|
+
if (RandomMockingAccess::InvokeMock(urbg, FastTypeId<KeyT>(), &arg_tuple,
|
|
87
|
+
&result)) {
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return std::nullopt;
|
|
118
92
|
}
|
|
119
93
|
|
|
120
94
|
// Acquire a mock for the KeyT (may or may not be a signature), set up to use
|
|
@@ -78,7 +78,7 @@ class RandenPoolSeedSeq {
|
|
|
78
78
|
// std::contiguous_iterator_tag provides a mechanism for testing this
|
|
79
79
|
// capability, however until Abseil's support requirements allow us to
|
|
80
80
|
// assume C++20, limit checks to a few common cases.
|
|
81
|
-
using TagType =
|
|
81
|
+
using TagType = std::conditional_t<
|
|
82
82
|
(std::is_pointer<RandomAccessIterator>::value ||
|
|
83
83
|
std::is_same<RandomAccessIterator,
|
|
84
84
|
typename std::vector<U>::iterator>::value),
|
|
@@ -106,7 +106,7 @@ class NonsecureURBGBase {
|
|
|
106
106
|
NonsecureURBGBase& operator=(NonsecureURBGBase&&) = default;
|
|
107
107
|
|
|
108
108
|
// Constructor using a seed
|
|
109
|
-
template <class SSeq, typename = typename
|
|
109
|
+
template <class SSeq, typename = typename std::enable_if_t<
|
|
110
110
|
!std::is_same<SSeq, NonsecureURBGBase>::value>>
|
|
111
111
|
explicit NonsecureURBGBase(SSeq&& seq)
|
|
112
112
|
: urbg_(ConstructURBG(std::forward<SSeq>(seq))) {}
|