diff options
author | Abseil Team <absl-team@google.com> | 2021-04-28 11:49:29 -0700 |
---|---|---|
committer | Derek Mauro <dmauro@google.com> | 2021-04-28 15:09:58 -0400 |
commit | f14d5f4af12eb521a5142151d6ea3addbbed42bb (patch) | |
tree | 526a1feb786c03f64ed29f97d395b18480311dac /absl/strings/cordz_test.cc | |
parent | bcc11a8918f8cc9b43c9a0dc5da7b52d48452bd3 (diff) | |
download | abseil-f14d5f4af12eb521a5142151d6ea3addbbed42bb.tar.gz abseil-f14d5f4af12eb521a5142151d6ea3addbbed42bb.tar.bz2 abseil-f14d5f4af12eb521a5142151d6ea3addbbed42bb.zip |
Export of internal Abseil changes
--
a78c34c705b15598ea00171d4ff8755e38fad863 by Derek Mauro <dmauro@google.com>:
Improve compiler support for ABSL_FALLTHROUGH_INTENDED
PiperOrigin-RevId: 370952333
--
aed0c26f1a2aac98e217ad1b44ce4a858780a223 by Martijn Vels <mvels@google.com>:
Add Cordz instrumentation for Flatten
PiperOrigin-RevId: 370815149
--
ff4a58d0109d39dc32ef7a5e5e669ca4e630c6d9 by Martijn Vels <mvels@google.com>:
Add Cordz instrumentation to RemovePrefix and RemoveSuffix
PiperOrigin-RevId: 370751602
--
40220a058b30ddd89c6e547591488d15342137dd by Martijn Vels <mvels@google.com>:
Add Cordz instrumentation to operator=(string_view)
PiperOrigin-RevId: 370737600
--
a2e49604f18b92e50b179b5477dfddb8f57538ca by Martijn Vels <mvels@google.com>:
Add cordz instrumentation for Subcord
PiperOrigin-RevId: 370724107
--
bcc3902e04fb4f14270aef00e18908e6a88474cd by Derek Mauro <dmauro@google.com>:
Internal change
PiperOrigin-RevId: 370707219
GitOrigin-RevId: a78c34c705b15598ea00171d4ff8755e38fad863
Change-Id: I0270e536cbdeaf1f195199da822b314521de3b96
Diffstat (limited to 'absl/strings/cordz_test.cc')
-rw-r--r-- | absl/strings/cordz_test.cc | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/absl/strings/cordz_test.cc b/absl/strings/cordz_test.cc index b16e9686..84947cfd 100644 --- a/absl/strings/cordz_test.cc +++ b/absl/strings/cordz_test.cc @@ -52,6 +52,8 @@ inline void PrintTo(const Cord& cord, std::ostream* s) { namespace { +auto constexpr kMaxInline = cord_internal::kMaxInline; + // Returns a string_view value of the specified length // We do this to avoid 'consuming' large strings in Cord by default. absl::string_view MakeString(size_t size) { @@ -139,6 +141,16 @@ TEST(CordzTest, MoveAssignCord) { EXPECT_THAT(cord, HasValidCordzInfoOf(Method::kConstructorString)); } +TEST_P(CordzUpdateTest, AssignSmallArray) { + cord() = MakeString(TestCordSize::kSmall); + EXPECT_THAT(cord(), HasValidCordzInfoOf(Method::kAssignString)); +} + +TEST_P(CordzUpdateTest, AssignInlinedArray) { + cord() = MakeString(TestCordSize::kInlined); + EXPECT_THAT(GetCordzInfoForTesting(cord()), Eq(nullptr)); +} + TEST_P(CordzUpdateTest, AppendCord) { Cord src = UnsampledCord(MakeString(TestCordSize::kLarge)); cord().Append(src); @@ -166,6 +178,56 @@ TEST_P(CordzUpdateTest, AppendLargeArray) { EXPECT_THAT(cord(), HasValidCordzInfoOf(InitialOr(Method::kAppendString))); } +TEST(CordzTest, RemovePrefix) { + CordzSamplingIntervalHelper sample_every(1); + Cord cord(MakeString(TestCordSize::kLarge)); + + // Half the cord + cord.RemovePrefix(cord.size() / 2); + EXPECT_THAT(cord, HasValidCordzInfoOf(Method::kConstructorString)); + EXPECT_THAT(cord, CordzMethodCountEq(Method::kRemovePrefix, 1)); + + // TODO(mvels): RemovePrefix does not reset to inlined, except if empty? + cord.RemovePrefix(cord.size() - kMaxInline); + EXPECT_THAT(cord, HasValidCordzInfoOf(Method::kConstructorString)); + EXPECT_THAT(cord, CordzMethodCountEq(Method::kRemovePrefix, 2)); + + cord.RemovePrefix(cord.size()); + EXPECT_THAT(GetCordzInfoForTesting(cord), Eq(nullptr)); +} + +TEST(CordzTest, RemoveSuffix) { + CordzSamplingIntervalHelper sample_every(1); + Cord cord(MakeString(TestCordSize::kLarge)); + + // Half the cord + cord.RemoveSuffix(cord.size() / 2); + EXPECT_THAT(cord, HasValidCordzInfoOf(Method::kConstructorString)); + EXPECT_THAT(cord, CordzMethodCountEq(Method::kRemoveSuffix, 1)); + + // TODO(mvels): RemoveSuffix does not reset to inlined, except if empty? + cord.RemoveSuffix(cord.size() - kMaxInline); + EXPECT_THAT(cord, HasValidCordzInfoOf(Method::kConstructorString)); + EXPECT_THAT(cord, CordzMethodCountEq(Method::kRemoveSuffix, 2)); + + cord.RemoveSuffix(cord.size()); + EXPECT_THAT(GetCordzInfoForTesting(cord), Eq(nullptr)); +} + +TEST(CordzTest, SubCord) { + CordzSamplingIntervalHelper sample_every{1}; + Cord src(MakeString(TestCordSize::kLarge)); + + Cord cord1 = src.Subcord(10, src.size() / 2); + EXPECT_THAT(cord1, HasValidCordzInfoOf(Method::kSubCord)); + + Cord cord2 = src.Subcord(10, kMaxInline + 1); + EXPECT_THAT(cord2, HasValidCordzInfoOf(Method::kSubCord)); + + Cord cord3 = src.Subcord(10, kMaxInline); + EXPECT_THAT(GetCordzInfoForTesting(cord3), Eq(nullptr)); +} + } // namespace ABSL_NAMESPACE_END |