Skip to content

Commit 2201b08

Browse files
committed
Add unit test for the code
1 parent 1accd0b commit 2201b08

4 files changed

Lines changed: 579 additions & 0 deletions

File tree

tests/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ FASTTYPEGEN_TARGET(simple_types8 simple8.xml)
2020
FASTTYPEGEN_TARGET(simple_types9 simple9.xml)
2121
FASTTYPEGEN_TARGET(simple_types10 simple10.xml)
2222
FASTTYPEGEN_TARGET(simple_types11 simple11.xml)
23+
FASTTYPEGEN_TARGET(simple_types12 simple12.xml)
2324

2425

2526
FASTTYPEGEN_TARGET(test_types1 test1.xml test2.xml)
@@ -37,6 +38,8 @@ add_executable (mfast_test
3738
decoder_operator_test.cpp
3839
encoder_operator_test.cpp
3940
encoder_test.cpp
41+
encoder_decoder_test.cpp
42+
encoder_decoder_test_v2.cpp
4043
field_comparator_test.cpp
4144
coder_test.cpp
4245
value_storage_test.cpp
@@ -56,6 +59,7 @@ add_executable (mfast_test
5659
${FASTTYPEGEN_simple_types9_OUTPUTS}
5760
${FASTTYPEGEN_simple_types10_OUTPUTS}
5861
${FASTTYPEGEN_simple_types11_OUTPUTS}
62+
${FASTTYPEGEN_simple_types12_OUTPUTS}
5963
fast_type_gen_test.cpp
6064
dictionary_builder_test.cpp
6165
json_test.cpp

tests/encoder_decoder_test.cpp

Lines changed: 269 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,269 @@
1+
#include "catch.hpp"
2+
#include <mfast.h>
3+
#include <mfast/coder/fast_encoder.h>
4+
#include <mfast/coder/fast_decoder.h>
5+
#include "byte_stream.h"
6+
7+
#include "simple12.h"
8+
9+
namespace
10+
{
11+
class fast_test_coding_case
12+
{
13+
public:
14+
fast_test_coding_case()
15+
{
16+
encoder_.include({simple12::description()});
17+
decoder_.include({simple12::description()});
18+
}
19+
20+
bool encoding(const mfast::message_cref& msg_ref, const byte_stream& result, bool reset=false)
21+
{
22+
const int buffer_size = 128;
23+
char buffer[buffer_size];
24+
25+
std::size_t encoded_size = encoder_.encode(msg_ref,
26+
buffer,
27+
buffer_size,
28+
reset);
29+
30+
if (result == byte_stream(buffer, encoded_size))
31+
return true;
32+
33+
std::cout << byte_stream(buffer, encoded_size);
34+
35+
INFO( "Got \"" << byte_stream(buffer, encoded_size) << "\" instead." );
36+
return false;
37+
}
38+
39+
bool decoding(const byte_stream& bytes, const mfast::message_cref& result, bool reset=false)
40+
{
41+
const char* first = bytes.data();
42+
mfast::message_cref msg = decoder_.decode(first, first+bytes.size(), reset);
43+
44+
return (msg == result);
45+
}
46+
47+
private:
48+
mfast::fast_encoder encoder_;
49+
mfast::fast_decoder decoder_;
50+
};
51+
}
52+
53+
TEST_CASE("simple field and sequence optional encoder","[field_sequence_optional_sequence_encoder]")
54+
{
55+
fast_test_coding_case test_case;
56+
57+
SECTION("encode field")
58+
{
59+
simple12::Test_1 test_1;
60+
simple12::Test_1_mref test_1_mref = test_1.mref();
61+
test_1_mref.set_field_1_1().as(1);
62+
// \xE0: 1110 : OK
63+
// 1 : Stop Bit
64+
// 1 : Set Template Id.
65+
// 1 : Set Field field_1_1
66+
// 0 : XXX
67+
REQUIRE(test_case.encoding(test_1.cref(),"\xE0\x81\x82\x80",true));
68+
REQUIRE(test_case.decoding("\xE0\x81\x82\x80",test_1.cref(),true));
69+
}
70+
71+
SECTION("encode sequence")
72+
{
73+
simple12::Test_1 test_1;
74+
simple12::Test_1_mref test_1_mref = test_1.mref();
75+
76+
auto sequence_1_mref = test_1_mref.set_sequence_1();
77+
sequence_1_mref.resize(1);
78+
79+
auto element_sequence = sequence_1_mref.front();
80+
element_sequence.set_field_1_2().as(10);
81+
element_sequence.set_field_1_3().as(50);
82+
// \xC0: 1100 : OK
83+
// 1 : Stop Bit
84+
// 1 : Set Template Id.
85+
// 0 : Set Field field_1_1
86+
// 0 : XXX
87+
REQUIRE(test_case.encoding(test_1.cref(),"\xC0\x81\x82\x8B\xB3",true));
88+
REQUIRE(test_case.decoding("\xC0\x81\x82\x8B\xB3",test_1.cref(),true));
89+
}
90+
91+
SECTION("encode field and sequence")
92+
{
93+
simple12::Test_1 test_1;
94+
simple12::Test_1_mref test_1_mref = test_1.mref();
95+
test_1_mref.set_field_1_1().as(1);
96+
97+
auto sequence_1_mref = test_1_mref.set_sequence_1();
98+
sequence_1_mref.resize(1);
99+
100+
auto element_sequence = sequence_1_mref.front();
101+
element_sequence.set_field_1_2().as(10);
102+
element_sequence.set_field_1_3().as(50);
103+
// \xE0: 1110 : OK
104+
// 1 : Stop Bit
105+
// 1 : Set Template Id.
106+
// 1 : Set Field field_1_1
107+
// 0 : XXX
108+
REQUIRE(test_case.encoding(test_1.cref(),"\xE0\x81\x82\x82\x8b\xB3",true));
109+
REQUIRE(test_case.decoding("\xE0\x81\x82\x82\x8b\xB3",test_1.cref(),true));
110+
}
111+
}
112+
113+
TEST_CASE("simple field encoder","[field_optional_encoder]")
114+
{
115+
fast_test_coding_case test_case;
116+
117+
SECTION("encode fields")
118+
{
119+
simple12::Test_2 test_2;
120+
simple12::Test_2_mref test_2_mref = test_2.mref();
121+
test_2_mref.set_field_2_1().as(1);
122+
test_2_mref.set_field_2_2().as(2);
123+
// \xF0: 1111 : OK
124+
// 1 : Stop Bit
125+
// 1 : Set Template Id.
126+
// 1 : Set Field field_2_1
127+
// 1 : Set Field field_2_2
128+
REQUIRE(test_case.encoding(test_2.cref(),"\xF0\x82\x81\x82",true));
129+
REQUIRE(test_case.decoding("\xF0\x82\x81\x82",test_2.cref(),true));
130+
}
131+
}
132+
133+
TEST_CASE("simple field and sequence encoder","[field_sequence_encoder]")
134+
{
135+
fast_test_coding_case test_case;
136+
137+
SECTION("encode fields")
138+
{
139+
simple12::Test_3 test_3;
140+
simple12::Test_3_mref test_3_mref = test_3.mref();
141+
test_3_mref.set_field_3_1().as(1);
142+
143+
auto sequence_3_mref = test_3_mref.set_sequence_3();
144+
sequence_3_mref.resize(1);
145+
146+
auto element_sequence = sequence_3_mref.front();
147+
element_sequence.set_field_3_2().as(10);
148+
element_sequence.set_field_3_3().as(50);
149+
// \xE0: 1110 : OK
150+
// 1 : Stop Bit
151+
// 1 : Set Template Id.
152+
// 1 : Set Field field_3_1
153+
// 0 : XXX
154+
REQUIRE(test_case.encoding(test_3.cref(),"\xE0\x83\x81\x81\x8A\xB2",true));
155+
REQUIRE(test_case.decoding("\xE0\x83\x81\x81\x8A\xB2",test_3.cref(),true));
156+
}
157+
}
158+
159+
TEST_CASE("simple field optional encoder","[field_optional_encoder]")
160+
{
161+
fast_test_coding_case test_case;
162+
163+
SECTION("encode fields")
164+
{
165+
simple12::Test_4 test_4;
166+
simple12::Test_4_mref test_4_mref = test_4.mref();
167+
test_4_mref.set_field_4_1().as(1);
168+
test_4_mref.set_field_4_2().as(2);
169+
// \xF0 : 1111 : OK
170+
// 1 : Stop Bit
171+
// 1 : Set Template Id.
172+
// 1 : Set Field field_4_1
173+
// 1 : Set Field field_4_2
174+
REQUIRE(test_case.encoding(test_4.cref(),"\xF0\x84\x82\x83",true));
175+
REQUIRE(test_case.decoding("\xF0\x84\x82\x83",test_4.cref(),true));
176+
}
177+
178+
SECTION("encode first optional field")
179+
{
180+
simple12::Test_4 test_4;
181+
simple12::Test_4_mref test_4_mref = test_4.mref();
182+
test_4_mref.set_field_4_1().as(1);
183+
// \xE0 : 1110 : OK
184+
// 1 : Stop Bit.
185+
// 1 : Set Template Id.
186+
// 1 : Set Field field_4_1
187+
// 0 : Set Field field_4_2
188+
REQUIRE(test_case.encoding(test_4.cref(),"\xE0\x84\x82", true));
189+
REQUIRE(test_case.decoding("\xE0\x84\x82",test_4.cref(),true));
190+
}
191+
192+
SECTION("encode second optional field")
193+
{
194+
simple12::Test_4 test_4;
195+
simple12::Test_4_mref test_4_mref = test_4.mref();
196+
test_4_mref.set_field_4_2().as(2);
197+
// \xD0 : 1110 : OK
198+
// 1 : Stop Bit.
199+
// 1 : Set Template Id.
200+
// 0 : Set Field field_4_1
201+
// 1 : Set Field field_4_2
202+
REQUIRE(test_case.encoding(test_4.cref(),"\xD0\x84\x83",true));
203+
REQUIRE(test_case.decoding("\xD0\x84\x83",test_4.cref(),true));
204+
}
205+
}
206+
207+
TEST_CASE("simple field group optional encoder","[field_group_optional_encoder]")
208+
{
209+
fast_test_coding_case test_case;
210+
211+
SECTION("encode field")
212+
{
213+
simple12::Test_5 test_5;
214+
simple12::Test_5_mref test_5_mref = test_5.mref();
215+
test_5_mref.set_field_5_1().as(1);
216+
// \xE0 : 1110 : OK
217+
// 1 : Stop Bit.
218+
// 1 : Set Template Id.
219+
// 1 : Set Field field_5_1
220+
// 0 : Not Set test_5_group
221+
REQUIRE(test_case.encoding(test_5.cref(),"\xE0\x85\x82",true));
222+
REQUIRE(test_case.decoding("\xE0\x85\x82",test_5.cref(),true));
223+
}
224+
225+
SECTION("encode group")
226+
{
227+
simple12::Test_5 test_5;
228+
simple12::Test_5_mref test_5_mref = test_5.mref();
229+
auto group_test_5_group = test_5_mref.set_test_5_group();
230+
auto group_test_5_sequence = group_test_5_group.set_sequence_5();
231+
group_test_5_sequence.resize(1);
232+
{
233+
auto element_sequence = group_test_5_sequence.front();
234+
element_sequence.set_field_5_2().as(1);
235+
element_sequence.set_field_5_3().as(2);
236+
}
237+
group_test_5_group.set_field_5_5().as(10);
238+
// \xD0 : 1101 OK
239+
// 1 : Stop Bit.
240+
// 1 : Set Template Id.
241+
// 0 : Not Set Field field_5_1
242+
// 1 : Set Group test_5_group
243+
REQUIRE(test_case.encoding(test_5.cref(),"\xD0\x85\xC0\x81\x81\x82\x8B",true));
244+
REQUIRE(test_case.decoding("\xD0\x85\xC0\x81\x81\x82\x8B",test_5.cref(),true));
245+
}
246+
247+
SECTION("encode field and group")
248+
{
249+
simple12::Test_5 test_5;
250+
simple12::Test_5_mref test_5_mref = test_5.mref();
251+
test_5_mref.set_field_5_1().as(1);
252+
auto group_test_5_group = test_5_mref.set_test_5_group();
253+
auto group_test_5_sequence = group_test_5_group.set_sequence_5();
254+
group_test_5_sequence.resize(1);
255+
{
256+
auto element_sequence = group_test_5_sequence.front();
257+
element_sequence.set_field_5_2().as(1);
258+
element_sequence.set_field_5_3().as(2);
259+
}
260+
group_test_5_group.set_field_5_5().as(10);
261+
// \xF0 : 1111 : OK
262+
// 1 : Stop Bit.
263+
// 1 : Set Template Id.
264+
// 1 : Set Field field_5_1
265+
// 1 : Set test_5_group
266+
REQUIRE(test_case.encoding(test_5.cref(),"\xF0\x85\x82\xC0\x81\x81\x82\x8B",true));
267+
REQUIRE(test_case.decoding("\xF0\x85\x82\xC0\x81\x81\x82\x8B",test_5.cref(),true));
268+
}
269+
}

0 commit comments

Comments
 (0)