26 #include "../../codec.h"
27 #include "../../native_protobuf/dccl_native_protobuf.h"
36 void fill_message(NativeProtobufTest& msg_in)
39 msg_in.set_double_default_optional(++i + 0.1);
40 msg_in.set_float_default_optional(++i + 0.2);
42 msg_in.set_int32_default_optional(++i);
43 msg_in.set_int64_default_optional(-++i);
44 msg_in.set_uint32_default_optional(++i);
45 msg_in.set_uint64_default_optional(++i);
46 msg_in.set_sint32_default_optional(-++i);
47 msg_in.set_sint64_default_optional(++i);
48 msg_in.set_fixed32_default_optional(++i);
49 msg_in.set_fixed64_default_optional(++i);
50 msg_in.set_sfixed32_default_optional(++i);
51 msg_in.set_sfixed64_default_optional(-++i);
53 msg_in.set_bool_default_optional(
true);
55 msg_in.set_enum_default_optional(ENUM_C);
57 msg_in.set_double_default_required(++i + 0.1);
58 msg_in.set_float_default_required(++i + 0.2);
60 msg_in.set_int32_default_required(++i);
61 msg_in.set_int64_default_required(-++i);
62 msg_in.set_uint32_default_required(++i);
63 msg_in.set_uint64_default_required(++i);
64 msg_in.set_sint32_default_required(-++i);
65 msg_in.set_sint64_default_required(++i);
66 msg_in.set_fixed32_default_required(++i);
67 msg_in.set_fixed64_default_required(++i);
68 msg_in.set_sfixed32_default_required(++i);
69 msg_in.set_sfixed64_default_required(-++i);
71 msg_in.set_bool_default_required(
true);
73 msg_in.set_enum_default_required(ENUM_C);
75 for (
int j = 0; j < 4; ++j)
77 msg_in.add_double_default_repeat(++i + 0.1);
78 msg_in.add_int32_default_repeat(++i);
82 void fill_message_partial(NativeProtobufTest& msg_in)
85 msg_in.set_double_default_optional(++i + 0.1);
86 msg_in.set_float_default_optional(++i + 0.2);
88 msg_in.set_int32_default_optional(++i);
89 msg_in.set_uint32_default_optional(++i);
90 msg_in.set_uint64_default_optional(++i);
91 msg_in.set_sint64_default_optional(++i);
92 msg_in.set_fixed32_default_optional(++i);
93 msg_in.set_sfixed32_default_optional(++i);
94 msg_in.set_sfixed64_default_optional(-++i);
96 msg_in.set_double_default_required(++i + 0.1);
97 msg_in.set_float_default_required(++i + 0.2);
99 msg_in.set_int32_default_required(++i);
100 msg_in.set_int64_default_required(-++i);
101 msg_in.set_uint32_default_required(++i);
102 msg_in.set_uint64_default_required(++i);
103 msg_in.set_sint32_default_required(-++i);
104 msg_in.set_sint64_default_required(++i);
105 msg_in.set_fixed32_default_required(++i);
106 msg_in.set_fixed64_default_required(++i);
107 msg_in.set_sfixed32_default_required(++i);
108 msg_in.set_sfixed64_default_required(-++i);
110 msg_in.set_bool_default_required(
true);
112 msg_in.set_enum_default_required(ENUM_C);
114 for (
int j = 0; j < 2; ++j)
116 msg_in.add_double_default_repeat(++i + 0.1);
117 msg_in.add_int32_default_repeat(++i);
121 void fill_message_max(NativeProtobufTest& msg_in)
123 msg_in.set_double_default_optional(std::numeric_limits<double>::max());
124 msg_in.set_float_default_optional(std::numeric_limits<float>::max());
126 msg_in.set_int32_default_optional(std::numeric_limits<dccl::int32>::max());
127 msg_in.set_int64_default_optional(std::numeric_limits<dccl::int64>::max());
128 msg_in.set_uint32_default_optional(std::numeric_limits<dccl::uint32>::max());
129 msg_in.set_uint64_default_optional(std::numeric_limits<dccl::uint64>::max());
130 msg_in.set_sint32_default_optional(std::numeric_limits<dccl::int32>::max());
131 msg_in.set_sint64_default_optional(std::numeric_limits<dccl::int64>::max());
132 msg_in.set_fixed32_default_optional(std::numeric_limits<dccl::uint32>::max());
133 msg_in.set_fixed64_default_optional(std::numeric_limits<dccl::uint64>::max());
134 msg_in.set_sfixed32_default_optional(std::numeric_limits<dccl::int32>::max());
135 msg_in.set_sfixed64_default_optional(std::numeric_limits<dccl::int64>::max());
137 msg_in.set_bool_default_optional(
true);
139 msg_in.set_enum_default_optional(ENUM_C);
141 msg_in.set_double_default_required(std::numeric_limits<double>::max());
142 msg_in.set_float_default_required(std::numeric_limits<float>::max());
143 msg_in.set_int32_default_required(std::numeric_limits<dccl::int32>::max());
144 msg_in.set_int64_default_required(std::numeric_limits<dccl::int64>::max());
145 msg_in.set_uint32_default_required(std::numeric_limits<dccl::uint32>::max());
146 msg_in.set_uint64_default_required(std::numeric_limits<dccl::uint64>::max());
147 msg_in.set_sint32_default_required(std::numeric_limits<dccl::int32>::max());
148 msg_in.set_sint64_default_required(std::numeric_limits<dccl::int64>::max());
149 msg_in.set_fixed32_default_required(std::numeric_limits<dccl::uint32>::max());
150 msg_in.set_fixed64_default_required(std::numeric_limits<dccl::uint64>::max());
151 msg_in.set_sfixed32_default_required(std::numeric_limits<dccl::int32>::max());
152 msg_in.set_sfixed64_default_required(std::numeric_limits<dccl::int64>::max());
154 msg_in.set_bool_default_required(
true);
156 msg_in.set_enum_default_required(ENUM_C);
158 for (
int j = 0; j < 4; ++j)
160 msg_in.add_double_default_repeat(std::numeric_limits<double>::max());
161 msg_in.add_int32_default_repeat(std::numeric_limits<dccl::int32>::max());
165 void fill_message_min(NativeProtobufTest& msg_in)
167 msg_in.set_double_default_optional(std::numeric_limits<double>::min());
168 msg_in.set_float_default_optional(std::numeric_limits<float>::min());
170 msg_in.set_int32_default_optional(std::numeric_limits<dccl::int32>::min());
171 msg_in.set_int64_default_optional(std::numeric_limits<dccl::int64>::min());
172 msg_in.set_uint32_default_optional(std::numeric_limits<dccl::uint32>::min());
173 msg_in.set_uint64_default_optional(std::numeric_limits<dccl::uint64>::min());
174 msg_in.set_sint32_default_optional(std::numeric_limits<dccl::int32>::min());
175 msg_in.set_sint64_default_optional(std::numeric_limits<dccl::int64>::min());
176 msg_in.set_fixed32_default_optional(std::numeric_limits<dccl::uint32>::min());
177 msg_in.set_fixed64_default_optional(std::numeric_limits<dccl::uint64>::min());
178 msg_in.set_sfixed32_default_optional(std::numeric_limits<dccl::int32>::min());
179 msg_in.set_sfixed64_default_optional(std::numeric_limits<dccl::int64>::min());
181 msg_in.set_bool_default_optional(
true);
183 msg_in.set_enum_default_optional(ENUM_A);
185 msg_in.set_double_default_required(std::numeric_limits<double>::min());
186 msg_in.set_float_default_required(std::numeric_limits<float>::min());
187 msg_in.set_int32_default_required(std::numeric_limits<dccl::int32>::min());
188 msg_in.set_int64_default_required(std::numeric_limits<dccl::int64>::min());
189 msg_in.set_uint32_default_required(std::numeric_limits<dccl::uint32>::min());
190 msg_in.set_uint64_default_required(std::numeric_limits<dccl::uint64>::min());
191 msg_in.set_sint32_default_required(std::numeric_limits<dccl::int32>::min());
192 msg_in.set_sint64_default_required(std::numeric_limits<dccl::int64>::min());
193 msg_in.set_fixed32_default_required(std::numeric_limits<dccl::uint32>::min());
194 msg_in.set_fixed64_default_required(std::numeric_limits<dccl::uint64>::min());
195 msg_in.set_sfixed32_default_required(std::numeric_limits<dccl::int32>::min());
196 msg_in.set_sfixed64_default_required(std::numeric_limits<dccl::int64>::min());
198 msg_in.set_bool_default_required(
true);
200 msg_in.set_enum_default_required(ENUM_A);
202 for (
int j = 0; j < 4; ++j)
204 msg_in.add_double_default_repeat(std::numeric_limits<double>::min());
205 msg_in.add_int32_default_repeat(std::numeric_limits<dccl::int32>::min());
209 void run_test(
dccl::Codec& codec, NativeProtobufTest& msg_in)
211 NativeProtobufTest msg_out;
212 std::cout <<
"Message in:\n" << msg_in.DebugString() << std::endl;
213 std::cout <<
"Try encode..." << std::endl;
215 codec.encode(&bytes, msg_in);
216 std::cout <<
"... got bytes (hex): " <<
dccl::hex_encode(bytes) << std::endl;
217 std::cout <<
"Try decode..." << std::endl;
218 codec.decode(bytes, &msg_out);
219 std::cout <<
"... got Message out:\n" << msg_out.DebugString() << std::endl;
221 assert(msg_in.SerializeAsString() == msg_out.SerializeAsString());
224 int main(
int ,
char* [])
226 dccl::dlog.
connect(dccl::logger::ALL, &std::cerr);
229 codec.load_library(DCCL_NATIVE_PROTOBUF_NAME);
231 codec.load<NativeProtobufTest>();
232 codec.info<NativeProtobufTest>(&dccl::dlog);
235 NativeProtobufTest msg_in;
236 fill_message(msg_in);
237 run_test(codec, msg_in);
240 NativeProtobufTest msg_in;
241 fill_message_partial(msg_in);
242 run_test(codec, msg_in);
245 NativeProtobufTest msg_in;
246 fill_message_min(msg_in);
247 run_test(codec, msg_in);
251 NativeProtobufTest msg_in;
252 fill_message_max(msg_in);
253 run_test(codec, msg_in);
256 std::cout <<
"all tests passed" << std::endl;