29 #include <google/protobuf/descriptor.pb.h>
31 #include "../../binary.h"
32 #include "../../codec.h"
36 void decode_check(
const std::string& encoded);
40 int main(
int ,
char* [])
42 dccl::dlog.
connect(dccl::logger::ALL, &std::cerr);
45 msg_in.set_double_default_optional(++i + 0.1);
46 msg_in.set_float_default_optional(++i + 0.2);
48 msg_in.set_int32_default_optional(++i);
49 msg_in.set_int64_default_optional(-++i);
50 msg_in.set_uint32_default_optional(++i);
51 msg_in.set_uint64_default_optional(++i);
52 msg_in.set_sint32_default_optional(-++i);
53 msg_in.set_sint64_default_optional(++i);
54 msg_in.set_fixed32_default_optional(++i);
55 msg_in.set_fixed64_default_optional(++i);
56 msg_in.set_sfixed32_default_optional(++i);
57 msg_in.set_sfixed64_default_optional(-++i);
59 msg_in.set_bool_default_optional(
true);
61 msg_in.set_string_default_optional(
"abc123");
64 msg_in.set_enum_default_optional(ENUM_C);
65 msg_in.mutable_msg_default_optional()->set_val(++i + 0.3);
66 msg_in.mutable_msg_default_optional()->mutable_msg()->set_val(++i);
68 msg_in.set_double_default_required(++i + 0.1);
69 msg_in.set_float_default_required(++i + 0.2);
71 msg_in.set_int32_default_required(++i);
72 msg_in.set_int64_default_required(-++i);
73 msg_in.set_uint32_default_required(++i);
74 msg_in.set_uint64_default_required(++i);
75 msg_in.set_sint32_default_required(-++i);
76 msg_in.set_sint64_default_required(++i);
77 msg_in.set_fixed32_default_required(++i);
78 msg_in.set_fixed64_default_required(++i);
79 msg_in.set_sfixed32_default_required(++i);
80 msg_in.set_sfixed64_default_required(-++i);
82 msg_in.set_bool_default_required(
true);
84 msg_in.set_string_default_required(
"abc123");
87 msg_in.set_enum_default_required(ENUM_C);
88 msg_in.mutable_msg_default_required()->set_val(++i + 0.3);
89 msg_in.mutable_msg_default_required()->mutable_msg()->set_val(++i);
91 for (
int j = 0; j < 2; ++j)
93 msg_in.add_double_default_repeat(++i + 0.1);
94 msg_in.add_float_default_repeat(++i + 0.2);
96 msg_in.add_int32_default_repeat(++i);
97 msg_in.add_int64_default_repeat(-++i);
98 msg_in.add_uint32_default_repeat(++i);
99 msg_in.add_uint64_default_repeat(++i);
100 msg_in.add_sint32_default_repeat(-++i);
101 msg_in.add_sint64_default_repeat(++i);
102 msg_in.add_fixed32_default_repeat(++i);
103 msg_in.add_fixed64_default_repeat(++i);
104 msg_in.add_sfixed32_default_repeat(++i);
105 msg_in.add_sfixed64_default_repeat(-++i);
107 msg_in.add_bool_default_repeat(
true);
109 msg_in.add_string_default_repeat(
"abc123");
116 msg_in.add_enum_default_repeat(
static_cast<Enum1
>((++i % 3) + 1));
117 EmbeddedMsg1* em_msg = msg_in.add_msg_default_repeat();
118 em_msg->set_val(++i + 0.3);
119 em_msg->mutable_msg()->set_val(++i);
122 codec.info(msg_in.GetDescriptor());
124 std::ofstream fout(
"/tmp/testmessage.pb");
125 msg_in.SerializeToOstream(&fout);
127 std::cout <<
"Message in:\n" << msg_in.DebugString() << std::endl;
129 codec.load(msg_in.GetDescriptor());
131 std::cout <<
"Try encode..." << std::endl;
133 codec.encode(&bytes, msg_in);
134 std::cout <<
"... got bytes (hex): " <<
dccl::hex_encode(bytes) << std::endl;
136 std::cout <<
"Try decode..." << std::endl;
143 dccl::hex_decode(
"047f277b16b95660c0b0188000d8c0132858800008005b98d8588ccccc0488109951dd659"
144 "6a079fd8c7905d01a29015a99800738012eb880010ee0052d4c6c2c466626012244665477"
145 "9925682c55335e8158e310b1127e1d4858fab84454a3104ca2983214c4e7a22ad164aae96"
146 "41373bd69314c6c2c8661626331e2bf7bb70401547799a5ea29b51942f5b7a91600"));
149 std::string random = bytes;
150 for (
unsigned i = 0; i < 10; ++i)
152 random[(rand() % (bytes.size() - 1) + 1)] = rand() % 256;
158 codec.decode(random, &msg_out);
170 codec.encode(&bytes, empty);
175 std::cout <<
"Expected verbose error encoding empty message: " << e.what() << std::endl;
178 std::cout <<
"all tests passed" << std::endl;
181 void decode_check(
const std::string& encoded)
184 codec.decode(encoded, &msg_out);
186 std::cout <<
"... got Message out:\n" << msg_out.DebugString() << std::endl;
189 msg_in.set_string_default_repeat(0,
"abc1");
190 msg_in.set_string_default_repeat(1,
"abc1");
192 assert(msg_in.SerializeAsString() == msg_out.SerializeAsString());