• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc.  All rights reserved.
3 //
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file or at
6 // https://developers.google.com/open-source/licenses/bsd
7 
8 #ifndef GOOGLE_PROTOBUF_MAP_TEST_UTIL_IMPL_H__
9 #define GOOGLE_PROTOBUF_MAP_TEST_UTIL_IMPL_H__
10 
11 #include <string>
12 
13 #include <gtest/gtest.h>
14 
15 
16 namespace protobuf_unittest {}  // namespace protobuf_unittest
17 
18 namespace google {
19 namespace protobuf {
20 
21 namespace unittest = ::protobuf_unittest;
22 
23 class MapTestUtilImpl {
24  public:
25   // Set every field in the TestMap message to a unique value.
26   template <typename EnumType, EnumType enum_value0, EnumType enum_value1,
27             typename MapMessage>
28   static void SetMapFields(MapMessage* message);
29 
30   // Set every field in the TestArenaMap message to a unique value.
31   template <typename EnumType, EnumType enum_value0, EnumType enum_value1,
32             typename MapMessage>
33   static void SetArenaMapFields(MapMessage* message);
34 
35   // Set every field in the message to a default value.
36   template <typename MapMessage>
37   static void SetMapFieldsInitialized(MapMessage* message);
38 
39   // Modify all the map fields of the message (which should already have been
40   // initialized with SetMapFields()).
41   template <typename EnumType, EnumType enum_value, typename MapMessage>
42   static void ModifyMapFields(MapMessage* message);
43 
44   // Check that all fields have the values that they should have after
45   // SetMapFields() is called.
46   template <typename EnumType, EnumType enum_value0, EnumType enum_value1,
47             typename MapMessage>
48   static void ExpectMapFieldsSet(const MapMessage& message);
49 
50   // Check that all fields have the values that they should have after
51   // SetMapFields() is called for TestArenaMap.
52   template <typename EnumType, EnumType enum_value0, EnumType enum_value1,
53             typename MapMessage>
54   static void ExpectArenaMapFieldsSet(const MapMessage& message);
55 
56   // Check that all fields have the values that they should have after
57   // SetMapFieldsInitialized() is called.
58   template <typename EnumType, EnumType enum_value, typename MapMessage>
59   static void ExpectMapFieldsSetInitialized(const MapMessage& message);
60 
61   // Expect that the message is modified as would be expected from
62   // ModifyMapFields().
63   template <typename EnumType, EnumType enum_value0, EnumType enum_value1,
64             typename MapMessage>
65   static void ExpectMapFieldsModified(const MapMessage& message);
66 
67   // Check that all fields are empty.
68   template <typename MapMessage>
69   static void ExpectClear(const MapMessage& message);
70 
71   // // Check that all map fields have the given size.
72   // template <typename MapMessage>
73   // static void ExpectMapsSize(const MapMessage& message, int size);
74 
75   // // Get pointers of map entries at given index.
76   // static std::vector<const Message*> GetMapEntries(
77   //     const MapMessage& message, int index);
78 
79   // // Get pointers of map entries from release.
80   // static std::vector<const Message*> GetMapEntriesFromRelease(
81   //     MapMessage* message);
82 
long_string()83   static std::string long_string() {
84     return "This is a very long string that goes in the heap";
85   }
long_string_2()86   static std::string long_string_2() {
87     return "This is another very long string that goes in the heap";
88   }
89 };
90 
91 template <typename EnumType, EnumType enum_value0, EnumType enum_value1,
92           typename MapMessage>
SetMapFields(MapMessage * message)93 void MapTestUtilImpl::SetMapFields(MapMessage* message) {
94   // Add first element.
95   (*message->mutable_map_int32_int32())[0] = 0;
96   (*message->mutable_map_int64_int64())[0] = 0;
97   (*message->mutable_map_uint32_uint32())[0] = 0;
98   (*message->mutable_map_uint64_uint64())[0] = 0;
99   (*message->mutable_map_sint32_sint32())[0] = 0;
100   (*message->mutable_map_sint64_sint64())[0] = 0;
101   (*message->mutable_map_fixed32_fixed32())[0] = 0;
102   (*message->mutable_map_fixed64_fixed64())[0] = 0;
103   (*message->mutable_map_sfixed32_sfixed32())[0] = 0;
104   (*message->mutable_map_sfixed64_sfixed64())[0] = 0;
105   (*message->mutable_map_int32_float())[0] = 0.0;
106   (*message->mutable_map_int32_double())[0] = 0.0;
107   (*message->mutable_map_bool_bool())[0] = false;
108   (*message->mutable_map_string_string())[long_string()] = long_string();
109   (*message->mutable_map_int32_bytes())[0] = long_string();
110   (*message->mutable_map_int32_enum())[0] = enum_value0;
111   (*message->mutable_map_int32_foreign_message())[0].set_c(0);
112 
113   // Add second element
114   (*message->mutable_map_int32_int32())[1] = 1;
115   (*message->mutable_map_int64_int64())[1] = 1;
116   (*message->mutable_map_uint32_uint32())[1] = 1;
117   (*message->mutable_map_uint64_uint64())[1] = 1;
118   (*message->mutable_map_sint32_sint32())[1] = 1;
119   (*message->mutable_map_sint64_sint64())[1] = 1;
120   (*message->mutable_map_fixed32_fixed32())[1] = 1;
121   (*message->mutable_map_fixed64_fixed64())[1] = 1;
122   (*message->mutable_map_sfixed32_sfixed32())[1] = 1;
123   (*message->mutable_map_sfixed64_sfixed64())[1] = 1;
124   (*message->mutable_map_int32_float())[1] = 1.0;
125   (*message->mutable_map_int32_double())[1] = 1.0;
126   (*message->mutable_map_bool_bool())[1] = true;
127   (*message->mutable_map_string_string())[long_string_2()] = long_string_2();
128   (*message->mutable_map_int32_bytes())[1] = long_string_2();
129   (*message->mutable_map_int32_enum())[1] = enum_value1;
130   (*message->mutable_map_int32_foreign_message())[1].set_c(1);
131 }
132 
133 template <typename EnumType, EnumType enum_value0, EnumType enum_value1,
134           typename MapMessage>
SetArenaMapFields(MapMessage * message)135 void MapTestUtilImpl::SetArenaMapFields(MapMessage* message) {
136   // Add first element.
137   (*message->mutable_map_int32_int32())[0] = 0;
138   (*message->mutable_map_int64_int64())[0] = 0;
139   (*message->mutable_map_uint32_uint32())[0] = 0;
140   (*message->mutable_map_uint64_uint64())[0] = 0;
141   (*message->mutable_map_sint32_sint32())[0] = 0;
142   (*message->mutable_map_sint64_sint64())[0] = 0;
143   (*message->mutable_map_fixed32_fixed32())[0] = 0;
144   (*message->mutable_map_fixed64_fixed64())[0] = 0;
145   (*message->mutable_map_sfixed32_sfixed32())[0] = 0;
146   (*message->mutable_map_sfixed64_sfixed64())[0] = 0;
147   (*message->mutable_map_int32_float())[0] = 0.0;
148   (*message->mutable_map_int32_double())[0] = 0.0;
149   (*message->mutable_map_bool_bool())[0] = false;
150   (*message->mutable_map_string_string())[long_string()] = long_string();
151   (*message->mutable_map_int32_bytes())[0] = long_string();
152   (*message->mutable_map_int32_enum())[0] = enum_value0;
153   (*message->mutable_map_int32_foreign_message())[0].set_c(0);
154 
155   // Add second element
156   (*message->mutable_map_int32_int32())[1] = 1;
157   (*message->mutable_map_int64_int64())[1] = 1;
158   (*message->mutable_map_uint32_uint32())[1] = 1;
159   (*message->mutable_map_uint64_uint64())[1] = 1;
160   (*message->mutable_map_sint32_sint32())[1] = 1;
161   (*message->mutable_map_sint64_sint64())[1] = 1;
162   (*message->mutable_map_fixed32_fixed32())[1] = 1;
163   (*message->mutable_map_fixed64_fixed64())[1] = 1;
164   (*message->mutable_map_sfixed32_sfixed32())[1] = 1;
165   (*message->mutable_map_sfixed64_sfixed64())[1] = 1;
166   (*message->mutable_map_int32_float())[1] = 1.0;
167   (*message->mutable_map_int32_double())[1] = 1.0;
168   (*message->mutable_map_bool_bool())[1] = true;
169   (*message->mutable_map_string_string())[long_string_2()] = long_string_2();
170   (*message->mutable_map_int32_bytes())[1] = long_string_2();
171   (*message->mutable_map_int32_enum())[1] = enum_value1;
172   (*message->mutable_map_int32_foreign_message())[1].set_c(1);
173 }
174 
175 template <typename MapMessage>
SetMapFieldsInitialized(MapMessage * message)176 void MapTestUtilImpl::SetMapFieldsInitialized(MapMessage* message) {
177   // Add first element using bracket operator, which should assign default
178   // value automatically.
179   (*message->mutable_map_int32_int32())[0];
180   (*message->mutable_map_int64_int64())[0];
181   (*message->mutable_map_uint32_uint32())[0];
182   (*message->mutable_map_uint64_uint64())[0];
183   (*message->mutable_map_sint32_sint32())[0];
184   (*message->mutable_map_sint64_sint64())[0];
185   (*message->mutable_map_fixed32_fixed32())[0];
186   (*message->mutable_map_fixed64_fixed64())[0];
187   (*message->mutable_map_sfixed32_sfixed32())[0];
188   (*message->mutable_map_sfixed64_sfixed64())[0];
189   (*message->mutable_map_int32_float())[0];
190   (*message->mutable_map_int32_double())[0];
191   (*message->mutable_map_bool_bool())[0];
192   (*message->mutable_map_string_string())[long_string()];
193   (*message->mutable_map_int32_bytes())[0];
194   (*message->mutable_map_int32_enum())[0];
195   (*message->mutable_map_int32_foreign_message())[0];
196 }
197 
198 template <typename EnumType, EnumType enum_value, typename MapMessage>
ModifyMapFields(MapMessage * message)199 void MapTestUtilImpl::ModifyMapFields(MapMessage* message) {
200   (*message->mutable_map_int32_int32())[1] = 2;
201   (*message->mutable_map_int64_int64())[1] = 2;
202   (*message->mutable_map_uint32_uint32())[1] = 2;
203   (*message->mutable_map_uint64_uint64())[1] = 2;
204   (*message->mutable_map_sint32_sint32())[1] = 2;
205   (*message->mutable_map_sint64_sint64())[1] = 2;
206   (*message->mutable_map_fixed32_fixed32())[1] = 2;
207   (*message->mutable_map_fixed64_fixed64())[1] = 2;
208   (*message->mutable_map_sfixed32_sfixed32())[1] = 2;
209   (*message->mutable_map_sfixed64_sfixed64())[1] = 2;
210   (*message->mutable_map_int32_float())[1] = 2.0;
211   (*message->mutable_map_int32_double())[1] = 2.0;
212   (*message->mutable_map_bool_bool())[1] = false;
213   (*message->mutable_map_string_string())[long_string_2()] = "2";
214   (*message->mutable_map_int32_bytes())[1] = "2";
215   (*message->mutable_map_int32_enum())[1] = enum_value;
216   (*message->mutable_map_int32_foreign_message())[1].set_c(2);
217 }
218 
219 template <typename MapMessage>
ExpectClear(const MapMessage & message)220 void MapTestUtilImpl::ExpectClear(const MapMessage& message) {
221   EXPECT_EQ(0, message.map_int32_int32().size());
222   EXPECT_EQ(0, message.map_int64_int64().size());
223   EXPECT_EQ(0, message.map_uint32_uint32().size());
224   EXPECT_EQ(0, message.map_uint64_uint64().size());
225   EXPECT_EQ(0, message.map_sint32_sint32().size());
226   EXPECT_EQ(0, message.map_sint64_sint64().size());
227   EXPECT_EQ(0, message.map_fixed32_fixed32().size());
228   EXPECT_EQ(0, message.map_fixed64_fixed64().size());
229   EXPECT_EQ(0, message.map_sfixed32_sfixed32().size());
230   EXPECT_EQ(0, message.map_sfixed64_sfixed64().size());
231   EXPECT_EQ(0, message.map_int32_float().size());
232   EXPECT_EQ(0, message.map_int32_double().size());
233   EXPECT_EQ(0, message.map_bool_bool().size());
234   EXPECT_EQ(0, message.map_string_string().size());
235   EXPECT_EQ(0, message.map_int32_bytes().size());
236   EXPECT_EQ(0, message.map_int32_enum().size());
237   EXPECT_EQ(0, message.map_int32_foreign_message().size());
238 }
239 
240 template <typename EnumType, EnumType enum_value0, EnumType enum_value1,
241           typename MapMessage>
ExpectMapFieldsSet(const MapMessage & message)242 void MapTestUtilImpl::ExpectMapFieldsSet(const MapMessage& message) {
243   ASSERT_EQ(2, message.map_int32_int32().size());
244   ASSERT_EQ(2, message.map_int64_int64().size());
245   ASSERT_EQ(2, message.map_uint32_uint32().size());
246   ASSERT_EQ(2, message.map_uint64_uint64().size());
247   ASSERT_EQ(2, message.map_sint32_sint32().size());
248   ASSERT_EQ(2, message.map_sint64_sint64().size());
249   ASSERT_EQ(2, message.map_fixed32_fixed32().size());
250   ASSERT_EQ(2, message.map_fixed64_fixed64().size());
251   ASSERT_EQ(2, message.map_sfixed32_sfixed32().size());
252   ASSERT_EQ(2, message.map_sfixed64_sfixed64().size());
253   ASSERT_EQ(2, message.map_int32_float().size());
254   ASSERT_EQ(2, message.map_int32_double().size());
255   ASSERT_EQ(2, message.map_bool_bool().size());
256   ASSERT_EQ(2, message.map_string_string().size());
257   ASSERT_EQ(2, message.map_int32_bytes().size());
258   ASSERT_EQ(2, message.map_int32_enum().size());
259   ASSERT_EQ(2, message.map_int32_foreign_message().size());
260 
261   EXPECT_EQ(0, message.map_int32_int32().at(0));
262   EXPECT_EQ(0, message.map_int64_int64().at(0));
263   EXPECT_EQ(0, message.map_uint32_uint32().at(0));
264   EXPECT_EQ(0, message.map_uint64_uint64().at(0));
265   EXPECT_EQ(0, message.map_sint32_sint32().at(0));
266   EXPECT_EQ(0, message.map_sint64_sint64().at(0));
267   EXPECT_EQ(0, message.map_fixed32_fixed32().at(0));
268   EXPECT_EQ(0, message.map_fixed64_fixed64().at(0));
269   EXPECT_EQ(0, message.map_sfixed32_sfixed32().at(0));
270   EXPECT_EQ(0, message.map_sfixed64_sfixed64().at(0));
271   EXPECT_EQ(0, message.map_int32_float().at(0));
272   EXPECT_EQ(0, message.map_int32_double().at(0));
273   EXPECT_EQ(false, message.map_bool_bool().at(0));
274   EXPECT_EQ(long_string(), message.map_string_string().at(long_string()));
275   EXPECT_EQ(long_string(), message.map_int32_bytes().at(0));
276   EXPECT_EQ(enum_value0, message.map_int32_enum().at(0));
277   EXPECT_EQ(0, message.map_int32_foreign_message().at(0).c());
278 
279   EXPECT_EQ(1, message.map_int32_int32().at(1));
280   EXPECT_EQ(1, message.map_int64_int64().at(1));
281   EXPECT_EQ(1, message.map_uint32_uint32().at(1));
282   EXPECT_EQ(1, message.map_uint64_uint64().at(1));
283   EXPECT_EQ(1, message.map_sint32_sint32().at(1));
284   EXPECT_EQ(1, message.map_sint64_sint64().at(1));
285   EXPECT_EQ(1, message.map_fixed32_fixed32().at(1));
286   EXPECT_EQ(1, message.map_fixed64_fixed64().at(1));
287   EXPECT_EQ(1, message.map_sfixed32_sfixed32().at(1));
288   EXPECT_EQ(1, message.map_sfixed64_sfixed64().at(1));
289   EXPECT_EQ(1, message.map_int32_float().at(1));
290   EXPECT_EQ(1, message.map_int32_double().at(1));
291   EXPECT_EQ(true, message.map_bool_bool().at(1));
292   EXPECT_EQ(long_string_2(), message.map_string_string().at(long_string_2()));
293   EXPECT_EQ(long_string_2(), message.map_int32_bytes().at(1));
294   EXPECT_EQ(enum_value1, message.map_int32_enum().at(1));
295   EXPECT_EQ(1, message.map_int32_foreign_message().at(1).c());
296 }
297 
298 template <typename EnumType, EnumType enum_value0, EnumType enum_value1,
299           typename MapMessage>
ExpectArenaMapFieldsSet(const MapMessage & message)300 void MapTestUtilImpl::ExpectArenaMapFieldsSet(const MapMessage& message) {
301   EXPECT_EQ(2, message.map_int32_int32().size());
302   EXPECT_EQ(2, message.map_int64_int64().size());
303   EXPECT_EQ(2, message.map_uint32_uint32().size());
304   EXPECT_EQ(2, message.map_uint64_uint64().size());
305   EXPECT_EQ(2, message.map_sint32_sint32().size());
306   EXPECT_EQ(2, message.map_sint64_sint64().size());
307   EXPECT_EQ(2, message.map_fixed32_fixed32().size());
308   EXPECT_EQ(2, message.map_fixed64_fixed64().size());
309   EXPECT_EQ(2, message.map_sfixed32_sfixed32().size());
310   EXPECT_EQ(2, message.map_sfixed64_sfixed64().size());
311   EXPECT_EQ(2, message.map_int32_float().size());
312   EXPECT_EQ(2, message.map_int32_double().size());
313   EXPECT_EQ(2, message.map_bool_bool().size());
314   EXPECT_EQ(2, message.map_string_string().size());
315   EXPECT_EQ(2, message.map_int32_bytes().size());
316   EXPECT_EQ(2, message.map_int32_enum().size());
317   EXPECT_EQ(2, message.map_int32_foreign_message().size());
318 
319   EXPECT_EQ(0, message.map_int32_int32().at(0));
320   EXPECT_EQ(0, message.map_int64_int64().at(0));
321   EXPECT_EQ(0, message.map_uint32_uint32().at(0));
322   EXPECT_EQ(0, message.map_uint64_uint64().at(0));
323   EXPECT_EQ(0, message.map_sint32_sint32().at(0));
324   EXPECT_EQ(0, message.map_sint64_sint64().at(0));
325   EXPECT_EQ(0, message.map_fixed32_fixed32().at(0));
326   EXPECT_EQ(0, message.map_fixed64_fixed64().at(0));
327   EXPECT_EQ(0, message.map_sfixed32_sfixed32().at(0));
328   EXPECT_EQ(0, message.map_sfixed64_sfixed64().at(0));
329   EXPECT_EQ(0, message.map_int32_float().at(0));
330   EXPECT_EQ(0, message.map_int32_double().at(0));
331   EXPECT_EQ(false, message.map_bool_bool().at(0));
332   EXPECT_EQ(long_string(), message.map_string_string().at(long_string()));
333   EXPECT_EQ(long_string(), message.map_int32_bytes().at(0));
334   EXPECT_EQ(enum_value0, message.map_int32_enum().at(0));
335   EXPECT_EQ(0, message.map_int32_foreign_message().at(0).c());
336 
337   EXPECT_EQ(1, message.map_int32_int32().at(1));
338   EXPECT_EQ(1, message.map_int64_int64().at(1));
339   EXPECT_EQ(1, message.map_uint32_uint32().at(1));
340   EXPECT_EQ(1, message.map_uint64_uint64().at(1));
341   EXPECT_EQ(1, message.map_sint32_sint32().at(1));
342   EXPECT_EQ(1, message.map_sint64_sint64().at(1));
343   EXPECT_EQ(1, message.map_fixed32_fixed32().at(1));
344   EXPECT_EQ(1, message.map_fixed64_fixed64().at(1));
345   EXPECT_EQ(1, message.map_sfixed32_sfixed32().at(1));
346   EXPECT_EQ(1, message.map_sfixed64_sfixed64().at(1));
347   EXPECT_EQ(1, message.map_int32_float().at(1));
348   EXPECT_EQ(1, message.map_int32_double().at(1));
349   EXPECT_EQ(true, message.map_bool_bool().at(1));
350   EXPECT_EQ(long_string_2(), message.map_string_string().at(long_string_2()));
351   EXPECT_EQ(long_string_2(), message.map_int32_bytes().at(1));
352   EXPECT_EQ(enum_value1, message.map_int32_enum().at(1));
353   EXPECT_EQ(1, message.map_int32_foreign_message().at(1).c());
354 }
355 
356 template <typename EnumType, EnumType enum_value, typename MapMessage>
ExpectMapFieldsSetInitialized(const MapMessage & message)357 void MapTestUtilImpl::ExpectMapFieldsSetInitialized(const MapMessage& message) {
358   EXPECT_EQ(1, message.map_int32_int32().size());
359   EXPECT_EQ(1, message.map_int64_int64().size());
360   EXPECT_EQ(1, message.map_uint32_uint32().size());
361   EXPECT_EQ(1, message.map_uint64_uint64().size());
362   EXPECT_EQ(1, message.map_sint32_sint32().size());
363   EXPECT_EQ(1, message.map_sint64_sint64().size());
364   EXPECT_EQ(1, message.map_fixed32_fixed32().size());
365   EXPECT_EQ(1, message.map_fixed64_fixed64().size());
366   EXPECT_EQ(1, message.map_sfixed32_sfixed32().size());
367   EXPECT_EQ(1, message.map_sfixed64_sfixed64().size());
368   EXPECT_EQ(1, message.map_int32_float().size());
369   EXPECT_EQ(1, message.map_int32_double().size());
370   EXPECT_EQ(1, message.map_bool_bool().size());
371   EXPECT_EQ(1, message.map_string_string().size());
372   EXPECT_EQ(1, message.map_int32_bytes().size());
373   EXPECT_EQ(1, message.map_int32_enum().size());
374   EXPECT_EQ(1, message.map_int32_foreign_message().size());
375 
376   EXPECT_EQ(0, message.map_int32_int32().at(0));
377   EXPECT_EQ(0, message.map_int64_int64().at(0));
378   EXPECT_EQ(0, message.map_uint32_uint32().at(0));
379   EXPECT_EQ(0, message.map_uint64_uint64().at(0));
380   EXPECT_EQ(0, message.map_sint32_sint32().at(0));
381   EXPECT_EQ(0, message.map_sint64_sint64().at(0));
382   EXPECT_EQ(0, message.map_fixed32_fixed32().at(0));
383   EXPECT_EQ(0, message.map_fixed64_fixed64().at(0));
384   EXPECT_EQ(0, message.map_sfixed32_sfixed32().at(0));
385   EXPECT_EQ(0, message.map_sfixed64_sfixed64().at(0));
386   EXPECT_EQ(0, message.map_int32_float().at(0));
387   EXPECT_EQ(0, message.map_int32_double().at(0));
388   EXPECT_EQ(false, message.map_bool_bool().at(0));
389   EXPECT_EQ("", message.map_string_string().at(long_string()));
390   EXPECT_EQ("", message.map_int32_bytes().at(0));
391   EXPECT_EQ(enum_value, message.map_int32_enum().at(0));
392   EXPECT_EQ(0, message.map_int32_foreign_message().at(0).ByteSizeLong());
393 }
394 
395 template <typename EnumType, EnumType enum_value0, EnumType enum_value1,
396           typename MapMessage>
ExpectMapFieldsModified(const MapMessage & message)397 void MapTestUtilImpl::ExpectMapFieldsModified(const MapMessage& message) {
398   // ModifyMapFields only sets the second element of each field.  In addition to
399   // verifying this, we also verify that the first element and size were *not*
400   // modified.
401   EXPECT_EQ(2, message.map_int32_int32().size());
402   EXPECT_EQ(2, message.map_int64_int64().size());
403   EXPECT_EQ(2, message.map_uint32_uint32().size());
404   EXPECT_EQ(2, message.map_uint64_uint64().size());
405   EXPECT_EQ(2, message.map_sint32_sint32().size());
406   EXPECT_EQ(2, message.map_sint64_sint64().size());
407   EXPECT_EQ(2, message.map_fixed32_fixed32().size());
408   EXPECT_EQ(2, message.map_fixed64_fixed64().size());
409   EXPECT_EQ(2, message.map_sfixed32_sfixed32().size());
410   EXPECT_EQ(2, message.map_sfixed64_sfixed64().size());
411   EXPECT_EQ(2, message.map_int32_float().size());
412   EXPECT_EQ(2, message.map_int32_double().size());
413   EXPECT_EQ(2, message.map_bool_bool().size());
414   EXPECT_EQ(2, message.map_string_string().size());
415   EXPECT_EQ(2, message.map_int32_bytes().size());
416   EXPECT_EQ(2, message.map_int32_enum().size());
417   EXPECT_EQ(2, message.map_int32_foreign_message().size());
418 
419   EXPECT_EQ(0, message.map_int32_int32().at(0));
420   EXPECT_EQ(0, message.map_int64_int64().at(0));
421   EXPECT_EQ(0, message.map_uint32_uint32().at(0));
422   EXPECT_EQ(0, message.map_uint64_uint64().at(0));
423   EXPECT_EQ(0, message.map_sint32_sint32().at(0));
424   EXPECT_EQ(0, message.map_sint64_sint64().at(0));
425   EXPECT_EQ(0, message.map_fixed32_fixed32().at(0));
426   EXPECT_EQ(0, message.map_fixed64_fixed64().at(0));
427   EXPECT_EQ(0, message.map_sfixed32_sfixed32().at(0));
428   EXPECT_EQ(0, message.map_sfixed64_sfixed64().at(0));
429   EXPECT_EQ(0, message.map_int32_float().at(0));
430   EXPECT_EQ(0, message.map_int32_double().at(0));
431   EXPECT_EQ(false, message.map_bool_bool().at(0));
432   EXPECT_EQ(long_string(), message.map_string_string().at(long_string()));
433   EXPECT_EQ(long_string(), message.map_int32_bytes().at(0));
434   EXPECT_EQ(enum_value0, message.map_int32_enum().at(0));
435   EXPECT_EQ(0, message.map_int32_foreign_message().at(0).c());
436 
437   // Actually verify the second (modified) elements now.
438   EXPECT_EQ(2, message.map_int32_int32().at(1));
439   EXPECT_EQ(2, message.map_int64_int64().at(1));
440   EXPECT_EQ(2, message.map_uint32_uint32().at(1));
441   EXPECT_EQ(2, message.map_uint64_uint64().at(1));
442   EXPECT_EQ(2, message.map_sint32_sint32().at(1));
443   EXPECT_EQ(2, message.map_sint64_sint64().at(1));
444   EXPECT_EQ(2, message.map_fixed32_fixed32().at(1));
445   EXPECT_EQ(2, message.map_fixed64_fixed64().at(1));
446   EXPECT_EQ(2, message.map_sfixed32_sfixed32().at(1));
447   EXPECT_EQ(2, message.map_sfixed64_sfixed64().at(1));
448   EXPECT_EQ(2, message.map_int32_float().at(1));
449   EXPECT_EQ(2, message.map_int32_double().at(1));
450   EXPECT_EQ(false, message.map_bool_bool().at(1));
451   EXPECT_EQ("2", message.map_string_string().at(long_string_2()));
452   EXPECT_EQ("2", message.map_int32_bytes().at(1));
453   EXPECT_EQ(enum_value1, message.map_int32_enum().at(1));
454   EXPECT_EQ(2, message.map_int32_foreign_message().at(1).c());
455 }
456 
457 }  // namespace protobuf
458 }  // namespace google
459 
460 #endif  // GOOGLE_PROTOBUF_MAP_TEST_UTIL_IMPL_H__
461