28 #include <google/protobuf/descriptor.pb.h>
30 #include "../../binary.h"
31 #include "../../codec.h"
35 void decode_check(
const std::string& encoded);
39 int main(
int ,
char* [])
41 dccl::dlog.
connect(dccl::logger::ALL, &std::cerr);
44 msg_in.set_double_default_optional(++i + 0.1);
45 msg_in.set_float_default_optional(++i + 0.2);
47 msg_in.set_int32_default_optional(++i);
48 msg_in.set_int64_default_optional(-++i);
49 msg_in.set_uint32_default_optional(++i);
50 msg_in.set_uint64_default_optional(++i);
51 msg_in.set_sint32_default_optional(-++i);
52 msg_in.set_sint64_default_optional(++i);
53 msg_in.set_fixed32_default_optional(++i);
54 msg_in.set_fixed64_default_optional(++i);
55 msg_in.set_sfixed32_default_optional(++i);
56 msg_in.set_sfixed64_default_optional(-++i);
58 msg_in.set_bool_default_optional(
true);
60 msg_in.set_string_default_optional(
"abc123");
63 msg_in.set_enum_default_optional(ENUM_C);
64 msg_in.mutable_msg_default_optional()->set_val(++i + 0.3);
65 msg_in.mutable_msg_default_optional()->mutable_msg()->set_val(++i);
67 msg_in.set_double_default_required(++i + 0.1);
68 msg_in.set_float_default_required(++i + 0.2);
70 msg_in.set_int32_default_required(++i);
71 msg_in.set_int64_default_required(-++i);
72 msg_in.set_uint32_default_required(++i);
73 msg_in.set_uint64_default_required(++i);
74 msg_in.set_sint32_default_required(-++i);
75 msg_in.set_sint64_default_required(++i);
76 msg_in.set_fixed32_default_required(++i);
77 msg_in.set_fixed64_default_required(++i);
78 msg_in.set_sfixed32_default_required(++i);
79 msg_in.set_sfixed64_default_required(-++i);
81 msg_in.set_bool_default_required(
true);
83 msg_in.set_string_default_required(
"abc123");
86 msg_in.set_enum_default_required(ENUM_C);
87 msg_in.mutable_msg_default_required()->set_val(++i + 0.3);
88 msg_in.mutable_msg_default_required()->mutable_msg()->set_val(++i);
90 for (
int j = 0; j < 2; ++j)
92 msg_in.add_double_default_repeat(++i + 0.1);
93 msg_in.add_float_default_repeat(++i + 0.2);
95 msg_in.add_int32_default_repeat(++i);
96 msg_in.add_int64_default_repeat(-++i);
97 msg_in.add_uint32_default_repeat(++i);
98 msg_in.add_uint64_default_repeat(++i);
99 msg_in.add_sint32_default_repeat(-++i);
100 msg_in.add_sint64_default_repeat(++i);
101 msg_in.add_fixed32_default_repeat(++i);
102 msg_in.add_fixed64_default_repeat(++i);
103 msg_in.add_sfixed32_default_repeat(++i);
104 msg_in.add_sfixed64_default_repeat(-++i);
106 msg_in.add_bool_default_repeat(
true);
108 msg_in.add_string_default_repeat(
"abc123");
115 msg_in.add_enum_default_repeat(
static_cast<Enum1
>((++i % 3) + 1));
116 EmbeddedMsg1* em_msg = msg_in.add_msg_default_repeat();
117 em_msg->set_val(++i + 0.3);
118 em_msg->mutable_msg()->set_val(++i);
121 codec.info(msg_in.GetDescriptor());
123 std::ofstream fout(
"/tmp/testmessage.pb");
124 msg_in.SerializeToOstream(&fout);
126 std::cout <<
"Message in:\n" << msg_in.DebugString() << std::endl;
128 codec.load(msg_in.GetDescriptor());
130 std::cout <<
"Try encode..." << std::endl;
132 codec.encode(&bytes, msg_in);
133 std::cout <<
"... got bytes (hex): " <<
dccl::hex_encode(bytes) << std::endl;
135 std::cout <<
"Try decode..." << std::endl;
140 "047f277b9628060000b95660c0b0188000d8c0132858800008000dc2c4c6626466024488cca8ee324bd05c3f23"
141 "af0000ad9112a09509788013e0820b18e0005ed0204c6c2c4666062042644675975982c65235f10a00ad718a58"
142 "01000000905f27121600000000a0170050640300309201001a0b00007d320a0000a61a0070b20100a81b00d09c"
143 "6f0000a0401026361643102636160300f0dfbd5b2280ea2e330f3da59a2100aabfa55a00000000000000000000"
147 std::string random = bytes;
148 for (
unsigned i = 0; i < 10; ++i)
150 random[(rand() % (bytes.size() - 1) + 1)] = rand() % 256;
156 codec.decode(random, &msg_out);
163 std::cout <<
"all tests passed" << std::endl;
166 void decode_check(
const std::string& encoded)
169 codec.decode(encoded, &msg_out);
171 std::cout <<
"... got Message out:\n" << msg_out.DebugString() << std::endl;
174 msg_in.set_string_default_repeat(0,
"abc1");
175 msg_in.set_string_default_repeat(1,
"abc1");
177 assert(msg_in.SerializeAsString() == msg_out.SerializeAsString());