Skip to content

Commit 98bebac

Browse files
Merge pull request #149 from martinfantini/more_tests
More unit tests
2 parents 2979409 + 1f2ea2d commit 98bebac

8 files changed

Lines changed: 356 additions & 2 deletions

src/mfast/coder/encoder_v2/fast_encoder_core.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ inline void fast_encoder_core::encode_field(const T &ext_ref,
265265
this->current_->set_next_bit(false);
266266
if(!std::is_same<typename T::length_type::operator_category, constant_operator_tag>::value &&
267267
!std::is_same<typename T::length_type::operator_category, copy_operator_tag>::value &&
268-
!std::is_same<typename T::length_type::operator_category, default_operator_tag>::value )
268+
!std::is_same<typename T::length_type::operator_category, default_operator_tag>::value)
269269
strm_.encode_null();
270270
return;
271271
}

tests/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ add_executable (mfast_test
7474
aggregate_view_test.cpp
7575
simple_coder_test.cpp
7676
sequence_encoder_decoder_v2.cpp
77-
sequence_encoder_decoder_v2.cpp
77+
sequence_encoder_decoder.cpp
7878
scp_reset_test.cpp
7979
template_repo_base.cpp
8080
message_pmap_test.cpp

tests/group_encoder_decoder.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,53 @@ TEST_CASE("field with group encoder/decoder","[field_without_group_encoder_decod
3939
REQUIRE(test_case.decoding("\xE0\x81\x9F\xA8\x80\x8B",test_1.cref(),true));
4040
}
4141

42+
TEST_CASE("optional group encoder/decoder","[optional_group_encoder_decoder]")
43+
{
44+
fast_test_coding_case<simple13::templates_description> test_case;
45+
46+
SECTION("No group")
47+
{
48+
simple13::Test_4 test_4;
49+
50+
REQUIRE(test_case.encoding(test_4.cref(),"\xC0\x84",true));
51+
REQUIRE(test_case.decoding("\xC0\x84",test_4.cref(),true));
52+
}
53+
54+
SECTION("With group")
55+
{
56+
simple13::Test_4 test_4;
57+
simple13::Test_4_mref test_4_mref = test_4.mref();
58+
59+
// set group
60+
{
61+
auto group_1 = test_4_mref.set_group_4_1();
62+
auto sequence_4_mref = group_1.set_sequence_4();
63+
sequence_4_mref.resize(1);
64+
auto element_sequence = sequence_4_mref.front();
65+
element_sequence.set_field_4_3().as(1);
66+
}
4267

68+
REQUIRE(test_case.encoding(test_4.cref(),"\xE0\x84\x80\xC0\x81",true));
69+
REQUIRE(test_case.decoding("\xE0\x84\x80\xC0\x81",test_4.cref(),true));
70+
}
71+
72+
SECTION("With group sequence and field")
73+
{
74+
simple13::Test_4 test_4;
75+
simple13::Test_4_mref test_4_mref = test_4.mref();
76+
77+
// set group
78+
{
79+
auto group_1 = test_4_mref.set_group_4_1();
80+
auto sequence_4_mref = group_1.set_sequence_4();
81+
sequence_4_mref.resize(1);
82+
auto element_sequence = sequence_4_mref.front();
83+
element_sequence.set_field_4_3().as(1);
84+
85+
group_1.set_field_4_4().as(10);
86+
}
87+
88+
REQUIRE(test_case.encoding(test_4.cref(),"\xE0\x84\xC0\xC0\x81\x8B",true));
89+
REQUIRE(test_case.decoding("\xE0\x84\xC0\xC0\x81\x8B",test_4.cref(),true));
90+
}
91+
}

tests/group_encoder_decoder_v2.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,53 @@ TEST_CASE("field with group encoder_v2/decoder_v2","[field_without_group_encoder
3939
REQUIRE(test_case.decoding("\xE0\x81\x9F\xA8\x80\x8B",test_1.cref(),true));
4040
}
4141

42+
TEST_CASE("optional group encoder_v2/decoder_v2","[optional_group_encoder_v2_decoder_v2]")
43+
{
44+
fast_test_coding_case_v2<simple13::templates_description> test_case;
45+
46+
SECTION("No group")
47+
{
48+
simple13::Test_4 test_4;
49+
50+
REQUIRE(test_case.encoding(test_4.cref(),"\xC0\x84",true));
51+
REQUIRE(test_case.decoding("\xC0\x84",test_4.cref(),true));
52+
}
53+
54+
SECTION("With group")
55+
{
56+
simple13::Test_4 test_4;
57+
simple13::Test_4_mref test_4_mref = test_4.mref();
58+
59+
// set group
60+
{
61+
auto group_1 = test_4_mref.set_group_4_1();
62+
auto sequence_4_mref = group_1.set_sequence_4();
63+
sequence_4_mref.resize(1);
64+
auto element_sequence = sequence_4_mref.front();
65+
element_sequence.set_field_4_3().as(1);
66+
}
4267

68+
REQUIRE(test_case.encoding(test_4.cref(),"\xE0\x84\x80\xC0\x81",true));
69+
REQUIRE(test_case.decoding("\xE0\x84\x80\xC0\x81",test_4.cref(),true));
70+
}
71+
72+
SECTION("With group sequence and field")
73+
{
74+
simple13::Test_4 test_4;
75+
simple13::Test_4_mref test_4_mref = test_4.mref();
76+
77+
// set group
78+
{
79+
auto group_1 = test_4_mref.set_group_4_1();
80+
auto sequence_4_mref = group_1.set_sequence_4();
81+
sequence_4_mref.resize(1);
82+
auto element_sequence = sequence_4_mref.front();
83+
element_sequence.set_field_4_3().as(1);
84+
85+
group_1.set_field_4_4().as(10);
86+
}
87+
88+
REQUIRE(test_case.encoding(test_4.cref(),"\xE0\x84\xC0\xC0\x81\x8B",true));
89+
REQUIRE(test_case.decoding("\xE0\x84\xC0\xC0\x81\x8B",test_4.cref(),true));
90+
}
91+
}

tests/sequence_encoder_decoder.cpp

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,4 +130,110 @@ TEST_CASE("sequence optional none operator by length encoder/decoder","[sequence
130130
REQUIRE(test_case.decoding("\xC0\x84\x82\xC0\xB3\x8B",test_4.cref(),true));
131131
}
132132

133+
TEST_CASE("sequence inside sequence encoder/decoder","[sequence_inside_sequence_encoder_decoder]")
134+
{
135+
fast_test_coding_case<simple14::templates_description> test_case;
136+
137+
SECTION("outside sequence")
138+
{
139+
simple14::Test_5 test_5;
140+
simple14::Test_5_mref test_5_mref = test_5.mref();
141+
142+
test_5_mref.set_field_5_2().as(1);
143+
144+
auto sequence_5_1_mref = test_5_mref.set_sequence_5_1();
145+
sequence_5_1_mref.resize(1);
146+
147+
{
148+
auto element_sequence = sequence_5_1_mref.front();
149+
element_sequence.set_field_5_4().as(50);
150+
}
151+
152+
REQUIRE(test_case.encoding(test_5.cref(),"\xD0\x85\x81\x81\xC0\xB3",true));
153+
REQUIRE(test_case.decoding("\xD0\x85\x81\x81\xC0\xB3",test_5.cref(),true));
154+
}
155+
156+
SECTION("inside sequence")
157+
{
158+
simple14::Test_5 test_5;
159+
simple14::Test_5_mref test_5_mref = test_5.mref();
160+
161+
test_5_mref.set_field_5_2().as(1);
162+
163+
auto sequence_5_1_mref = test_5_mref.set_sequence_5_1();
164+
sequence_5_1_mref.resize(1);
165+
166+
{
167+
auto element_sequence = sequence_5_1_mref.front();
168+
element_sequence.set_field_5_4().as(50);
169+
170+
auto sequence_5_2_mref = element_sequence.set_sequence_5_2();
171+
sequence_5_2_mref.resize(1);
172+
173+
{
174+
auto element_sequence_inside = sequence_5_2_mref.front();
175+
element_sequence_inside.set_field_5_6().as(50);
176+
}
177+
}
133178

179+
REQUIRE(test_case.encoding(test_5.cref(),"\xD0\x85\x81\x81\xE0\xB3\x82\xB2",true));
180+
REQUIRE(test_case.decoding("\xD0\x85\x81\x81\xE0\xB3\x82\xB2",test_5.cref(),true));
181+
}
182+
}
183+
184+
TEST_CASE("group sequence inside sequence encoder/decoder","[group_sequence_inside_sequence_encoder_decoder]")
185+
{
186+
fast_test_coding_case<simple14::templates_description> test_case;
187+
188+
SECTION("outside sequence")
189+
{
190+
simple14::Test_6 test_6;
191+
simple14::Test_6_mref test_6_mref = test_6.mref();
192+
193+
// set group
194+
{
195+
auto group_6 = test_6_mref.set_group_6();
196+
auto sequence_6_1_mref = group_6.set_sequence_6_1();
197+
sequence_6_1_mref.resize(1);
198+
199+
//set sequence
200+
{
201+
auto element_sequence = sequence_6_1_mref.front();
202+
element_sequence.set_field_6_3().as(50);
203+
}
204+
}
205+
206+
REQUIRE(test_case.encoding(test_6.cref(),"\xC0\x86\x81\xC0\xB2",true));
207+
REQUIRE(test_case.decoding("\xC0\x86\x81\xC0\xB2",test_6.cref(),true));
208+
}
209+
210+
SECTION("inside sequence")
211+
{
212+
simple14::Test_6 test_6;
213+
simple14::Test_6_mref test_6_mref = test_6.mref();
214+
215+
// set group
216+
{
217+
auto group_6 = test_6_mref.set_group_6();
218+
auto sequence_6_1_mref = group_6.set_sequence_6_1();
219+
sequence_6_1_mref.resize(1);
220+
221+
//set sequence
222+
{
223+
auto element_sequence = sequence_6_1_mref.front();
224+
element_sequence.set_field_6_3().as(50);
225+
226+
auto sequence_6_2_mref = element_sequence.set_sequence_6_2();
227+
sequence_6_2_mref.resize(1);
228+
229+
{
230+
auto element_sequence_inside = sequence_6_2_mref.front();
231+
element_sequence_inside.set_field_6_6().as(50);
232+
}
233+
}
234+
}
235+
236+
REQUIRE(test_case.encoding(test_6.cref(),"\xC0\x86\x81\xD0\xB2\x82\xB2",true));
237+
REQUIRE(test_case.decoding("\xC0\x86\x81\xD0\xB2\x82\xB2",test_6.cref(),true));
238+
}
239+
}

tests/sequence_encoder_decoder_v2.cpp

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,3 +131,111 @@ TEST_CASE("sequence optional none operator by length encoder_V2/decoder_v2","[se
131131
REQUIRE(test_case.encoding(test_4.cref(),"\xC0\x84\x82\xC0\xB3\x8B",true));
132132
REQUIRE(test_case.decoding("\xC0\x84\x82\xC0\xB3\x8B",test_4.cref(),true));
133133
}
134+
135+
TEST_CASE("sequence inside sequence encoder_V2/decoder_v2","[sequence_inside_sequence_encoder_v2_decoder_v2]")
136+
{
137+
fast_test_coding_case_v2<simple14::templates_description> test_case;
138+
139+
SECTION("outside sequence")
140+
{
141+
simple14::Test_5 test_5;
142+
simple14::Test_5_mref test_5_mref = test_5.mref();
143+
144+
test_5_mref.set_field_5_2().as(1);
145+
146+
auto sequence_5_1_mref = test_5_mref.set_sequence_5_1();
147+
sequence_5_1_mref.resize(1);
148+
149+
{
150+
auto element_sequence = sequence_5_1_mref.front();
151+
element_sequence.set_field_5_4().as(50);
152+
}
153+
154+
REQUIRE(test_case.encoding(test_5.cref(),"\xD0\x85\x81\x81\xC0\xB3",true));
155+
REQUIRE(test_case.decoding("\xD0\x85\x81\x81\xC0\xB3",test_5.cref(),true));
156+
}
157+
158+
SECTION("inside sequence")
159+
{
160+
simple14::Test_5 test_5;
161+
simple14::Test_5_mref test_5_mref = test_5.mref();
162+
163+
test_5_mref.set_field_5_2().as(1);
164+
165+
auto sequence_5_1_mref = test_5_mref.set_sequence_5_1();
166+
sequence_5_1_mref.resize(1);
167+
168+
{
169+
auto element_sequence = sequence_5_1_mref.front();
170+
element_sequence.set_field_5_4().as(50);
171+
172+
auto sequence_5_2_mref = element_sequence.set_sequence_5_2();
173+
sequence_5_2_mref.resize(1);
174+
175+
{
176+
auto element_sequence_inside = sequence_5_2_mref.front();
177+
element_sequence_inside.set_field_5_6().as(50);
178+
}
179+
}
180+
181+
REQUIRE(test_case.encoding(test_5.cref(),"\xD0\x85\x81\x81\xE0\xB3\x82\xB2",true));
182+
REQUIRE(test_case.decoding("\xD0\x85\x81\x81\xE0\xB3\x82\xB2",test_5.cref(),true));
183+
}
184+
}
185+
186+
TEST_CASE("group sequence inside sequence encoder_V2/decoder_v2","[group_sequence_inside_sequence_encoder_v2_decoder_v2]")
187+
{
188+
fast_test_coding_case_v2<simple14::templates_description> test_case;
189+
190+
SECTION("outside sequence")
191+
{
192+
simple14::Test_6 test_6;
193+
simple14::Test_6_mref test_6_mref = test_6.mref();
194+
195+
// set group
196+
{
197+
auto group_6 = test_6_mref.set_group_6();
198+
auto sequence_6_1_mref = group_6.set_sequence_6_1();
199+
sequence_6_1_mref.resize(1);
200+
201+
//set sequence
202+
{
203+
auto element_sequence = sequence_6_1_mref.front();
204+
element_sequence.set_field_6_3().as(50);
205+
}
206+
}
207+
208+
REQUIRE(test_case.encoding(test_6.cref(),"\xC0\x86\x81\xC0\xB2",true));
209+
REQUIRE(test_case.decoding("\xC0\x86\x81\xC0\xB2",test_6.cref(),true));
210+
}
211+
212+
SECTION("inside sequence")
213+
{
214+
simple14::Test_6 test_6;
215+
simple14::Test_6_mref test_6_mref = test_6.mref();
216+
217+
// set group
218+
{
219+
auto group_6 = test_6_mref.set_group_6();
220+
auto sequence_6_1_mref = group_6.set_sequence_6_1();
221+
sequence_6_1_mref.resize(1);
222+
223+
//set sequence
224+
{
225+
auto element_sequence = sequence_6_1_mref.front();
226+
element_sequence.set_field_6_3().as(50);
227+
228+
auto sequence_6_2_mref = element_sequence.set_sequence_6_2();
229+
sequence_6_2_mref.resize(1);
230+
231+
{
232+
auto element_sequence_inside = sequence_6_2_mref.front();
233+
element_sequence_inside.set_field_6_6().as(50);
234+
}
235+
}
236+
}
237+
238+
REQUIRE(test_case.encoding(test_6.cref(),"\xC0\x86\x81\xD0\xB2\x82\xB2",true));
239+
REQUIRE(test_case.decoding("\xC0\x86\x81\xD0\xB2\x82\xB2",test_6.cref(),true));
240+
}
241+
}

tests/simple13.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,20 @@
2929
</group>
3030
</group>
3131
</template>
32+
<template name="Test_4" id="4">
33+
<group name="group_4_1" presence="optional">
34+
<sequence name="sequence_4">
35+
<length name="field_4_1" id="41">
36+
<constant value="1"/>
37+
</length>
38+
<uInt32 name="field_4_2" id="42">
39+
<constant value="0"/>
40+
</uInt32>
41+
<uInt32 name="field_4_3" id="43">
42+
<copy/>
43+
</uInt32>
44+
</sequence>
45+
<uInt32 name="field_4_4" id="44" presence="optional"><copy/></uInt32>
46+
</group>
47+
</template>
3248
</templates>

0 commit comments

Comments
 (0)