Skip to content

Commit e5093f5

Browse files
Merge pull request #155 from martinfantini/enum_test
Correct code for the enum case
2 parents cc87b32 + 4e3cb4d commit e5093f5

8 files changed

Lines changed: 75 additions & 5 deletions

src/mfast/enum_ref.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,15 @@ class MFAST_EXPORT enum_cref : public field_cref {
4545
}
4646
bool is_boolean() const;
4747

48+
protected:
49+
friend class mfast::detail::codec_helper;
50+
51+
void save_to(value_storage &v) const {
52+
v.of_uint64.content_ = this->storage()->of_uint64.content_;
53+
v.defined(true);
54+
v.present(this->present());
55+
}
56+
4857
private:
4958
enum_cref &operator=(const enum_cref &);
5059
};
@@ -70,6 +79,7 @@ class enum_mref : public make_field_mref<enum_cref> {
7079

7180
enum_mref(const enum_mref &) = default;
7281

82+
explicit enum_mref(const field_mref_base &other) : base_type(other) {}
7383
void as(const enum_cref &cref) const {
7484
if (cref.absent()) {
7585
this->omit();

src/mfast/ext_ref.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,12 +250,10 @@ class ext_mref : public ext_ref_properties<OpType, Properties> {
250250
storage->present(true);
251251
}
252252
return mref_type(base_);
253-
;
254253
}
255254

256255
cref_type get() const {
257256
return cref_type(base_);
258-
;
259257
}
260258

261259
bool present() const { return !this->optional() || base_.present(); }

tests/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ FASTTYPEGEN_TARGET(simple_types12 simple12.xml)
2424
FASTTYPEGEN_TARGET(simple_types13 simple13.xml)
2525
FASTTYPEGEN_TARGET(simple_types14 simple14.xml)
2626
FASTTYPEGEN_TARGET(simple_types15 simple15.xml)
27-
27+
FASTTYPEGEN_TARGET(simple_types16 simple16.xml)
2828

2929
FASTTYPEGEN_TARGET(test_types1 test1.xml test2.xml)
3030
FASTTYPEGEN_TARGET(test_types3 test3.xml)
@@ -70,6 +70,7 @@ add_executable (mfast_test
7070
${FASTTYPEGEN_simple_types13_OUTPUTS}
7171
${FASTTYPEGEN_simple_types14_OUTPUTS}
7272
${FASTTYPEGEN_simple_types15_OUTPUTS}
73+
${FASTTYPEGEN_simple_types16_OUTPUTS}
7374
fast_type_gen_test.cpp
7475
dictionary_builder_test.cpp
7576
json_test.cpp
@@ -82,6 +83,8 @@ add_executable (mfast_test
8283
scp_reset_test.cpp
8384
template_repo_base.cpp
8485
message_pmap_test.cpp
86+
enum_encoder_decoder_v2.cpp
87+
enum_encoder_decoder.cpp
8588
)
8689

8790
target_link_libraries (mfast_test

tests/enum_encoder_decoder.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#include "catch.hpp"
2+
#include <mfast.h>
3+
4+
#include "fast_test_coding_case.hpp"
5+
#include "byte_stream.h"
6+
7+
#include "simple16.h"
8+
9+
using namespace test::coding;
10+
11+
TEST_CASE("enum test encoder/decoder","[enum_encoder_decoder]")
12+
{
13+
fast_test_coding_case<simple16::templates_description> test_case;
14+
simple16::Test_1 test_1;
15+
simple16::Test_1_mref test_1_mref = test_1.mref();
16+
test_1_mref.set_discrete().as_Three();
17+
REQUIRE(test_case.encoding(test_1.cref(),"\xC0\x81\x83",true));
18+
REQUIRE(test_case.decoding("\xC0\x81\x83",test_1.cref(),true));
19+
}

tests/enum_encoder_decoder_v2.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#include "catch.hpp"
2+
#include <mfast.h>
3+
4+
#include "fast_test_coding_case_v2.hpp"
5+
#include "byte_stream.h"
6+
7+
#include "simple16.h"
8+
9+
using namespace test::coding;
10+
11+
TEST_CASE("enum test encoder_V2/decoder_v2","[enum_encoder_v2_decoder_v2]")
12+
{
13+
fast_test_coding_case_v2<simple16::templates_description> test_case;
14+
simple16::Test_1 test_1;
15+
simple16::Test_1_mref test_1_mref = test_1.mref();
16+
test_1_mref.set_discrete().as_Three();
17+
REQUIRE(test_case.encoding(test_1.cref(),"\xC0\x81\x83",true));
18+
REQUIRE(test_case.decoding("\xC0\x81\x83",test_1.cref(),true));
19+
}

tests/fast_test_coding_case.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class fast_test_coding_case
3232
if (result == byte_stream(buffer, encoded_size))
3333
return true;
3434

35-
INFO( "Got \"" << byte_stream(buffer, encoded_size) << "\" instead." );
35+
INFO( "Got \"" << byte_stream(buffer, encoded_size) << "\" instead." );
3636
return false;
3737
}
3838

tests/fast_test_coding_case_v2.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class fast_test_coding_case_v2
2727
if (result == byte_stream(buffer, encoded_size))
2828
return true;
2929

30-
INFO( "Got \"" << byte_stream(buffer, encoded_size) << "\" instead." );
30+
INFO( "Got \"" << byte_stream(buffer, encoded_size) << "\" instead." );
3131
return false;
3232
}
3333

tests/simple16.xml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<templates
3+
xmlns="http://www.fixprotocol.org/ns/fast/td/1.2"
4+
xmlns:scp="http://www.fixprotocol.org/ns/fast/scp/1.2"
5+
templateNs="https://www.deutsche-boerse.com/rta">
6+
<define name="DiscreteEnum">
7+
<enum>
8+
<element name="One" value="1"/>
9+
<element name="Three" value="3"/>
10+
<element name="Five" value="5"/>
11+
</enum>
12+
</define>
13+
<!-- Define templates-->
14+
<template name="Test_1" id="1">
15+
<string name="MsgType" id="35"><constant value="DP"/></string>
16+
<field name="discrete" id="2477"><type name="DiscreteEnum"></type></field>
17+
</template>
18+
<template name="Test_2" id="2">
19+
<string name="MsgType" id="36"><constant value="DQ"/></string>
20+
</template>
21+
</templates>

0 commit comments

Comments
 (0)