Export of internal Abseil changes.
-- ab1a58c85a462884413ec0022dc1fff19ccb8602 by Abseil Team <absl-team@google.com>: Clarified the documentation in str_format.h to say that use of absl::FormatSpec is ok for wrapper functions. Added tests that express this. PiperOrigin-RevId: 247657991 -- fef9481e58d579f1514babcb960ca60a51883fd8 by CJ Johnson <johnsoncj@google.com>: Adds exception safety tests for InlinedVector::InlinedVector() and InlinedVector::InlinedVector(const allocator_type&). PiperOrigin-RevId: 247617048 -- ef3217e1cd1e9a6ff5f2025e061b8ce3735af78f by Abseil Team <absl-team@google.com>: Internal change. PiperOrigin-RevId: 247614063 -- ed4c3345c4a04d8ec5c9e627058f17fce55925b1 by CJ Johnson <johnsoncj@google.com>: Update InlinedVector::clear() Introduces inlined_vector_exception_safety_test with the first test (clear), adds new benchmarks (for clear), and updates the implementation of clear. PiperOrigin-RevId: 247496049 -- 144a3a77c93bc8b2226da6f4b56166ee3d9868de by Derek Mauro <dmauro@google.com>: Internal change PiperOrigin-RevId: 247482532 -- 286bbb89e154d5424955b644edad5fe04be487f8 by Derek Mauro <dmauro@google.com>: Add scripts to run ASAN and TSAN on CI. PiperOrigin-RevId: 247479658 GitOrigin-RevId: ab1a58c85a462884413ec0022dc1fff19ccb8602 Change-Id: Ief4c5a62587d0c59d405735df469d498aa6bf101
This commit is contained in:
parent
27c2f6e2f3
commit
0cbdc774b9
18 changed files with 422 additions and 36 deletions
|
@ -404,7 +404,7 @@ cc_test(
|
|||
|
||||
cc_test(
|
||||
name = "numbers_test",
|
||||
size = "small",
|
||||
size = "medium",
|
||||
srcs = [
|
||||
"internal/numbers_test_common.h",
|
||||
"numbers_test.cc",
|
||||
|
@ -628,7 +628,7 @@ cc_test(
|
|||
|
||||
cc_test(
|
||||
name = "str_format_convert_test",
|
||||
size = "small",
|
||||
size = "medium",
|
||||
srcs = ["internal/str_format/convert_test.cc"],
|
||||
copts = ABSL_TEST_COPTS,
|
||||
visibility = ["//visibility:private"],
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
// * A `ParsedFormat` instance, which encapsulates a specific, pre-compiled
|
||||
// format string for a specific set of type(s), and which can be passed
|
||||
// between API boundaries. (The `FormatSpec` type should not be used
|
||||
// directly.)
|
||||
// directly except as an argument type for wrapper functions.)
|
||||
//
|
||||
// The `str_format` library provides the ability to output its format strings to
|
||||
// arbitrary sink types:
|
||||
|
@ -157,10 +157,15 @@ class FormatCountCapture {
|
|||
// FormatSpec
|
||||
//
|
||||
// The `FormatSpec` type defines the makeup of a format string within the
|
||||
// `str_format` library. You should not need to use or manipulate this type
|
||||
// directly. A `FormatSpec` is a variadic class template that is evaluated at
|
||||
// compile-time, according to the format string and arguments that are passed
|
||||
// to it.
|
||||
// `str_format` library. It is a variadic class template that is evaluated at
|
||||
// compile-time, according to the format string and arguments that are passed to
|
||||
// it.
|
||||
//
|
||||
// You should not need to manipulate this type directly. You should only name it
|
||||
// if you are writing wrapper functions which accept format arguments that will
|
||||
// be provided unmodified to functions in this library. Such a wrapper function
|
||||
// might be a class method that provides format arguments and/or internally uses
|
||||
// the result of formatting.
|
||||
//
|
||||
// For a `FormatSpec` to be valid at compile-time, it must be provided as
|
||||
// either:
|
||||
|
|
|
@ -13,7 +13,7 @@ namespace absl {
|
|||
namespace {
|
||||
using str_format_internal::FormatArgImpl;
|
||||
|
||||
class FormatEntryPointTest : public ::testing::Test { };
|
||||
using FormatEntryPointTest = ::testing::Test;
|
||||
|
||||
TEST_F(FormatEntryPointTest, Format) {
|
||||
std::string sink;
|
||||
|
@ -458,7 +458,7 @@ std::string SummarizeParsedFormat(const ParsedFormatBase& pc) {
|
|||
return out;
|
||||
}
|
||||
|
||||
class ParsedFormatTest : public testing::Test {};
|
||||
using ParsedFormatTest = ::testing::Test;
|
||||
|
||||
TEST_F(ParsedFormatTest, SimpleChecked) {
|
||||
EXPECT_EQ("[ABC]{d:1$d}[DEF]",
|
||||
|
@ -600,6 +600,24 @@ TEST_F(ParsedFormatTest, RegressionMixPositional) {
|
|||
EXPECT_FALSE((ExtendedParsedFormat<Conv::d, Conv::o>::New("%1$d %o")));
|
||||
}
|
||||
|
||||
using FormatWrapperTest = ::testing::Test;
|
||||
|
||||
// Plain wrapper for StrFormat.
|
||||
template <typename... Args>
|
||||
std::string WrappedFormat(const absl::FormatSpec<Args...>& format,
|
||||
const Args&... args) {
|
||||
return StrFormat(format, args...);
|
||||
}
|
||||
|
||||
TEST_F(FormatWrapperTest, ConstexprStringFormat) {
|
||||
EXPECT_EQ(WrappedFormat("%s there", "hello"), "hello there");
|
||||
}
|
||||
|
||||
TEST_F(FormatWrapperTest, ParsedFormat) {
|
||||
ParsedFormat<'s'> format("%s there");
|
||||
EXPECT_EQ(WrappedFormat(format, "hello"), "hello there");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace absl
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue