From 507f3fae91de6912056669a37e30699883b949c5 Mon Sep 17 00:00:00 2001 From: Roberto Martin Fantini Date: Fri, 28 Feb 2025 18:00:46 +0100 Subject: [PATCH] Add reusable the encoder and decoder test class --- tests/encoder_decoder_test.cpp | 68 ++++++----------------------- tests/encoder_decoder_test_v2.cpp | 69 ++++++------------------------ tests/fast_test_coding_case.hpp | 52 ++++++++++++++++++++++ tests/fast_test_coding_case_v2.hpp | 49 +++++++++++++++++++++ 4 files changed, 127 insertions(+), 111 deletions(-) create mode 100644 tests/fast_test_coding_case.hpp create mode 100644 tests/fast_test_coding_case_v2.hpp diff --git a/tests/encoder_decoder_test.cpp b/tests/encoder_decoder_test.cpp index 7b9899a7..8c3d1d87 100644 --- a/tests/encoder_decoder_test.cpp +++ b/tests/encoder_decoder_test.cpp @@ -1,58 +1,16 @@ #include "catch.hpp" #include -#include -#include + +#include "fast_test_coding_case.hpp" #include "byte_stream.h" #include "simple12.h" -namespace -{ -class fast_test_coding_case -{ - public: - fast_test_coding_case() - { - encoder_.include({simple12::description()}); - decoder_.include({simple12::description()}); - } - - bool encoding(const mfast::message_cref& msg_ref, const byte_stream& result, bool reset=false) - { - const int buffer_size = 128; - char buffer[buffer_size]; - - std::size_t encoded_size = encoder_.encode(msg_ref, - buffer, - buffer_size, - reset); - - if (result == byte_stream(buffer, encoded_size)) - return true; - - std::cout << byte_stream(buffer, encoded_size); - - INFO( "Got \"" << byte_stream(buffer, encoded_size) << "\" instead." ); - return false; - } - - bool decoding(const byte_stream& bytes, const mfast::message_cref& result, bool reset=false) - { - const char* first = bytes.data(); - mfast::message_cref msg = decoder_.decode(first, first+bytes.size(), reset); - - return (msg == result); - } - - private: - mfast::fast_encoder encoder_; - mfast::fast_decoder decoder_; -}; -} +using namespace test::coding; -TEST_CASE("simple field and sequence optional encoder","[field_sequence_optional_sequence_encoder]") +TEST_CASE("simple field and sequence optional encoder/decoder","[field_sequence_optional_encoder_decoder]") { - fast_test_coding_case test_case; + fast_test_coding_case test_case; SECTION("encode field") { @@ -110,9 +68,9 @@ TEST_CASE("simple field and sequence optional encoder","[field_sequence_optional } } -TEST_CASE("simple field encoder","[field_optional_encoder]") +TEST_CASE("simple field encoder/decoder","[field_optional_encoder_decoder]") { - fast_test_coding_case test_case; + fast_test_coding_case test_case; SECTION("encode fields") { @@ -130,9 +88,9 @@ TEST_CASE("simple field encoder","[field_optional_encoder]") } } -TEST_CASE("simple field and sequence encoder","[field_sequence_encoder]") +TEST_CASE("simple field and sequence encoder/decoder","[field_sequence_encoder_decoder]") { - fast_test_coding_case test_case; + fast_test_coding_case test_case; SECTION("encode fields") { @@ -156,9 +114,9 @@ TEST_CASE("simple field and sequence encoder","[field_sequence_encoder]") } } -TEST_CASE("simple field optional encoder","[field_optional_encoder]") +TEST_CASE("simple field optional encoder/decoder","[field_optional_encoder_decoder]") { - fast_test_coding_case test_case; + fast_test_coding_case test_case; SECTION("encode fields") { @@ -204,9 +162,9 @@ TEST_CASE("simple field optional encoder","[field_optional_encoder]") } } -TEST_CASE("simple field group optional encoder","[field_group_optional_encoder]") +TEST_CASE("simple field group optional encoder/decoder","[field_group_optional_encoder_decoder]") { - fast_test_coding_case test_case; + fast_test_coding_case test_case; SECTION("encode field") { diff --git a/tests/encoder_decoder_test_v2.cpp b/tests/encoder_decoder_test_v2.cpp index f46ba5e8..5261a673 100644 --- a/tests/encoder_decoder_test_v2.cpp +++ b/tests/encoder_decoder_test_v2.cpp @@ -1,54 +1,16 @@ #include "catch.hpp" #include -#include -#include +#include "fast_test_coding_case_v2.hpp" #include "byte_stream.h" #include "simple12.h" -namespace -{ -class fast_test_coding_case_v2 -{ - public: - fast_test_coding_case_v2(): - encoder_v2_(simple12::description()), - decoder_v2_(simple12::description()) - {} - - bool - encoding(const mfast::message_cref& msg_ref, const byte_stream& result, bool reset=false) - { - const int buffer_size = 128; - char buffer[buffer_size]; - - std::size_t encoded_size = encoder_v2_.encode(msg_ref, buffer, buffer_size, reset); - if (result == byte_stream(buffer, encoded_size)) - return true; - - INFO( "Got \"" << byte_stream(buffer, encoded_size) << "\" instead." ); - return false; - } - - bool - decoding(const byte_stream& bytes, const mfast::message_cref& result, bool reset=false) - { - const char* first = bytes.data(); - mfast::message_cref msg = decoder_v2_.decode(first, first+bytes.size(), reset); +using namespace test::coding; - return (msg == result); - } - - private: - mfast::fast_encoder_v2 encoder_v2_; - mfast::fast_decoder_v2<0> decoder_v2_; -}; -} - -TEST_CASE("simple field and sequence optional encoder_v2","[field_sequence_optional_sequence_encoder_v2]") +TEST_CASE("simple field and sequence optional encoder_v2/decoder_v2","[field_sequence_optional_sequence_encoder_v2_decoder2]") { - fast_test_coding_case_v2 test_case; + fast_test_coding_case_v2 test_case; SECTION("encode field") { @@ -106,9 +68,9 @@ TEST_CASE("simple field and sequence optional encoder_v2","[field_sequence_optio } } -TEST_CASE("simple field encoder_v2","[field_optional_encoder_v2]") +TEST_CASE("simple field encoder_v2/decoder_v2","[field_optional_encoder_v2]") { - fast_test_coding_case_v2 test_case; + fast_test_coding_case_v2 test_case; SECTION("encode fields") { @@ -126,9 +88,9 @@ TEST_CASE("simple field encoder_v2","[field_optional_encoder_v2]") } } -TEST_CASE("simple field and sequence encoder_v2","[field_sequence_encoder_v2]") +TEST_CASE("simple field and sequence encoder_v2/decoder_v2","[field_sequence_encoder_v2_decoder_v2]") { - fast_test_coding_case_v2 test_case; + fast_test_coding_case_v2 test_case; SECTION("encode fields") { @@ -152,9 +114,9 @@ TEST_CASE("simple field and sequence encoder_v2","[field_sequence_encoder_v2]") } } -TEST_CASE("simple field optional encoder_v2","[field__optional_encoder_v2]") +TEST_CASE("simple field optional encoder_v2/decoder_v2","[field__optional_encoder_v2_decoder_v2]") { - fast_test_coding_case_v2 test_case; + fast_test_coding_case_v2 test_case; SECTION("encode fields") { @@ -200,25 +162,20 @@ TEST_CASE("simple field optional encoder_v2","[field__optional_encoder_v2]") } } -TEST_CASE("simple field group optional encoder_v2","[field_group_optional_encoder_v2]") +TEST_CASE("simple field group optional encoder_v2/decoder_v2","[field_group_optional_encoder_v2_decoder_v2]") { - fast_test_coding_case_v2 test_case; + fast_test_coding_case_v2 test_case; SECTION("encode field") { simple12::Test_5 test_5; simple12::Test_5_mref test_5_mref = test_5.mref(); test_5_mref.set_field_5_1().as(1); - // Error: Expecting value is \xE0 : 1110 + // \xE0 : 1110 : OK // 1 : Stop Bit. // 1 : Set Template Id. // 1 : Set Field field_5_1 // 0 : Not Set test_5_group - // Get value: F0, expecting E0 - // 1 : Stop Bit. - // 1 : Set Template Id. - // 1 : Set Field field_5_1 - // 1 : Set test_5_group -> False! REQUIRE(test_case.encoding(test_5.cref(),"\xE0\x85\x82",true)); REQUIRE(test_case.decoding("\xE0\x85\x82",test_5.cref(),true)); } diff --git a/tests/fast_test_coding_case.hpp b/tests/fast_test_coding_case.hpp new file mode 100644 index 00000000..0a70a07f --- /dev/null +++ b/tests/fast_test_coding_case.hpp @@ -0,0 +1,52 @@ +#pragma once + +#include +#include +#include +#include "byte_stream.h" + +namespace test +{ +namespace coding +{ +template +class fast_test_coding_case +{ + public: + fast_test_coding_case() + { + encoder_.include({DESC::instance()}); + decoder_.include({DESC::instance()}); + } + + bool encoding(const mfast::message_cref& msg_ref, const byte_stream& result, bool reset=false) + { + const int buffer_size = 128; + char buffer[buffer_size]; + + std::size_t encoded_size = encoder_.encode(msg_ref, + buffer, + buffer_size, + reset); + + if (result == byte_stream(buffer, encoded_size)) + return true; + + INFO( "Got \"" << byte_stream(buffer, encoded_size) << "\" instead." ); + return false; + } + + bool decoding(const byte_stream& bytes, const mfast::message_cref& result, bool reset=false) + { + const char* first = bytes.data(); + mfast::message_cref msg = decoder_.decode(first, first+bytes.size(), reset); + + return (msg == result); + } + + private: + mfast::fast_encoder encoder_; + mfast::fast_decoder decoder_; +}; +} // namespace coding +} // namespace test diff --git a/tests/fast_test_coding_case_v2.hpp b/tests/fast_test_coding_case_v2.hpp new file mode 100644 index 00000000..be06cf30 --- /dev/null +++ b/tests/fast_test_coding_case_v2.hpp @@ -0,0 +1,49 @@ +#pragma once + +#include +#include +#include +#include "byte_stream.h" + +namespace test +{ +namespace coding +{ +template +class fast_test_coding_case_v2 +{ + public: + fast_test_coding_case_v2(): + encoder_v2_(DESC::instance()), + decoder_v2_(DESC::instance()) + {} + + bool + encoding(const mfast::message_cref& msg_ref, const byte_stream& result, bool reset=false) + { + const int buffer_size = 128; + char buffer[buffer_size]; + + std::size_t encoded_size = encoder_v2_.encode(msg_ref, buffer, buffer_size, reset); + if (result == byte_stream(buffer, encoded_size)) + return true; + + INFO( "Got \"" << byte_stream(buffer, encoded_size) << "\" instead." ); + return false; + } + + bool + decoding(const byte_stream& bytes, const mfast::message_cref& result, bool reset=false) + { + const char* first = bytes.data(); + mfast::message_cref msg = decoder_v2_.decode(first, first+bytes.size(), reset); + + return (msg == result); + } + + private: + mfast::fast_encoder_v2 encoder_v2_; + mfast::fast_decoder_v2<0> decoder_v2_; +}; +} // namespace coding +} // namespace test