27 #include "../../arithmetic/field_codec_arithmetic.h"
28 #include "../../codec.h"
30 #include "test_arithmetic.pb.h"
39 model.set_name(
"model");
40 dccl::arith::ModelManager::set_model(codec, model);
43 codec.load(msg_in.GetDescriptor());
44 codec.info(msg_in.GetDescriptor());
50 codec.encode(&bytes, msg_in);
55 std::shared_ptr<google::protobuf::Message> msg_out(msg_in.New());
56 codec.decode(bytes, msg_out.get());
60 assert(msg_in.SerializeAsString() == msg_out->SerializeAsString());
63 void decode_check(
dccl::Codec& codec,
const std::string& encoded, TestMsg msg_in);
64 void run(
int thread,
int num_iterations);
65 int main(
int ,
char* [])
68 std::thread t1([]() { run(1, 100); });
69 std::thread t2([]() { run(2, 100); });
70 std::thread t3([]() { run(3, 100); });
71 std::thread t4([]() { run(4, 100); });
72 std::thread t5([]() { run(5, 100); });
73 std::thread t6([]() { run(6, 100); });
74 std::thread t7([]() { run(7, 100); });
75 std::thread t8([]() { run(8, 100); });
76 std::thread t9([]() { run(9, 100); });
77 std::thread t10([]() { run(10, 100); });
90 dccl::dlog.
connect(dccl::logger::ALL, &std::cerr);
92 std::thread t1([]() { run(1, 10); });
93 std::thread t2([]() { run(2, 10); });
94 std::thread t3([]() { run(3, 10); });
95 std::thread t4([]() { run(4, 10); });
96 std::thread t5([]() { run(5, 10); });
97 std::thread t6([]() { run(6, 10); });
98 std::thread t7([]() { run(7, 10); });
99 std::thread t8([]() { run(8, 10); });
100 std::thread t9([]() { run(9, 10); });
101 std::thread t10([]() { run(10, 10); });
114 std::cout <<
"all tests passed" << std::endl;
117 void run(
int thread,
int num_iterations)
120 codec.load_library(DCCL_ARITHMETIC_NAME);
121 codec.load<TestMsg>();
122 for (
int m = 0; m < num_iterations; ++m)
124 std::cout <<
"Thread " << thread <<
", it: " << m << std::endl;
125 codec.info<TestMsg>();
128 msg_in.set_double_default_optional(++i + 0.1);
129 msg_in.set_float_default_optional(++i + 0.2);
131 msg_in.set_int32_default_optional(++i);
132 msg_in.set_int64_default_optional(-++i);
133 msg_in.set_uint32_default_optional(++i);
134 msg_in.set_uint64_default_optional(++i);
135 msg_in.set_sint32_default_optional(-++i);
136 msg_in.set_sint64_default_optional(++i);
137 msg_in.set_fixed32_default_optional(++i);
138 msg_in.set_fixed64_default_optional(++i);
139 msg_in.set_sfixed32_default_optional(++i);
140 msg_in.set_sfixed64_default_optional(-++i);
142 msg_in.set_bool_default_optional(
true);
144 msg_in.set_string_default_optional(
"abc123");
147 msg_in.set_enum_default_optional(ENUM_C);
148 msg_in.mutable_msg_default_optional()->set_val(++i + 0.3);
149 msg_in.mutable_msg_default_optional()->mutable_msg()->set_val(++i);
151 msg_in.set_double_default_required(++i + 0.1);
152 msg_in.set_float_default_required(++i + 0.2);
154 msg_in.set_int32_default_required(++i);
155 msg_in.set_int64_default_required(-++i);
156 msg_in.set_uint32_default_required(++i);
157 msg_in.set_uint64_default_required(++i);
158 msg_in.set_sint32_default_required(-++i);
159 msg_in.set_sint64_default_required(++i);
160 msg_in.set_fixed32_default_required(++i);
161 msg_in.set_fixed64_default_required(++i);
162 msg_in.set_sfixed32_default_required(++i);
163 msg_in.set_sfixed64_default_required(-++i);
165 msg_in.set_bool_default_required(
true);
167 msg_in.set_string_default_required(
"abc123");
170 msg_in.set_enum_default_required(ENUM_C);
171 msg_in.mutable_msg_default_required()->set_val(++i + 0.3);
172 msg_in.mutable_msg_default_required()->mutable_msg()->set_val(++i);
174 for (
int j = 0; j < 2; ++j)
176 msg_in.add_double_default_repeat(++i + 0.1);
177 msg_in.add_float_default_repeat(++i + 0.2);
179 msg_in.add_int32_default_repeat(++i);
180 msg_in.add_int64_default_repeat(-++i);
181 msg_in.add_uint32_default_repeat(++i);
182 msg_in.add_uint64_default_repeat(++i);
183 msg_in.add_sint32_default_repeat(-++i);
184 msg_in.add_sint64_default_repeat(++i);
185 msg_in.add_fixed32_default_repeat(++i);
186 msg_in.add_fixed64_default_repeat(++i);
187 msg_in.add_sfixed32_default_repeat(++i);
188 msg_in.add_sfixed64_default_repeat(-++i);
190 msg_in.add_bool_default_repeat(
true);
192 msg_in.add_string_default_repeat(
"abc123");
199 msg_in.add_enum_default_repeat(
static_cast<Enum1
>((++i % 3) + 1));
200 EmbeddedMsg1* em_msg = msg_in.add_msg_default_repeat();
201 em_msg->set_val(++i + 0.3);
202 em_msg->mutable_msg()->set_val(++i);
206 codec.encode(&bytes, msg_in);
208 decode_check(codec, bytes, msg_in);
214 model.set_eof_frequency(4);
216 model.add_value_bound(0);
217 model.add_frequency(5);
219 model.add_value_bound(1);
220 model.add_frequency(1);
222 model.add_value_bound(2);
224 model.set_out_of_range_frequency(0);
226 dccl::test::arith::ArithmeticDoubleTestMsg msg_in;
233 arithmetic_run_test(codec, model, msg_in);
238 void decode_check(
dccl::Codec& codec,
const std::string& encoded, TestMsg msg_in)
241 codec.decode(encoded, &msg_out);
246 msg_in.set_string_default_repeat(0,
"abc1");
247 msg_in.set_string_default_repeat(1,
"abc1");
249 assert(msg_in.SerializeAsString() == msg_out.SerializeAsString());