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