|
|
|
@ -237,7 +237,7 @@ void CheckAllocationSizes(bool is_ptr) { |
|
|
|
|
std::string buf(1 << 20, 0); |
|
|
|
|
|
|
|
|
|
Arena arena(&buf[0], buf.size()); |
|
|
|
|
auto* rep = Arena::CreateMessage<Rep>(&arena); |
|
|
|
|
auto* rep = Arena::Create<Rep>(&arena); |
|
|
|
|
size_t prev = arena.SpaceUsed(); |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < 100; ++i) { |
|
|
|
@ -283,7 +283,7 @@ TEST(RepeatedField, NaturalGrowthOnArenasReuseBlocks) { |
|
|
|
|
static constexpr int kNumFields = 100; |
|
|
|
|
static constexpr int kNumElems = 1000; |
|
|
|
|
for (int i = 0; i < kNumFields; ++i) { |
|
|
|
|
values.push_back(Arena::CreateMessage<RepeatedField<int>>(&arena)); |
|
|
|
|
values.push_back(Arena::Create<RepeatedField<int>>(&arena)); |
|
|
|
|
auto& field = *values.back(); |
|
|
|
|
for (int j = 0; j < kNumElems; ++j) { |
|
|
|
|
field.Add(j); |
|
|
|
@ -908,8 +908,7 @@ TEST(RepeatedField, MoveConstruct) { |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
Arena arena; |
|
|
|
|
RepeatedField<int>* source = |
|
|
|
|
Arena::CreateMessage<RepeatedField<int>>(&arena); |
|
|
|
|
RepeatedField<int>* source = Arena::Create<RepeatedField<int>>(&arena); |
|
|
|
|
source->Add(1); |
|
|
|
|
source->Add(2); |
|
|
|
|
RepeatedField<int> destination = std::move(*source); |
|
|
|
@ -940,12 +939,10 @@ TEST(RepeatedField, MoveAssign) { |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
Arena arena; |
|
|
|
|
RepeatedField<int>* source = |
|
|
|
|
Arena::CreateMessage<RepeatedField<int>>(&arena); |
|
|
|
|
RepeatedField<int>* source = Arena::Create<RepeatedField<int>>(&arena); |
|
|
|
|
source->Add(1); |
|
|
|
|
source->Add(2); |
|
|
|
|
RepeatedField<int>* destination = |
|
|
|
|
Arena::CreateMessage<RepeatedField<int>>(&arena); |
|
|
|
|
RepeatedField<int>* destination = Arena::Create<RepeatedField<int>>(&arena); |
|
|
|
|
destination->Add(3); |
|
|
|
|
const int* source_data = source->data(); |
|
|
|
|
*destination = std::move(*source); |
|
|
|
@ -956,12 +953,12 @@ TEST(RepeatedField, MoveAssign) { |
|
|
|
|
{ |
|
|
|
|
Arena source_arena; |
|
|
|
|
RepeatedField<int>* source = |
|
|
|
|
Arena::CreateMessage<RepeatedField<int>>(&source_arena); |
|
|
|
|
Arena::Create<RepeatedField<int>>(&source_arena); |
|
|
|
|
source->Add(1); |
|
|
|
|
source->Add(2); |
|
|
|
|
Arena destination_arena; |
|
|
|
|
RepeatedField<int>* destination = |
|
|
|
|
Arena::CreateMessage<RepeatedField<int>>(&destination_arena); |
|
|
|
|
Arena::Create<RepeatedField<int>>(&destination_arena); |
|
|
|
|
destination->Add(3); |
|
|
|
|
*destination = std::move(*source); |
|
|
|
|
EXPECT_THAT(*destination, ElementsAre(1, 2)); |
|
|
|
@ -971,8 +968,7 @@ TEST(RepeatedField, MoveAssign) { |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
Arena arena; |
|
|
|
|
RepeatedField<int>* source = |
|
|
|
|
Arena::CreateMessage<RepeatedField<int>>(&arena); |
|
|
|
|
RepeatedField<int>* source = Arena::Create<RepeatedField<int>>(&arena); |
|
|
|
|
source->Add(1); |
|
|
|
|
source->Add(2); |
|
|
|
|
RepeatedField<int> destination; |
|
|
|
@ -988,8 +984,7 @@ TEST(RepeatedField, MoveAssign) { |
|
|
|
|
source.Add(1); |
|
|
|
|
source.Add(2); |
|
|
|
|
Arena arena; |
|
|
|
|
RepeatedField<int>* destination = |
|
|
|
|
Arena::CreateMessage<RepeatedField<int>>(&arena); |
|
|
|
|
RepeatedField<int>* destination = Arena::Create<RepeatedField<int>>(&arena); |
|
|
|
|
destination->Add(3); |
|
|
|
|
*destination = std::move(source); |
|
|
|
|
EXPECT_THAT(*destination, ElementsAre(1, 2)); |
|
|
|
@ -1010,8 +1005,7 @@ TEST(RepeatedField, MoveAssign) { |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
Arena arena; |
|
|
|
|
RepeatedField<int>* field = |
|
|
|
|
Arena::CreateMessage<RepeatedField<int>>(&arena); |
|
|
|
|
RepeatedField<int>* field = Arena::Create<RepeatedField<int>>(&arena); |
|
|
|
|
field->Add(1); |
|
|
|
|
field->Add(2); |
|
|
|
|
const int* data = field->data(); |
|
|
|
@ -1342,13 +1336,12 @@ TEST(RepeatedField, PoisonsMemoryOnAssign) { |
|
|
|
|
TEST(RepeatedField, Cleanups) { |
|
|
|
|
Arena arena; |
|
|
|
|
auto growth = internal::CleanupGrowth( |
|
|
|
|
arena, [&] { Arena::CreateMessage<RepeatedField<int>>(&arena); }); |
|
|
|
|
arena, [&] { Arena::Create<RepeatedField<int>>(&arena); }); |
|
|
|
|
EXPECT_THAT(growth.cleanups, testing::IsEmpty()); |
|
|
|
|
|
|
|
|
|
void* ptr; |
|
|
|
|
growth = internal::CleanupGrowth(arena, [&] { |
|
|
|
|
ptr = Arena::CreateMessage<RepeatedField<absl::Cord>>(&arena); |
|
|
|
|
}); |
|
|
|
|
growth = internal::CleanupGrowth( |
|
|
|
|
arena, [&] { ptr = Arena::Create<RepeatedField<absl::Cord>>(&arena); }); |
|
|
|
|
EXPECT_THAT(growth.cleanups, testing::UnorderedElementsAre(ptr)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1496,7 +1489,7 @@ TEST(RepeatedPtrField, NaturalGrowthOnArenasReuseBlocks) { |
|
|
|
|
static constexpr int kNumFields = 100; |
|
|
|
|
static constexpr int kNumElems = 1000; |
|
|
|
|
for (int i = 0; i < kNumFields; ++i) { |
|
|
|
|
values.push_back(Arena::CreateMessage<Rep>(&arena)); |
|
|
|
|
values.push_back(Arena::Create<Rep>(&arena)); |
|
|
|
|
auto& field = *values.back(); |
|
|
|
|
for (int j = 0; j < kNumElems; ++j) { |
|
|
|
|
field.Add(""); |
|
|
|
@ -1760,7 +1753,7 @@ TEST(RepeatedPtrField, AddMethodsDontAcceptNull) { |
|
|
|
|
TEST(RepeatedPtrField, AddAllocatedDifferentArena) { |
|
|
|
|
RepeatedPtrField<TestAllTypes> field; |
|
|
|
|
Arena arena; |
|
|
|
|
auto* msg = Arena::CreateMessage<TestAllTypes>(&arena); |
|
|
|
|
auto* msg = Arena::Create<TestAllTypes>(&arena); |
|
|
|
|
field.AddAllocated(msg); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1911,7 +1904,7 @@ TEST(RepeatedPtrField, SmallOptimization) { |
|
|
|
|
|
|
|
|
|
// We use an arena to easily measure memory usage, but not needed.
|
|
|
|
|
Arena arena; |
|
|
|
|
auto* array = Arena::CreateMessage<RepeatedPtrField<std::string>>(&arena); |
|
|
|
|
auto* array = Arena::Create<RepeatedPtrField<std::string>>(&arena); |
|
|
|
|
EXPECT_EQ(array->Capacity(), 1); |
|
|
|
|
EXPECT_EQ(array->SpaceUsedExcludingSelf(), 0); |
|
|
|
|
std::string str; |
|
|
|
@ -1992,7 +1985,7 @@ TEST(RepeatedPtrField, MoveConstruct) { |
|
|
|
|
{ |
|
|
|
|
Arena arena; |
|
|
|
|
RepeatedPtrField<std::string>* source = |
|
|
|
|
Arena::CreateMessage<RepeatedPtrField<std::string>>(&arena); |
|
|
|
|
Arena::Create<RepeatedPtrField<std::string>>(&arena); |
|
|
|
|
*source->Add() = "1"; |
|
|
|
|
*source->Add() = "2"; |
|
|
|
|
RepeatedPtrField<std::string> destination = std::move(*source); |
|
|
|
@ -2020,11 +2013,11 @@ TEST(RepeatedPtrField, MoveAssign) { |
|
|
|
|
{ |
|
|
|
|
Arena arena; |
|
|
|
|
RepeatedPtrField<std::string>* source = |
|
|
|
|
Arena::CreateMessage<RepeatedPtrField<std::string>>(&arena); |
|
|
|
|
Arena::Create<RepeatedPtrField<std::string>>(&arena); |
|
|
|
|
*source->Add() = "1"; |
|
|
|
|
*source->Add() = "2"; |
|
|
|
|
RepeatedPtrField<std::string>* destination = |
|
|
|
|
Arena::CreateMessage<RepeatedPtrField<std::string>>(&arena); |
|
|
|
|
Arena::Create<RepeatedPtrField<std::string>>(&arena); |
|
|
|
|
*destination->Add() = "3"; |
|
|
|
|
const std::string* const* source_data = source->data(); |
|
|
|
|
*destination = std::move(*source); |
|
|
|
@ -2035,12 +2028,12 @@ TEST(RepeatedPtrField, MoveAssign) { |
|
|
|
|
{ |
|
|
|
|
Arena source_arena; |
|
|
|
|
RepeatedPtrField<std::string>* source = |
|
|
|
|
Arena::CreateMessage<RepeatedPtrField<std::string>>(&source_arena); |
|
|
|
|
Arena::Create<RepeatedPtrField<std::string>>(&source_arena); |
|
|
|
|
*source->Add() = "1"; |
|
|
|
|
*source->Add() = "2"; |
|
|
|
|
Arena destination_arena; |
|
|
|
|
RepeatedPtrField<std::string>* destination = |
|
|
|
|
Arena::CreateMessage<RepeatedPtrField<std::string>>(&destination_arena); |
|
|
|
|
Arena::Create<RepeatedPtrField<std::string>>(&destination_arena); |
|
|
|
|
*destination->Add() = "3"; |
|
|
|
|
*destination = std::move(*source); |
|
|
|
|
EXPECT_THAT(*destination, ElementsAre("1", "2")); |
|
|
|
@ -2051,7 +2044,7 @@ TEST(RepeatedPtrField, MoveAssign) { |
|
|
|
|
{ |
|
|
|
|
Arena arena; |
|
|
|
|
RepeatedPtrField<std::string>* source = |
|
|
|
|
Arena::CreateMessage<RepeatedPtrField<std::string>>(&arena); |
|
|
|
|
Arena::Create<RepeatedPtrField<std::string>>(&arena); |
|
|
|
|
*source->Add() = "1"; |
|
|
|
|
*source->Add() = "2"; |
|
|
|
|
RepeatedPtrField<std::string> destination; |
|
|
|
@ -2068,7 +2061,7 @@ TEST(RepeatedPtrField, MoveAssign) { |
|
|
|
|
*source.Add() = "2"; |
|
|
|
|
Arena arena; |
|
|
|
|
RepeatedPtrField<std::string>* destination = |
|
|
|
|
Arena::CreateMessage<RepeatedPtrField<std::string>>(&arena); |
|
|
|
|
Arena::Create<RepeatedPtrField<std::string>>(&arena); |
|
|
|
|
*destination->Add() = "3"; |
|
|
|
|
*destination = std::move(source); |
|
|
|
|
EXPECT_THAT(*destination, ElementsAre("1", "2")); |
|
|
|
@ -2090,7 +2083,7 @@ TEST(RepeatedPtrField, MoveAssign) { |
|
|
|
|
{ |
|
|
|
|
Arena arena; |
|
|
|
|
RepeatedPtrField<std::string>* field = |
|
|
|
|
Arena::CreateMessage<RepeatedPtrField<std::string>>(&arena); |
|
|
|
|
Arena::Create<RepeatedPtrField<std::string>>(&arena); |
|
|
|
|
*field->Add() = "1"; |
|
|
|
|
*field->Add() = "2"; |
|
|
|
|
const std::string* const* data = field->data(); |
|
|
|
@ -2133,8 +2126,7 @@ TEST(RepeatedPtrField, ExtractSubrange) { |
|
|
|
|
// Create an array with "sz" elements and "extra" cleared elements.
|
|
|
|
|
// Use an arena to avoid copies from debug-build stability checks.
|
|
|
|
|
Arena arena; |
|
|
|
|
auto& field = |
|
|
|
|
*Arena::CreateMessage<RepeatedPtrField<std::string>>(&arena); |
|
|
|
|
auto& field = *Arena::Create<RepeatedPtrField<std::string>>(&arena); |
|
|
|
|
for (int i = 0; i < sz + extra; ++i) { |
|
|
|
|
subject.push_back(new std::string()); |
|
|
|
|
field.AddAllocated(subject[i]); |
|
|
|
@ -2192,14 +2184,12 @@ TEST(RepeatedPtrField, DeleteSubrange) { |
|
|
|
|
|
|
|
|
|
TEST(RepeatedPtrField, Cleanups) { |
|
|
|
|
Arena arena; |
|
|
|
|
auto growth = internal::CleanupGrowth(arena, [&] { |
|
|
|
|
Arena::CreateMessage<RepeatedPtrField<std::string>>(&arena); |
|
|
|
|
}); |
|
|
|
|
auto growth = internal::CleanupGrowth( |
|
|
|
|
arena, [&] { Arena::Create<RepeatedPtrField<std::string>>(&arena); }); |
|
|
|
|
EXPECT_THAT(growth.cleanups, testing::IsEmpty()); |
|
|
|
|
|
|
|
|
|
growth = internal::CleanupGrowth(arena, [&] { |
|
|
|
|
Arena::CreateMessage<RepeatedPtrField<TestAllTypes>>(&arena); |
|
|
|
|
}); |
|
|
|
|
growth = internal::CleanupGrowth( |
|
|
|
|
arena, [&] { Arena::Create<RepeatedPtrField<TestAllTypes>>(&arena); }); |
|
|
|
|
EXPECT_THAT(growth.cleanups, testing::IsEmpty()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -2800,13 +2790,13 @@ TEST_F(RepeatedFieldInsertionIteratorsTest, |
|
|
|
|
UnsafeArenaAllocatedRepeatedPtrFieldWithStringIntData) { |
|
|
|
|
std::vector<Nested*> data; |
|
|
|
|
Arena arena; |
|
|
|
|
auto* goldenproto = Arena::CreateMessage<TestAllTypes>(&arena); |
|
|
|
|
auto* goldenproto = Arena::Create<TestAllTypes>(&arena); |
|
|
|
|
for (int i = 0; i < 10; ++i) { |
|
|
|
|
auto* new_data = goldenproto->add_repeated_nested_message(); |
|
|
|
|
new_data->set_bb(i); |
|
|
|
|
data.push_back(new_data); |
|
|
|
|
} |
|
|
|
|
auto* testproto = Arena::CreateMessage<TestAllTypes>(&arena); |
|
|
|
|
auto* testproto = Arena::Create<TestAllTypes>(&arena); |
|
|
|
|
std::copy(data.begin(), data.end(), |
|
|
|
|
UnsafeArenaAllocatedRepeatedPtrFieldBackInserter( |
|
|
|
|
testproto->mutable_repeated_nested_message())); |
|
|
|
@ -2817,13 +2807,13 @@ TEST_F(RepeatedFieldInsertionIteratorsTest, |
|
|
|
|
UnsafeArenaAllocatedRepeatedPtrFieldWithString) { |
|
|
|
|
std::vector<std::string*> data; |
|
|
|
|
Arena arena; |
|
|
|
|
auto* goldenproto = Arena::CreateMessage<TestAllTypes>(&arena); |
|
|
|
|
auto* goldenproto = Arena::Create<TestAllTypes>(&arena); |
|
|
|
|
for (int i = 0; i < 10; ++i) { |
|
|
|
|
auto* new_data = goldenproto->add_repeated_string(); |
|
|
|
|
*new_data = absl::StrCat("name-", i); |
|
|
|
|
data.push_back(new_data); |
|
|
|
|
} |
|
|
|
|
auto* testproto = Arena::CreateMessage<TestAllTypes>(&arena); |
|
|
|
|
auto* testproto = Arena::Create<TestAllTypes>(&arena); |
|
|
|
|
std::copy(data.begin(), data.end(), |
|
|
|
|
UnsafeArenaAllocatedRepeatedPtrFieldBackInserter( |
|
|
|
|
testproto->mutable_repeated_string())); |
|
|
|
|