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.
- package/README.md +60 -4
- package/binding.gyp +5 -1
- package/lib/addon.cc +4 -0
- package/lib/new.cc +1 -246
- package/lib/pattern.cc +252 -0
- package/lib/pattern.h +10 -0
- package/lib/set.cc +777 -0
- package/lib/wrapped_re2_set.h +42 -0
- package/package.json +21 -9
- package/re2.d.ts +46 -9
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +14 -24
- package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +3 -3
- package/vendor/abseil-cpp/CMake/README.md +2 -2
- package/vendor/abseil-cpp/CMakeLists.txt +3 -3
- package/vendor/abseil-cpp/MODULE.bazel +6 -9
- package/vendor/abseil-cpp/README.md +6 -8
- package/vendor/abseil-cpp/absl/abseil.podspec.gen.py +6 -4
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/algorithm/container.h +2 -19
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +4 -11
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +60 -45
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +57 -38
- package/vendor/abseil-cpp/absl/base/attributes.h +76 -7
- package/vendor/abseil-cpp/absl/base/attributes_test.cc +43 -0
- package/vendor/abseil-cpp/absl/base/call_once.h +11 -12
- package/vendor/abseil-cpp/absl/base/config.h +22 -129
- package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -4
- package/vendor/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- package/vendor/abseil-cpp/absl/base/{internal/fast_type_id_test.cc → fast_type_id_test.cc} +34 -30
- package/vendor/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- package/vendor/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- package/vendor/abseil-cpp/absl/base/internal/endian.h +34 -38
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -9
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
- package/vendor/abseil-cpp/absl/base/internal/poison.cc +7 -6
- package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +15 -28
- package/vendor/abseil-cpp/absl/base/internal/spinlock.h +65 -35
- package/vendor/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +2 -2
- package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +2 -2
- package/vendor/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/base/internal/thread_identity_test.cc +4 -4
- package/vendor/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +4 -0
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- package/vendor/abseil-cpp/absl/base/no_destructor.h +11 -32
- package/vendor/abseil-cpp/absl/base/no_destructor_test.cc +0 -4
- package/vendor/abseil-cpp/absl/base/nullability.h +83 -72
- package/vendor/abseil-cpp/absl/base/nullability_test.cc +25 -64
- package/vendor/abseil-cpp/absl/base/options.h +3 -80
- package/vendor/abseil-cpp/absl/base/policy_checks.h +7 -7
- package/vendor/abseil-cpp/absl/base/raw_logging_test.cc +15 -0
- package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +50 -30
- package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -1
- package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -1
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- package/vendor/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -2
- package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +74 -1
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +73 -0
- package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +51 -9
- package/vendor/abseil-cpp/absl/container/btree_map.h +8 -6
- package/vendor/abseil-cpp/absl/container/btree_set.h +8 -6
- package/vendor/abseil-cpp/absl/container/btree_test.cc +89 -4
- package/vendor/abseil-cpp/absl/container/fixed_array.h +7 -15
- package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +17 -0
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +20 -15
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +8 -14
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +19 -14
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +46 -0
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +7 -6
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +28 -0
- package/vendor/abseil-cpp/absl/container/internal/btree.h +132 -29
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- package/vendor/abseil-cpp/absl/container/internal/common.h +43 -0
- package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +28 -24
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +4 -17
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +80 -17
- package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +32 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +13 -8
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +1 -52
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +9 -31
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +23 -32
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +5 -1
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +11 -23
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +14 -9
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +516 -0
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -6
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +32 -13
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +8 -8
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- package/vendor/abseil-cpp/absl/container/internal/layout.h +26 -42
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +1506 -213
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +1095 -1658
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +3 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +31 -29
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +51 -20
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +707 -363
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +20 -15
- package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +0 -3
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +18 -13
- package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +3 -8
- package/vendor/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +1 -1
- package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +9 -20
- package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +9 -20
- package/vendor/abseil-cpp/absl/copts/copts.py +24 -15
- package/vendor/abseil-cpp/absl/crc/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/crc/crc32c.cc +0 -4
- package/vendor/abseil-cpp/absl/crc/crc32c.h +7 -5
- package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +17 -4
- package/vendor/abseil-cpp/absl/crc/crc32c_test.cc +30 -0
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +17 -0
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
- package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- package/vendor/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +136 -165
- package/vendor/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +7 -0
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +11 -10
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -14
- package/vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +161 -27
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +435 -1
- package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +55 -63
- package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -0
- package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +3 -0
- package/vendor/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- package/vendor/abseil-cpp/absl/flags/flag.h +4 -3
- package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +14 -13
- package/vendor/abseil-cpp/absl/flags/internal/flag.h +34 -34
- package/vendor/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/internal/registry.h +4 -3
- package/vendor/abseil-cpp/absl/flags/internal/usage.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/parse.cc +10 -6
- package/vendor/abseil-cpp/absl/flags/reflection.cc +9 -7
- package/vendor/abseil-cpp/absl/flags/usage.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/usage_config.cc +2 -2
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +7 -6
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +2 -4
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +15 -15
- package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +10 -42
- package/vendor/abseil-cpp/absl/functional/function_ref.h +2 -9
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +10 -0
- package/vendor/abseil-cpp/absl/functional/function_type_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +112 -227
- package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- package/vendor/abseil-cpp/absl/functional/overload.h +0 -20
- package/vendor/abseil-cpp/absl/functional/overload_test.cc +1 -7
- package/vendor/abseil-cpp/absl/hash/BUILD.bazel +16 -9
- package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +6 -9
- package/vendor/abseil-cpp/absl/hash/hash.h +18 -0
- package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +3 -0
- package/vendor/abseil-cpp/absl/hash/hash_instantiated_test.cc +1 -1
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +131 -30
- package/vendor/abseil-cpp/absl/hash/hash_testing.h +20 -20
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +129 -17
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +326 -362
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +54 -151
- package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +14 -2
- package/vendor/abseil-cpp/absl/{strings/cord_buffer.cc → hash/internal/weakly_mixed_integer.h} +14 -6
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +7 -0
- package/vendor/abseil-cpp/absl/log/check.h +2 -1
- package/vendor/abseil-cpp/absl/log/check_test_impl.inc +308 -14
- package/vendor/abseil-cpp/absl/log/die_if_null.h +2 -2
- package/vendor/abseil-cpp/absl/log/flags_test.cc +7 -0
- package/vendor/abseil-cpp/absl/log/globals.h +4 -5
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +13 -9
- package/vendor/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- package/vendor/abseil-cpp/absl/log/internal/check_op.cc +24 -22
- package/vendor/abseil-cpp/absl/log/internal/check_op.h +149 -94
- package/vendor/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- package/vendor/abseil-cpp/absl/log/internal/conditions.h +7 -2
- package/vendor/abseil-cpp/absl/log/internal/fnmatch_test.cc +1 -0
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +84 -59
- package/vendor/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
- package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- package/vendor/abseil-cpp/absl/log/internal/proto.cc +3 -2
- package/vendor/abseil-cpp/absl/log/internal/proto.h +3 -3
- package/vendor/abseil-cpp/absl/log/internal/strip.h +4 -12
- package/vendor/abseil-cpp/absl/log/internal/structured.h +3 -7
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +9 -9
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- package/vendor/abseil-cpp/absl/log/internal/voidify.h +10 -4
- package/vendor/abseil-cpp/absl/log/log.h +48 -35
- package/vendor/abseil-cpp/absl/log/log_basic_test_impl.inc +45 -0
- package/vendor/abseil-cpp/absl/log/log_entry.cc +241 -19
- package/vendor/abseil-cpp/absl/log/log_entry.h +2 -0
- package/vendor/abseil-cpp/absl/log/log_format_test.cc +412 -6
- package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +20 -0
- package/vendor/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +15 -2
- package/vendor/abseil-cpp/absl/log/scoped_mock_log.h +7 -1
- package/vendor/abseil-cpp/absl/log/structured_test.cc +1 -0
- package/vendor/abseil-cpp/absl/memory/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/type_traits.h +46 -175
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +1 -478
- package/vendor/abseil-cpp/absl/numeric/BUILD.bazel +7 -3
- package/vendor/abseil-cpp/absl/numeric/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/numeric/bits.h +68 -2
- package/vendor/abseil-cpp/absl/numeric/bits_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/numeric/bits_test.cc +83 -0
- package/vendor/abseil-cpp/absl/numeric/int128.cc +0 -52
- package/vendor/abseil-cpp/absl/numeric/int128_benchmark.cc +14 -15
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +13 -8
- package/vendor/abseil-cpp/absl/numeric/internal/bits.h +39 -7
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +47 -0
- package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +38 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +124 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.h +40 -0
- package/vendor/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +462 -0
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +138 -0
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +7 -3
- package/vendor/abseil-cpp/absl/random/BUILD.bazel +6 -4
- package/vendor/abseil-cpp/absl/random/CMakeLists.txt +20 -19
- package/vendor/abseil-cpp/absl/random/benchmarks.cc +16 -23
- package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +7 -2
- package/vendor/abseil-cpp/absl/random/distributions.h +6 -8
- package/vendor/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +19 -20
- package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- package/vendor/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +24 -92
- package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h} +14 -6
- package/vendor/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
- package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +6 -7
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +39 -0
- package/vendor/abseil-cpp/absl/random/internal/randen_benchmarks.cc +8 -6
- package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- package/vendor/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- package/vendor/abseil-cpp/absl/random/internal/seed_material_test.cc +3 -0
- package/vendor/abseil-cpp/absl/random/mock_distributions_test.cc +5 -4
- package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +8 -10
- package/vendor/abseil-cpp/absl/random/random.h +88 -53
- package/vendor/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +26 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.cc +4 -3
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +194 -32
- package/vendor/abseil-cpp/absl/status/status.cc +4 -8
- package/vendor/abseil-cpp/absl/status/status.h +8 -8
- package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc} +20 -10
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +65 -0
- package/vendor/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- package/vendor/abseil-cpp/absl/status/statusor.cc +2 -2
- package/vendor/abseil-cpp/absl/status/statusor.h +49 -102
- package/vendor/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
- package/vendor/abseil-cpp/absl/status/statusor_test.cc +323 -1
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +70 -34
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +6 -3
- package/vendor/abseil-cpp/absl/strings/ascii.cc +9 -9
- package/vendor/abseil-cpp/absl/strings/ascii.h +18 -18
- package/vendor/abseil-cpp/absl/strings/ascii_benchmark.cc +5 -8
- package/vendor/abseil-cpp/absl/strings/charconv.cc +21 -22
- package/vendor/abseil-cpp/absl/strings/charconv.h +5 -5
- package/vendor/abseil-cpp/absl/strings/charconv_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/charset_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/cord.cc +54 -58
- package/vendor/abseil-cpp/absl/strings/cord.h +94 -84
- package/vendor/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- package/vendor/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- package/vendor/abseil-cpp/absl/strings/cord_test.cc +23 -0
- package/vendor/abseil-cpp/absl/strings/cordz_test_helpers.h +4 -5
- package/vendor/abseil-cpp/absl/strings/escaping.cc +130 -149
- package/vendor/abseil-cpp/absl/strings/escaping.h +9 -10
- package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/escaping_test.cc +19 -9
- package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +6 -10
- package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- package/vendor/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +5 -9
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +2 -4
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
- package/vendor/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1 -6
- package/vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- package/vendor/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +3 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- package/vendor/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +7 -2
- package/vendor/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- package/vendor/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- package/vendor/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- package/vendor/abseil-cpp/absl/strings/internal/utf8_test.cc +196 -3
- package/vendor/abseil-cpp/absl/strings/numbers.cc +53 -32
- package/vendor/abseil-cpp/absl/strings/numbers.h +87 -58
- package/vendor/abseil-cpp/absl/strings/numbers_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +634 -120
- package/vendor/abseil-cpp/absl/strings/str_cat.cc +6 -7
- package/vendor/abseil-cpp/absl/strings/str_cat.h +32 -32
- package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +25 -1
- package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +2 -7
- package/vendor/abseil-cpp/absl/strings/str_format.h +18 -18
- package/vendor/abseil-cpp/absl/strings/str_format_test.cc +8 -14
- package/vendor/abseil-cpp/absl/strings/str_join_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/str_replace.cc +3 -3
- package/vendor/abseil-cpp/absl/strings/str_replace.h +6 -6
- package/vendor/abseil-cpp/absl/strings/str_replace_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/str_split.h +2 -2
- package/vendor/abseil-cpp/absl/strings/str_split_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/string_view.cc +4 -9
- package/vendor/abseil-cpp/absl/strings/string_view.h +38 -39
- package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +4 -6
- package/vendor/abseil-cpp/absl/strings/string_view_test.cc +2 -50
- package/vendor/abseil-cpp/absl/strings/strip.h +4 -4
- package/vendor/abseil-cpp/absl/strings/substitute.cc +5 -4
- package/vendor/abseil-cpp/absl/strings/substitute.h +66 -64
- package/vendor/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +6 -1
- package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +2 -1
- package/vendor/abseil-cpp/absl/synchronization/barrier.cc +1 -1
- package/vendor/abseil-cpp/absl/synchronization/barrier_test.cc +3 -3
- package/vendor/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
- package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +6 -5
- package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- package/vendor/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/thread_pool.h +3 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/waiter_test.cc +12 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/lifetime_test.cc +4 -4
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +27 -29
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +205 -126
- package/vendor/abseil-cpp/absl/synchronization/mutex_benchmark.cc +13 -31
- package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +183 -169
- package/vendor/abseil-cpp/absl/synchronization/notification.cc +5 -5
- package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
- package/vendor/abseil-cpp/absl/synchronization/notification_test.cc +3 -3
- package/vendor/abseil-cpp/absl/time/BUILD.bazel +9 -1
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +3 -1
- package/vendor/abseil-cpp/absl/time/civil_time.cc +1 -0
- package/vendor/abseil-cpp/absl/time/civil_time_test.cc +134 -0
- package/vendor/abseil-cpp/absl/time/clock.cc +11 -14
- package/vendor/abseil-cpp/absl/time/duration.cc +14 -9
- package/vendor/abseil-cpp/absl/time/duration_test.cc +6 -7
- package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +14 -3
- package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +4 -490
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +41 -4
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +22 -23
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +1 -488
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +2 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +1 -1
- package/vendor/abseil-cpp/absl/time/time.h +24 -18
- package/vendor/abseil-cpp/absl/time/time_test.cc +26 -0
- package/vendor/abseil-cpp/absl/types/BUILD.bazel +11 -164
- package/vendor/abseil-cpp/absl/types/CMakeLists.txt +23 -167
- package/vendor/abseil-cpp/absl/types/any.h +9 -484
- package/vendor/abseil-cpp/absl/types/optional.h +7 -747
- package/vendor/abseil-cpp/absl/types/span.h +46 -19
- package/vendor/abseil-cpp/absl/types/span_test.cc +27 -0
- package/vendor/abseil-cpp/absl/types/variant.h +5 -784
- package/vendor/abseil-cpp/absl/types/variant_test.cc +43 -2597
- package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -41
- package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +0 -40
- package/vendor/abseil-cpp/absl/utility/utility.h +10 -185
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -3
- package/vendor/abseil-cpp/ci/cmake_common.sh +2 -2
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +12 -13
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +24 -21
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +12 -12
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +23 -22
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +20 -19
- package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +17 -17
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +10 -10
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +1 -1
- package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +1 -1
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +9 -10
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +9 -1
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +14 -6
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +14 -6
- package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +1 -1
- package/vendor/re2/.bazelrc +4 -4
- package/vendor/re2/.bcr/metadata.template.json +16 -0
- package/vendor/re2/.bcr/presubmit.yml +57 -0
- package/vendor/re2/.bcr/source.template.json +5 -0
- package/vendor/re2/.github/bazel.sh +1 -7
- package/vendor/re2/.github/workflows/ci-bazel.yml +5 -5
- package/vendor/re2/.github/workflows/ci-cmake.yml +4 -4
- package/vendor/re2/.github/workflows/ci.yml +5 -6
- package/vendor/re2/.github/workflows/pages.yml +3 -3
- package/vendor/re2/.github/workflows/python.yml +29 -24
- package/vendor/re2/.github/workflows/release-bazel.yml +42 -0
- package/vendor/re2/.github/workflows/release.yml +15 -4
- package/vendor/re2/BUILD.bazel +25 -0
- package/vendor/re2/CMakeLists.txt +100 -85
- package/vendor/re2/CONTRIBUTING.md +0 -1
- package/vendor/re2/MODULE.bazel +10 -10
- package/vendor/re2/Makefile +1 -1
- package/vendor/re2/README.md +259 -0
- package/vendor/re2/python/BUILD.bazel +8 -0
- package/vendor/re2/python/re2.py +1 -1
- package/vendor/re2/python/re2_test.py +6 -0
- package/vendor/re2/python/setup.py +3 -3
- package/vendor/re2/re2/bitmap256.cc +3 -4
- package/vendor/re2/re2/bitstate.cc +15 -10
- package/vendor/re2/re2/dfa.cc +1 -2
- package/vendor/re2/re2/parse.cc +3 -4
- package/vendor/re2/re2/prog.cc +1 -2
- package/vendor/re2/re2/prog.h +1 -0
- package/vendor/re2/re2/re2.cc +5 -0
- package/vendor/re2/re2/re2.h +9 -9
- package/vendor/re2/re2/set.cc +6 -0
- package/vendor/re2/re2/set.h +5 -0
- package/vendor/re2/re2/testing/re2_arg_test.cc +3 -3
- package/vendor/re2/re2/testing/re2_test.cc +8 -0
- package/vendor/re2/re2/testing/set_test.cc +5 -0
- package/vendor/re2/re2/walker-inl.h +1 -1
- package/vendor/abseil-cpp/WORKSPACE +0 -76
- package/vendor/abseil-cpp/WORKSPACE.bzlmod +0 -19
- package/vendor/abseil-cpp/absl/base/inline_variable_test.cc +0 -64
- package/vendor/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- package/vendor/abseil-cpp/absl/base/internal/inline_variable_testing.h +0 -46
- package/vendor/abseil-cpp/absl/base/internal/invoke.h +0 -241
- package/vendor/abseil-cpp/absl/base/internal/nullability_impl.h +0 -69
- package/vendor/abseil-cpp/absl/base/invoke_test.cc +0 -331
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -148
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -54
- package/vendor/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- package/vendor/abseil-cpp/absl/random/internal/pool_urbg_test.cc +0 -182
- package/vendor/abseil-cpp/absl/types/any_exception_safety_test.cc +0 -173
- package/vendor/abseil-cpp/absl/types/any_test.cc +0 -778
- package/vendor/abseil-cpp/absl/types/bad_any_cast.cc +0 -64
- package/vendor/abseil-cpp/absl/types/bad_any_cast.h +0 -75
- package/vendor/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- package/vendor/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- package/vendor/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- package/vendor/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- package/vendor/abseil-cpp/absl/types/internal/optional.h +0 -352
- package/vendor/abseil-cpp/absl/types/internal/variant.h +0 -1622
- package/vendor/abseil-cpp/absl/types/optional_exception_safety_test.cc +0 -292
- package/vendor/abseil-cpp/absl/types/optional_test.cc +0 -1615
- package/vendor/abseil-cpp/absl/types/variant_benchmark.cc +0 -222
- package/vendor/abseil-cpp/absl/types/variant_exception_safety_test.cc +0 -532
- package/vendor/abseil-cpp/absl/utility/internal/if_constexpr.h +0 -70
- package/vendor/abseil-cpp/absl/utility/internal/if_constexpr_test.cc +0 -79
- package/vendor/abseil-cpp/absl/utility/utility_test.cc +0 -239
- package/vendor/re2/.github/workflows/pr.yml +0 -34
- package/vendor/re2/README +0 -47
|
@@ -1,532 +0,0 @@
|
|
|
1
|
-
// Copyright 2017 The Abseil Authors.
|
|
2
|
-
//
|
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
// you may not use this file except in compliance with the License.
|
|
5
|
-
// You may obtain a copy of the License at
|
|
6
|
-
//
|
|
7
|
-
// https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
//
|
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
// See the License for the specific language governing permissions and
|
|
13
|
-
// limitations under the License.
|
|
14
|
-
|
|
15
|
-
#include "absl/types/variant.h"
|
|
16
|
-
|
|
17
|
-
#include "absl/base/config.h"
|
|
18
|
-
|
|
19
|
-
// This test is a no-op when absl::variant is an alias for std::variant and when
|
|
20
|
-
// exceptions are not enabled.
|
|
21
|
-
#if !defined(ABSL_USES_STD_VARIANT) && defined(ABSL_HAVE_EXCEPTIONS)
|
|
22
|
-
|
|
23
|
-
#include <iostream>
|
|
24
|
-
#include <memory>
|
|
25
|
-
#include <utility>
|
|
26
|
-
#include <vector>
|
|
27
|
-
|
|
28
|
-
#include "gmock/gmock.h"
|
|
29
|
-
#include "gtest/gtest.h"
|
|
30
|
-
#include "absl/base/internal/exception_safety_testing.h"
|
|
31
|
-
#include "absl/memory/memory.h"
|
|
32
|
-
|
|
33
|
-
// See comment in absl/base/config.h
|
|
34
|
-
#if !defined(ABSL_INTERNAL_MSVC_2017_DBG_MODE)
|
|
35
|
-
|
|
36
|
-
namespace absl {
|
|
37
|
-
ABSL_NAMESPACE_BEGIN
|
|
38
|
-
namespace {
|
|
39
|
-
|
|
40
|
-
using ::testing::MakeExceptionSafetyTester;
|
|
41
|
-
using ::testing::strong_guarantee;
|
|
42
|
-
using ::testing::TestNothrowOp;
|
|
43
|
-
using ::testing::TestThrowingCtor;
|
|
44
|
-
|
|
45
|
-
using Thrower = testing::ThrowingValue<>;
|
|
46
|
-
using CopyNothrow = testing::ThrowingValue<testing::TypeSpec::kNoThrowCopy>;
|
|
47
|
-
using MoveNothrow = testing::ThrowingValue<testing::TypeSpec::kNoThrowMove>;
|
|
48
|
-
using ThrowingAlloc = testing::ThrowingAllocator<Thrower>;
|
|
49
|
-
using ThrowerVec = std::vector<Thrower, ThrowingAlloc>;
|
|
50
|
-
using ThrowingVariant =
|
|
51
|
-
absl::variant<Thrower, CopyNothrow, MoveNothrow, ThrowerVec>;
|
|
52
|
-
|
|
53
|
-
struct ConversionException {};
|
|
54
|
-
|
|
55
|
-
template <class T>
|
|
56
|
-
struct ExceptionOnConversion {
|
|
57
|
-
operator T() const { // NOLINT
|
|
58
|
-
throw ConversionException();
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
// Forces a variant into the valueless by exception state.
|
|
63
|
-
void ToValuelessByException(ThrowingVariant& v) { // NOLINT
|
|
64
|
-
try {
|
|
65
|
-
v.emplace<Thrower>();
|
|
66
|
-
v.emplace<Thrower>(ExceptionOnConversion<Thrower>());
|
|
67
|
-
} catch (const ConversionException&) {
|
|
68
|
-
// This space intentionally left blank.
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// Check that variant is still in a usable state after an exception is thrown.
|
|
73
|
-
testing::AssertionResult VariantInvariants(ThrowingVariant* v) {
|
|
74
|
-
using testing::AssertionFailure;
|
|
75
|
-
using testing::AssertionSuccess;
|
|
76
|
-
|
|
77
|
-
// Try using the active alternative
|
|
78
|
-
if (absl::holds_alternative<Thrower>(*v)) {
|
|
79
|
-
auto& t = absl::get<Thrower>(*v);
|
|
80
|
-
t = Thrower{-100};
|
|
81
|
-
if (t.Get() != -100) {
|
|
82
|
-
return AssertionFailure() << "Thrower should be assigned -100";
|
|
83
|
-
}
|
|
84
|
-
} else if (absl::holds_alternative<ThrowerVec>(*v)) {
|
|
85
|
-
auto& tv = absl::get<ThrowerVec>(*v);
|
|
86
|
-
tv.clear();
|
|
87
|
-
tv.emplace_back(-100);
|
|
88
|
-
if (tv.size() != 1 || tv[0].Get() != -100) {
|
|
89
|
-
return AssertionFailure() << "ThrowerVec should be {Thrower{-100}}";
|
|
90
|
-
}
|
|
91
|
-
} else if (absl::holds_alternative<CopyNothrow>(*v)) {
|
|
92
|
-
auto& t = absl::get<CopyNothrow>(*v);
|
|
93
|
-
t = CopyNothrow{-100};
|
|
94
|
-
if (t.Get() != -100) {
|
|
95
|
-
return AssertionFailure() << "CopyNothrow should be assigned -100";
|
|
96
|
-
}
|
|
97
|
-
} else if (absl::holds_alternative<MoveNothrow>(*v)) {
|
|
98
|
-
auto& t = absl::get<MoveNothrow>(*v);
|
|
99
|
-
t = MoveNothrow{-100};
|
|
100
|
-
if (t.Get() != -100) {
|
|
101
|
-
return AssertionFailure() << "MoveNothrow should be assigned -100";
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// Try making variant valueless_by_exception
|
|
106
|
-
if (!v->valueless_by_exception()) ToValuelessByException(*v);
|
|
107
|
-
if (!v->valueless_by_exception()) {
|
|
108
|
-
return AssertionFailure() << "Variant should be valueless_by_exception";
|
|
109
|
-
}
|
|
110
|
-
try {
|
|
111
|
-
auto unused = absl::get<Thrower>(*v);
|
|
112
|
-
static_cast<void>(unused);
|
|
113
|
-
return AssertionFailure() << "Variant should not contain Thrower";
|
|
114
|
-
} catch (const absl::bad_variant_access&) {
|
|
115
|
-
} catch (...) {
|
|
116
|
-
return AssertionFailure() << "Unexpected exception throw from absl::get";
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// Try using the variant
|
|
120
|
-
v->emplace<Thrower>(100);
|
|
121
|
-
if (!absl::holds_alternative<Thrower>(*v) ||
|
|
122
|
-
absl::get<Thrower>(*v) != Thrower(100)) {
|
|
123
|
-
return AssertionFailure() << "Variant should contain Thrower(100)";
|
|
124
|
-
}
|
|
125
|
-
v->emplace<ThrowerVec>({Thrower(100)});
|
|
126
|
-
if (!absl::holds_alternative<ThrowerVec>(*v) ||
|
|
127
|
-
absl::get<ThrowerVec>(*v)[0] != Thrower(100)) {
|
|
128
|
-
return AssertionFailure()
|
|
129
|
-
<< "Variant should contain ThrowerVec{Thrower(100)}";
|
|
130
|
-
}
|
|
131
|
-
return AssertionSuccess();
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
template <typename... Args>
|
|
135
|
-
Thrower ExpectedThrower(Args&&... args) {
|
|
136
|
-
return Thrower(42, args...);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
ThrowerVec ExpectedThrowerVec() { return {Thrower(100), Thrower(200)}; }
|
|
140
|
-
ThrowingVariant ValuelessByException() {
|
|
141
|
-
ThrowingVariant v;
|
|
142
|
-
ToValuelessByException(v);
|
|
143
|
-
return v;
|
|
144
|
-
}
|
|
145
|
-
ThrowingVariant WithThrower() { return Thrower(39); }
|
|
146
|
-
ThrowingVariant WithThrowerVec() {
|
|
147
|
-
return ThrowerVec{Thrower(1), Thrower(2), Thrower(3)};
|
|
148
|
-
}
|
|
149
|
-
ThrowingVariant WithCopyNoThrow() { return CopyNothrow(39); }
|
|
150
|
-
ThrowingVariant WithMoveNoThrow() { return MoveNothrow(39); }
|
|
151
|
-
|
|
152
|
-
TEST(VariantExceptionSafetyTest, DefaultConstructor) {
|
|
153
|
-
TestThrowingCtor<ThrowingVariant>();
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
TEST(VariantExceptionSafetyTest, CopyConstructor) {
|
|
157
|
-
{
|
|
158
|
-
ThrowingVariant v(ExpectedThrower());
|
|
159
|
-
TestThrowingCtor<ThrowingVariant>(v);
|
|
160
|
-
}
|
|
161
|
-
{
|
|
162
|
-
ThrowingVariant v(ExpectedThrowerVec());
|
|
163
|
-
TestThrowingCtor<ThrowingVariant>(v);
|
|
164
|
-
}
|
|
165
|
-
{
|
|
166
|
-
ThrowingVariant v(ValuelessByException());
|
|
167
|
-
TestThrowingCtor<ThrowingVariant>(v);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
TEST(VariantExceptionSafetyTest, MoveConstructor) {
|
|
172
|
-
{
|
|
173
|
-
ThrowingVariant v(ExpectedThrower());
|
|
174
|
-
TestThrowingCtor<ThrowingVariant>(std::move(v));
|
|
175
|
-
}
|
|
176
|
-
{
|
|
177
|
-
ThrowingVariant v(ExpectedThrowerVec());
|
|
178
|
-
TestThrowingCtor<ThrowingVariant>(std::move(v));
|
|
179
|
-
}
|
|
180
|
-
{
|
|
181
|
-
ThrowingVariant v(ValuelessByException());
|
|
182
|
-
TestThrowingCtor<ThrowingVariant>(std::move(v));
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
TEST(VariantExceptionSafetyTest, ValueConstructor) {
|
|
187
|
-
TestThrowingCtor<ThrowingVariant>(ExpectedThrower());
|
|
188
|
-
TestThrowingCtor<ThrowingVariant>(ExpectedThrowerVec());
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
TEST(VariantExceptionSafetyTest, InPlaceTypeConstructor) {
|
|
192
|
-
TestThrowingCtor<ThrowingVariant>(absl::in_place_type_t<Thrower>{},
|
|
193
|
-
ExpectedThrower());
|
|
194
|
-
TestThrowingCtor<ThrowingVariant>(absl::in_place_type_t<ThrowerVec>{},
|
|
195
|
-
ExpectedThrowerVec());
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
TEST(VariantExceptionSafetyTest, InPlaceIndexConstructor) {
|
|
199
|
-
TestThrowingCtor<ThrowingVariant>(absl::in_place_index_t<0>{},
|
|
200
|
-
ExpectedThrower());
|
|
201
|
-
TestThrowingCtor<ThrowingVariant>(absl::in_place_index_t<3>{},
|
|
202
|
-
ExpectedThrowerVec());
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
TEST(VariantExceptionSafetyTest, CopyAssign) {
|
|
206
|
-
// variant& operator=(const variant& rhs);
|
|
207
|
-
// Let j be rhs.index()
|
|
208
|
-
{
|
|
209
|
-
// - neither *this nor rhs holds a value
|
|
210
|
-
const ThrowingVariant rhs = ValuelessByException();
|
|
211
|
-
ThrowingVariant lhs = ValuelessByException();
|
|
212
|
-
EXPECT_TRUE(TestNothrowOp([&]() { lhs = rhs; }));
|
|
213
|
-
}
|
|
214
|
-
{
|
|
215
|
-
// - *this holds a value but rhs does not
|
|
216
|
-
const ThrowingVariant rhs = ValuelessByException();
|
|
217
|
-
ThrowingVariant lhs = WithThrower();
|
|
218
|
-
EXPECT_TRUE(TestNothrowOp([&]() { lhs = rhs; }));
|
|
219
|
-
}
|
|
220
|
-
// - index() == j
|
|
221
|
-
{
|
|
222
|
-
const ThrowingVariant rhs(ExpectedThrower());
|
|
223
|
-
auto tester =
|
|
224
|
-
MakeExceptionSafetyTester()
|
|
225
|
-
.WithInitialValue(WithThrower())
|
|
226
|
-
.WithOperation([&rhs](ThrowingVariant* lhs) { *lhs = rhs; });
|
|
227
|
-
EXPECT_TRUE(tester.WithContracts(VariantInvariants).Test());
|
|
228
|
-
EXPECT_FALSE(tester.WithContracts(strong_guarantee).Test());
|
|
229
|
-
}
|
|
230
|
-
{
|
|
231
|
-
const ThrowingVariant rhs(ExpectedThrowerVec());
|
|
232
|
-
auto tester =
|
|
233
|
-
MakeExceptionSafetyTester()
|
|
234
|
-
.WithInitialValue(WithThrowerVec())
|
|
235
|
-
.WithOperation([&rhs](ThrowingVariant* lhs) { *lhs = rhs; });
|
|
236
|
-
EXPECT_TRUE(tester.WithContracts(VariantInvariants).Test());
|
|
237
|
-
EXPECT_FALSE(tester.WithContracts(strong_guarantee).Test());
|
|
238
|
-
}
|
|
239
|
-
// libstdc++ std::variant has bugs on copy assignment regarding exception
|
|
240
|
-
// safety.
|
|
241
|
-
#if !(defined(ABSL_USES_STD_VARIANT) && defined(__GLIBCXX__))
|
|
242
|
-
// index() != j
|
|
243
|
-
// if is_nothrow_copy_constructible_v<Tj> or
|
|
244
|
-
// !is_nothrow_move_constructible<Tj> is true, equivalent to
|
|
245
|
-
// emplace<j>(get<j>(rhs))
|
|
246
|
-
{
|
|
247
|
-
// is_nothrow_copy_constructible_v<Tj> == true
|
|
248
|
-
// should not throw because emplace() invokes Tj's copy ctor
|
|
249
|
-
// which should not throw.
|
|
250
|
-
const ThrowingVariant rhs(CopyNothrow{});
|
|
251
|
-
ThrowingVariant lhs = WithThrower();
|
|
252
|
-
EXPECT_TRUE(TestNothrowOp([&]() { lhs = rhs; }));
|
|
253
|
-
}
|
|
254
|
-
{
|
|
255
|
-
// is_nothrow_copy_constructible<Tj> == false &&
|
|
256
|
-
// is_nothrow_move_constructible<Tj> == false
|
|
257
|
-
// should provide basic guarantee because emplace() invokes Tj's copy ctor
|
|
258
|
-
// which may throw.
|
|
259
|
-
const ThrowingVariant rhs(ExpectedThrower());
|
|
260
|
-
auto tester =
|
|
261
|
-
MakeExceptionSafetyTester()
|
|
262
|
-
.WithInitialValue(WithCopyNoThrow())
|
|
263
|
-
.WithOperation([&rhs](ThrowingVariant* lhs) { *lhs = rhs; });
|
|
264
|
-
EXPECT_TRUE(tester
|
|
265
|
-
.WithContracts(VariantInvariants,
|
|
266
|
-
[](ThrowingVariant* lhs) {
|
|
267
|
-
return lhs->valueless_by_exception();
|
|
268
|
-
})
|
|
269
|
-
.Test());
|
|
270
|
-
EXPECT_FALSE(tester.WithContracts(strong_guarantee).Test());
|
|
271
|
-
}
|
|
272
|
-
#endif // !(defined(ABSL_USES_STD_VARIANT) && defined(__GLIBCXX__))
|
|
273
|
-
{
|
|
274
|
-
// is_nothrow_copy_constructible_v<Tj> == false &&
|
|
275
|
-
// is_nothrow_move_constructible_v<Tj> == true
|
|
276
|
-
// should provide strong guarantee because it is equivalent to
|
|
277
|
-
// operator=(variant(rhs)) which creates a temporary then invoke the move
|
|
278
|
-
// ctor which shouldn't throw.
|
|
279
|
-
const ThrowingVariant rhs(MoveNothrow{});
|
|
280
|
-
EXPECT_TRUE(MakeExceptionSafetyTester()
|
|
281
|
-
.WithInitialValue(WithThrower())
|
|
282
|
-
.WithContracts(VariantInvariants, strong_guarantee)
|
|
283
|
-
.Test([&rhs](ThrowingVariant* lhs) { *lhs = rhs; }));
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
TEST(VariantExceptionSafetyTest, MoveAssign) {
|
|
288
|
-
// variant& operator=(variant&& rhs);
|
|
289
|
-
// Let j be rhs.index()
|
|
290
|
-
{
|
|
291
|
-
// - neither *this nor rhs holds a value
|
|
292
|
-
ThrowingVariant rhs = ValuelessByException();
|
|
293
|
-
ThrowingVariant lhs = ValuelessByException();
|
|
294
|
-
EXPECT_TRUE(TestNothrowOp([&]() { lhs = std::move(rhs); }));
|
|
295
|
-
}
|
|
296
|
-
{
|
|
297
|
-
// - *this holds a value but rhs does not
|
|
298
|
-
ThrowingVariant rhs = ValuelessByException();
|
|
299
|
-
ThrowingVariant lhs = WithThrower();
|
|
300
|
-
EXPECT_TRUE(TestNothrowOp([&]() { lhs = std::move(rhs); }));
|
|
301
|
-
}
|
|
302
|
-
{
|
|
303
|
-
// - index() == j
|
|
304
|
-
// assign get<j>(std::move(rhs)) to the value contained in *this.
|
|
305
|
-
// If an exception is thrown during call to Tj's move assignment, the state
|
|
306
|
-
// of the contained value is as defined by the exception safety guarantee of
|
|
307
|
-
// Tj's move assignment; index() will be j.
|
|
308
|
-
ThrowingVariant rhs(ExpectedThrower());
|
|
309
|
-
size_t j = rhs.index();
|
|
310
|
-
// Since Thrower's move assignment has basic guarantee, so should variant's.
|
|
311
|
-
auto tester = MakeExceptionSafetyTester()
|
|
312
|
-
.WithInitialValue(WithThrower())
|
|
313
|
-
.WithOperation([&](ThrowingVariant* lhs) {
|
|
314
|
-
auto copy = rhs;
|
|
315
|
-
*lhs = std::move(copy);
|
|
316
|
-
});
|
|
317
|
-
EXPECT_TRUE(tester
|
|
318
|
-
.WithContracts(
|
|
319
|
-
VariantInvariants,
|
|
320
|
-
[&](ThrowingVariant* lhs) { return lhs->index() == j; })
|
|
321
|
-
.Test());
|
|
322
|
-
EXPECT_FALSE(tester.WithContracts(strong_guarantee).Test());
|
|
323
|
-
}
|
|
324
|
-
{
|
|
325
|
-
// libstdc++ introduced a regression between 2018-09-25 and 2019-01-06.
|
|
326
|
-
// The fix is targeted for gcc-9.
|
|
327
|
-
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87431#c7
|
|
328
|
-
// https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=267614
|
|
329
|
-
#if !(defined(ABSL_USES_STD_VARIANT) && \
|
|
330
|
-
defined(_GLIBCXX_RELEASE) && _GLIBCXX_RELEASE == 8)
|
|
331
|
-
// - otherwise (index() != j), equivalent to
|
|
332
|
-
// emplace<j>(get<j>(std::move(rhs)))
|
|
333
|
-
// - If an exception is thrown during the call to Tj's move construction
|
|
334
|
-
// (with j being rhs.index()), the variant will hold no value.
|
|
335
|
-
ThrowingVariant rhs(CopyNothrow{});
|
|
336
|
-
EXPECT_TRUE(MakeExceptionSafetyTester()
|
|
337
|
-
.WithInitialValue(WithThrower())
|
|
338
|
-
.WithContracts(VariantInvariants,
|
|
339
|
-
[](ThrowingVariant* lhs) {
|
|
340
|
-
return lhs->valueless_by_exception();
|
|
341
|
-
})
|
|
342
|
-
.Test([&](ThrowingVariant* lhs) {
|
|
343
|
-
auto copy = rhs;
|
|
344
|
-
*lhs = std::move(copy);
|
|
345
|
-
}));
|
|
346
|
-
#endif // !(defined(ABSL_USES_STD_VARIANT) &&
|
|
347
|
-
// defined(_GLIBCXX_RELEASE) && _GLIBCXX_RELEASE == 8)
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
TEST(VariantExceptionSafetyTest, ValueAssign) {
|
|
352
|
-
// template<class T> variant& operator=(T&& t);
|
|
353
|
-
// Let Tj be the type that is selected by overload resolution to be assigned.
|
|
354
|
-
{
|
|
355
|
-
// If *this holds a Tj, assigns std::forward<T>(t) to the value contained in
|
|
356
|
-
// *this. If an exception is thrown during the assignment of
|
|
357
|
-
// std::forward<T>(t) to the value contained in *this, the state of the
|
|
358
|
-
// contained value and t are as defined by the exception safety guarantee of
|
|
359
|
-
// the assignment expression; valueless_by_exception() will be false.
|
|
360
|
-
// Since Thrower's copy/move assignment has basic guarantee, so should
|
|
361
|
-
// variant's.
|
|
362
|
-
Thrower rhs = ExpectedThrower();
|
|
363
|
-
// copy assign
|
|
364
|
-
auto copy_tester =
|
|
365
|
-
MakeExceptionSafetyTester()
|
|
366
|
-
.WithInitialValue(WithThrower())
|
|
367
|
-
.WithOperation([rhs](ThrowingVariant* lhs) { *lhs = rhs; });
|
|
368
|
-
EXPECT_TRUE(copy_tester
|
|
369
|
-
.WithContracts(VariantInvariants,
|
|
370
|
-
[](ThrowingVariant* lhs) {
|
|
371
|
-
return !lhs->valueless_by_exception();
|
|
372
|
-
})
|
|
373
|
-
.Test());
|
|
374
|
-
EXPECT_FALSE(copy_tester.WithContracts(strong_guarantee).Test());
|
|
375
|
-
// move assign
|
|
376
|
-
auto move_tester = MakeExceptionSafetyTester()
|
|
377
|
-
.WithInitialValue(WithThrower())
|
|
378
|
-
.WithOperation([&](ThrowingVariant* lhs) {
|
|
379
|
-
auto copy = rhs;
|
|
380
|
-
*lhs = std::move(copy);
|
|
381
|
-
});
|
|
382
|
-
EXPECT_TRUE(move_tester
|
|
383
|
-
.WithContracts(VariantInvariants,
|
|
384
|
-
[](ThrowingVariant* lhs) {
|
|
385
|
-
return !lhs->valueless_by_exception();
|
|
386
|
-
})
|
|
387
|
-
.Test());
|
|
388
|
-
|
|
389
|
-
EXPECT_FALSE(move_tester.WithContracts(strong_guarantee).Test());
|
|
390
|
-
}
|
|
391
|
-
// Otherwise (*this holds something else), if is_nothrow_constructible_v<Tj,
|
|
392
|
-
// T> || !is_nothrow_move_constructible_v<Tj> is true, equivalent to
|
|
393
|
-
// emplace<j>(std::forward<T>(t)).
|
|
394
|
-
// We simplify the test by letting T = `const Tj&` or `Tj&&`, so we can reuse
|
|
395
|
-
// the CopyNothrow and MoveNothrow types.
|
|
396
|
-
|
|
397
|
-
// if is_nothrow_constructible_v<Tj, T>
|
|
398
|
-
// (i.e. is_nothrow_copy/move_constructible_v<Tj>) is true, emplace() just
|
|
399
|
-
// invokes the copy/move constructor and it should not throw.
|
|
400
|
-
{
|
|
401
|
-
const CopyNothrow rhs;
|
|
402
|
-
ThrowingVariant lhs = WithThrower();
|
|
403
|
-
EXPECT_TRUE(TestNothrowOp([&]() { lhs = rhs; }));
|
|
404
|
-
}
|
|
405
|
-
{
|
|
406
|
-
MoveNothrow rhs;
|
|
407
|
-
ThrowingVariant lhs = WithThrower();
|
|
408
|
-
EXPECT_TRUE(TestNothrowOp([&]() { lhs = std::move(rhs); }));
|
|
409
|
-
}
|
|
410
|
-
// if is_nothrow_constructible_v<Tj, T> == false &&
|
|
411
|
-
// is_nothrow_move_constructible<Tj> == false
|
|
412
|
-
// emplace() invokes the copy/move constructor which may throw so it should
|
|
413
|
-
// provide basic guarantee and variant object might not hold a value.
|
|
414
|
-
{
|
|
415
|
-
Thrower rhs = ExpectedThrower();
|
|
416
|
-
// copy
|
|
417
|
-
auto copy_tester =
|
|
418
|
-
MakeExceptionSafetyTester()
|
|
419
|
-
.WithInitialValue(WithCopyNoThrow())
|
|
420
|
-
.WithOperation([&rhs](ThrowingVariant* lhs) { *lhs = rhs; });
|
|
421
|
-
EXPECT_TRUE(copy_tester
|
|
422
|
-
.WithContracts(VariantInvariants,
|
|
423
|
-
[](ThrowingVariant* lhs) {
|
|
424
|
-
return lhs->valueless_by_exception();
|
|
425
|
-
})
|
|
426
|
-
.Test());
|
|
427
|
-
EXPECT_FALSE(copy_tester.WithContracts(strong_guarantee).Test());
|
|
428
|
-
// move
|
|
429
|
-
auto move_tester = MakeExceptionSafetyTester()
|
|
430
|
-
.WithInitialValue(WithCopyNoThrow())
|
|
431
|
-
.WithOperation([](ThrowingVariant* lhs) {
|
|
432
|
-
*lhs = ExpectedThrower(testing::nothrow_ctor);
|
|
433
|
-
});
|
|
434
|
-
EXPECT_TRUE(move_tester
|
|
435
|
-
.WithContracts(VariantInvariants,
|
|
436
|
-
[](ThrowingVariant* lhs) {
|
|
437
|
-
return lhs->valueless_by_exception();
|
|
438
|
-
})
|
|
439
|
-
.Test());
|
|
440
|
-
EXPECT_FALSE(move_tester.WithContracts(strong_guarantee).Test());
|
|
441
|
-
}
|
|
442
|
-
// Otherwise (if is_nothrow_constructible_v<Tj, T> == false &&
|
|
443
|
-
// is_nothrow_move_constructible<Tj> == true),
|
|
444
|
-
// equivalent to operator=(variant(std::forward<T>(t)))
|
|
445
|
-
// This should have strong guarantee because it creates a temporary variant
|
|
446
|
-
// and operator=(variant&&) invokes Tj's move ctor which doesn't throw.
|
|
447
|
-
// libstdc++ std::variant has bugs on conversion assignment regarding
|
|
448
|
-
// exception safety.
|
|
449
|
-
#if !(defined(ABSL_USES_STD_VARIANT) && defined(__GLIBCXX__))
|
|
450
|
-
{
|
|
451
|
-
MoveNothrow rhs;
|
|
452
|
-
EXPECT_TRUE(MakeExceptionSafetyTester()
|
|
453
|
-
.WithInitialValue(WithThrower())
|
|
454
|
-
.WithContracts(VariantInvariants, strong_guarantee)
|
|
455
|
-
.Test([&rhs](ThrowingVariant* lhs) { *lhs = rhs; }));
|
|
456
|
-
}
|
|
457
|
-
#endif // !(defined(ABSL_USES_STD_VARIANT) && defined(__GLIBCXX__))
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
TEST(VariantExceptionSafetyTest, Emplace) {
|
|
461
|
-
// If an exception during the initialization of the contained value, the
|
|
462
|
-
// variant might not hold a value. The standard requires emplace() to provide
|
|
463
|
-
// only basic guarantee.
|
|
464
|
-
{
|
|
465
|
-
Thrower args = ExpectedThrower();
|
|
466
|
-
auto tester = MakeExceptionSafetyTester()
|
|
467
|
-
.WithInitialValue(WithThrower())
|
|
468
|
-
.WithOperation([&args](ThrowingVariant* v) {
|
|
469
|
-
v->emplace<Thrower>(args);
|
|
470
|
-
});
|
|
471
|
-
EXPECT_TRUE(tester
|
|
472
|
-
.WithContracts(VariantInvariants,
|
|
473
|
-
[](ThrowingVariant* v) {
|
|
474
|
-
return v->valueless_by_exception();
|
|
475
|
-
})
|
|
476
|
-
.Test());
|
|
477
|
-
EXPECT_FALSE(tester.WithContracts(strong_guarantee).Test());
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
TEST(VariantExceptionSafetyTest, Swap) {
|
|
482
|
-
// if both are valueless_by_exception(), no effect
|
|
483
|
-
{
|
|
484
|
-
ThrowingVariant rhs = ValuelessByException();
|
|
485
|
-
ThrowingVariant lhs = ValuelessByException();
|
|
486
|
-
EXPECT_TRUE(TestNothrowOp([&]() { lhs.swap(rhs); }));
|
|
487
|
-
}
|
|
488
|
-
// if index() == rhs.index(), calls swap(get<i>(*this), get<i>(rhs))
|
|
489
|
-
// where i is index().
|
|
490
|
-
{
|
|
491
|
-
ThrowingVariant rhs = ExpectedThrower();
|
|
492
|
-
EXPECT_TRUE(MakeExceptionSafetyTester()
|
|
493
|
-
.WithInitialValue(WithThrower())
|
|
494
|
-
.WithContracts(VariantInvariants)
|
|
495
|
-
.Test([&](ThrowingVariant* lhs) {
|
|
496
|
-
auto copy = rhs;
|
|
497
|
-
lhs->swap(copy);
|
|
498
|
-
}));
|
|
499
|
-
}
|
|
500
|
-
// Otherwise, exchanges the value of rhs and *this. The exception safety
|
|
501
|
-
// involves variant in moved-from state which is not specified in the
|
|
502
|
-
// standard, and since swap is 3-step it's impossible for it to provide a
|
|
503
|
-
// overall strong guarantee. So, we are only checking basic guarantee here.
|
|
504
|
-
{
|
|
505
|
-
ThrowingVariant rhs = ExpectedThrower();
|
|
506
|
-
EXPECT_TRUE(MakeExceptionSafetyTester()
|
|
507
|
-
.WithInitialValue(WithCopyNoThrow())
|
|
508
|
-
.WithContracts(VariantInvariants)
|
|
509
|
-
.Test([&](ThrowingVariant* lhs) {
|
|
510
|
-
auto copy = rhs;
|
|
511
|
-
lhs->swap(copy);
|
|
512
|
-
}));
|
|
513
|
-
}
|
|
514
|
-
{
|
|
515
|
-
ThrowingVariant rhs = ExpectedThrower();
|
|
516
|
-
EXPECT_TRUE(MakeExceptionSafetyTester()
|
|
517
|
-
.WithInitialValue(WithCopyNoThrow())
|
|
518
|
-
.WithContracts(VariantInvariants)
|
|
519
|
-
.Test([&](ThrowingVariant* lhs) {
|
|
520
|
-
auto copy = rhs;
|
|
521
|
-
copy.swap(*lhs);
|
|
522
|
-
}));
|
|
523
|
-
}
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
} // namespace
|
|
527
|
-
ABSL_NAMESPACE_END
|
|
528
|
-
} // namespace absl
|
|
529
|
-
|
|
530
|
-
#endif // !defined(ABSL_INTERNAL_MSVC_2017_DBG_MODE)
|
|
531
|
-
|
|
532
|
-
#endif // #if !defined(ABSL_USES_STD_VARIANT) && defined(ABSL_HAVE_EXCEPTIONS)
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
// Copyright 2023 The Abseil Authors
|
|
2
|
-
//
|
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
// you may not use this file except in compliance with the License.
|
|
5
|
-
// You may obtain a copy of the License at
|
|
6
|
-
//
|
|
7
|
-
// https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
//
|
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
// See the License for the specific language governing permissions and
|
|
13
|
-
// limitations under the License.
|
|
14
|
-
|
|
15
|
-
// The IfConstexpr and IfConstexprElse utilities in this file are meant to be
|
|
16
|
-
// used to emulate `if constexpr` in pre-C++17 mode in library implementation.
|
|
17
|
-
// The motivation is to allow for avoiding complex SFINAE.
|
|
18
|
-
//
|
|
19
|
-
// The functions passed in must depend on the type(s) of the object(s) that
|
|
20
|
-
// require SFINAE. For example:
|
|
21
|
-
// template<typename T>
|
|
22
|
-
// int MaybeFoo(T& t) {
|
|
23
|
-
// if constexpr (HasFoo<T>::value) return t.foo();
|
|
24
|
-
// return 0;
|
|
25
|
-
// }
|
|
26
|
-
//
|
|
27
|
-
// can be written in pre-C++17 as:
|
|
28
|
-
//
|
|
29
|
-
// template<typename T>
|
|
30
|
-
// int MaybeFoo(T& t) {
|
|
31
|
-
// int i = 0;
|
|
32
|
-
// absl::utility_internal::IfConstexpr<HasFoo<T>::value>(
|
|
33
|
-
// [&](const auto& fooer) { i = fooer.foo(); }, t);
|
|
34
|
-
// return i;
|
|
35
|
-
// }
|
|
36
|
-
|
|
37
|
-
#ifndef ABSL_UTILITY_INTERNAL_IF_CONSTEXPR_H_
|
|
38
|
-
#define ABSL_UTILITY_INTERNAL_IF_CONSTEXPR_H_
|
|
39
|
-
|
|
40
|
-
#include <tuple>
|
|
41
|
-
#include <utility>
|
|
42
|
-
|
|
43
|
-
#include "absl/base/config.h"
|
|
44
|
-
|
|
45
|
-
namespace absl {
|
|
46
|
-
ABSL_NAMESPACE_BEGIN
|
|
47
|
-
|
|
48
|
-
namespace utility_internal {
|
|
49
|
-
|
|
50
|
-
template <bool condition, typename TrueFunc, typename FalseFunc,
|
|
51
|
-
typename... Args>
|
|
52
|
-
auto IfConstexprElse(TrueFunc&& true_func, FalseFunc&& false_func,
|
|
53
|
-
Args&&... args) {
|
|
54
|
-
return std::get<condition>(std::forward_as_tuple(
|
|
55
|
-
std::forward<FalseFunc>(false_func), std::forward<TrueFunc>(true_func)))(
|
|
56
|
-
std::forward<Args>(args)...);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
template <bool condition, typename Func, typename... Args>
|
|
60
|
-
void IfConstexpr(Func&& func, Args&&... args) {
|
|
61
|
-
IfConstexprElse<condition>(std::forward<Func>(func), [](auto&&...){},
|
|
62
|
-
std::forward<Args>(args)...);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
} // namespace utility_internal
|
|
66
|
-
|
|
67
|
-
ABSL_NAMESPACE_END
|
|
68
|
-
} // namespace absl
|
|
69
|
-
|
|
70
|
-
#endif // ABSL_UTILITY_INTERNAL_IF_CONSTEXPR_H_
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
// Copyright 2023 The Abseil Authors
|
|
2
|
-
//
|
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
// you may not use this file except in compliance with the License.
|
|
5
|
-
// You may obtain a copy of the License at
|
|
6
|
-
//
|
|
7
|
-
// https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
//
|
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
// See the License for the specific language governing permissions and
|
|
13
|
-
// limitations under the License.
|
|
14
|
-
|
|
15
|
-
#include "absl/utility/internal/if_constexpr.h"
|
|
16
|
-
|
|
17
|
-
#include <utility>
|
|
18
|
-
|
|
19
|
-
#include "gtest/gtest.h"
|
|
20
|
-
|
|
21
|
-
namespace {
|
|
22
|
-
|
|
23
|
-
struct Empty {};
|
|
24
|
-
struct HasFoo {
|
|
25
|
-
int foo() const { return 1; }
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
TEST(IfConstexpr, Basic) {
|
|
29
|
-
int i = 0;
|
|
30
|
-
absl::utility_internal::IfConstexpr<false>(
|
|
31
|
-
[&](const auto& t) { i = t.foo(); }, Empty{});
|
|
32
|
-
EXPECT_EQ(i, 0);
|
|
33
|
-
|
|
34
|
-
absl::utility_internal::IfConstexpr<false>(
|
|
35
|
-
[&](const auto& t) { i = t.foo(); }, HasFoo{});
|
|
36
|
-
EXPECT_EQ(i, 0);
|
|
37
|
-
|
|
38
|
-
absl::utility_internal::IfConstexpr<true>(
|
|
39
|
-
[&](const auto& t) { i = t.foo(); }, HasFoo{});
|
|
40
|
-
EXPECT_EQ(i, 1);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
TEST(IfConstexprElse, Basic) {
|
|
44
|
-
EXPECT_EQ(absl::utility_internal::IfConstexprElse<false>(
|
|
45
|
-
[&](const auto& t) { return t.foo(); }, [&](const auto&) { return 2; },
|
|
46
|
-
Empty{}), 2);
|
|
47
|
-
|
|
48
|
-
EXPECT_EQ(absl::utility_internal::IfConstexprElse<false>(
|
|
49
|
-
[&](const auto& t) { return t.foo(); }, [&](const auto&) { return 2; },
|
|
50
|
-
HasFoo{}), 2);
|
|
51
|
-
|
|
52
|
-
EXPECT_EQ(absl::utility_internal::IfConstexprElse<true>(
|
|
53
|
-
[&](const auto& t) { return t.foo(); }, [&](const auto&) { return 2; },
|
|
54
|
-
HasFoo{}), 1);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
struct HasFooRValue {
|
|
58
|
-
int foo() && { return 1; }
|
|
59
|
-
};
|
|
60
|
-
struct RValueFunc {
|
|
61
|
-
void operator()(HasFooRValue&& t) && { *i = std::move(t).foo(); }
|
|
62
|
-
|
|
63
|
-
int* i = nullptr;
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
TEST(IfConstexpr, RValues) {
|
|
67
|
-
int i = 0;
|
|
68
|
-
RValueFunc func = {&i};
|
|
69
|
-
absl::utility_internal::IfConstexpr<false>(
|
|
70
|
-
std::move(func), HasFooRValue{});
|
|
71
|
-
EXPECT_EQ(i, 0);
|
|
72
|
-
|
|
73
|
-
func = RValueFunc{&i};
|
|
74
|
-
absl::utility_internal::IfConstexpr<true>(
|
|
75
|
-
std::move(func), HasFooRValue{});
|
|
76
|
-
EXPECT_EQ(i, 1);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
} // namespace
|