mirror of
https://github.com/ETLCPP/etl.git
synced 2026-04-30 19:09:10 +08:00
* Remove AppVeyor build status badge Removed AppVeyor build status badge from README. * Update README.md * Update CONTRIBUTING.md Updated the instructions for contributing. * Added etl::type_list to etl::observer * Added etl::type_list to etl::nth_type * Added missing 'typename' to type_list nth_type * Fix for issue 1276 "Data corruption in the etl::bip_buffer_spsc_atomic" (#1277) * Reproduce data corruption bug in the `etl::bip_buffer_spsc_atomic`. * Fix data corruption bug in the `etl::bip_buffer_spsc_atomic`. * Added type_list definitions for nth_type and observer * Added etl::type_list to etl::variant * Updated comments * Addedetl::type~_list to message_router, observer, visitor # Conflicts: # include/etl/observer.h # test/vs2022/etl.vcxproj.filters * Added member type_list type to tuple * Work in progress * Copy changes from other source * Removed unused tests * Fix iter_swap namespace * Add type_list functionality to etl::variant using etl::variant_from_type_list * Add type_list functionality to etl::message_packet using etl::message_packet_from_type_list * Add type_list functionality to etl::message_router using etl::message_router_from_type_list * Add type_list functionality to etl::observer using etl::observer_from_type_list * Add type_list functionality to etl::tuple using etl::tuple_from_type_list * Allow etl::make_index_sequence to be created from an etl::type_list * Add type_list functionality to etl::visitor using etl::visitor_from_type_list * Fix iter_swap namespace * Allow creation of a message_packet with no message types * Allow creation of a message_router with no message types * Updated VS2022 project files * Added missing test files CMakeLists.txt * Fix C++03 compatibility Fixed unused aregument warnings * Synced message_packet generator to updated code * Synced message_router generator to updated code * Synced message_router generator to updated code # Conflicts: # include/etl/generators/message_router_generator.h # include/etl/message_router.h * Fixed missing zero message specialisation for <= C++14 * Fixed missing zero message specialisation for <= C++14 * Fix year_month arithmetic and correct chrono API behavior (#1257) * Fix & add more tests for year_month arithmetic * Minor addtions to previous commit * More missing values to be uninitialized * Update the default constructors to = default and correct default constructor tests accordingly * Fix & add more tests for year_month arithmetic * Minor addtions to previous commit * More missing values to be uninitialized * Update the default constructors to = default and correct default constructor tests accordingly * Restore default constructor behavior for chrono calender * Suppress warnings from std in optimized builds (#1259) When testing with ./run-tests.sh 23 3 10, some warnings from std surfaced which resulted in build errors. * Add template deduction guide for span from vector (#1264) * Create span from vector deduction * Use ivector for deduction. Add vector_ext to test * Add vector pointer to test * Finish tests * Initialize pdata_ext and others * Document how to implement platform specifics (#1262) Some interfaces need to be implemented in every project or platform using the ETL: * etl_get_high_resolution_clock * etl_get_system_clock * etl_get_steady_clock * etl_putchar Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com> * Fix etl::as_bytes for etl::span<const T> (#1266) A missing 'const' in the etl::as_bytes implementation was causing a compile-time error when etl::as_bytes was called on a span of const values. Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com> * Remove some UB in test_vector_non_trivial.cpp (#1268) Some of the tests' UB are detectable by Gcc15 and thus give a compile error due to warnings-as-error flag. Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com> * Update C++26 deprecated constructs to ensure future standard compliance (#1267) * Update C++26 deprecated constructs to ensure future standard compliance I replaced std::is_trivial with a combination of std::is_trivially_default_constructible and std::is_trivially_copyable. Additionally, I added the required comma before the ellipsis in variadic functions to match updated language specifications. * Some additional is_trivial related changes not found directly when compiling tests in C++26 --------- Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com> * Fix return value of get_token_list (#1271) Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com> * Fix etl::tuple template signature error in pair assignment operator (#1265) * Fix etl::tuple template signature error in pair assignment operator * Remove AppVeyor build status badge Removed AppVeyor build status badge from README. * Update README.md * Update etl::tuple to explicitly use etl::pair or std::pair in assignment operator * Added tests for etl::tuple assignment from pair --------- Co-authored-by: Bryton Flecker <bflecker@swe.com> Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com> * Remove advance() on static spans (#1281) * Remove AppVeyor build status badge Removed AppVeyor build status badge from README. * Update README.md * Update CONTRIBUTING.md Updated the instructions for contributing. * Fix for issue 1276 "Data corruption in the etl::bip_buffer_spsc_atomic" (#1277) * Reproduce data corruption bug in the `etl::bip_buffer_spsc_atomic`. * Fix data corruption bug in the `etl::bip_buffer_spsc_atomic`. * Remove advance() on static spans Since the size of a static span is constant, we can't reasonably advance() on it. --------- Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com> Co-authored-by: Sergei <sergej.shirokov@gmail.com> * Add missing includes (#1286) * Remove AppVeyor build status badge Removed AppVeyor build status badge from README. * Update README.md * Update CONTRIBUTING.md Updated the instructions for contributing. * Fix for issue 1276 "Data corruption in the etl::bip_buffer_spsc_atomic" (#1277) * Reproduce data corruption bug in the `etl::bip_buffer_spsc_atomic`. * Fix data corruption bug in the `etl::bip_buffer_spsc_atomic`. * Add missing includes Before this change, the includes needed to be done explicitly by files using basic_string_stream.h, and be included first. This was error prone, especially if includes are reordered (e.g. via the currently defined clang-format rules). --------- Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com> Co-authored-by: Sergei <sergej.shirokov@gmail.com> * Move comparison operators of etl::expected to namespace etl (#1287) * Remove AppVeyor build status badge Removed AppVeyor build status badge from README. * Update README.md * Update CONTRIBUTING.md Updated the instructions for contributing. * Fix for issue 1276 "Data corruption in the etl::bip_buffer_spsc_atomic" (#1277) * Reproduce data corruption bug in the `etl::bip_buffer_spsc_atomic`. * Fix data corruption bug in the `etl::bip_buffer_spsc_atomic`. * Move comparison operators of etl::expected to namespace etl --------- Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com> Co-authored-by: Sergei <sergej.shirokov@gmail.com> * Make typed_storage constructor constexpr (#1291) * Remove AppVeyor build status badge Removed AppVeyor build status badge from README. * Update README.md * Update CONTRIBUTING.md Updated the instructions for contributing. * Fix for issue 1276 "Data corruption in the etl::bip_buffer_spsc_atomic" (#1277) * Reproduce data corruption bug in the `etl::bip_buffer_spsc_atomic`. * Fix data corruption bug in the `etl::bip_buffer_spsc_atomic`. * Make typed_storage constructor constexpr --------- Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com> Co-authored-by: Sergei <sergej.shirokov@gmail.com> * Add basic_format_arg constructor for ibasic_string (#1288) * Allow string as format arg * Remove AppVeyor build status badge Removed AppVeyor build status badge from README. * Update README.md * Update CONTRIBUTING.md Updated the instructions for contributing. * Fix for issue 1276 "Data corruption in the etl::bip_buffer_spsc_atomic" (#1277) * Reproduce data corruption bug in the `etl::bip_buffer_spsc_atomic`. * Fix data corruption bug in the `etl::bip_buffer_spsc_atomic`. * Added test string escaped * Add temporary string test --------- Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com> Co-authored-by: Sergei <sergej.shirokov@gmail.com> * QR Code for Github * Added etl::visitor_from_type_list * accepts(id) for empty router passes on to a sucessor * Fixed incorrect comment from 'tuple' to 'message_router' * PR review changes * PR review changes * Fixed internal constexptr flag in message_packet * Fixed unused variable in unti test --------- Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.co.uk> Co-authored-by: Sergei <sergej.shirokov@gmail.com> Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com> Co-authored-by: Bo Rydberg <2945606+bolry@users.noreply.github.com> Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de> Co-authored-by: Mike Bloom <91038685+mike919192@users.noreply.github.com> Co-authored-by: taltenbach <92919739+taltenbach@users.noreply.github.com> Co-authored-by: Bryton Flecker <fleckerbr@gmail.com> Co-authored-by: Bryton Flecker <bflecker@swe.com>
508 lines
15 KiB
C++
508 lines
15 KiB
C++
/******************************************************************************
|
|
The MIT License(MIT)
|
|
|
|
Embedded Template Library.
|
|
https://github.com/ETLCPP/etl
|
|
https://www.etlcpp.com
|
|
|
|
Copyright(c) 2020 John Wellbelove
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files(the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions :
|
|
|
|
The above copyright notice and this permission notice shall be included in all
|
|
copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
SOFTWARE.
|
|
******************************************************************************/
|
|
|
|
#include "unit_test_framework.h"
|
|
|
|
#include "etl/platform.h"
|
|
#include "etl/message_packet.h"
|
|
|
|
#include <string>
|
|
|
|
//***************************************************************************
|
|
// The set of messages.
|
|
//***************************************************************************
|
|
namespace
|
|
{
|
|
enum
|
|
{
|
|
MESSAGE1,
|
|
MESSAGE2,
|
|
MESSAGE3,
|
|
MESSAGE4
|
|
};
|
|
|
|
struct Message1 : public etl::message<MESSAGE1>
|
|
{
|
|
Message1(int x_)
|
|
: etl::message<MESSAGE1>()
|
|
, x(x_)
|
|
, moved(false)
|
|
, copied(false)
|
|
{
|
|
}
|
|
|
|
Message1(const Message1& other)
|
|
: etl::message<MESSAGE1>()
|
|
, x(other.x)
|
|
, moved(false)
|
|
, copied(true)
|
|
{
|
|
}
|
|
|
|
Message1(Message1&& other)
|
|
: etl::message<MESSAGE1>()
|
|
, x(std::move(other.x))
|
|
, moved(true)
|
|
, copied(false)
|
|
{
|
|
}
|
|
|
|
Message1& operator =(const Message1& other)
|
|
{
|
|
x = other.x;
|
|
moved = false;
|
|
copied = true;
|
|
return *this;
|
|
}
|
|
|
|
Message1& operator =(Message1&& other)
|
|
{
|
|
x = std::move(other.x);
|
|
moved = true;
|
|
copied = false;
|
|
return *this;
|
|
}
|
|
|
|
int x;
|
|
bool moved;
|
|
bool copied;
|
|
};
|
|
|
|
struct Message2 : public etl::message<MESSAGE2>
|
|
{
|
|
Message2(double x_)
|
|
: etl::message<MESSAGE2>()
|
|
, x(x_)
|
|
, moved(false)
|
|
, copied(false)
|
|
{
|
|
}
|
|
|
|
Message2(const Message2& other)
|
|
: etl::message<MESSAGE2>()
|
|
, x(other.x)
|
|
, moved(false)
|
|
, copied(true)
|
|
{
|
|
}
|
|
|
|
Message2(Message2&& other)
|
|
: etl::message<MESSAGE2>()
|
|
, x(std::move(other.x))
|
|
, moved(true)
|
|
, copied(false)
|
|
{
|
|
}
|
|
|
|
Message2& operator =(const Message2& other)
|
|
{
|
|
x = other.x;
|
|
moved = false;
|
|
copied = true;
|
|
return *this;
|
|
}
|
|
|
|
Message2& operator =(Message2&& other)
|
|
{
|
|
x = std::move(other.x);
|
|
moved = true;
|
|
copied = false;
|
|
return *this;
|
|
}
|
|
|
|
double x;
|
|
bool moved;
|
|
bool copied;
|
|
};
|
|
|
|
struct Message3 : public etl::message<MESSAGE3>
|
|
{
|
|
Message3(const std::string& x_)
|
|
: etl::message<MESSAGE3>()
|
|
, x(x_)
|
|
, moved(false)
|
|
, copied(false)
|
|
{
|
|
}
|
|
|
|
Message3(std::string&& x_)
|
|
: etl::message<MESSAGE3>()
|
|
, x(std::move(x_))
|
|
, moved(true)
|
|
, copied(false)
|
|
{
|
|
}
|
|
|
|
Message3(const Message3& other)
|
|
: etl::message<MESSAGE3>()
|
|
, x(other.x)
|
|
, moved(false)
|
|
, copied(true)
|
|
{
|
|
}
|
|
|
|
Message3(Message3&& other)
|
|
: etl::message<MESSAGE3>()
|
|
, x(std::move(other.x))
|
|
, moved(true)
|
|
, copied(false)
|
|
{
|
|
}
|
|
|
|
Message3& operator =(const Message3& other)
|
|
{
|
|
x = other.x;
|
|
moved = false;
|
|
copied = true;
|
|
return *this;
|
|
}
|
|
|
|
Message3& operator =(Message3&& other)
|
|
{
|
|
x = std::move(other.x);
|
|
moved = true;
|
|
copied = false;
|
|
return *this;
|
|
}
|
|
|
|
std::string x;
|
|
bool moved;
|
|
bool copied;
|
|
};
|
|
|
|
struct Message4 : public etl::message<MESSAGE4>
|
|
{
|
|
};
|
|
|
|
using NullPacket = etl::message_packet<>;
|
|
|
|
using Packet = etl::message_packet<Message1, Message2, Message3>;
|
|
|
|
#if ETL_USING_CPP17 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
|
|
using MessageTypes = etl::type_list<Message1, Message2, Message3>;
|
|
using PacketFromMessageTypes = etl::message_packet_from_type_list_t<MessageTypes>;
|
|
#endif
|
|
|
|
struct Object
|
|
{
|
|
void Push(const etl::message_packet<Message1, Message2>& p)
|
|
{
|
|
::new (buffer) etl::message_packet<Message1, Message2>(p);
|
|
}
|
|
|
|
char buffer[100];
|
|
};
|
|
|
|
SUITE(test_message_packet)
|
|
{
|
|
//*************************************************************************
|
|
TEST(message_packet_construction)
|
|
{
|
|
Message1 message1(1);
|
|
Message2 message2(2.2);
|
|
const Message3 message3("3");
|
|
Message4 message4;
|
|
|
|
Packet packet1(message1);
|
|
Packet packet2(message2);
|
|
#if ETL_USING_CPP17 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
|
|
PacketFromMessageTypes packet3(message3);
|
|
#else
|
|
Packet packet3(message3);
|
|
#endif
|
|
|
|
// Should cause a static assert.
|
|
//Packet packet4(message4);
|
|
//Packet packet4((Message4()));
|
|
|
|
CHECK_TRUE((std::is_same<etl::type_list<Message1, Message2, Message3>, typename Packet::message_types>::value));
|
|
#if ETL_USING_CPP17 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
|
|
CHECK_TRUE((std::is_same<etl::type_list<Message1, Message2, Message3>, typename PacketFromMessageTypes::message_types>::value));
|
|
#endif
|
|
CHECK_TRUE((std::is_same<etl::type_list<>, typename NullPacket::message_types>::value));
|
|
|
|
CHECK_EQUAL(MESSAGE1, packet1.get().get_message_id());
|
|
CHECK_EQUAL(MESSAGE2, packet2.get().get_message_id());
|
|
CHECK_EQUAL(MESSAGE3, packet3.get().get_message_id());
|
|
|
|
CHECK(!static_cast<Message1&>(packet1.get()).moved);
|
|
CHECK(!static_cast<Message2&>(packet2.get()).moved);
|
|
CHECK(!static_cast<Message3&>(packet3.get()).moved);
|
|
|
|
CHECK(static_cast<Message1&>(packet1.get()).copied);
|
|
CHECK(static_cast<Message2&>(packet2.get()).copied);
|
|
CHECK(static_cast<Message3&>(packet3.get()).copied);
|
|
|
|
CHECK_EQUAL(1, static_cast<Message1&>(packet1.get()).x);
|
|
CHECK_EQUAL(2.2, static_cast<Message2&>(packet2.get()).x);
|
|
CHECK_EQUAL("3", static_cast<Message3&>(packet3.get()).x);
|
|
}
|
|
|
|
#if !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
|
|
//*************************************************************************
|
|
TEST(message_packet_move_construction)
|
|
{
|
|
Message1 message1(1);
|
|
Message2 message2(2.2);
|
|
|
|
Packet packet1(message1);
|
|
Packet packet2(std::move(message2));
|
|
|
|
CHECK_EQUAL(MESSAGE1, packet1.get().get_message_id());
|
|
CHECK_EQUAL(MESSAGE2, packet2.get().get_message_id());
|
|
|
|
CHECK(!static_cast<Message1&>(packet1.get()).moved);
|
|
CHECK(static_cast<Message2&>(packet2.get()).moved);
|
|
|
|
CHECK(static_cast<Message1&>(packet1.get()).copied);
|
|
CHECK(!static_cast<Message2&>(packet2.get()).copied);
|
|
|
|
CHECK_EQUAL(1, static_cast<Message1&>(packet1.get()).x);
|
|
CHECK_EQUAL(2.2, static_cast<Message2&>(packet2.get()).x);
|
|
}
|
|
#endif
|
|
|
|
//*************************************************************************
|
|
TEST(message_constant_packet_construction)
|
|
{
|
|
Message1 message1(1);
|
|
Message2 message2(2.2);
|
|
Message3 message3("3");
|
|
Message4 message4;
|
|
|
|
const Packet packet1(message1);
|
|
const Packet packet2(message2);
|
|
const Packet packet3(message3);
|
|
|
|
CHECK_EQUAL(MESSAGE1, packet1.get().get_message_id());
|
|
CHECK_EQUAL(MESSAGE2, packet2.get().get_message_id());
|
|
CHECK_EQUAL(MESSAGE3, packet3.get().get_message_id());
|
|
|
|
CHECK_EQUAL(1, static_cast<const Message1&>(packet1.get()).x);
|
|
CHECK_EQUAL(2.2, static_cast<const Message2&>(packet2.get()).x);
|
|
CHECK_EQUAL("3", static_cast<const Message3&>(packet3.get()).x);
|
|
}
|
|
|
|
//*************************************************************************
|
|
TEST(message_packet_construction_from_base)
|
|
{
|
|
Message1 message1(1);
|
|
Message2 message2(2.2);
|
|
Message3 message3("3");
|
|
Message4 message4;
|
|
|
|
Packet packet1(static_cast<etl::imessage&>(message1));
|
|
Packet packet2(static_cast<etl::imessage&>(message2));
|
|
Packet packet3(static_cast<etl::imessage&>(message3));
|
|
|
|
CHECK_THROW(Packet packet4(static_cast<etl::imessage&>(message4)), etl::unhandled_message_exception);
|
|
|
|
CHECK_EQUAL(MESSAGE1, packet1.get().get_message_id());
|
|
CHECK_EQUAL(MESSAGE2, packet2.get().get_message_id());
|
|
CHECK_EQUAL(MESSAGE3, packet3.get().get_message_id());
|
|
|
|
CHECK_EQUAL(1, static_cast<Message1&>(packet1.get()).x);
|
|
CHECK_EQUAL(2.2, static_cast<Message2&>(packet2.get()).x);
|
|
CHECK_EQUAL("3", static_cast<Message3&>(packet3.get()).x);
|
|
}
|
|
|
|
//*************************************************************************
|
|
TEST(message_packet_move_construction_from_base)
|
|
{
|
|
Message1 message1(1);
|
|
Message2 message2(2.2);
|
|
Message3 message3("3");
|
|
Message4 message4;
|
|
|
|
Packet packet1(static_cast<etl::imessage&&>(message1));
|
|
Packet packet2(static_cast<etl::imessage&&>(message2));
|
|
Packet packet3(static_cast<etl::imessage&&>(message3));
|
|
|
|
CHECK_THROW(Packet packet4(static_cast<etl::imessage&>(message4)), etl::unhandled_message_exception);
|
|
|
|
CHECK_EQUAL(MESSAGE1, packet1.get().get_message_id());
|
|
CHECK_EQUAL(MESSAGE2, packet2.get().get_message_id());
|
|
CHECK_EQUAL(MESSAGE3, packet3.get().get_message_id());
|
|
|
|
CHECK_EQUAL(1, static_cast<Message1&>(packet1.get()).x);
|
|
CHECK_EQUAL(2.2, static_cast<Message2&>(packet2.get()).x);
|
|
CHECK_EQUAL("3", static_cast<Message3&>(packet3.get()).x);
|
|
}
|
|
|
|
//*************************************************************************
|
|
TEST(message_packet_copy_constructor)
|
|
{
|
|
Message1 message1(1);
|
|
Message2 message2(2.2);
|
|
|
|
Packet packet1(message1);
|
|
Packet packet2(packet1);
|
|
|
|
CHECK_EQUAL(MESSAGE1, packet1.get().get_message_id());
|
|
CHECK_EQUAL(MESSAGE1, packet2.get().get_message_id());
|
|
|
|
CHECK(!static_cast<Message1&>(packet1.get()).moved);
|
|
CHECK(!static_cast<Message1&>(packet2.get()).moved);
|
|
|
|
CHECK(static_cast<Message1&>(packet1.get()).copied);
|
|
CHECK(static_cast<Message1&>(packet2.get()).copied);
|
|
|
|
CHECK_EQUAL(1, static_cast<Message1&>(packet1.get()).x);
|
|
CHECK_EQUAL(1, static_cast<Message1&>(packet2.get()).x);
|
|
}
|
|
|
|
#if !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
|
|
//*************************************************************************
|
|
TEST(message_packet_move_constructor)
|
|
{
|
|
Message1 message1(1);
|
|
Message2 message2(2.2);
|
|
|
|
Packet packet1(message1);
|
|
|
|
#include "etl/private/diagnostic_pessimizing_move_push.h"
|
|
Packet packet2(std::move(Packet(message1)));
|
|
#include "etl/private/diagnostic_pop.h"
|
|
|
|
CHECK_EQUAL(MESSAGE1, packet1.get().get_message_id());
|
|
CHECK_EQUAL(MESSAGE1, packet2.get().get_message_id());
|
|
|
|
CHECK(!static_cast<Message1&>(packet1.get()).moved);
|
|
CHECK(static_cast<Message1&>(packet2.get()).moved);
|
|
|
|
CHECK(static_cast<Message1&>(packet1.get()).copied);
|
|
CHECK(!static_cast<Message1&>(packet2.get()).copied);
|
|
|
|
CHECK_EQUAL(1, static_cast<Message1&>(packet1.get()).x);
|
|
CHECK_EQUAL(1, static_cast<Message1&>(packet2.get()).x);
|
|
}
|
|
#endif
|
|
|
|
//*************************************************************************
|
|
TEST(message_packet_assignment)
|
|
{
|
|
Message1 message1(1);
|
|
Message2 message2(2.2);
|
|
|
|
Packet packet1(message1);
|
|
Packet packet2;
|
|
|
|
packet2 = packet1;
|
|
|
|
CHECK_EQUAL(MESSAGE1, packet1.get().get_message_id());
|
|
CHECK_EQUAL(MESSAGE1, packet2.get().get_message_id());
|
|
|
|
CHECK(!static_cast<Message1&>(packet1.get()).moved);
|
|
CHECK(!static_cast<Message1&>(packet2.get()).moved);
|
|
|
|
CHECK(static_cast<Message1&>(packet1.get()).copied);
|
|
CHECK(static_cast<Message1&>(packet2.get()).copied);
|
|
|
|
CHECK_EQUAL(1, static_cast<Message1&>(packet1.get()).x);
|
|
CHECK_EQUAL(1, static_cast<Message1&>(packet2.get()).x);
|
|
}
|
|
|
|
#if !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
|
|
//*************************************************************************
|
|
TEST(message_packet_move_assignment)
|
|
{
|
|
Message1 message1(1);
|
|
Message2 message2(2.2);
|
|
|
|
Packet packet1(message1);
|
|
Packet packet2;
|
|
|
|
packet2 = std::move(packet1);
|
|
|
|
CHECK_EQUAL(MESSAGE1, packet1.get().get_message_id());
|
|
CHECK_EQUAL(MESSAGE1, packet2.get().get_message_id());
|
|
|
|
CHECK(!static_cast<Message1&>(packet1.get()).moved);
|
|
CHECK(static_cast<Message1&>(packet2.get()).moved);
|
|
|
|
CHECK(static_cast<Message1&>(packet1.get()).copied);
|
|
CHECK(!static_cast<Message1&>(packet2.get()).copied);
|
|
|
|
CHECK_EQUAL(1, static_cast<Message1&>(packet1.get()).x);
|
|
CHECK_EQUAL(1, static_cast<Message1&>(packet2.get()).x);
|
|
}
|
|
#endif
|
|
|
|
//*************************************************************************
|
|
TEST(message_packet_accepts)
|
|
{
|
|
Message1 message1(1);
|
|
Message2 message2(2.2);
|
|
Message3 message3("3");
|
|
Message4 message4;
|
|
|
|
Packet packet;
|
|
|
|
// From message id.
|
|
CHECK(Packet::accepts(message1.get_message_id()));
|
|
CHECK(Packet::accepts(message2.get_message_id()));
|
|
CHECK(Packet::accepts(message3.get_message_id()));
|
|
CHECK(!Packet::accepts(message4.get_message_id()));
|
|
|
|
// From message.
|
|
CHECK(Packet::accepts(message1));
|
|
CHECK(Packet::accepts(message2));
|
|
CHECK(Packet::accepts(message3));
|
|
CHECK(!Packet::accepts(message4));
|
|
|
|
// From message type.
|
|
CHECK(Packet::accepts<Message1>());
|
|
CHECK(Packet::accepts<Message2>());
|
|
CHECK(Packet::accepts<Message3>());
|
|
CHECK(!Packet::accepts<Message4>());
|
|
|
|
// From static message id.
|
|
CHECK(Packet::accepts<MESSAGE1>());
|
|
CHECK(Packet::accepts<MESSAGE2>());
|
|
CHECK(Packet::accepts<MESSAGE3>());
|
|
CHECK(!Packet::accepts<MESSAGE4>());
|
|
}
|
|
|
|
//*************************************************************************
|
|
TEST(test_message_packet_push_to_queue_bug_845)
|
|
{
|
|
using Packet = etl::message_packet<Message1, Message2>;
|
|
|
|
Object obj;
|
|
|
|
Message1 message1(1);
|
|
Message2 message2(1.2);
|
|
Packet packet1(message1);
|
|
Packet packet2(message2);
|
|
|
|
obj.Push(packet1);
|
|
obj.Push(packet2);
|
|
}
|
|
}
|
|
}
|