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; |