|
|
|
@ -70,9 +70,8 @@ static std::string RandomLowercaseString(RandomEngine* rng) { |
|
|
|
|
static std::string RandomLowercaseString(RandomEngine* rng, size_t length) { |
|
|
|
|
std::string result(length, '\0'); |
|
|
|
|
std::uniform_int_distribution<int> chars('a', 'z'); |
|
|
|
|
std::generate(result.begin(), result.end(), [&]() { |
|
|
|
|
return static_cast<char>(chars(*rng)); |
|
|
|
|
}); |
|
|
|
|
std::generate(result.begin(), result.end(), |
|
|
|
|
[&]() { return static_cast<char>(chars(*rng)); }); |
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -424,6 +423,50 @@ TEST(Cord, CopyToString) { |
|
|
|
|
"copying ", "to ", "a ", "string."})); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(TryFlat, Empty) { |
|
|
|
|
absl::Cord c; |
|
|
|
|
EXPECT_EQ(c.TryFlat(), ""); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(TryFlat, Flat) { |
|
|
|
|
absl::Cord c("hello"); |
|
|
|
|
EXPECT_EQ(c.TryFlat(), "hello"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(TryFlat, SubstrInlined) { |
|
|
|
|
absl::Cord c("hello"); |
|
|
|
|
c.RemovePrefix(1); |
|
|
|
|
EXPECT_EQ(c.TryFlat(), "ello"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(TryFlat, SubstrFlat) { |
|
|
|
|
absl::Cord c("longer than 15 bytes"); |
|
|
|
|
c.RemovePrefix(1); |
|
|
|
|
EXPECT_EQ(c.TryFlat(), "onger than 15 bytes"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(TryFlat, Concat) { |
|
|
|
|
absl::Cord c = absl::MakeFragmentedCord({"hel", "lo"}); |
|
|
|
|
EXPECT_EQ(c.TryFlat(), absl::nullopt); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(TryFlat, External) { |
|
|
|
|
absl::Cord c = absl::MakeCordFromExternal("hell", [](absl::string_view) {}); |
|
|
|
|
EXPECT_EQ(c.TryFlat(), "hell"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(TryFlat, SubstrExternal) { |
|
|
|
|
absl::Cord c = absl::MakeCordFromExternal("hell", [](absl::string_view) {}); |
|
|
|
|
c.RemovePrefix(1); |
|
|
|
|
EXPECT_EQ(c.TryFlat(), "ell"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(TryFlat, SubstrConcat) { |
|
|
|
|
absl::Cord c = absl::MakeFragmentedCord({"hello", " world"}); |
|
|
|
|
c.RemovePrefix(1); |
|
|
|
|
EXPECT_EQ(c.TryFlat(), absl::nullopt); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static bool IsFlat(const absl::Cord& c) { |
|
|
|
|
return c.chunk_begin() == c.chunk_end() || ++c.chunk_begin() == c.chunk_end(); |
|
|
|
|
} |
|
|
|
@ -1089,7 +1132,7 @@ TEST(ConstructFromExternal, ReferenceQualifierOverloads) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(ExternalMemory, BasicUsage) { |
|
|
|
|
static const char* strings[] = { "", "hello", "there" }; |
|
|
|
|
static const char* strings[] = {"", "hello", "there"}; |
|
|
|
|
for (const char* str : strings) { |
|
|
|
|
absl::Cord dst("(prefix)"); |
|
|
|
|
AddExternalMemory(str, &dst); |
|
|
|
|