| Index: third_party/protobuf/src/google/protobuf/repeated_field_unittest.cc
|
| diff --git a/third_party/protobuf/src/google/protobuf/repeated_field_unittest.cc b/third_party/protobuf/src/google/protobuf/repeated_field_unittest.cc
|
| index 39b24b3375ee35ef0ee5e823322f2ae0a8a498b4..ec1074c9cec16d9325afe44b667e79fba93fc4b4 100644
|
| --- a/third_party/protobuf/src/google/protobuf/repeated_field_unittest.cc
|
| +++ b/third_party/protobuf/src/google/protobuf/repeated_field_unittest.cc
|
| @@ -95,7 +95,7 @@ TEST(RepeatedField, Small) {
|
| EXPECT_EQ(field.size(), 0);
|
| // Additional bytes are for 'struct Rep' header.
|
| int expected_usage = 4 * sizeof(int) + sizeof(Arena*);
|
| - EXPECT_EQ(field.SpaceUsedExcludingSelf(), expected_usage);
|
| + EXPECT_GE(field.SpaceUsedExcludingSelf(), expected_usage);
|
| }
|
|
|
|
|
| @@ -207,7 +207,7 @@ TEST(RepeatedField, ReserveMoreThanDouble) {
|
| RepeatedField<int> field;
|
| field.Reserve(20);
|
|
|
| - EXPECT_EQ(20, ReservedSpace(&field));
|
| + EXPECT_LE(20, ReservedSpace(&field));
|
| }
|
|
|
| TEST(RepeatedField, ReserveLessThanDouble) {
|
| @@ -215,9 +215,10 @@ TEST(RepeatedField, ReserveLessThanDouble) {
|
| // field to grow by double instead.
|
| RepeatedField<int> field;
|
| field.Reserve(20);
|
| - field.Reserve(30);
|
| + int capacity = field.Capacity();
|
| + field.Reserve(capacity * 1.5);
|
|
|
| - EXPECT_EQ(40, ReservedSpace(&field));
|
| + EXPECT_LE(2 * capacity, ReservedSpace(&field));
|
| }
|
|
|
| TEST(RepeatedField, ReserveLessThanExisting) {
|
| @@ -229,7 +230,7 @@ TEST(RepeatedField, ReserveLessThanExisting) {
|
| field.Reserve(10);
|
|
|
| EXPECT_EQ(previous_ptr, field.data());
|
| - EXPECT_EQ(20, ReservedSpace(&field));
|
| + EXPECT_LE(20, ReservedSpace(&field));
|
| }
|
|
|
| TEST(RepeatedField, Resize) {
|
| @@ -267,11 +268,13 @@ TEST(RepeatedField, MergeFrom) {
|
| }
|
|
|
| #ifdef PROTOBUF_HAS_DEATH_TEST
|
| +#ifndef NDEBUG
|
| TEST(RepeatedField, MergeFromSelf) {
|
| RepeatedField<int> me;
|
| me.Add(3);
|
| EXPECT_DEATH(me.MergeFrom(me), "");
|
| }
|
| +#endif // NDEBUG
|
| #endif // PROTOBUF_HAS_DEATH_TEST
|
|
|
| TEST(RepeatedField, CopyFrom) {
|
| @@ -343,7 +346,7 @@ TEST(RepeatedField, CopyConstruct) {
|
| }
|
|
|
| TEST(RepeatedField, IteratorConstruct) {
|
| - vector<int> values;
|
| + std::vector<int> values;
|
| values.push_back(1);
|
| values.push_back(2);
|
|
|
| @@ -397,6 +400,16 @@ TEST(RepeatedField, MutableDataIsMutable) {
|
| EXPECT_EQ(2, field.Get(0));
|
| }
|
|
|
| +TEST(RepeatedField, SubscriptOperators) {
|
| + RepeatedField<int> field;
|
| + field.Add(1);
|
| + EXPECT_EQ(1, field.Get(0));
|
| + EXPECT_EQ(1, field[0]);
|
| + EXPECT_EQ(field.Mutable(0), &field[0]);
|
| + const RepeatedField<int>& const_field = field;
|
| + EXPECT_EQ(field.data(), &const_field[0]);
|
| +}
|
| +
|
| TEST(RepeatedField, Truncate) {
|
| RepeatedField<int> field;
|
|
|
| @@ -470,11 +483,11 @@ TEST(RepeatedField, ClearThenReserveMore) {
|
| EXPECT_EQ(32, field.size());
|
| field.Clear();
|
| EXPECT_EQ(0, field.size());
|
| - EXPECT_EQ(32, field.Capacity());
|
| + EXPECT_LE(32, field.Capacity());
|
|
|
| field.Reserve(1024);
|
| EXPECT_EQ(0, field.size());
|
| - EXPECT_EQ(1024, field.Capacity());
|
| + EXPECT_LE(1024, field.Capacity());
|
| // Finish test -- |field| should destroy the cleared-but-not-yet-destroyed
|
| // strings.
|
| }
|
| @@ -629,15 +642,18 @@ TEST(RepeatedPtrField, ReserveMoreThanDouble) {
|
| RepeatedPtrField<string> field;
|
| field.Reserve(20);
|
|
|
| - EXPECT_EQ(20, ReservedSpace(&field));
|
| + EXPECT_LE(20, ReservedSpace(&field));
|
| }
|
|
|
| TEST(RepeatedPtrField, ReserveLessThanDouble) {
|
| RepeatedPtrField<string> field;
|
| field.Reserve(20);
|
| - field.Reserve(30);
|
|
|
| - EXPECT_EQ(40, ReservedSpace(&field));
|
| + int capacity = field.Capacity();
|
| + // Grow by 1.5x
|
| + field.Reserve(capacity + (capacity >> 2));
|
| +
|
| + EXPECT_LE(2 * capacity, ReservedSpace(&field));
|
| }
|
|
|
| TEST(RepeatedPtrField, ReserveLessThanExisting) {
|
| @@ -647,7 +663,7 @@ TEST(RepeatedPtrField, ReserveLessThanExisting) {
|
| field.Reserve(10);
|
|
|
| EXPECT_EQ(previous_ptr, field.data());
|
| - EXPECT_EQ(20, ReservedSpace(&field));
|
| + EXPECT_LE(20, ReservedSpace(&field));
|
| }
|
|
|
| TEST(RepeatedPtrField, ReserveDoesntLoseAllocated) {
|
| @@ -844,7 +860,7 @@ TEST(RepeatedPtrField, CopyConstruct) {
|
| }
|
|
|
| TEST(RepeatedPtrField, IteratorConstruct_String) {
|
| - vector<string> values;
|
| + std::vector<string> values;
|
| values.push_back("1");
|
| values.push_back("2");
|
|
|
| @@ -861,7 +877,7 @@ TEST(RepeatedPtrField, IteratorConstruct_String) {
|
|
|
| TEST(RepeatedPtrField, IteratorConstruct_Proto) {
|
| typedef TestAllTypes::NestedMessage Nested;
|
| - vector<Nested> values;
|
| + std::vector<Nested> values;
|
| values.push_back(Nested());
|
| values.back().set_bb(1);
|
| values.push_back(Nested());
|
| @@ -918,6 +934,16 @@ TEST(RepeatedPtrField, MutableDataIsMutable) {
|
| EXPECT_EQ("2", field.Get(0));
|
| }
|
|
|
| +TEST(RepeatedPtrField, SubscriptOperators) {
|
| + RepeatedPtrField<string> field;
|
| + *field.Add() = "1";
|
| + EXPECT_EQ("1", field.Get(0));
|
| + EXPECT_EQ("1", field[0]);
|
| + EXPECT_EQ(field.Mutable(0), &field[0]);
|
| + const RepeatedPtrField<string>& const_field = field;
|
| + EXPECT_EQ(*field.data(), &const_field[0]);
|
| +}
|
| +
|
| TEST(RepeatedPtrField, ExtractSubrange) {
|
| // Exhaustively test every subrange in arrays of all sizes from 0 through 9
|
| // with 0 through 3 cleared elements at the end.
|
| @@ -925,7 +951,7 @@ TEST(RepeatedPtrField, ExtractSubrange) {
|
| for (int num = 0; num <= sz; ++num) {
|
| for (int start = 0; start < sz - num; ++start) {
|
| for (int extra = 0; extra < 4; ++extra) {
|
| - vector<string*> subject;
|
| + std::vector<string*> subject;
|
|
|
| // Create an array with "sz" elements and "extra" cleared elements.
|
| RepeatedPtrField<string> field;
|
| @@ -1487,7 +1513,7 @@ TEST_F(RepeatedFieldInsertionIteratorsTest, Nesteds) {
|
|
|
| TEST_F(RepeatedFieldInsertionIteratorsTest,
|
| AllocatedRepeatedPtrFieldWithStringIntData) {
|
| - vector<Nested*> data;
|
| + std::vector<Nested*> data;
|
| TestAllTypes goldenproto;
|
| for (int i = 0; i < 10; ++i) {
|
| Nested* new_data = new Nested;
|
| @@ -1506,7 +1532,7 @@ TEST_F(RepeatedFieldInsertionIteratorsTest,
|
|
|
| TEST_F(RepeatedFieldInsertionIteratorsTest,
|
| AllocatedRepeatedPtrFieldWithString) {
|
| - vector<string*> data;
|
| + std::vector<string*> data;
|
| TestAllTypes goldenproto;
|
| for (int i = 0; i < 10; ++i) {
|
| string* new_data = new string;
|
| @@ -1524,7 +1550,7 @@ TEST_F(RepeatedFieldInsertionIteratorsTest,
|
|
|
| TEST_F(RepeatedFieldInsertionIteratorsTest,
|
| UnsafeArenaAllocatedRepeatedPtrFieldWithStringIntData) {
|
| - vector<Nested*> data;
|
| + std::vector<Nested*> data;
|
| TestAllTypes goldenproto;
|
| for (int i = 0; i < 10; ++i) {
|
| Nested* new_data = new Nested;
|
| @@ -1543,7 +1569,7 @@ TEST_F(RepeatedFieldInsertionIteratorsTest,
|
|
|
| TEST_F(RepeatedFieldInsertionIteratorsTest,
|
| UnsafeArenaAllocatedRepeatedPtrFieldWithString) {
|
| - vector<string*> data;
|
| + std::vector<string*> data;
|
| TestAllTypes goldenproto;
|
| for (int i = 0; i < 10; ++i) {
|
| string* new_data = new string;
|
|
|