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
|
@@ -34,13 +34,13 @@
|
|
|
34
34
|
#include <random>
|
|
35
35
|
#include <set>
|
|
36
36
|
#include <string>
|
|
37
|
+
#include <type_traits>
|
|
37
38
|
#include <vector>
|
|
38
39
|
|
|
39
40
|
#include "gmock/gmock.h"
|
|
40
41
|
#include "gtest/gtest.h"
|
|
41
42
|
#include "absl/log/log.h"
|
|
42
43
|
#include "absl/numeric/int128.h"
|
|
43
|
-
#include "absl/random/distributions.h"
|
|
44
44
|
#include "absl/random/random.h"
|
|
45
45
|
#include "absl/strings/internal/numbers_test_common.h"
|
|
46
46
|
#include "absl/strings/internal/ostringstream.h"
|
|
@@ -53,10 +53,14 @@ namespace {
|
|
|
53
53
|
using absl::SimpleAtoi;
|
|
54
54
|
using absl::SimpleHexAtoi;
|
|
55
55
|
using absl::numbers_internal::kSixDigitsToBufferSize;
|
|
56
|
+
using absl::numbers_internal::safe_strto16_base;
|
|
56
57
|
using absl::numbers_internal::safe_strto32_base;
|
|
57
58
|
using absl::numbers_internal::safe_strto64_base;
|
|
59
|
+
using absl::numbers_internal::safe_strto8_base;
|
|
60
|
+
using absl::numbers_internal::safe_strtou16_base;
|
|
58
61
|
using absl::numbers_internal::safe_strtou32_base;
|
|
59
62
|
using absl::numbers_internal::safe_strtou64_base;
|
|
63
|
+
using absl::numbers_internal::safe_strtou8_base;
|
|
60
64
|
using absl::numbers_internal::SixDigitsToBuffer;
|
|
61
65
|
using absl::strings_internal::Itoa;
|
|
62
66
|
using absl::strings_internal::strtouint32_test_cases;
|
|
@@ -256,9 +260,7 @@ TEST(Numbers, TestFastPrints) {
|
|
|
256
260
|
|
|
257
261
|
template <typename int_type, typename in_val_type>
|
|
258
262
|
void VerifySimpleAtoiGood(in_val_type in_value, int_type exp_value) {
|
|
259
|
-
std::string s;
|
|
260
|
-
// (u)int128 can be streamed but not StrCat'd.
|
|
261
|
-
absl::strings_internal::OStringStream(&s) << in_value;
|
|
263
|
+
std::string s = absl::StrCat(in_value);
|
|
262
264
|
int_type x = static_cast<int_type>(~exp_value);
|
|
263
265
|
EXPECT_TRUE(SimpleAtoi(s, &x))
|
|
264
266
|
<< "in_value=" << in_value << " s=" << s << " x=" << x;
|
|
@@ -270,15 +272,71 @@ void VerifySimpleAtoiGood(in_val_type in_value, int_type exp_value) {
|
|
|
270
272
|
|
|
271
273
|
template <typename int_type, typename in_val_type>
|
|
272
274
|
void VerifySimpleAtoiBad(in_val_type in_value) {
|
|
273
|
-
std::string s;
|
|
274
|
-
// (u)int128 can be streamed but not StrCat'd.
|
|
275
|
-
absl::strings_internal::OStringStream(&s) << in_value;
|
|
275
|
+
std::string s = absl::StrCat(in_value);
|
|
276
276
|
int_type x;
|
|
277
277
|
EXPECT_FALSE(SimpleAtoi(s, &x));
|
|
278
278
|
EXPECT_FALSE(SimpleAtoi(s.c_str(), &x));
|
|
279
279
|
}
|
|
280
280
|
|
|
281
281
|
TEST(NumbersTest, Atoi) {
|
|
282
|
+
// SimpleAtoi(absl::string_view, int8_t)
|
|
283
|
+
VerifySimpleAtoiGood<int8_t>(0, 0);
|
|
284
|
+
VerifySimpleAtoiGood<int8_t>(42, 42);
|
|
285
|
+
VerifySimpleAtoiGood<int8_t>(-42, -42);
|
|
286
|
+
|
|
287
|
+
VerifySimpleAtoiGood<int8_t>(std::numeric_limits<int8_t>::min(),
|
|
288
|
+
std::numeric_limits<int8_t>::min());
|
|
289
|
+
VerifySimpleAtoiGood<int8_t>(std::numeric_limits<int8_t>::max(),
|
|
290
|
+
std::numeric_limits<int8_t>::max());
|
|
291
|
+
|
|
292
|
+
VerifySimpleAtoiBad<int8_t>(std::numeric_limits<uint8_t>::max());
|
|
293
|
+
VerifySimpleAtoiBad<int8_t>(std::numeric_limits<int16_t>::min());
|
|
294
|
+
VerifySimpleAtoiBad<int8_t>(std::numeric_limits<int16_t>::max());
|
|
295
|
+
|
|
296
|
+
// SimpleAtoi(absl::string_view, uint8_t)
|
|
297
|
+
VerifySimpleAtoiGood<uint8_t>(0, 0);
|
|
298
|
+
VerifySimpleAtoiGood<uint8_t>(42, 42);
|
|
299
|
+
VerifySimpleAtoiBad<uint8_t>(-42);
|
|
300
|
+
|
|
301
|
+
VerifySimpleAtoiBad<uint8_t>(std::numeric_limits<int8_t>::min());
|
|
302
|
+
VerifySimpleAtoiGood<uint8_t>(std::numeric_limits<int8_t>::max(),
|
|
303
|
+
std::numeric_limits<int8_t>::max());
|
|
304
|
+
VerifySimpleAtoiGood<uint8_t>(std::numeric_limits<uint8_t>::max(),
|
|
305
|
+
std::numeric_limits<uint8_t>::max());
|
|
306
|
+
|
|
307
|
+
VerifySimpleAtoiBad<uint8_t>(std::numeric_limits<int16_t>::min());
|
|
308
|
+
VerifySimpleAtoiBad<uint8_t>(std::numeric_limits<int16_t>::max());
|
|
309
|
+
VerifySimpleAtoiBad<uint8_t>(std::numeric_limits<uint16_t>::max());
|
|
310
|
+
|
|
311
|
+
// SimpleAtoi(absl::string_view, uint16_t)
|
|
312
|
+
VerifySimpleAtoiGood<int16_t>(0, 0);
|
|
313
|
+
VerifySimpleAtoiGood<int16_t>(42, 42);
|
|
314
|
+
VerifySimpleAtoiGood<int16_t>(-42, -42);
|
|
315
|
+
|
|
316
|
+
VerifySimpleAtoiGood<int16_t>(std::numeric_limits<int16_t>::min(),
|
|
317
|
+
std::numeric_limits<int16_t>::min());
|
|
318
|
+
VerifySimpleAtoiGood<int16_t>(std::numeric_limits<int16_t>::max(),
|
|
319
|
+
std::numeric_limits<int16_t>::max());
|
|
320
|
+
|
|
321
|
+
VerifySimpleAtoiBad<int16_t>(std::numeric_limits<uint16_t>::max());
|
|
322
|
+
VerifySimpleAtoiBad<int16_t>(std::numeric_limits<int32_t>::min());
|
|
323
|
+
VerifySimpleAtoiBad<int16_t>(std::numeric_limits<int32_t>::max());
|
|
324
|
+
|
|
325
|
+
// SimpleAtoi(absl::string_view, uint16_t)
|
|
326
|
+
VerifySimpleAtoiGood<uint16_t>(0, 0);
|
|
327
|
+
VerifySimpleAtoiGood<uint16_t>(42, 42);
|
|
328
|
+
VerifySimpleAtoiBad<uint16_t>(-42);
|
|
329
|
+
|
|
330
|
+
VerifySimpleAtoiBad<uint16_t>(std::numeric_limits<int16_t>::min());
|
|
331
|
+
VerifySimpleAtoiGood<uint16_t>(std::numeric_limits<int16_t>::max(),
|
|
332
|
+
std::numeric_limits<int16_t>::max());
|
|
333
|
+
VerifySimpleAtoiGood<uint16_t>(std::numeric_limits<uint16_t>::max(),
|
|
334
|
+
std::numeric_limits<uint16_t>::max());
|
|
335
|
+
|
|
336
|
+
VerifySimpleAtoiBad<uint16_t>(std::numeric_limits<int16_t>::min());
|
|
337
|
+
VerifySimpleAtoiBad<uint16_t>(std::numeric_limits<int32_t>::max());
|
|
338
|
+
VerifySimpleAtoiBad<uint16_t>(std::numeric_limits<uint32_t>::max());
|
|
339
|
+
|
|
282
340
|
// SimpleAtoi(absl::string_view, int32_t)
|
|
283
341
|
VerifySimpleAtoiGood<int32_t>(0, 0);
|
|
284
342
|
VerifySimpleAtoiGood<int32_t>(42, 42);
|
|
@@ -381,6 +439,7 @@ TEST(NumbersTest, Atoi) {
|
|
|
381
439
|
VerifySimpleAtoiBad<absl::int128>(std::numeric_limits<absl::uint128>::max());
|
|
382
440
|
|
|
383
441
|
// Some other types
|
|
442
|
+
VerifySimpleAtoiGood<short>(-42, -42); // NOLINT: runtime-int
|
|
384
443
|
VerifySimpleAtoiGood<int>(-42, -42);
|
|
385
444
|
VerifySimpleAtoiGood<int32_t>(-42, -42);
|
|
386
445
|
VerifySimpleAtoiGood<uint32_t>(42, 42);
|
|
@@ -677,10 +736,14 @@ TEST(NumbersTest, Atoenum) {
|
|
|
677
736
|
template <typename int_type, typename in_val_type>
|
|
678
737
|
void VerifySimpleHexAtoiGood(in_val_type in_value, int_type exp_value) {
|
|
679
738
|
std::string s;
|
|
680
|
-
// uint128 can be streamed but not StrCat'd
|
|
681
739
|
absl::strings_internal::OStringStream strm(&s);
|
|
682
740
|
if (in_value >= 0) {
|
|
683
|
-
|
|
741
|
+
if constexpr (std::is_arithmetic<in_val_type>::value) {
|
|
742
|
+
absl::StrAppend(&s, absl::Hex(in_value));
|
|
743
|
+
} else {
|
|
744
|
+
// absl::Hex doesn't work with absl::(u)int128.
|
|
745
|
+
strm << std::hex << in_value;
|
|
746
|
+
}
|
|
684
747
|
} else {
|
|
685
748
|
// Inefficient for small integers, but works with all integral types.
|
|
686
749
|
strm << "-" << std::hex << -absl::uint128(in_value);
|
|
@@ -698,10 +761,14 @@ void VerifySimpleHexAtoiGood(in_val_type in_value, int_type exp_value) {
|
|
|
698
761
|
template <typename int_type, typename in_val_type>
|
|
699
762
|
void VerifySimpleHexAtoiBad(in_val_type in_value) {
|
|
700
763
|
std::string s;
|
|
701
|
-
// uint128 can be streamed but not StrCat'd
|
|
702
764
|
absl::strings_internal::OStringStream strm(&s);
|
|
703
765
|
if (in_value >= 0) {
|
|
704
|
-
|
|
766
|
+
if constexpr (std::is_arithmetic<in_val_type>::value) {
|
|
767
|
+
absl::StrAppend(&s, absl::Hex(in_value));
|
|
768
|
+
} else {
|
|
769
|
+
// absl::Hex doesn't work with absl::(u)int128.
|
|
770
|
+
strm << std::hex << in_value;
|
|
771
|
+
}
|
|
705
772
|
} else {
|
|
706
773
|
// Inefficient for small integers, but works with all integral types.
|
|
707
774
|
strm << "-" << std::hex << -absl::uint128(in_value);
|
|
@@ -713,6 +780,54 @@ void VerifySimpleHexAtoiBad(in_val_type in_value) {
|
|
|
713
780
|
}
|
|
714
781
|
|
|
715
782
|
TEST(NumbersTest, HexAtoi) {
|
|
783
|
+
// SimpleHexAtoi(absl::string_view, int8_t)
|
|
784
|
+
VerifySimpleHexAtoiGood<int8_t>(0, 0);
|
|
785
|
+
VerifySimpleHexAtoiGood<int8_t>(0x42, 0x42);
|
|
786
|
+
VerifySimpleHexAtoiGood<int8_t>(-0x42, -0x42);
|
|
787
|
+
|
|
788
|
+
VerifySimpleHexAtoiGood<int8_t>(std::numeric_limits<int8_t>::min(),
|
|
789
|
+
std::numeric_limits<int8_t>::min());
|
|
790
|
+
VerifySimpleHexAtoiGood<int8_t>(std::numeric_limits<int8_t>::max(),
|
|
791
|
+
std::numeric_limits<int8_t>::max());
|
|
792
|
+
|
|
793
|
+
// SimpleHexAtoi(absl::string_view, uint8_t)
|
|
794
|
+
VerifySimpleHexAtoiGood<uint8_t>(0, 0);
|
|
795
|
+
VerifySimpleHexAtoiGood<uint8_t>(0x42, 0x42);
|
|
796
|
+
VerifySimpleHexAtoiBad<uint8_t>(-0x42);
|
|
797
|
+
|
|
798
|
+
VerifySimpleHexAtoiBad<uint8_t>(std::numeric_limits<int8_t>::min());
|
|
799
|
+
VerifySimpleHexAtoiGood<uint8_t>(std::numeric_limits<int8_t>::max(),
|
|
800
|
+
std::numeric_limits<int8_t>::max());
|
|
801
|
+
VerifySimpleHexAtoiGood<uint8_t>(std::numeric_limits<uint8_t>::max(),
|
|
802
|
+
std::numeric_limits<uint8_t>::max());
|
|
803
|
+
VerifySimpleHexAtoiBad<uint8_t>(std::numeric_limits<int16_t>::min());
|
|
804
|
+
VerifySimpleHexAtoiBad<uint8_t>(std::numeric_limits<int16_t>::max());
|
|
805
|
+
VerifySimpleHexAtoiBad<uint8_t>(std::numeric_limits<uint16_t>::max());
|
|
806
|
+
|
|
807
|
+
// SimpleHexAtoi(absl::string_view, int16_t)
|
|
808
|
+
VerifySimpleHexAtoiGood<int16_t>(0, 0);
|
|
809
|
+
VerifySimpleHexAtoiGood<int16_t>(0x42, 0x42);
|
|
810
|
+
VerifySimpleHexAtoiGood<int16_t>(-0x42, -0x42);
|
|
811
|
+
|
|
812
|
+
VerifySimpleHexAtoiGood<int16_t>(std::numeric_limits<int16_t>::min(),
|
|
813
|
+
std::numeric_limits<int16_t>::min());
|
|
814
|
+
VerifySimpleHexAtoiGood<int16_t>(std::numeric_limits<int16_t>::max(),
|
|
815
|
+
std::numeric_limits<int16_t>::max());
|
|
816
|
+
|
|
817
|
+
// SimpleHexAtoi(absl::string_view, uint16_t)
|
|
818
|
+
VerifySimpleHexAtoiGood<uint16_t>(0, 0);
|
|
819
|
+
VerifySimpleHexAtoiGood<uint16_t>(0x42, 0x42);
|
|
820
|
+
VerifySimpleHexAtoiBad<uint16_t>(-0x42);
|
|
821
|
+
|
|
822
|
+
VerifySimpleHexAtoiBad<uint16_t>(std::numeric_limits<int16_t>::min());
|
|
823
|
+
VerifySimpleHexAtoiGood<uint16_t>(std::numeric_limits<int16_t>::max(),
|
|
824
|
+
std::numeric_limits<int16_t>::max());
|
|
825
|
+
VerifySimpleHexAtoiGood<uint16_t>(std::numeric_limits<uint16_t>::max(),
|
|
826
|
+
std::numeric_limits<uint16_t>::max());
|
|
827
|
+
VerifySimpleHexAtoiBad<uint16_t>(std::numeric_limits<int32_t>::min());
|
|
828
|
+
VerifySimpleHexAtoiBad<uint16_t>(std::numeric_limits<int32_t>::max());
|
|
829
|
+
VerifySimpleHexAtoiBad<uint16_t>(std::numeric_limits<uint32_t>::max());
|
|
830
|
+
|
|
716
831
|
// SimpleHexAtoi(absl::string_view, int32_t)
|
|
717
832
|
VerifySimpleHexAtoiGood<int32_t>(0, 0);
|
|
718
833
|
VerifySimpleHexAtoiGood<int32_t>(0x42, 0x42);
|
|
@@ -790,6 +905,7 @@ TEST(NumbersTest, HexAtoi) {
|
|
|
790
905
|
std::numeric_limits<absl::uint128>::max());
|
|
791
906
|
|
|
792
907
|
// Some other types
|
|
908
|
+
VerifySimpleHexAtoiGood<short>(-0x42, -0x42); // NOLINT: runtime-int
|
|
793
909
|
VerifySimpleHexAtoiGood<int>(-0x42, -0x42);
|
|
794
910
|
VerifySimpleHexAtoiGood<int32_t>(-0x42, -0x42);
|
|
795
911
|
VerifySimpleHexAtoiGood<uint32_t>(0x42, 0x42);
|
|
@@ -816,6 +932,154 @@ TEST(NumbersTest, HexAtoi) {
|
|
|
816
932
|
EXPECT_EQ(0x34234324, value);
|
|
817
933
|
}
|
|
818
934
|
|
|
935
|
+
TEST(stringtest, safe_strto8_base) {
|
|
936
|
+
int8_t value;
|
|
937
|
+
EXPECT_TRUE(safe_strto8_base("0x34", &value, 16));
|
|
938
|
+
EXPECT_EQ(0x34, value);
|
|
939
|
+
|
|
940
|
+
EXPECT_TRUE(safe_strto8_base("0X34", &value, 16));
|
|
941
|
+
EXPECT_EQ(0x34, value);
|
|
942
|
+
|
|
943
|
+
EXPECT_TRUE(safe_strto8_base("34", &value, 16));
|
|
944
|
+
EXPECT_EQ(0x34, value);
|
|
945
|
+
|
|
946
|
+
EXPECT_TRUE(safe_strto8_base("0", &value, 16));
|
|
947
|
+
EXPECT_EQ(0, value);
|
|
948
|
+
|
|
949
|
+
EXPECT_TRUE(safe_strto8_base(" \t\n -0x34", &value, 16));
|
|
950
|
+
EXPECT_EQ(-0x34, value);
|
|
951
|
+
|
|
952
|
+
EXPECT_TRUE(safe_strto8_base(" \t\n -34", &value, 16));
|
|
953
|
+
EXPECT_EQ(-0x34, value);
|
|
954
|
+
|
|
955
|
+
EXPECT_TRUE(safe_strto8_base("76", &value, 8));
|
|
956
|
+
EXPECT_EQ(076, value);
|
|
957
|
+
|
|
958
|
+
EXPECT_TRUE(safe_strto8_base("-0123", &value, 8));
|
|
959
|
+
EXPECT_EQ(-0123, value);
|
|
960
|
+
|
|
961
|
+
EXPECT_FALSE(safe_strto8_base("183", &value, 8));
|
|
962
|
+
|
|
963
|
+
// Autodetect base.
|
|
964
|
+
EXPECT_TRUE(safe_strto8_base("0", &value, 0));
|
|
965
|
+
EXPECT_EQ(0, value);
|
|
966
|
+
|
|
967
|
+
EXPECT_TRUE(safe_strto8_base("077", &value, 0));
|
|
968
|
+
EXPECT_EQ(077, value); // Octal interpretation
|
|
969
|
+
|
|
970
|
+
// Leading zero indicates octal, but then followed by invalid digit.
|
|
971
|
+
EXPECT_FALSE(safe_strto8_base("088", &value, 0));
|
|
972
|
+
|
|
973
|
+
// Leading 0x indicated hex, but then followed by invalid digit.
|
|
974
|
+
EXPECT_FALSE(safe_strto8_base("0xG", &value, 0));
|
|
975
|
+
|
|
976
|
+
// Base-10 version.
|
|
977
|
+
EXPECT_TRUE(safe_strto8_base("124", &value, 10));
|
|
978
|
+
EXPECT_EQ(124, value);
|
|
979
|
+
|
|
980
|
+
EXPECT_TRUE(safe_strto8_base("0", &value, 10));
|
|
981
|
+
EXPECT_EQ(0, value);
|
|
982
|
+
|
|
983
|
+
EXPECT_TRUE(safe_strto8_base(" \t\n -124", &value, 10));
|
|
984
|
+
EXPECT_EQ(-124, value);
|
|
985
|
+
|
|
986
|
+
EXPECT_TRUE(safe_strto8_base("124 \n\t ", &value, 10));
|
|
987
|
+
EXPECT_EQ(124, value);
|
|
988
|
+
|
|
989
|
+
// Invalid ints.
|
|
990
|
+
EXPECT_FALSE(safe_strto8_base("", &value, 10));
|
|
991
|
+
EXPECT_FALSE(safe_strto8_base(" ", &value, 10));
|
|
992
|
+
EXPECT_FALSE(safe_strto8_base("abc", &value, 10));
|
|
993
|
+
EXPECT_FALSE(safe_strto8_base("34a", &value, 10));
|
|
994
|
+
EXPECT_FALSE(safe_strto8_base("34.3", &value, 10));
|
|
995
|
+
|
|
996
|
+
// Out of bounds.
|
|
997
|
+
EXPECT_FALSE(safe_strto8_base("128", &value, 10));
|
|
998
|
+
EXPECT_FALSE(safe_strto8_base("-129", &value, 10));
|
|
999
|
+
|
|
1000
|
+
// String version.
|
|
1001
|
+
EXPECT_TRUE(safe_strto8_base(std::string("0x12"), &value, 16));
|
|
1002
|
+
EXPECT_EQ(0x12, value);
|
|
1003
|
+
|
|
1004
|
+
// Base-10 string version.
|
|
1005
|
+
EXPECT_TRUE(safe_strto8_base("123", &value, 10));
|
|
1006
|
+
EXPECT_EQ(123, value);
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
TEST(stringtest, safe_strto16_base) {
|
|
1010
|
+
int16_t value;
|
|
1011
|
+
EXPECT_TRUE(safe_strto16_base("0x3423", &value, 16));
|
|
1012
|
+
EXPECT_EQ(0x3423, value);
|
|
1013
|
+
|
|
1014
|
+
EXPECT_TRUE(safe_strto16_base("0X3423", &value, 16));
|
|
1015
|
+
EXPECT_EQ(0x3423, value);
|
|
1016
|
+
|
|
1017
|
+
EXPECT_TRUE(safe_strto16_base("3423", &value, 16));
|
|
1018
|
+
EXPECT_EQ(0x3423, value);
|
|
1019
|
+
|
|
1020
|
+
EXPECT_TRUE(safe_strto16_base("0", &value, 16));
|
|
1021
|
+
EXPECT_EQ(0, value);
|
|
1022
|
+
|
|
1023
|
+
EXPECT_TRUE(safe_strto16_base(" \t\n -0x3423", &value, 16));
|
|
1024
|
+
EXPECT_EQ(-0x3423, value);
|
|
1025
|
+
|
|
1026
|
+
EXPECT_TRUE(safe_strto16_base(" \t\n -3423", &value, 16));
|
|
1027
|
+
EXPECT_EQ(-0x3423, value);
|
|
1028
|
+
|
|
1029
|
+
EXPECT_TRUE(safe_strto16_base("34567", &value, 8));
|
|
1030
|
+
EXPECT_EQ(034567, value);
|
|
1031
|
+
|
|
1032
|
+
EXPECT_TRUE(safe_strto16_base("-01234", &value, 8));
|
|
1033
|
+
EXPECT_EQ(-01234, value);
|
|
1034
|
+
|
|
1035
|
+
EXPECT_FALSE(safe_strto16_base("1834", &value, 8));
|
|
1036
|
+
|
|
1037
|
+
// Autodetect base.
|
|
1038
|
+
EXPECT_TRUE(safe_strto16_base("0", &value, 0));
|
|
1039
|
+
EXPECT_EQ(0, value);
|
|
1040
|
+
|
|
1041
|
+
EXPECT_TRUE(safe_strto16_base("077", &value, 0));
|
|
1042
|
+
EXPECT_EQ(077, value); // Octal interpretation
|
|
1043
|
+
|
|
1044
|
+
// Leading zero indicates octal, but then followed by invalid digit.
|
|
1045
|
+
EXPECT_FALSE(safe_strto16_base("088", &value, 0));
|
|
1046
|
+
|
|
1047
|
+
// Leading 0x indicated hex, but then followed by invalid digit.
|
|
1048
|
+
EXPECT_FALSE(safe_strto16_base("0xG", &value, 0));
|
|
1049
|
+
|
|
1050
|
+
// Base-10 version.
|
|
1051
|
+
EXPECT_TRUE(safe_strto16_base("3423", &value, 10));
|
|
1052
|
+
EXPECT_EQ(3423, value);
|
|
1053
|
+
|
|
1054
|
+
EXPECT_TRUE(safe_strto16_base("0", &value, 10));
|
|
1055
|
+
EXPECT_EQ(0, value);
|
|
1056
|
+
|
|
1057
|
+
EXPECT_TRUE(safe_strto16_base(" \t\n -3423", &value, 10));
|
|
1058
|
+
EXPECT_EQ(-3423, value);
|
|
1059
|
+
|
|
1060
|
+
EXPECT_TRUE(safe_strto16_base("3423 \n\t ", &value, 10));
|
|
1061
|
+
EXPECT_EQ(3423, value);
|
|
1062
|
+
|
|
1063
|
+
// Invalid ints.
|
|
1064
|
+
EXPECT_FALSE(safe_strto16_base("", &value, 10));
|
|
1065
|
+
EXPECT_FALSE(safe_strto16_base(" ", &value, 10));
|
|
1066
|
+
EXPECT_FALSE(safe_strto16_base("abc", &value, 10));
|
|
1067
|
+
EXPECT_FALSE(safe_strto16_base("324a", &value, 10));
|
|
1068
|
+
EXPECT_FALSE(safe_strto16_base("4234.3", &value, 10));
|
|
1069
|
+
|
|
1070
|
+
// Out of bounds.
|
|
1071
|
+
EXPECT_FALSE(safe_strto16_base("32768", &value, 10));
|
|
1072
|
+
EXPECT_FALSE(safe_strto16_base("-32769", &value, 10));
|
|
1073
|
+
|
|
1074
|
+
// String version.
|
|
1075
|
+
EXPECT_TRUE(safe_strto16_base(std::string("0x1234"), &value, 16));
|
|
1076
|
+
EXPECT_EQ(0x1234, value);
|
|
1077
|
+
|
|
1078
|
+
// Base-10 string version.
|
|
1079
|
+
EXPECT_TRUE(safe_strto16_base("1234", &value, 10));
|
|
1080
|
+
EXPECT_EQ(1234, value);
|
|
1081
|
+
}
|
|
1082
|
+
|
|
819
1083
|
TEST(stringtest, safe_strto32_base) {
|
|
820
1084
|
int32_t value;
|
|
821
1085
|
EXPECT_TRUE(safe_strto32_base("0x34234324", &value, 16));
|
|
@@ -890,76 +1154,6 @@ TEST(stringtest, safe_strto32_base) {
|
|
|
890
1154
|
EXPECT_EQ(1234, value);
|
|
891
1155
|
}
|
|
892
1156
|
|
|
893
|
-
TEST(stringtest, safe_strto32_range) {
|
|
894
|
-
// These tests verify underflow/overflow behaviour.
|
|
895
|
-
int32_t value;
|
|
896
|
-
EXPECT_FALSE(safe_strto32_base("2147483648", &value, 10));
|
|
897
|
-
EXPECT_EQ(std::numeric_limits<int32_t>::max(), value);
|
|
898
|
-
|
|
899
|
-
EXPECT_TRUE(safe_strto32_base("-2147483648", &value, 10));
|
|
900
|
-
EXPECT_EQ(std::numeric_limits<int32_t>::min(), value);
|
|
901
|
-
|
|
902
|
-
EXPECT_FALSE(safe_strto32_base("-2147483649", &value, 10));
|
|
903
|
-
EXPECT_EQ(std::numeric_limits<int32_t>::min(), value);
|
|
904
|
-
}
|
|
905
|
-
|
|
906
|
-
TEST(stringtest, safe_strto64_range) {
|
|
907
|
-
// These tests verify underflow/overflow behaviour.
|
|
908
|
-
int64_t value;
|
|
909
|
-
EXPECT_FALSE(safe_strto64_base("9223372036854775808", &value, 10));
|
|
910
|
-
EXPECT_EQ(std::numeric_limits<int64_t>::max(), value);
|
|
911
|
-
|
|
912
|
-
EXPECT_TRUE(safe_strto64_base("-9223372036854775808", &value, 10));
|
|
913
|
-
EXPECT_EQ(std::numeric_limits<int64_t>::min(), value);
|
|
914
|
-
|
|
915
|
-
EXPECT_FALSE(safe_strto64_base("-9223372036854775809", &value, 10));
|
|
916
|
-
EXPECT_EQ(std::numeric_limits<int64_t>::min(), value);
|
|
917
|
-
}
|
|
918
|
-
|
|
919
|
-
TEST(stringtest, safe_strto32_leading_substring) {
|
|
920
|
-
// These tests verify this comment in numbers.h:
|
|
921
|
-
// On error, returns false, and sets *value to: [...]
|
|
922
|
-
// conversion of leading substring if available ("123@@@" -> 123)
|
|
923
|
-
// 0 if no leading substring available
|
|
924
|
-
int32_t value;
|
|
925
|
-
EXPECT_FALSE(safe_strto32_base("04069@@@", &value, 10));
|
|
926
|
-
EXPECT_EQ(4069, value);
|
|
927
|
-
|
|
928
|
-
EXPECT_FALSE(safe_strto32_base("04069@@@", &value, 8));
|
|
929
|
-
EXPECT_EQ(0406, value);
|
|
930
|
-
|
|
931
|
-
EXPECT_FALSE(safe_strto32_base("04069balloons", &value, 10));
|
|
932
|
-
EXPECT_EQ(4069, value);
|
|
933
|
-
|
|
934
|
-
EXPECT_FALSE(safe_strto32_base("04069balloons", &value, 16));
|
|
935
|
-
EXPECT_EQ(0x4069ba, value);
|
|
936
|
-
|
|
937
|
-
EXPECT_FALSE(safe_strto32_base("@@@", &value, 10));
|
|
938
|
-
EXPECT_EQ(0, value); // there was no leading substring
|
|
939
|
-
}
|
|
940
|
-
|
|
941
|
-
TEST(stringtest, safe_strto64_leading_substring) {
|
|
942
|
-
// These tests verify this comment in numbers.h:
|
|
943
|
-
// On error, returns false, and sets *value to: [...]
|
|
944
|
-
// conversion of leading substring if available ("123@@@" -> 123)
|
|
945
|
-
// 0 if no leading substring available
|
|
946
|
-
int64_t value;
|
|
947
|
-
EXPECT_FALSE(safe_strto64_base("04069@@@", &value, 10));
|
|
948
|
-
EXPECT_EQ(4069, value);
|
|
949
|
-
|
|
950
|
-
EXPECT_FALSE(safe_strto64_base("04069@@@", &value, 8));
|
|
951
|
-
EXPECT_EQ(0406, value);
|
|
952
|
-
|
|
953
|
-
EXPECT_FALSE(safe_strto64_base("04069balloons", &value, 10));
|
|
954
|
-
EXPECT_EQ(4069, value);
|
|
955
|
-
|
|
956
|
-
EXPECT_FALSE(safe_strto64_base("04069balloons", &value, 16));
|
|
957
|
-
EXPECT_EQ(0x4069ba, value);
|
|
958
|
-
|
|
959
|
-
EXPECT_FALSE(safe_strto64_base("@@@", &value, 10));
|
|
960
|
-
EXPECT_EQ(0, value); // there was no leading substring
|
|
961
|
-
}
|
|
962
|
-
|
|
963
1157
|
TEST(stringtest, safe_strto64_base) {
|
|
964
1158
|
int64_t value;
|
|
965
1159
|
EXPECT_TRUE(safe_strto64_base("0x3423432448783446", &value, 16));
|
|
@@ -1031,18 +1225,155 @@ TEST(stringtest, safe_strto64_base) {
|
|
|
1031
1225
|
EXPECT_EQ(1234, value);
|
|
1032
1226
|
}
|
|
1033
1227
|
|
|
1228
|
+
TEST(stringtest, safe_strto8_range) {
|
|
1229
|
+
// These tests verify underflow/overflow behaviour.
|
|
1230
|
+
int8_t value;
|
|
1231
|
+
EXPECT_FALSE(safe_strto8_base("128", &value, 10));
|
|
1232
|
+
EXPECT_EQ(std::numeric_limits<int8_t>::max(), value);
|
|
1233
|
+
|
|
1234
|
+
EXPECT_TRUE(safe_strto8_base("-128", &value, 10));
|
|
1235
|
+
EXPECT_EQ(std::numeric_limits<int8_t>::min(), value);
|
|
1236
|
+
|
|
1237
|
+
EXPECT_FALSE(safe_strto8_base("-129", &value, 10));
|
|
1238
|
+
EXPECT_EQ(std::numeric_limits<int8_t>::min(), value);
|
|
1239
|
+
}
|
|
1240
|
+
|
|
1241
|
+
TEST(stringtest, safe_strto16_range) {
|
|
1242
|
+
// These tests verify underflow/overflow behaviour.
|
|
1243
|
+
int16_t value;
|
|
1244
|
+
EXPECT_FALSE(safe_strto16_base("32768", &value, 10));
|
|
1245
|
+
EXPECT_EQ(std::numeric_limits<int16_t>::max(), value);
|
|
1246
|
+
|
|
1247
|
+
EXPECT_TRUE(safe_strto16_base("-32768", &value, 10));
|
|
1248
|
+
EXPECT_EQ(std::numeric_limits<int16_t>::min(), value);
|
|
1249
|
+
|
|
1250
|
+
EXPECT_FALSE(safe_strto16_base("-32769", &value, 10));
|
|
1251
|
+
EXPECT_EQ(std::numeric_limits<int16_t>::min(), value);
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
TEST(stringtest, safe_strto32_range) {
|
|
1255
|
+
// These tests verify underflow/overflow behaviour.
|
|
1256
|
+
int32_t value;
|
|
1257
|
+
EXPECT_FALSE(safe_strto32_base("2147483648", &value, 10));
|
|
1258
|
+
EXPECT_EQ(std::numeric_limits<int32_t>::max(), value);
|
|
1259
|
+
|
|
1260
|
+
EXPECT_TRUE(safe_strto32_base("-2147483648", &value, 10));
|
|
1261
|
+
EXPECT_EQ(std::numeric_limits<int32_t>::min(), value);
|
|
1262
|
+
|
|
1263
|
+
EXPECT_FALSE(safe_strto32_base("-2147483649", &value, 10));
|
|
1264
|
+
EXPECT_EQ(std::numeric_limits<int32_t>::min(), value);
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1267
|
+
TEST(stringtest, safe_strto64_range) {
|
|
1268
|
+
// These tests verify underflow/overflow behaviour.
|
|
1269
|
+
int64_t value;
|
|
1270
|
+
EXPECT_FALSE(safe_strto64_base("9223372036854775808", &value, 10));
|
|
1271
|
+
EXPECT_EQ(std::numeric_limits<int64_t>::max(), value);
|
|
1272
|
+
|
|
1273
|
+
EXPECT_TRUE(safe_strto64_base("-9223372036854775808", &value, 10));
|
|
1274
|
+
EXPECT_EQ(std::numeric_limits<int64_t>::min(), value);
|
|
1275
|
+
|
|
1276
|
+
EXPECT_FALSE(safe_strto64_base("-9223372036854775809", &value, 10));
|
|
1277
|
+
EXPECT_EQ(std::numeric_limits<int64_t>::min(), value);
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
TEST(stringtest, safe_strto8_leading_substring) {
|
|
1281
|
+
// These tests verify this comment in numbers.h:
|
|
1282
|
+
// On error, returns false, and sets *value to: [...]
|
|
1283
|
+
// conversion of leading substring if available ("123@@@" -> 123)
|
|
1284
|
+
// 0 if no leading substring available
|
|
1285
|
+
int8_t value;
|
|
1286
|
+
EXPECT_FALSE(safe_strto8_base("069@@@", &value, 10));
|
|
1287
|
+
EXPECT_EQ(69, value);
|
|
1288
|
+
|
|
1289
|
+
EXPECT_FALSE(safe_strto8_base("01769@@@", &value, 8));
|
|
1290
|
+
EXPECT_EQ(0176, value);
|
|
1291
|
+
|
|
1292
|
+
EXPECT_FALSE(safe_strto8_base("069balloons", &value, 10));
|
|
1293
|
+
EXPECT_EQ(69, value);
|
|
1294
|
+
|
|
1295
|
+
EXPECT_FALSE(safe_strto8_base("07bland", &value, 16));
|
|
1296
|
+
EXPECT_EQ(0x7b, value);
|
|
1297
|
+
|
|
1298
|
+
EXPECT_FALSE(safe_strto8_base("@@@", &value, 10));
|
|
1299
|
+
EXPECT_EQ(0, value); // there was no leading substring
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
TEST(stringtest, safe_strto16_leading_substring) {
|
|
1303
|
+
// These tests verify this comment in numbers.h:
|
|
1304
|
+
// On error, returns false, and sets *value to: [...]
|
|
1305
|
+
// conversion of leading substring if available ("123@@@" -> 123)
|
|
1306
|
+
// 0 if no leading substring available
|
|
1307
|
+
int16_t value;
|
|
1308
|
+
EXPECT_FALSE(safe_strto16_base("04069@@@", &value, 10));
|
|
1309
|
+
EXPECT_EQ(4069, value);
|
|
1310
|
+
|
|
1311
|
+
EXPECT_FALSE(safe_strto16_base("04069@@@", &value, 8));
|
|
1312
|
+
EXPECT_EQ(0406, value);
|
|
1313
|
+
|
|
1314
|
+
EXPECT_FALSE(safe_strto16_base("04069balloons", &value, 10));
|
|
1315
|
+
EXPECT_EQ(4069, value);
|
|
1316
|
+
|
|
1317
|
+
EXPECT_FALSE(safe_strto16_base("069balloons", &value, 16));
|
|
1318
|
+
EXPECT_EQ(0x69ba, value);
|
|
1319
|
+
|
|
1320
|
+
EXPECT_FALSE(safe_strto16_base("@@@", &value, 10));
|
|
1321
|
+
EXPECT_EQ(0, value); // there was no leading substring
|
|
1322
|
+
}
|
|
1323
|
+
|
|
1324
|
+
TEST(stringtest, safe_strto32_leading_substring) {
|
|
1325
|
+
// These tests verify this comment in numbers.h:
|
|
1326
|
+
// On error, returns false, and sets *value to: [...]
|
|
1327
|
+
// conversion of leading substring if available ("123@@@" -> 123)
|
|
1328
|
+
// 0 if no leading substring available
|
|
1329
|
+
int32_t value;
|
|
1330
|
+
EXPECT_FALSE(safe_strto32_base("04069@@@", &value, 10));
|
|
1331
|
+
EXPECT_EQ(4069, value);
|
|
1332
|
+
|
|
1333
|
+
EXPECT_FALSE(safe_strto32_base("04069@@@", &value, 8));
|
|
1334
|
+
EXPECT_EQ(0406, value);
|
|
1335
|
+
|
|
1336
|
+
EXPECT_FALSE(safe_strto32_base("04069balloons", &value, 10));
|
|
1337
|
+
EXPECT_EQ(4069, value);
|
|
1338
|
+
|
|
1339
|
+
EXPECT_FALSE(safe_strto32_base("04069balloons", &value, 16));
|
|
1340
|
+
EXPECT_EQ(0x4069ba, value);
|
|
1341
|
+
|
|
1342
|
+
EXPECT_FALSE(safe_strto32_base("@@@", &value, 10));
|
|
1343
|
+
EXPECT_EQ(0, value); // there was no leading substring
|
|
1344
|
+
}
|
|
1345
|
+
|
|
1346
|
+
TEST(stringtest, safe_strto64_leading_substring) {
|
|
1347
|
+
// These tests verify this comment in numbers.h:
|
|
1348
|
+
// On error, returns false, and sets *value to: [...]
|
|
1349
|
+
// conversion of leading substring if available ("123@@@" -> 123)
|
|
1350
|
+
// 0 if no leading substring available
|
|
1351
|
+
int64_t value;
|
|
1352
|
+
EXPECT_FALSE(safe_strto64_base("04069@@@", &value, 10));
|
|
1353
|
+
EXPECT_EQ(4069, value);
|
|
1354
|
+
|
|
1355
|
+
EXPECT_FALSE(safe_strto64_base("04069@@@", &value, 8));
|
|
1356
|
+
EXPECT_EQ(0406, value);
|
|
1357
|
+
|
|
1358
|
+
EXPECT_FALSE(safe_strto64_base("04069balloons", &value, 10));
|
|
1359
|
+
EXPECT_EQ(4069, value);
|
|
1360
|
+
|
|
1361
|
+
EXPECT_FALSE(safe_strto64_base("04069balloons", &value, 16));
|
|
1362
|
+
EXPECT_EQ(0x4069ba, value);
|
|
1363
|
+
|
|
1364
|
+
EXPECT_FALSE(safe_strto64_base("@@@", &value, 10));
|
|
1365
|
+
EXPECT_EQ(0, value); // there was no leading substring
|
|
1366
|
+
}
|
|
1367
|
+
|
|
1034
1368
|
const size_t kNumRandomTests = 10000;
|
|
1035
1369
|
|
|
1036
|
-
template <typename IntType
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
using RandomEngine = std::minstd_rand0;
|
|
1041
|
-
std::random_device rd;
|
|
1042
|
-
RandomEngine rng(rd());
|
|
1370
|
+
template <typename IntType,
|
|
1371
|
+
bool parse_func(absl::string_view, IntType* value, int base)>
|
|
1372
|
+
void test_random_integer_parse_base() {
|
|
1373
|
+
absl::InsecureBitGen rng;
|
|
1043
1374
|
std::uniform_int_distribution<IntType> random_int(
|
|
1044
1375
|
std::numeric_limits<IntType>::min());
|
|
1045
|
-
std::uniform_int_distribution<int> random_base(2,
|
|
1376
|
+
std::uniform_int_distribution<int> random_base(2, 36);
|
|
1046
1377
|
for (size_t i = 0; i < kNumRandomTests; i++) {
|
|
1047
1378
|
IntType value = random_int(rng);
|
|
1048
1379
|
int base = random_base(rng);
|
|
@@ -1070,33 +1401,36 @@ void test_random_integer_parse_base(bool (*parse_func)(absl::string_view,
|
|
|
1070
1401
|
}
|
|
1071
1402
|
}
|
|
1072
1403
|
|
|
1404
|
+
TEST(stringtest, safe_strto16_random) {
|
|
1405
|
+
test_random_integer_parse_base<int16_t, safe_strto16_base>();
|
|
1406
|
+
}
|
|
1073
1407
|
TEST(stringtest, safe_strto32_random) {
|
|
1074
|
-
test_random_integer_parse_base<int32_t>(
|
|
1408
|
+
test_random_integer_parse_base<int32_t, safe_strto32_base>();
|
|
1075
1409
|
}
|
|
1076
1410
|
TEST(stringtest, safe_strto64_random) {
|
|
1077
|
-
test_random_integer_parse_base<int64_t>(
|
|
1411
|
+
test_random_integer_parse_base<int64_t, safe_strto64_base>();
|
|
1412
|
+
}
|
|
1413
|
+
TEST(stringtest, safe_strtou16_random) {
|
|
1414
|
+
test_random_integer_parse_base<uint16_t, safe_strtou16_base>();
|
|
1078
1415
|
}
|
|
1079
1416
|
TEST(stringtest, safe_strtou32_random) {
|
|
1080
|
-
test_random_integer_parse_base<uint32_t>(
|
|
1417
|
+
test_random_integer_parse_base<uint32_t, safe_strtou32_base>();
|
|
1081
1418
|
}
|
|
1082
1419
|
TEST(stringtest, safe_strtou64_random) {
|
|
1083
|
-
test_random_integer_parse_base<uint64_t>(
|
|
1420
|
+
test_random_integer_parse_base<uint64_t, safe_strtou64_base>();
|
|
1084
1421
|
}
|
|
1085
1422
|
TEST(stringtest, safe_strtou128_random) {
|
|
1086
|
-
// random number generators don't work for uint128
|
|
1087
|
-
// uint128 can be streamed but not StrCat'd, so this code must be custom
|
|
1423
|
+
// random number generators don't work for uint128 so this code must be custom
|
|
1088
1424
|
// implemented for uint128, but is generally the same as what's above.
|
|
1089
1425
|
// test_random_integer_parse_base<absl::uint128>(
|
|
1090
1426
|
// &absl::numbers_internal::safe_strtou128_base);
|
|
1091
|
-
using RandomEngine = std::minstd_rand0;
|
|
1092
1427
|
using IntType = absl::uint128;
|
|
1093
1428
|
constexpr auto parse_func = &absl::numbers_internal::safe_strtou128_base;
|
|
1094
1429
|
|
|
1095
|
-
|
|
1096
|
-
RandomEngine rng(rd());
|
|
1430
|
+
absl::InsecureBitGen rng;
|
|
1097
1431
|
std::uniform_int_distribution<uint64_t> random_uint64(
|
|
1098
1432
|
std::numeric_limits<uint64_t>::min());
|
|
1099
|
-
std::uniform_int_distribution<int> random_base(2,
|
|
1433
|
+
std::uniform_int_distribution<int> random_base(2, 36);
|
|
1100
1434
|
|
|
1101
1435
|
for (size_t i = 0; i < kNumRandomTests; i++) {
|
|
1102
1436
|
IntType value = random_uint64(rng);
|
|
@@ -1111,34 +1445,28 @@ TEST(stringtest, safe_strtou128_random) {
|
|
|
1111
1445
|
EXPECT_EQ(parsed_value, value);
|
|
1112
1446
|
|
|
1113
1447
|
// Test overflow
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
EXPECT_FALSE(parse_func(s, &parsed_value, base));
|
|
1448
|
+
EXPECT_FALSE(
|
|
1449
|
+
parse_func(absl::StrCat(std::numeric_limits<IntType>::max(), value),
|
|
1450
|
+
&parsed_value, base));
|
|
1118
1451
|
|
|
1119
1452
|
// Test underflow
|
|
1120
|
-
|
|
1121
|
-
absl::strings_internal::OStringStream(&s) << "-" << value;
|
|
1122
|
-
EXPECT_FALSE(parse_func(s, &parsed_value, base));
|
|
1453
|
+
EXPECT_FALSE(parse_func(absl::StrCat("-", value), &parsed_value, base));
|
|
1123
1454
|
}
|
|
1124
1455
|
}
|
|
1125
1456
|
TEST(stringtest, safe_strto128_random) {
|
|
1126
|
-
// random number generators don't work for int128
|
|
1127
|
-
// int128 can be streamed but not StrCat'd, so this code must be custom
|
|
1457
|
+
// random number generators don't work for int128 so this code must be custom
|
|
1128
1458
|
// implemented for int128, but is generally the same as what's above.
|
|
1129
1459
|
// test_random_integer_parse_base<absl::int128>(
|
|
1130
1460
|
// &absl::numbers_internal::safe_strto128_base);
|
|
1131
|
-
using RandomEngine = std::minstd_rand0;
|
|
1132
1461
|
using IntType = absl::int128;
|
|
1133
1462
|
constexpr auto parse_func = &absl::numbers_internal::safe_strto128_base;
|
|
1134
1463
|
|
|
1135
|
-
|
|
1136
|
-
RandomEngine rng(rd());
|
|
1464
|
+
absl::InsecureBitGen rng;
|
|
1137
1465
|
std::uniform_int_distribution<int64_t> random_int64(
|
|
1138
1466
|
std::numeric_limits<int64_t>::min());
|
|
1139
1467
|
std::uniform_int_distribution<uint64_t> random_uint64(
|
|
1140
1468
|
std::numeric_limits<uint64_t>::min());
|
|
1141
|
-
std::uniform_int_distribution<int> random_base(2,
|
|
1469
|
+
std::uniform_int_distribution<int> random_base(2, 36);
|
|
1142
1470
|
|
|
1143
1471
|
for (size_t i = 0; i < kNumRandomTests; ++i) {
|
|
1144
1472
|
int64_t high = random_int64(rng);
|
|
@@ -1155,16 +1483,70 @@ TEST(stringtest, safe_strto128_random) {
|
|
|
1155
1483
|
EXPECT_EQ(parsed_value, value);
|
|
1156
1484
|
|
|
1157
1485
|
// Test overflow
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
EXPECT_FALSE(parse_func(s, &parsed_value, base));
|
|
1486
|
+
EXPECT_FALSE(
|
|
1487
|
+
parse_func(absl::StrCat(std::numeric_limits<IntType>::max(), value),
|
|
1488
|
+
&parsed_value, base));
|
|
1162
1489
|
|
|
1163
1490
|
// Test underflow
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1491
|
+
EXPECT_FALSE(
|
|
1492
|
+
parse_func(absl::StrCat(std::numeric_limits<IntType>::min(), value),
|
|
1493
|
+
&parsed_value, base));
|
|
1494
|
+
}
|
|
1495
|
+
}
|
|
1496
|
+
|
|
1497
|
+
TEST(stringtest, safe_strtou8_exhaustive) {
|
|
1498
|
+
// Testing the entire space for uint8_t since it is small.
|
|
1499
|
+
using IntType = uint8_t;
|
|
1500
|
+
constexpr auto parse_func = &absl::numbers_internal::safe_strtou8_base;
|
|
1501
|
+
|
|
1502
|
+
for (int i = std::numeric_limits<IntType>::min();
|
|
1503
|
+
i <= std::numeric_limits<IntType>::max(); i++) {
|
|
1504
|
+
IntType value = static_cast<IntType>(i);
|
|
1505
|
+
for (int base = 2; base <= 36; base++) {
|
|
1506
|
+
std::string str_value;
|
|
1507
|
+
EXPECT_TRUE(Itoa<IntType>(value, base, &str_value));
|
|
1508
|
+
IntType parsed_value;
|
|
1509
|
+
|
|
1510
|
+
// Test successful parse
|
|
1511
|
+
EXPECT_TRUE(parse_func(str_value, &parsed_value, base));
|
|
1512
|
+
EXPECT_EQ(parsed_value, value);
|
|
1513
|
+
|
|
1514
|
+
// Test overflow
|
|
1515
|
+
EXPECT_FALSE(
|
|
1516
|
+
parse_func(absl::StrCat(std::numeric_limits<IntType>::max(), value),
|
|
1517
|
+
&parsed_value, base));
|
|
1518
|
+
// Test underflow
|
|
1519
|
+
EXPECT_FALSE(parse_func(absl::StrCat("-", value), &parsed_value, base));
|
|
1520
|
+
}
|
|
1521
|
+
}
|
|
1522
|
+
}
|
|
1523
|
+
|
|
1524
|
+
TEST(stringtest, safe_strto8_exhaustive) {
|
|
1525
|
+
// Testing the entire space for int8_t since it is small.
|
|
1526
|
+
using IntType = int8_t;
|
|
1527
|
+
constexpr auto parse_func = &absl::numbers_internal::safe_strto8_base;
|
|
1528
|
+
|
|
1529
|
+
for (int i = std::numeric_limits<IntType>::min();
|
|
1530
|
+
i <= std::numeric_limits<IntType>::max(); i++) {
|
|
1531
|
+
IntType value = static_cast<IntType>(i);
|
|
1532
|
+
for (int base = 2; base <= 36; base++) {
|
|
1533
|
+
std::string str_value;
|
|
1534
|
+
EXPECT_TRUE(Itoa<IntType>(value, base, &str_value));
|
|
1535
|
+
IntType parsed_value;
|
|
1536
|
+
|
|
1537
|
+
// Test successful parse
|
|
1538
|
+
EXPECT_TRUE(parse_func(str_value, &parsed_value, base));
|
|
1539
|
+
EXPECT_EQ(parsed_value, value);
|
|
1540
|
+
|
|
1541
|
+
// Test overflow
|
|
1542
|
+
EXPECT_FALSE(
|
|
1543
|
+
parse_func(absl::StrCat(std::numeric_limits<IntType>::max(), value),
|
|
1544
|
+
&parsed_value, base));
|
|
1545
|
+
// Test underflow
|
|
1546
|
+
EXPECT_FALSE(
|
|
1547
|
+
parse_func(absl::StrCat(std::numeric_limits<IntType>::min(), value),
|
|
1548
|
+
&parsed_value, base));
|
|
1549
|
+
}
|
|
1168
1550
|
}
|
|
1169
1551
|
}
|
|
1170
1552
|
|
|
@@ -1434,6 +1816,134 @@ TEST_F(SimpleDtoaTest, ExhaustiveDoubleToSixDigits) {
|
|
|
1434
1816
|
}
|
|
1435
1817
|
}
|
|
1436
1818
|
|
|
1819
|
+
TEST(StrToInt8, Partial) {
|
|
1820
|
+
struct Int8TestLine {
|
|
1821
|
+
std::string input;
|
|
1822
|
+
bool status;
|
|
1823
|
+
int8_t value;
|
|
1824
|
+
};
|
|
1825
|
+
const int8_t int8_min = std::numeric_limits<int8_t>::min();
|
|
1826
|
+
const int8_t int8_max = std::numeric_limits<int8_t>::max();
|
|
1827
|
+
Int8TestLine int8_test_line[] = {
|
|
1828
|
+
{"", false, 0},
|
|
1829
|
+
{" ", false, 0},
|
|
1830
|
+
{"-", false, 0},
|
|
1831
|
+
{"123@@@", false, 123},
|
|
1832
|
+
{absl::StrCat(int8_min, int8_max), false, int8_min},
|
|
1833
|
+
{absl::StrCat(int8_max, int8_max), false, int8_max},
|
|
1834
|
+
};
|
|
1835
|
+
|
|
1836
|
+
for (const Int8TestLine& test_line : int8_test_line) {
|
|
1837
|
+
int8_t value = -2;
|
|
1838
|
+
bool status = safe_strto8_base(test_line.input, &value, 10);
|
|
1839
|
+
EXPECT_EQ(test_line.status, status) << test_line.input;
|
|
1840
|
+
EXPECT_EQ(test_line.value, value) << test_line.input;
|
|
1841
|
+
value = -2;
|
|
1842
|
+
status = safe_strto8_base(test_line.input, &value, 10);
|
|
1843
|
+
EXPECT_EQ(test_line.status, status) << test_line.input;
|
|
1844
|
+
EXPECT_EQ(test_line.value, value) << test_line.input;
|
|
1845
|
+
value = -2;
|
|
1846
|
+
status = safe_strto8_base(absl::string_view(test_line.input), &value, 10);
|
|
1847
|
+
EXPECT_EQ(test_line.status, status) << test_line.input;
|
|
1848
|
+
EXPECT_EQ(test_line.value, value) << test_line.input;
|
|
1849
|
+
}
|
|
1850
|
+
}
|
|
1851
|
+
|
|
1852
|
+
TEST(StrToUint8, Partial) {
|
|
1853
|
+
struct Uint8TestLine {
|
|
1854
|
+
std::string input;
|
|
1855
|
+
bool status;
|
|
1856
|
+
uint8_t value;
|
|
1857
|
+
};
|
|
1858
|
+
const uint8_t uint8_max = std::numeric_limits<uint8_t>::max();
|
|
1859
|
+
Uint8TestLine uint8_test_line[] = {
|
|
1860
|
+
{"", false, 0},
|
|
1861
|
+
{" ", false, 0},
|
|
1862
|
+
{"-", false, 0},
|
|
1863
|
+
{"123@@@", false, 123},
|
|
1864
|
+
{absl::StrCat(uint8_max, uint8_max), false, uint8_max},
|
|
1865
|
+
};
|
|
1866
|
+
|
|
1867
|
+
for (const Uint8TestLine& test_line : uint8_test_line) {
|
|
1868
|
+
uint8_t value = 2;
|
|
1869
|
+
bool status = safe_strtou8_base(test_line.input, &value, 10);
|
|
1870
|
+
EXPECT_EQ(test_line.status, status) << test_line.input;
|
|
1871
|
+
EXPECT_EQ(test_line.value, value) << test_line.input;
|
|
1872
|
+
value = 2;
|
|
1873
|
+
status = safe_strtou8_base(test_line.input, &value, 10);
|
|
1874
|
+
EXPECT_EQ(test_line.status, status) << test_line.input;
|
|
1875
|
+
EXPECT_EQ(test_line.value, value) << test_line.input;
|
|
1876
|
+
value = 2;
|
|
1877
|
+
status = safe_strtou8_base(absl::string_view(test_line.input), &value, 10);
|
|
1878
|
+
EXPECT_EQ(test_line.status, status) << test_line.input;
|
|
1879
|
+
EXPECT_EQ(test_line.value, value) << test_line.input;
|
|
1880
|
+
}
|
|
1881
|
+
}
|
|
1882
|
+
|
|
1883
|
+
TEST(StrToInt16, Partial) {
|
|
1884
|
+
struct Int16TestLine {
|
|
1885
|
+
std::string input;
|
|
1886
|
+
bool status;
|
|
1887
|
+
int16_t value;
|
|
1888
|
+
};
|
|
1889
|
+
const int16_t int16_min = std::numeric_limits<int16_t>::min();
|
|
1890
|
+
const int16_t int16_max = std::numeric_limits<int16_t>::max();
|
|
1891
|
+
Int16TestLine int16_test_line[] = {
|
|
1892
|
+
{"", false, 0},
|
|
1893
|
+
{" ", false, 0},
|
|
1894
|
+
{"-", false, 0},
|
|
1895
|
+
{"123@@@", false, 123},
|
|
1896
|
+
{absl::StrCat(int16_min, int16_max), false, int16_min},
|
|
1897
|
+
{absl::StrCat(int16_max, int16_max), false, int16_max},
|
|
1898
|
+
};
|
|
1899
|
+
|
|
1900
|
+
for (const Int16TestLine& test_line : int16_test_line) {
|
|
1901
|
+
int16_t value = -2;
|
|
1902
|
+
bool status = safe_strto16_base(test_line.input, &value, 10);
|
|
1903
|
+
EXPECT_EQ(test_line.status, status) << test_line.input;
|
|
1904
|
+
EXPECT_EQ(test_line.value, value) << test_line.input;
|
|
1905
|
+
value = -2;
|
|
1906
|
+
status = safe_strto16_base(test_line.input, &value, 10);
|
|
1907
|
+
EXPECT_EQ(test_line.status, status) << test_line.input;
|
|
1908
|
+
EXPECT_EQ(test_line.value, value) << test_line.input;
|
|
1909
|
+
value = -2;
|
|
1910
|
+
status = safe_strto16_base(absl::string_view(test_line.input), &value, 10);
|
|
1911
|
+
EXPECT_EQ(test_line.status, status) << test_line.input;
|
|
1912
|
+
EXPECT_EQ(test_line.value, value) << test_line.input;
|
|
1913
|
+
}
|
|
1914
|
+
}
|
|
1915
|
+
|
|
1916
|
+
TEST(StrToUint16, Partial) {
|
|
1917
|
+
struct Uint16TestLine {
|
|
1918
|
+
std::string input;
|
|
1919
|
+
bool status;
|
|
1920
|
+
uint16_t value;
|
|
1921
|
+
};
|
|
1922
|
+
const uint16_t uint16_max = std::numeric_limits<uint16_t>::max();
|
|
1923
|
+
Uint16TestLine uint16_test_line[] = {
|
|
1924
|
+
{"", false, 0},
|
|
1925
|
+
{" ", false, 0},
|
|
1926
|
+
{"-", false, 0},
|
|
1927
|
+
{"123@@@", false, 123},
|
|
1928
|
+
{absl::StrCat(uint16_max, uint16_max), false, uint16_max},
|
|
1929
|
+
};
|
|
1930
|
+
|
|
1931
|
+
for (const Uint16TestLine& test_line : uint16_test_line) {
|
|
1932
|
+
uint16_t value = 2;
|
|
1933
|
+
bool status = safe_strtou16_base(test_line.input, &value, 10);
|
|
1934
|
+
EXPECT_EQ(test_line.status, status) << test_line.input;
|
|
1935
|
+
EXPECT_EQ(test_line.value, value) << test_line.input;
|
|
1936
|
+
value = 2;
|
|
1937
|
+
status = safe_strtou16_base(test_line.input, &value, 10);
|
|
1938
|
+
EXPECT_EQ(test_line.status, status) << test_line.input;
|
|
1939
|
+
EXPECT_EQ(test_line.value, value) << test_line.input;
|
|
1940
|
+
value = 2;
|
|
1941
|
+
status = safe_strtou16_base(absl::string_view(test_line.input), &value, 10);
|
|
1942
|
+
EXPECT_EQ(test_line.status, status) << test_line.input;
|
|
1943
|
+
EXPECT_EQ(test_line.value, value) << test_line.input;
|
|
1944
|
+
}
|
|
1945
|
+
}
|
|
1946
|
+
|
|
1437
1947
|
TEST(StrToInt32, Partial) {
|
|
1438
1948
|
struct Int32TestLine {
|
|
1439
1949
|
std::string input;
|
|
@@ -1731,6 +2241,10 @@ void ExpectWritesNull() {
|
|
|
1731
2241
|
}
|
|
1732
2242
|
|
|
1733
2243
|
TEST(FastIntToBuffer, WritesNull) {
|
|
2244
|
+
ExpectWritesNull<int8_t>();
|
|
2245
|
+
ExpectWritesNull<uint8_t>();
|
|
2246
|
+
ExpectWritesNull<int16_t>();
|
|
2247
|
+
ExpectWritesNull<uint16_t>();
|
|
1734
2248
|
ExpectWritesNull<int32_t>();
|
|
1735
2249
|
ExpectWritesNull<uint32_t>();
|
|
1736
2250
|
ExpectWritesNull<int64_t>();
|