From 079cf662544a14bd1cfaae6d6512645541ba10fb Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Thu, 6 May 2021 20:08:01 -0700 Subject: Export of internal Abseil changes -- 51e9291d9bc385082b4061fe760b236ba59c79c3 by Abseil Team : Cast to uint64_t using braces instead of parentheses. PiperOrigin-RevId: 372475909 -- 939fc409855da2639dcaf2d1d4971ca0e0568d03 by Martijn Vels : Expand # flat nodes into size detailed counters. PiperOrigin-RevId: 372474608 -- 54b158c99b32f8a14821ce74fed0f9f836525ce7 by Martijn Vels : Make copies of sampled cords sampled as well This applies to the following methods: - Cord(const Cord&) - operator=(const Cord&) - Subcord(...) PiperOrigin-RevId: 372468160 -- 876c2581ce008871464e8b471efbb967d150f83b by Andy Getzendanner : Document the type of an ABSL_FLAGS.OnUpdate() callback. PiperOrigin-RevId: 372406390 GitOrigin-RevId: 51e9291d9bc385082b4061fe760b236ba59c79c3 Change-Id: Ifb75122cae56b66c28128aee90a63bbb28d93817 --- absl/strings/cordz_test.cc | 88 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 78 insertions(+), 10 deletions(-) (limited to 'absl/strings/cordz_test.cc') diff --git a/absl/strings/cordz_test.cc b/absl/strings/cordz_test.cc index aeb3d13f..0e11f5c8 100644 --- a/absl/strings/cordz_test.cc +++ b/absl/strings/cordz_test.cc @@ -67,6 +67,13 @@ absl::string_view MakeString(TestCordSize size) { return MakeString(Length(size)); } +// Returns a cord with a sampled method of kAppendString. +absl::Cord MakeAppendStringCord(TestCordSize size) { + absl::Cord cord; + cord.Append(MakeString(size)); + return cord; +} + std::string TestParamToString(::testing::TestParamInfo size) { return absl::StrCat("On", ToString(size.param), "Cord"); } @@ -136,6 +143,16 @@ TEST(CordzTest, CopyConstruct) { EXPECT_THAT(cord, HasValidCordzInfoOf(Method::kConstructorCord)); } +TEST(CordzTest, CopyConstructFromSampled) { + CordzSamplingIntervalHelper sample_every{1}; + Cord src(MakeString(TestCordSize::kLarge)); + Cord cord(src); + ASSERT_THAT(cord, HasValidCordzInfoOf(Method::kConstructorCord)); + CordzStatistics stats = GetCordzInfoForTesting(cord)->GetCordzStatistics(); + EXPECT_THAT(stats.parent_method, Eq(Method::kConstructorString)); + EXPECT_THAT(stats.update_tracker.Value(Method::kConstructorString), Eq(1)); +} + TEST(CordzTest, MoveConstruct) { CordzSamplingIntervalHelper sample_every{1}; Cord src(MakeString(TestCordSize::kLarge)); @@ -146,7 +163,43 @@ TEST(CordzTest, MoveConstruct) { TEST_P(CordzUpdateTest, AssignCord) { Cord src = UnsampledCord(MakeString(TestCordSize::kLarge)); cord() = src; - EXPECT_THAT(cord(), HasValidCordzInfoOf(InitialOr(Method::kAssignCord))); + EXPECT_THAT(cord(), HasValidCordzInfoOf(Method::kAssignCord)); + CordzStatistics stats = GetCordzInfoForTesting(cord())->GetCordzStatistics(); + EXPECT_THAT(stats.update_tracker.Value(Method::kConstructorString), Eq(0)); +} + +TEST_P(CordzUpdateTest, AssignSampledCord) { + Cord src = MakeAppendStringCord(TestCordSize::kLarge); + cord() = src; + ASSERT_THAT(cord(), HasValidCordzInfoOf(Method::kAssignCord)); + CordzStatistics stats = GetCordzInfoForTesting(cord())->GetCordzStatistics(); + EXPECT_THAT(stats.parent_method, Eq(Method::kAppendString)); + EXPECT_THAT(stats.update_tracker.Value(Method::kAppendString), Eq(1)); + EXPECT_THAT(stats.update_tracker.Value(Method::kConstructorString), Eq(0)); +} + +TEST(CordzUpdateTest, AssignSampledCordToUnsampledCord) { + CordzSamplingIntervalHelper sample_every{1}; + Cord src = MakeAppendStringCord(TestCordSize::kLarge); + Cord cord = UnsampledCord(MakeString(TestCordSize::kLarge)); + cord = src; + ASSERT_THAT(cord, HasValidCordzInfoOf(Method::kAssignCord)); + CordzStatistics stats = GetCordzInfoForTesting(cord)->GetCordzStatistics(); + EXPECT_THAT(stats.parent_method, Eq(Method::kAppendString)); + EXPECT_THAT(stats.update_tracker.Value(Method::kAppendString), Eq(1)); + EXPECT_THAT(stats.update_tracker.Value(Method::kConstructorString), Eq(0)); +} + +TEST(CordzUpdateTest, AssignSampledCordToSampledCord) { + CordzSamplingIntervalHelper sample_every{1}; + Cord src = MakeAppendStringCord(TestCordSize::kLarge); + Cord cord(MakeString(TestCordSize::kLarge)); + cord = src; + ASSERT_THAT(cord, HasValidCordzInfoOf(Method::kAssignCord)); + CordzStatistics stats = GetCordzInfoForTesting(cord)->GetCordzStatistics(); + EXPECT_THAT(stats.parent_method, Eq(Method::kAppendString)); + EXPECT_THAT(stats.update_tracker.Value(Method::kAppendString), Eq(1)); + EXPECT_THAT(stats.update_tracker.Value(Method::kConstructorString), Eq(0)); } TEST(CordzTest, AssignInlinedCord) { @@ -160,7 +213,7 @@ TEST(CordzTest, AssignInlinedCord) { EXPECT_FALSE(CordzInfoIsListed(info)); } -TEST(CordzTest, MoveAssignCord) { +TEST(CordzUpdateTest, MoveAssignCord) { CordzSamplingIntervalHelper sample_every{1}; Cord cord; Cord src(MakeString(TestCordSize::kLarge)); @@ -168,6 +221,11 @@ TEST(CordzTest, MoveAssignCord) { EXPECT_THAT(cord, HasValidCordzInfoOf(Method::kConstructorString)); } +TEST_P(CordzUpdateTest, AssignLargeArray) { + cord() = MakeString(TestCordSize::kSmall); + EXPECT_THAT(cord(), HasValidCordzInfoOf(Method::kAssignString)); +} + TEST_P(CordzUpdateTest, AssignSmallArray) { cord() = MakeString(TestCordSize::kSmall); EXPECT_THAT(cord(), HasValidCordzInfoOf(Method::kAssignString)); @@ -333,16 +391,26 @@ TEST(CordzTest, RemoveSuffix) { 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 src = UnsampledCord(MakeString(TestCordSize::kLarge)); + Cord cord = src.Subcord(10, src.size() / 2); + EXPECT_THAT(cord, HasValidCordzInfoOf(Method::kSubCord)); +} - Cord cord2 = src.Subcord(10, kMaxInline + 1); - EXPECT_THAT(cord2, HasValidCordzInfoOf(Method::kSubCord)); +TEST(CordzTest, SmallSubCord) { + CordzSamplingIntervalHelper sample_every{1}; + Cord src = UnsampledCord(MakeString(TestCordSize::kLarge)); + Cord cord = src.Subcord(10, kMaxInline + 1); + EXPECT_THAT(cord, HasValidCordzInfoOf(Method::kSubCord)); +} - Cord cord3 = src.Subcord(10, kMaxInline); - EXPECT_THAT(GetCordzInfoForTesting(cord3), Eq(nullptr)); +TEST(CordzTest, SubCordFromSampledCord) { + CordzSamplingIntervalHelper sample_every{1}; + Cord src(MakeString(TestCordSize::kLarge)); + Cord cord = src.Subcord(10, src.size() / 2); + EXPECT_THAT(cord, HasValidCordzInfoOf(Method::kSubCord)); + CordzStatistics stats = GetCordzInfoForTesting(cord)->GetCordzStatistics(); + EXPECT_THAT(stats.parent_method, Eq(Method::kConstructorString)); + EXPECT_THAT(stats.update_tracker.Value(Method::kConstructorString), Eq(1)); } } // namespace -- cgit v1.2.3