1b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Protocol Buffers - Google's data interchange format
2b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Copyright 2008 Google Inc.  All rights reserved.
3b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// https://developers.google.com/protocol-buffers/
4b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//
5b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Redistribution and use in source and binary forms, with or without
6b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// modification, are permitted provided that the following conditions are
7b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// met:
8b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//
9b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//     * Redistributions of source code must retain the above copyright
10b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// notice, this list of conditions and the following disclaimer.
11b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//     * Redistributions in binary form must reproduce the above
12b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// copyright notice, this list of conditions and the following disclaimer
13b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// in the documentation and/or other materials provided with the
14b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// distribution.
15b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//     * Neither the name of Google Inc. nor the names of its
16b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// contributors may be used to endorse or promote products derived from
17b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// this software without specific prior written permission.
18b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//
19b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
31b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#ifndef GOOGLE_PROTOBUF_MAP_TEST_UTIL_IMPL_H__
32b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#define GOOGLE_PROTOBUF_MAP_TEST_UTIL_IMPL_H__
33b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
34b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <google/protobuf/stubs/logging.h>
35b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <google/protobuf/stubs/common.h>
36b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
37b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
38b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#define EXPECT_TRUE GOOGLE_CHECK
39b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#define ASSERT_TRUE GOOGLE_CHECK
40b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#define EXPECT_FALSE(COND) GOOGLE_CHECK(!(COND))
41b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#define EXPECT_EQ GOOGLE_CHECK_EQ
42b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#define ASSERT_EQ GOOGLE_CHECK_EQ
43b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
44b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammernamespace google {
45b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammernamespace protobuf_unittest {}  // forward declaration
46b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
47b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammernamespace protobuf {
48b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
49b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammernamespace unittest = ::protobuf_unittest;
50b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
51b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerclass MapTestUtilImpl {
52b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer public:
53b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Set every field in the TestMap message to a unique value.
54b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  template <typename EnumType, EnumType enum_value0,
55b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer            EnumType enum_value1, typename MapMessage>
56b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  static void SetMapFields(MapMessage* message);
57b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
58b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Set every field in the TestArenaMap message to a unique value.
59b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  template <typename EnumType, EnumType enum_value0,
60b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer            EnumType enum_value1, typename MapMessage>
61b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  static void SetArenaMapFields(MapMessage* message);
62b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
63b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Set every field in the message to a default value.
64b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  template <typename MapMessage>
65b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  static void SetMapFieldsInitialized(MapMessage* message);
66b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
67b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Modify all the map fields of the message (which should already have been
68b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // initialized with SetMapFields()).
69b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  template <typename EnumType, EnumType enum_value, typename MapMessage>
70b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  static void ModifyMapFields(MapMessage* message);
71b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
72b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Check that all fields have the values that they should have after
73b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // SetMapFields() is called.
74b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  template <typename EnumType, EnumType enum_value0,
75b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer            EnumType enum_value1, typename MapMessage>
76b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  static void ExpectMapFieldsSet(const MapMessage& message);
77b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
78b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Check that all fields have the values that they should have after
79b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // SetMapFields() is called for TestArenaMap.
80b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  template <typename EnumType, EnumType enum_value0,
81b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer            EnumType enum_value1, typename MapMessage>
82b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  static void ExpectArenaMapFieldsSet(const MapMessage& message);
83b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
84b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Check that all fields have the values that they should have after
85b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // SetMapFieldsInitialized() is called.
86b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  template <typename EnumType, EnumType enum_value, typename MapMessage>
87b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  static void ExpectMapFieldsSetInitialized(const MapMessage& message);
88b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
89b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Expect that the message is modified as would be expected from
90b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // ModifyMapFields().
91b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  template <typename EnumType, EnumType enum_value0,
92b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer            EnumType enum_value1, typename MapMessage>
93b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  static void ExpectMapFieldsModified(const MapMessage& message);
94b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
95b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Check that all fields are empty.
96b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  template <typename MapMessage>
97b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  static void ExpectClear(const MapMessage& message);
98b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
99b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // // Check that all map fields have the given size.
100b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // template <typename MapMessage>
101b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // static void ExpectMapsSize(const MapMessage& message, int size);
102b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
103b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // // Get pointers of map entries at given index.
104b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // static std::vector<const Message*> GetMapEntries(
105b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  //     const MapMessage& message, int index);
106b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
107b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // // Get pointers of map entries from release.
108b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // static std::vector<const Message*> GetMapEntriesFromRelease(
109b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  //     MapMessage* message);
110b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer};
111b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
112b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammertemplate <typename EnumType, EnumType enum_value0,
113b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer          EnumType enum_value1, typename MapMessage>
114b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid MapTestUtilImpl::SetMapFields(MapMessage* message) {
115b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Add first element.
116b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_int32())[0] = 0;
117b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int64_int64())[0] = 0;
118b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_uint32_uint32())[0] = 0;
119b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_uint64_uint64())[0] = 0;
120b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sint32_sint32())[0] = 0;
121b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sint64_sint64())[0] = 0;
122b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_fixed32_fixed32())[0] = 0;
123b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_fixed64_fixed64())[0] = 0;
124b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sfixed32_sfixed32())[0] = 0;
125b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sfixed64_sfixed64())[0] = 0;
126b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_float())[0] = 0.0;
127b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_double())[0] = 0.0;
128b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_bool_bool())[0] = false;
129b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_string_string())["0"] = "0";
130b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_bytes())[0] = "0";
131b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_enum())[0] = enum_value0;
132b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_foreign_message())[0].set_c(0);
133b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
134b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Add second element
135b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_int32())[1] = 1;
136b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int64_int64())[1] = 1;
137b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_uint32_uint32())[1] = 1;
138b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_uint64_uint64())[1] = 1;
139b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sint32_sint32())[1] = 1;
140b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sint64_sint64())[1] = 1;
141b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_fixed32_fixed32())[1] = 1;
142b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_fixed64_fixed64())[1] = 1;
143b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sfixed32_sfixed32())[1] = 1;
144b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sfixed64_sfixed64())[1] = 1;
145b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_float())[1] = 1.0;
146b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_double())[1] = 1.0;
147b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_bool_bool())[1] = true;
148b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_string_string())["1"] = "1";
149b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_bytes())[1] = "1";
150b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_enum())[1] = enum_value1;
151b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_foreign_message())[1].set_c(1);
152b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
153b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
154b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammertemplate <typename EnumType, EnumType enum_value0,
155b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer          EnumType enum_value1, typename MapMessage>
156b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid MapTestUtilImpl::SetArenaMapFields(MapMessage* message) {
157b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Add first element.
158b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_int32())[0] = 0;
159b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int64_int64())[0] = 0;
160b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_uint32_uint32())[0] = 0;
161b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_uint64_uint64())[0] = 0;
162b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sint32_sint32())[0] = 0;
163b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sint64_sint64())[0] = 0;
164b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_fixed32_fixed32())[0] = 0;
165b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_fixed64_fixed64())[0] = 0;
166b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sfixed32_sfixed32())[0] = 0;
167b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sfixed64_sfixed64())[0] = 0;
168b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_float())[0] = 0.0;
169b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_double())[0] = 0.0;
170b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_bool_bool())[0] = false;
171b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_string_string())["0"] = "0";
172b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_bytes())[0] = "0";
173b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_enum())[0] = enum_value0;
174b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_foreign_message())[0].set_c(0);
175b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_foreign_message_no_arena())[0].set_c(0);
176b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
177b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Add second element
178b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_int32())[1] = 1;
179b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int64_int64())[1] = 1;
180b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_uint32_uint32())[1] = 1;
181b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_uint64_uint64())[1] = 1;
182b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sint32_sint32())[1] = 1;
183b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sint64_sint64())[1] = 1;
184b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_fixed32_fixed32())[1] = 1;
185b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_fixed64_fixed64())[1] = 1;
186b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sfixed32_sfixed32())[1] = 1;
187b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sfixed64_sfixed64())[1] = 1;
188b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_float())[1] = 1.0;
189b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_double())[1] = 1.0;
190b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_bool_bool())[1] = true;
191b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_string_string())["1"] = "1";
192b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_bytes())[1] = "1";
193b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_enum())[1] = enum_value1;
194b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_foreign_message())[1].set_c(1);
195b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_foreign_message_no_arena())[1].set_c(1);
196b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
197b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
198b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammertemplate <typename MapMessage>
199b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid MapTestUtilImpl::SetMapFieldsInitialized(MapMessage* message) {
200b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Add first element using bracket operator, which should assign default
201b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // value automatically.
202b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_int32())[0];
203b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int64_int64())[0];
204b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_uint32_uint32())[0];
205b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_uint64_uint64())[0];
206b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sint32_sint32())[0];
207b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sint64_sint64())[0];
208b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_fixed32_fixed32())[0];
209b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_fixed64_fixed64())[0];
210b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sfixed32_sfixed32())[0];
211b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sfixed64_sfixed64())[0];
212b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_float())[0];
213b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_double())[0];
214b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_bool_bool())[0];
215b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_string_string())["0"];
216b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_bytes())[0];
217b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_enum())[0];
218b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_foreign_message())[0];
219b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
220b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
221b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammertemplate <typename EnumType, EnumType enum_value, typename MapMessage>
222b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid MapTestUtilImpl::ModifyMapFields(MapMessage* message) {
223b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_int32())[1] = 2;
224b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int64_int64())[1] = 2;
225b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_uint32_uint32())[1] = 2;
226b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_uint64_uint64())[1] = 2;
227b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sint32_sint32())[1] = 2;
228b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sint64_sint64())[1] = 2;
229b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_fixed32_fixed32())[1] = 2;
230b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_fixed64_fixed64())[1] = 2;
231b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sfixed32_sfixed32())[1] = 2;
232b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_sfixed64_sfixed64())[1] = 2;
233b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_float())[1] = 2.0;
234b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_double())[1] = 2.0;
235b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_bool_bool())[1] = false;
236b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_string_string())["1"] = "2";
237b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_bytes())[1] = "2";
238b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_enum())[1] = enum_value;
239b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  (*message->mutable_map_int32_foreign_message())[1].set_c(2);
240b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
241b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
242b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammertemplate <typename MapMessage>
243b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid MapTestUtilImpl::ExpectClear(const MapMessage& message) {
244b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_int32().size());
245b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int64_int64().size());
246b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_uint32_uint32().size());
247b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_uint64_uint64().size());
248b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sint32_sint32().size());
249b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sint64_sint64().size());
250b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_fixed32_fixed32().size());
251b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_fixed64_fixed64().size());
252b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sfixed32_sfixed32().size());
253b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sfixed64_sfixed64().size());
254b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_float().size());
255b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_double().size());
256b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_bool_bool().size());
257b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_string_string().size());
258b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_bytes().size());
259b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_enum().size());
260b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_foreign_message().size());
261b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
262b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
263b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
264b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
265b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammertemplate <typename EnumType, EnumType enum_value0,
266b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer          EnumType enum_value1, typename MapMessage>
267b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid MapTestUtilImpl::ExpectMapFieldsSet(const MapMessage& message) {
268b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_int32().size());
269b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int64_int64().size());
270b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_uint32_uint32().size());
271b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_uint64_uint64().size());
272b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_sint32_sint32().size());
273b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_sint64_sint64().size());
274b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_fixed32_fixed32().size());
275b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_fixed64_fixed64().size());
276b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_sfixed32_sfixed32().size());
277b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_sfixed64_sfixed64().size());
278b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_float().size());
279b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_double().size());
280b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_bool_bool().size());
281b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_string_string().size());
282b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_bytes().size());
283b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_enum().size());
284b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_foreign_message().size());
285b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
286b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_int32().at(0));
287b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int64_int64().at(0));
288b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_uint32_uint32().at(0));
289b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_uint64_uint64().at(0));
290b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sint32_sint32().at(0));
291b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sint64_sint64().at(0));
292b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_fixed32_fixed32().at(0));
293b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_fixed64_fixed64().at(0));
294b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sfixed32_sfixed32().at(0));
295b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sfixed64_sfixed64().at(0));
296b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_float().at(0));
297b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_double().at(0));
298b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(false, message.map_bool_bool().at(0));
299b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ("0", message.map_string_string().at("0"));
300b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ("0", message.map_int32_bytes().at(0));
301b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(enum_value0, message.map_int32_enum().at(0));
302b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_foreign_message().at(0).c());
303b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
304b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int32_int32().at(1));
305b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int64_int64().at(1));
306b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_uint32_uint32().at(1));
307b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_uint64_uint64().at(1));
308b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_sint32_sint32().at(1));
309b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_sint64_sint64().at(1));
310b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_fixed32_fixed32().at(1));
311b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_fixed64_fixed64().at(1));
312b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_sfixed32_sfixed32().at(1));
313b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_sfixed64_sfixed64().at(1));
314b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int32_float().at(1));
315b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int32_double().at(1));
316b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(true, message.map_bool_bool().at(1));
317b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ("1", message.map_string_string().at("1"));
318b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ("1", message.map_int32_bytes().at(1));
319b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(enum_value1, message.map_int32_enum().at(1));
320b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int32_foreign_message().at(1).c());
321b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
322b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
323b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammertemplate <typename EnumType, EnumType enum_value0,
324b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer          EnumType enum_value1, typename MapMessage>
325b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid MapTestUtilImpl::ExpectArenaMapFieldsSet(const MapMessage& message) {
326b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_int32().size());
327b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int64_int64().size());
328b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_uint32_uint32().size());
329b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_uint64_uint64().size());
330b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_sint32_sint32().size());
331b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_sint64_sint64().size());
332b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_fixed32_fixed32().size());
333b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_fixed64_fixed64().size());
334b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_sfixed32_sfixed32().size());
335b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_sfixed64_sfixed64().size());
336b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_float().size());
337b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_double().size());
338b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_bool_bool().size());
339b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_string_string().size());
340b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_bytes().size());
341b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_enum().size());
342b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_foreign_message().size());
343b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_foreign_message_no_arena().size());
344b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
345b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_int32().at(0));
346b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int64_int64().at(0));
347b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_uint32_uint32().at(0));
348b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_uint64_uint64().at(0));
349b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sint32_sint32().at(0));
350b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sint64_sint64().at(0));
351b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_fixed32_fixed32().at(0));
352b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_fixed64_fixed64().at(0));
353b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sfixed32_sfixed32().at(0));
354b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sfixed64_sfixed64().at(0));
355b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_float().at(0));
356b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_double().at(0));
357b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(false, message.map_bool_bool().at(0));
358b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ("0", message.map_string_string().at("0"));
359b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ("0", message.map_int32_bytes().at(0));
360b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(enum_value0, message.map_int32_enum().at(0));
361b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_foreign_message().at(0).c());
362b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_foreign_message_no_arena().at(0).c());
363b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
364b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int32_int32().at(1));
365b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int64_int64().at(1));
366b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_uint32_uint32().at(1));
367b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_uint64_uint64().at(1));
368b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_sint32_sint32().at(1));
369b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_sint64_sint64().at(1));
370b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_fixed32_fixed32().at(1));
371b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_fixed64_fixed64().at(1));
372b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_sfixed32_sfixed32().at(1));
373b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_sfixed64_sfixed64().at(1));
374b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int32_float().at(1));
375b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int32_double().at(1));
376b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(true, message.map_bool_bool().at(1));
377b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ("1", message.map_string_string().at("1"));
378b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ("1", message.map_int32_bytes().at(1));
379b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(enum_value1, message.map_int32_enum().at(1));
380b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int32_foreign_message().at(1).c());
381b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int32_foreign_message_no_arena().at(1).c());
382b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
383b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
384b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammertemplate <typename EnumType, EnumType enum_value, typename MapMessage>
385b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid MapTestUtilImpl::ExpectMapFieldsSetInitialized(
386b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    const MapMessage& message) {
387b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int32_int32().size());
388b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int64_int64().size());
389b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_uint32_uint32().size());
390b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_uint64_uint64().size());
391b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_sint32_sint32().size());
392b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_sint64_sint64().size());
393b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_fixed32_fixed32().size());
394b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_fixed64_fixed64().size());
395b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_sfixed32_sfixed32().size());
396b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_sfixed64_sfixed64().size());
397b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int32_float().size());
398b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int32_double().size());
399b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_bool_bool().size());
400b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_string_string().size());
401b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int32_bytes().size());
402b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int32_enum().size());
403b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(1, message.map_int32_foreign_message().size());
404b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
405b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_int32().at(0));
406b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int64_int64().at(0));
407b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_uint32_uint32().at(0));
408b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_uint64_uint64().at(0));
409b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sint32_sint32().at(0));
410b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sint64_sint64().at(0));
411b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_fixed32_fixed32().at(0));
412b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_fixed64_fixed64().at(0));
413b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sfixed32_sfixed32().at(0));
414b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sfixed64_sfixed64().at(0));
415b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_float().at(0));
416b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_double().at(0));
417b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(false, message.map_bool_bool().at(0));
418b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ("", message.map_string_string().at("0"));
419b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ("", message.map_int32_bytes().at(0));
420b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(enum_value, message.map_int32_enum().at(0));
421b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_foreign_message().at(0).ByteSize());
422b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
423b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
424b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammertemplate <typename EnumType, EnumType enum_value0,
425b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer            EnumType enum_value1, typename MapMessage>
426b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid MapTestUtilImpl::ExpectMapFieldsModified(
427b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    const MapMessage& message) {
428b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // ModifyMapFields only sets the second element of each field.  In addition to
429b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // verifying this, we also verify that the first element and size were *not*
430b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // modified.
431b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_int32().size());
432b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int64_int64().size());
433b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_uint32_uint32().size());
434b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_uint64_uint64().size());
435b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_sint32_sint32().size());
436b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_sint64_sint64().size());
437b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_fixed32_fixed32().size());
438b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_fixed64_fixed64().size());
439b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_sfixed32_sfixed32().size());
440b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_sfixed64_sfixed64().size());
441b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_float().size());
442b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_double().size());
443b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_bool_bool().size());
444b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_string_string().size());
445b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_bytes().size());
446b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_enum().size());
447b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_foreign_message().size());
448b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
449b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_int32().at(0));
450b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int64_int64().at(0));
451b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_uint32_uint32().at(0));
452b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_uint64_uint64().at(0));
453b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sint32_sint32().at(0));
454b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sint64_sint64().at(0));
455b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_fixed32_fixed32().at(0));
456b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_fixed64_fixed64().at(0));
457b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sfixed32_sfixed32().at(0));
458b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_sfixed64_sfixed64().at(0));
459b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_float().at(0));
460b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_double().at(0));
461b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(false, message.map_bool_bool().at(0));
462b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ("0", message.map_string_string().at("0"));
463b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ("0", message.map_int32_bytes().at(0));
464b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(enum_value0, message.map_int32_enum().at(0));
465b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(0, message.map_int32_foreign_message().at(0).c());
466b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
467b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Actually verify the second (modified) elements now.
468b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_int32().at(1));
469b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int64_int64().at(1));
470b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_uint32_uint32().at(1));
471b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_uint64_uint64().at(1));
472b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_sint32_sint32().at(1));
473b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_sint64_sint64().at(1));
474b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_fixed32_fixed32().at(1));
475b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_fixed64_fixed64().at(1));
476b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_sfixed32_sfixed32().at(1));
477b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_sfixed64_sfixed64().at(1));
478b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_float().at(1));
479b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_double().at(1));
480b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(false, message.map_bool_bool().at(1));
481b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ("2", message.map_string_string().at("1"));
482b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ("2", message.map_int32_bytes().at(1));
483b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(enum_value1, message.map_int32_enum().at(1));
484b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  EXPECT_EQ(2, message.map_int32_foreign_message().at(1).c());
485b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
486b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
487b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}  // namespace protobuf
488b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
489b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}  // namespace google
490b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#endif  // GOOGLE_PROTOBUF_MAP_TEST_UTIL_IMPL_H__
491