diff --git a/.gitignore b/.gitignore index a3f4ac99..3797ca0d 100644 --- a/.gitignore +++ b/.gitignore @@ -321,3 +321,4 @@ test/vs2019/Debug-LLVM-NoSTL-Builtins/etl.exe test/vs2019/cmake-build test/vs2019/Debug MSVC - No STL - Built-ins test/vs2019/Test1 +test/vs2019/Test2 diff --git a/include/etl/bip_buffer_spsc_atomic.h b/include/etl/bip_buffer_spsc_atomic.h index ed47b7cc..d6426868 100644 --- a/include/etl/bip_buffer_spsc_atomic.h +++ b/include/etl/bip_buffer_spsc_atomic.h @@ -500,7 +500,9 @@ namespace etl /// Default constructor. //************************************************************************* bip_buffer_spsc_atomic() - : base_t(reinterpret_cast(&buffer[0]), RESERVED_SIZE) + : buffer() + , base_t(reinterpret_cast(&buffer[0]), RESERVED_SIZE) + { } diff --git a/include/etl/fsm.h b/include/etl/fsm.h index cf1216eb..df724384 100644 --- a/include/etl/fsm.h +++ b/include/etl/fsm.h @@ -80,12 +80,17 @@ namespace etl // For internal FSM use. typedef typename etl::larger_type::type fsm_internal_id_t; - template +#if ETL_CPP17_SUPPORTED && !defined(ETL_FSM_FORCE_CPP03) // For C++17 and above + template class fsm_state; +#else + template + class fsm_state; +#endif //*************************************************************************** /// Base exception class for FSM. @@ -178,12 +183,18 @@ namespace etl /// Allows ifsm_state functions to be private. friend class etl::fsm; friend class etl::hfsm; + +#if ETL_CPP17_SUPPORTED && !defined(ETL_FSM_FORCE_CPP03) // For C++17 and above + template + friend class fsm_state; +#else template friend class etl::fsm_state; +#endif //******************************************* /// Gets the id for this state. @@ -480,6 +491,81 @@ namespace etl etl::fsm_state_id_t number_of_states; ///< The number of states. }; +#if ETL_CPP17_SUPPORTED && !defined(ETL_FSM_FORCE_CPP03) // For C++17 and above + + //*************************************************************************** + // The definition for all types. + //*************************************************************************** + template + class fsm_state : public ifsm_state + { + public: + + public: + + enum + { + STATE_ID = STATE_ID_ + }; + + fsm_state() + : ifsm_state(STATE_ID) + { + } + + protected: + + ~fsm_state() + { + } + + inline TContext& get_fsm_context() const + { + return static_cast(ifsm_state::get_fsm_context()); + } + + private: + + //******************************************** + struct result_t + { + bool was_handled; + etl::fsm_state_id_t state_id; + }; + + //******************************************** + etl::fsm_state_id_t process_event(const etl::imessage& message) + { + etl::fsm_state_id_t new_state_id; + + const bool was_handled = (process_event_type(message, new_state_id) || ...); + + if (!was_handled) + { + new_state_id = (p_parent != nullptr) ? p_parent->process_event(message) : static_cast(this)->on_event_unknown(message); + } + + return new_state_id; + } + + //******************************************** + template + bool process_event_type(const etl::imessage& msg, etl::fsm_state_id_t& state_id) + { + if (TMessage::ID == msg.get_message_id()) + { + state_id = static_cast(this)->on_event(static_cast(msg)); + return true; + } + else + { + return false; + } + } + }; + +#else // For C++03, C++11 & C++14 + //*************************************************************************** // The definition for all 16 message types. //*************************************************************************** @@ -1411,6 +1497,8 @@ namespace etl return p_parent ? p_parent->process_event(message) : static_cast(this)->on_event_unknown(message); } }; + +#endif } #include "private/minmax_pop.h" diff --git a/include/etl/generators/fsm_generator.h b/include/etl/generators/fsm_generator.h index 8bd67bb8..131e8018 100644 --- a/include/etl/generators/fsm_generator.h +++ b/include/etl/generators/fsm_generator.h @@ -92,19 +92,24 @@ namespace etl // For internal FSM use. typedef typename etl::larger_type::type fsm_internal_id_t; +#if ETL_CPP17_SUPPORTED && !defined(ETL_FSM_FORCE_CPP03) // For C++17 and above + template + class fsm_state; +#else /*[[[cog import cog - cog.outl("template " % int(Handlers)) + cog.outl("typename>") cog.outl("class fsm_state;") ]]]*/ /*[[[end]]]*/ +#endif //*************************************************************************** /// Base exception class for FSM. @@ -197,6 +202,11 @@ namespace etl /// Allows ifsm_state functions to be private. friend class etl::fsm; friend class etl::hfsm; + +#if ETL_CPP17_SUPPORTED && !defined(ETL_FSM_FORCE_CPP03) // For C++17 and above + template + friend class fsm_state; +#else /*[[[cog import cog cog.outl(" template + class fsm_state : public ifsm_state + { + public: + + public: + + enum + { + STATE_ID = STATE_ID_ + }; + + fsm_state() + : ifsm_state(STATE_ID) + { + } + + protected: + + ~fsm_state() + { + } + + inline TContext& get_fsm_context() const + { + return static_cast(ifsm_state::get_fsm_context()); + } + + private: + + //******************************************** + struct result_t + { + bool was_handled; + etl::fsm_state_id_t state_id; + }; + + //******************************************** + etl::fsm_state_id_t process_event(const etl::imessage& message) + { + etl::fsm_state_id_t new_state_id; + + const bool was_handled = (process_event_type(message, new_state_id) || ...); + + if (!was_handled) + { + new_state_id = (p_parent != nullptr) ? p_parent->process_event(message) : static_cast(this)->on_event_unknown(message); + } + + return new_state_id; + } + + //******************************************** + template + bool process_event_type(const etl::imessage& msg, etl::fsm_state_id_t& state_id) + { + if (TMessage::ID == msg.get_message_id()) + { + state_id = static_cast(this)->on_event(static_cast(msg)); + return true; + } + else + { + return false; + } + } + }; + +#else // For C++03, C++11 & C++14 + /*[[[cog import cog ################################################ @@ -692,6 +778,8 @@ namespace etl cog.outl("};") ]]]*/ /*[[[end]]]*/ + +#endif } #include "private/minmax_pop.h" diff --git a/include/etl/generators/largest_generator.h b/include/etl/generators/largest_generator.h index 0c3225a9..d748e2dd 100644 --- a/include/etl/generators/largest_generator.h +++ b/include/etl/generators/largest_generator.h @@ -396,11 +396,8 @@ namespace etl #endif #if ETL_CPP17_SUPPORTED - template - inline constexpr size_t largest_size_v = largest::size; - - template - inline constexpr size_t largest_alignment_v = largest::alignment; + template + inline constexpr size_t largest_size = largest::size; #endif #else diff --git a/include/etl/generators/message_packet_generator.h b/include/etl/generators/message_packet_generator.h index 523840f0..854a575e 100644 --- a/include/etl/generators/message_packet_generator.h +++ b/include/etl/generators/message_packet_generator.h @@ -74,6 +74,297 @@ cog.outl("//******************************************************************** namespace etl { +#if ETL_CPP17_SUPPORTED && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03) + //*************************************************************************** + // The definition for all message types. + //*************************************************************************** + template + class message_packet + { + public: + + //******************************************** + message_packet() + : valid(false) + { + } + + //******************************************** + explicit message_packet(const etl::imessage& msg) + : valid(true) + { + add_new_message(msg); + } + + //******************************************** + explicit message_packet(etl::imessage&& msg) + : valid(true) + { + add_new_message(etl::move(msg)); + } + + //******************************************** + template , etl::imessage> && + !etl::is_same_v, etl::message_packet>, int> = 0> + explicit message_packet(TMessage&& msg) + : valid(true) + { + add_new_message(etl::forward(msg)); + } + + //********************************************** + message_packet(const message_packet& other) + : valid(other.is_valid()) + { + if (valid) + { + add_new_message(other.get()); + } + } + + //********************************************** + message_packet(message_packet&& other) + : valid(other.is_valid()) + { + if (valid) + { + add_new_message(etl::move(other.get())); + } + } + + //********************************************** + message_packet& operator =(const message_packet& rhs) + { + delete_current_message(); + valid = rhs.is_valid(); + if (valid) + { + add_new_message(rhs.get()); + } + + return *this; + } + + //********************************************** + message_packet& operator =(message_packet&& rhs) + { + delete_current_message(); + valid = rhs.is_valid(); + if (valid) + { + add_new_message(etl::move(rhs.get())); + } + + return *this; + } + + //******************************************** + ~message_packet() + { + delete_current_message(); + } + + //******************************************** + etl::imessage& get() ETL_NOEXCEPT + { + return *static_cast(data); + } + + //******************************************** + const etl::imessage& get() const ETL_NOEXCEPT + { + return *static_cast(data); + } + + //******************************************** + bool is_valid() const + { + return valid; + } + + //********************************************** + static ETL_CONSTEXPR bool accepts(etl::message_id_t id) + { + return (accepts_message(id) || ...); + } + + //********************************************** + static ETL_CONSTEXPR bool accepts(const etl::imessage& msg) + { + return accepts(msg.get_message_id()); + } + + //********************************************** + template + static ETL_CONSTEXPR bool accepts() + { + return (accepts_message() || ...); + } + + //********************************************** + template + static ETL_CONSTEXPR + typename etl::enable_if::value, bool>::type + accepts() + { + return accepts(); + } + + enum + { + SIZE = etl::largest::size, + ALIGNMENT = etl::largest::alignment + }; + + private: + + //********************************************** + template + static ETL_CONSTEXPR bool accepts_message() + { + return Id1 == Id2; + } + + //********************************************** + template + static ETL_CONSTEXPR bool accepts_message(etl::message_id_t id2) + { + return Id1 == id2; + } + + //******************************************** + void delete_current_message() + { + if (valid) + { + etl::imessage* pmsg = static_cast(data); + +#if defined(ETL_MESSAGES_ARE_VIRTUAL) || defined(ETL_POLYMORPHIC_MESSAGES) + pmsg->~imessage(); +#else + if (!(delete_current_message_type(pmsg->get_message_id()) || ...)) + { + ETL_ALWAYS_ASSERT(ETL_ERROR(unhandled_message_exception)); + } +#endif + } + } + + //******************************************** + void add_new_message(const etl::imessage& msg) + { + if (!(add_new_message_type(msg) || ...)) + { + ETL_ALWAYS_ASSERT(ETL_ERROR(unhandled_message_exception)); + } + } + + //******************************************** + void add_new_message(etl::imessage&& msg) + { + if (!(add_new_message_type(etl::move(msg)) || ...)) + { + ETL_ALWAYS_ASSERT(ETL_ERROR(unhandled_message_exception)); + } + } + + //******************************************** + template , etl::imessage>, int> = 0> + void add_new_message(TMessage&& msg) + { + if (!(add_new_message_type::ID>(etl::forward(msg)) || ...)) + { + ETL_ALWAYS_ASSERT(ETL_ERROR(unhandled_message_exception)); + } + } + + typename etl::aligned_storage::type data; + bool valid; + + private: + + //******************************************** + template + bool delete_current_message_type(etl::message_id_t Id) + { + if (TType::ID == Id) + { + static_cast(data)->~TType(); + return true; + } + else + { + return false; + } + } + + //******************************************** + template + bool add_new_message_type(const etl::imessage& msg) + { + if (TType::ID == msg.get_message_id()) + { + void* p = data; + new (p) TType(static_cast(msg)); + return true; + } + else + { + return false; + } + } + + //******************************************** + template + bool add_new_message_type(const etl::imessage& msg) + { + if (TType::ID == Id) + { + void* p = data; + new (p) TType(static_cast(msg)); + return true; + } + else + { + return false; + } + } + + //******************************************** + template + bool add_new_message_type(etl::imessage&& msg) + { + if (TType::ID == msg.get_message_id()) + { + void* p = data; + new (p) TType(static_cast(msg)); + return true; + } + else + { + return false; + } + } + + //******************************************** + template + bool add_new_message_type(etl::imessage&& msg) + { + if (TType::ID == Id) + { + void* p = data; + new (p) TType(static_cast(msg)); + return true; + } + else + { + return false; + } + } + }; + +#else + /*[[[cog import cog ################################################ @@ -539,6 +830,7 @@ namespace etl cog.outl("};") ]]]*/ /*[[[end]]]*/ +#endif } #endif diff --git a/include/etl/generators/message_router_generator.h b/include/etl/generators/message_router_generator.h index eda0338f..082ce2eb 100644 --- a/include/etl/generators/message_router_generator.h +++ b/include/etl/generators/message_router_generator.h @@ -307,6 +307,109 @@ namespace etl destination.receive(message); } +#if ETL_CPP17_SUPPORTED && !defined(ETL_MESSAGE_ROUTER_FORCE_CPP03) + //*************************************************************************** + // The definition for all message types. + //*************************************************************************** + template + class message_router : public imessage_router + { + public: + + typedef etl::message_packet message_packet; + + //********************************************** + message_router(etl::message_router_id_t id_) + : imessage_router(id_) + { + ETL_ASSERT(id_ <= etl::imessage_router::MAX_MESSAGE_ROUTER, ETL_ERROR(etl::message_router_illegal_id)); + } + + //********************************************** + message_router(etl::message_router_id_t id_, etl::imessage_router& successor_) + : imessage_router(id_, successor_) + { + ETL_ASSERT(id_ <= etl::imessage_router::MAX_MESSAGE_ROUTER, ETL_ERROR(etl::message_router_illegal_id)); + } + + //********************************************** + using etl::imessage_router::receive; + + void receive(const etl::imessage& msg) ETL_OVERRIDE + { + const bool was_handled = (receive_message_type(msg) || ...); + + if (!was_handled) + { + if (has_successor()) + { + get_successor().receive(msg); + } + else + { + static_cast(this)->on_receive_unknown(msg); + } + } + } + + //********************************************** + using imessage_router::accepts; + + bool accepts(etl::message_id_t id) const ETL_OVERRIDE + { + return (accepts_type(id) || ...); + } + + //******************************************** + ETL_DEPRECATED bool is_null_router() const ETL_OVERRIDE + { + return false; + } + + //******************************************** + bool is_producer() const ETL_OVERRIDE + { + return true; + } + + //******************************************** + bool is_consumer() const ETL_OVERRIDE + { + return true; + } + + private: + + //******************************************** + template + bool receive_message_type(const etl::imessage& msg) + { + if (TMessage::ID == msg.get_message_id()) + { + static_cast(this)->on_receive(static_cast(msg)); + return true; + } + else + { + return false; + } + } + + //******************************************** + template + bool accepts_type(etl::message_id_t id) const + { + if (TMessage::ID == id) + { + return true; + } + else + { + return false; + } + } + }; +#else /*[[[cog import cog ################################################ @@ -536,6 +639,7 @@ namespace etl cog.outl("};") ]]]*/ /*[[[end]]]*/ +#endif } #endif diff --git a/include/etl/largest.h b/include/etl/largest.h index cb5f390b..210b4cee 100644 --- a/include/etl/largest.h +++ b/include/etl/largest.h @@ -347,6 +347,11 @@ namespace etl using largest_t = typename largest::type; #endif +#if ETL_CPP17_SUPPORTED + template + inline constexpr size_t largest_size = largest::size; +#endif + #else //*************************************************************************** /// Template to determine the largest type, size and alignment. diff --git a/include/etl/message_packet.h b/include/etl/message_packet.h index 6bbb3e52..fbdfc342 100644 --- a/include/etl/message_packet.h +++ b/include/etl/message_packet.h @@ -62,6 +62,297 @@ SOFTWARE. namespace etl { +#if ETL_CPP17_SUPPORTED && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03) + //*************************************************************************** + // The definition for all message types. + //*************************************************************************** + template + class message_packet + { + public: + + //******************************************** + message_packet() + : valid(false) + { + } + + //******************************************** + explicit message_packet(const etl::imessage& msg) + : valid(true) + { + add_new_message(msg); + } + + //******************************************** + explicit message_packet(etl::imessage&& msg) + : valid(true) + { + add_new_message(etl::move(msg)); + } + + //******************************************** + template , etl::imessage> && + !etl::is_same_v, etl::message_packet>, int> = 0> + explicit message_packet(TMessage&& msg) + : valid(true) + { + add_new_message(etl::forward(msg)); + } + + //********************************************** + message_packet(const message_packet& other) + : valid(other.is_valid()) + { + if (valid) + { + add_new_message(other.get()); + } + } + + //********************************************** + message_packet(message_packet&& other) + : valid(other.is_valid()) + { + if (valid) + { + add_new_message(etl::move(other.get())); + } + } + + //********************************************** + message_packet& operator =(const message_packet& rhs) + { + delete_current_message(); + valid = rhs.is_valid(); + if (valid) + { + add_new_message(rhs.get()); + } + + return *this; + } + + //********************************************** + message_packet& operator =(message_packet&& rhs) + { + delete_current_message(); + valid = rhs.is_valid(); + if (valid) + { + add_new_message(etl::move(rhs.get())); + } + + return *this; + } + + //******************************************** + ~message_packet() + { + delete_current_message(); + } + + //******************************************** + etl::imessage& get() ETL_NOEXCEPT + { + return *static_cast(data); + } + + //******************************************** + const etl::imessage& get() const ETL_NOEXCEPT + { + return *static_cast(data); + } + + //******************************************** + bool is_valid() const + { + return valid; + } + + //********************************************** + static ETL_CONSTEXPR bool accepts(etl::message_id_t id) + { + return (accepts_message(id) || ...); + } + + //********************************************** + static ETL_CONSTEXPR bool accepts(const etl::imessage& msg) + { + return accepts(msg.get_message_id()); + } + + //********************************************** + template + static ETL_CONSTEXPR bool accepts() + { + return (accepts_message() || ...); + } + + //********************************************** + template + static ETL_CONSTEXPR + typename etl::enable_if::value, bool>::type + accepts() + { + return accepts(); + } + + enum + { + SIZE = etl::largest::size, + ALIGNMENT = etl::largest::alignment + }; + + private: + + //********************************************** + template + static ETL_CONSTEXPR bool accepts_message() + { + return Id1 == Id2; + } + + //********************************************** + template + static ETL_CONSTEXPR bool accepts_message(etl::message_id_t id2) + { + return Id1 == id2; + } + + //******************************************** + void delete_current_message() + { + if (valid) + { + etl::imessage* pmsg = static_cast(data); + +#if defined(ETL_MESSAGES_ARE_VIRTUAL) || defined(ETL_POLYMORPHIC_MESSAGES) + pmsg->~imessage(); +#else + if (!(delete_current_message_type(pmsg->get_message_id()) || ...)) + { + ETL_ALWAYS_ASSERT(ETL_ERROR(unhandled_message_exception)); + } +#endif + } + } + + //******************************************** + void add_new_message(const etl::imessage& msg) + { + if (!(add_new_message_type(msg) || ...)) + { + ETL_ALWAYS_ASSERT(ETL_ERROR(unhandled_message_exception)); + } + } + + //******************************************** + void add_new_message(etl::imessage&& msg) + { + if (!(add_new_message_type(etl::move(msg)) || ...)) + { + ETL_ALWAYS_ASSERT(ETL_ERROR(unhandled_message_exception)); + } + } + + //******************************************** + template , etl::imessage>, int> = 0> + void add_new_message(TMessage&& msg) + { + if (!(add_new_message_type::ID>(etl::forward(msg)) || ...)) + { + ETL_ALWAYS_ASSERT(ETL_ERROR(unhandled_message_exception)); + } + } + + typename etl::aligned_storage::type data; + bool valid; + + private: + + //******************************************** + template + bool delete_current_message_type(etl::message_id_t Id) + { + if (TType::ID == Id) + { + static_cast(data)->~TType(); + return true; + } + else + { + return false; + } + } + + //******************************************** + template + bool add_new_message_type(const etl::imessage& msg) + { + if (TType::ID == msg.get_message_id()) + { + void* p = data; + new (p) TType(static_cast(msg)); + return true; + } + else + { + return false; + } + } + + //******************************************** + template + bool add_new_message_type(const etl::imessage& msg) + { + if (TType::ID == Id) + { + void* p = data; + new (p) TType(static_cast(msg)); + return true; + } + else + { + return false; + } + } + + //******************************************** + template + bool add_new_message_type(etl::imessage&& msg) + { + if (TType::ID == msg.get_message_id()) + { + void* p = data; + new (p) TType(static_cast(msg)); + return true; + } + else + { + return false; + } + } + + //******************************************** + template + bool add_new_message_type(etl::imessage&& msg) + { + if (TType::ID == Id) + { + void* p = data; + new (p) TType(static_cast(msg)); + return true; + } + else + { + return false; + } + } + }; + +#else + //*************************************************************************** // The definition for all 16 message types. //*************************************************************************** @@ -3638,6 +3929,7 @@ namespace etl typename etl::aligned_storage::type data; bool valid; }; +#endif } #endif diff --git a/include/etl/message_router.h b/include/etl/message_router.h index ab6d380b..03b12b8f 100644 --- a/include/etl/message_router.h +++ b/include/etl/message_router.h @@ -295,6 +295,109 @@ namespace etl destination.receive(message); } +#if ETL_CPP17_SUPPORTED && !defined(ETL_MESSAGE_ROUTER_FORCE_CPP03) + //*************************************************************************** + // The definition for all message types. + //*************************************************************************** + template + class message_router : public imessage_router + { + public: + + typedef etl::message_packet message_packet; + + //********************************************** + message_router(etl::message_router_id_t id_) + : imessage_router(id_) + { + ETL_ASSERT(id_ <= etl::imessage_router::MAX_MESSAGE_ROUTER, ETL_ERROR(etl::message_router_illegal_id)); + } + + //********************************************** + message_router(etl::message_router_id_t id_, etl::imessage_router& successor_) + : imessage_router(id_, successor_) + { + ETL_ASSERT(id_ <= etl::imessage_router::MAX_MESSAGE_ROUTER, ETL_ERROR(etl::message_router_illegal_id)); + } + + //********************************************** + using etl::imessage_router::receive; + + void receive(const etl::imessage& msg) ETL_OVERRIDE + { + const bool was_handled = (receive_message_type(msg) || ...); + + if (!was_handled) + { + if (has_successor()) + { + get_successor().receive(msg); + } + else + { + static_cast(this)->on_receive_unknown(msg); + } + } + } + + //********************************************** + using imessage_router::accepts; + + bool accepts(etl::message_id_t id) const ETL_OVERRIDE + { + return (accepts_type(id) || ...); + } + + //******************************************** + ETL_DEPRECATED bool is_null_router() const ETL_OVERRIDE + { + return false; + } + + //******************************************** + bool is_producer() const ETL_OVERRIDE + { + return true; + } + + //******************************************** + bool is_consumer() const ETL_OVERRIDE + { + return true; + } + + private: + + //******************************************** + template + bool receive_message_type(const etl::imessage& msg) + { + if (TMessage::ID == msg.get_message_id()) + { + static_cast(this)->on_receive(static_cast(msg)); + return true; + } + else + { + return false; + } + } + + //******************************************** + template + bool accepts_type(etl::message_id_t id) const + { + if (TMessage::ID == id) + { + return true; + } + else + { + return false; + } + } + }; +#else //*************************************************************************** // The definition for all 16 message types. //*************************************************************************** @@ -1790,6 +1893,7 @@ namespace etl return true; } }; +#endif } #endif diff --git a/include/etl/version.h b/include/etl/version.h index 581d4f6b..129a8b88 100644 --- a/include/etl/version.h +++ b/include/etl/version.h @@ -38,7 +38,7 @@ SOFTWARE. ///\ingroup utilities #define ETL_VERSION_MAJOR 20 -#define ETL_VERSION_MINOR 15 +#define ETL_VERSION_MINOR 16 #define ETL_VERSION_PATCH 0 #define ETL_VERSION ETL_STRINGIFY(ETL_VERSION_MAJOR) "." ETL_STRINGIFY(ETL_VERSION_MINOR) "." ETL_STRINGIFY(ETL_VERSION_PATCH) #define ETL_VERSION_W ETL_STRINGIFY(ETL_VERSION_MAJOR) L"." ETL_STRINGIFY(ETL_VERSION_MINOR) L"." ETL_STRINGIFY(ETL_VERSION_PATCH) diff --git a/library.json b/library.json index 98bbae72..c12b64fb 100644 --- a/library.json +++ b/library.json @@ -1,6 +1,6 @@ { "name": "ETL Embedded Template Library", - "version": "20.15.0", + "version": "20.16.0", "author s": { "name": "John Wellbelove", "email": "john.wellbelove@etlcpp.com" diff --git a/library.properties b/library.properties index d09ea365..70a6923a 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=Embedded Template Library ETL -version=20.15.0 +version=20.16.0 author= John Wellbelove maintainer=John Wellbelove license=MIT diff --git a/meson.build b/meson.build index d438f0d6..11c99180 100644 --- a/meson.build +++ b/meson.build @@ -112,6 +112,7 @@ etl_test_sources = files( 'test/test_user_type.cpp', 'test/test_utility.cpp', 'test/test_variant_legacy.cpp', + 'test/test_variant_variadic.cpp' 'test/test_variant_pool.cpp', 'test/test_variant_variadic.cpp', 'test/test_vector.cpp', diff --git a/support/Release notes.txt b/support/Release notes.txt index 11deb07f..06259d00 100644 --- a/support/Release notes.txt +++ b/support/Release notes.txt @@ -1,3 +1,8 @@ +=============================================================================== +20.16.0 +Added C++17 variadic versions of etl::message_router ans etl::fsm +Fixed meson.build + =============================================================================== 20.15.0 Added a Bipartite buffer, by Benedek Kupper. diff --git a/test/etl_profile.h b/test/etl_profile.h index d57156b7..b5e1744b 100644 --- a/test/etl_profile.h +++ b/test/etl_profile.h @@ -95,6 +95,10 @@ SOFTWARE. #define ETL_CRC_FORCE_CPP03 #define ETL_MEM_CAST_FORCE_CPP03 #define ETL_OBSERVER_FORCE_CPP03 + #define ETL_MESSAGE_PACKET_FORCE_CPP03 + #define ETL_OBSERVER_FORCE_CPP03 + #define ETL_MESSAGE_ROUTER_FORCE_CPP03 + #define ETL_FSM_FORCE_CPP03 #endif #if defined(ETL_FORCE_TEST_CPP11) diff --git a/test/runsanitychecks.sh b/test/runsanitychecks.sh index a0de3ff3..de9b5486 100755 --- a/test/runsanitychecks.sh +++ b/test/runsanitychecks.sh @@ -16,42 +16,90 @@ echo "-----------------------------------------------" echo "GCC - STL"; } | tee -a ../log.txt g++ --version | head --lines=1 | tee -a ../log.txt CC=gcc CXX=g++ cmake -E chdir bgcc cmake --cmake-clean-cache -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bgcc || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bgcc +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi { echo ""; echo "GCC - No STL"; } | tee -a ../log.txt g++ --version | head --lines=1 | tee -a ../log.txt CC=gcc CXX=g++ cmake -E chdir bgcc cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bgcc || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bgcc +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi { echo ""; echo "GCC - No STL - Builtins"; } | tee -a ../log.txt g++ --version | head --lines=1 | tee -a ../log.txt CC=gcc CXX=g++ cmake -E chdir bgcc cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=ON -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bgcc || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bgcc +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi ##{ echo ""; echo "GCC - No STL - User defined traits"; } | tee -a ../log.txt #g++ --version | head --lines=1 | tee -a ../log.txt #CC=gcc CXX=g++ cmake -E chdir bgcc cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=ON .. -#cmake --build bgcc || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +#cmake --build bgcc +#if [ $? -eq 0 ]; then +# echo "Passed" +#else +# echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +# exit $? +#fi { echo ""; echo "Clang - STL"; } | tee -a ../log.txt clang++ --version | head --lines=1 | tee -a ../log.txt CC=clang CXX=clang++ cmake -E chdir bclang cmake --cmake-clean-cache -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bclang || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bclang +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi { echo ""; echo "Clang - No STL"; } | tee -a ../log.txt clang++ --version | head --lines=1 | tee -a ../log.txt CC=clang CXX=clang++ cmake -E chdir bclang cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bclang || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bclang +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi { echo ""; echo "Clang - No STL - Builtins"; } | tee -a ../log.txt clang++ --version | head --lines=1 | tee -a ../log.txt CC=clang CXX=clang++ cmake -E chdir bclang cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=ON -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bclang || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bclang +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi ##{ echo ""; echo "Clang - No STL - User defined traits"; } | tee -a ../log.txt #clang++ --version | head --lines=1 | tee -a ../log.txt #CC=clang CXX=clang++ cmake -E chdir bclang cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=ON .. -#cmake --build bclang || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +#cmake --build bclang +#if [ $? -eq 0 ]; then +# echo "Passed" +#else +# echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +# exit $? +#fi ############################################################################### cd ../c++11 || exit 1 @@ -64,42 +112,90 @@ echo "-----------------------------------------------" echo "GCC - STL"; } | tee -a ../log.txt g++ --version | head --lines=1 | tee -a ../log.txt CC=gcc CXX=g++ cmake -E chdir bgcc cmake --cmake-clean-cache -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bgcc || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bgcc +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi { echo ""; echo "GCC - No STL"; } | tee -a ../log.txt g++ --version | head --lines=1 | tee -a ../log.txt CC=gcc CXX=g++ cmake -E chdir bgcc cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bgcc || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bgcc +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi { echo ""; echo "GCC - No STL - Builtins"; } | tee -a ../log.txt g++ --version | head --lines=1 | tee -a ../log.txt CC=gcc CXX=g++ cmake -E chdir bgcc cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=ON -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bgcc || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bgcc +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi ##{ echo ""; echo "GCC - No STL - User defined traits"; } | tee -a ../log.txt #g++ --version | head --lines=1 | tee -a ../log.txt #CC=gcc CXX=g++ cmake -E chdir bgcc cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=ON .. -#cmake --build bgcc || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +#cmake --build bgcc +#if [ $? -eq 0 ]; then +# echo "Passed" +#else +# echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +# exit $? +#fi { echo ""; echo "Clang - STL"; } | tee -a ../log.txt clang++ --version | head --lines=1 | tee -a ../log.txt CC=clang CXX=clang++ cmake -E chdir bclang cmake --cmake-clean-cache -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bclang || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bclang +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi { echo ""; echo "Clang - No STL"; } | tee -a ../log.txt clang++ --version | head --lines=1 | tee -a ../log.txt CC=clang CXX=clang++ cmake -E chdir bclang cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bclang || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bclang +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi { echo ""; echo "Clang - No STL - Builtins"; } | tee -a ../log.txt clang++ --version | head --lines=1 | tee -a ../log.txt CC=clang CXX=clang++ cmake -E chdir bclang cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=ON -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bclang || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bclang +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi ##{ echo ""; echo "Clang - No STL - User defined traits"; } | tee -a ../log.txt #clang++ --version | head --lines=1 | tee -a ../log.txt #CC=clang CXX=clang++ cmake -E chdir bclang cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=ON .. -#cmake --build bclang || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +#cmake --build bclang +#if [ $? -eq 0 ]; then +# echo "Passed" +#else +# echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +# exit $? +#fi ############################################################################### cd ../c++14 || exit 1 @@ -112,42 +208,90 @@ echo "-----------------------------------------------" echo "GCC - STL"; } | tee -a ../log.txt g++ --version | head --lines=1 | tee -a ../log.txt CC=gcc CXX=g++ cmake -E chdir bgcc cmake --cmake-clean-cache -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bgcc || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bgcc +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi { echo ""; echo "GCC - No STL"; } | tee -a ../log.txt g++ --version | head --lines=1 | tee -a ../log.txt CC=gcc CXX=g++ cmake -E chdir bgcc cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bgcc || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bgcc +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi { echo ""; echo "GCC - No STL - Builtins"; } | tee -a ../log.txt g++ --version | head --lines=1 | tee -a ../log.txt CC=gcc CXX=g++ cmake -E chdir bgcc cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=ON -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bgcc || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bgcc +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi ##{ echo ""; echo "GCC - No STL - User defined traits"; } | tee -a ../log.txt #g++ --version | head --lines=1 | tee -a ../log.txt #CC=gcc CXX=g++ cmake -E chdir bgcc cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=ON .. -#cmake --build bgcc || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +#cmake --build bgcc +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi { echo ""; echo "Clang - STL"; } | tee -a ../log.txt clang++ --version | head --lines=1 | tee -a ../log.txt CC=clang CXX=clang++ cmake -E chdir bclang cmake --cmake-clean-cache -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bclang || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bclang +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi { echo ""; echo "Clang - No STL"; } | tee -a ../log.txt clang++ --version | head --lines=1 | tee -a ../log.txt CC=clang CXX=clang++ cmake -E chdir bclang cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bclang || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bclang +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi { echo ""; echo "Clang - No STL - Builtins"; } | tee -a ../log.txt clang++ --version | head --lines=1 | tee -a ../log.txt CC=clang CXX=clang++ cmake -E chdir bclang cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=ON -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bclang || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bclang +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi ##{ echo ""; echo "Clang - No STL - User defined traits"; } | tee -a ../log.txt #clang++ --version | head --lines=1 | tee -a ../log.txt #CC=clang CXX=clang++ cmake -E chdir bclang cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=ON .. -#cmake --build bclang || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +#cmake --build bclang +#if [ $? -eq 0 ]; then +# echo "Passed" +#else +# echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +# exit $? +#fi ############################################################################### cd ../c++17 || exit 1 @@ -160,42 +304,90 @@ echo "-----------------------------------------------" echo "GCC - STL"; } | tee -a ../log.txt g++ --version | head --lines=1 | tee -a ../log.txt CC=gcc CXX=g++ cmake -E chdir bgcc cmake --cmake-clean-cache -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bgcc || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bgcc +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi { echo ""; echo "GCC - No STL"; } | tee -a ../log.txt g++ --version | head --lines=1 | tee -a ../log.txt CC=gcc CXX=g++ cmake -E chdir bgcc cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bgcc || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bgcc +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi { echo ""; echo "GCC - No STL - Builtins"; } | tee -a ../log.txt g++ --version | head --lines=1 | tee -a ../log.txt CC=gcc CXX=g++ cmake -E chdir bgcc cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=ON -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bgcc || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bgcc +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi ##{ echo ""; echo "GCC - No STL - User defined traits"; } | tee -a ../log.txt #g++ --version | head --lines=1 | tee -a ../log.txt #CC=gcc CXX=g++ cmake -E chdir bgcc cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=ON .. -#cmake --build bgcc || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +#cmake --build bgcc +#if [ $? -eq 0 ]; then +# echo "Passed" +#else +# echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +# exit $? +#fi { echo ""; echo "Clang - STL"; } | tee -a ../log.txt clang++ --version | head --lines=1 | tee -a ../log.txt CC=clang CXX=clang++ cmake -E chdir bclang cmake --cmake-clean-cache -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bclang || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bclang +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi { echo ""; echo "Clang - No STL"; } | tee -a ../log.txt clang++ --version | head --lines=1 | tee -a ../log.txt CC=clang CXX=clang++ cmake -E chdir bclang cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bclang || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bclang +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi { echo ""; echo "Clang - No STL - Builtins"; } | tee -a ../log.txt clang++ --version | head --lines=1 | tee -a ../log.txt CC=clang CXX=clang++ cmake -E chdir bclang cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=ON -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -cmake --build bclang || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +cmake --build bclang +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi ##{ echo ""; echo "Clang - No STL - User defined traits"; } | tee -a ../log.txt #clang++ --version | head --lines=1 | tee -a ../log.txt #CC=clang CXX=clang++ cmake -E chdir bclang cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=ON .. -#cmake --build bclang || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +#cmake --build bclang +#if [ $? -eq 0 ]; then +# echo "Passed" +#else +# echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +# exit $? +#fi { echo "" echo "-----------------------------------------------" diff --git a/test/runtests.sh b/test/runtests.sh index 9bbb9c4f..4c887d8e 100755 --- a/test/runtests.sh +++ b/test/runtests.sh @@ -9,7 +9,13 @@ echo " GCC" | tee -a log.txt echo "-----------------------------------------------" | tee -a log.txt gcc --version | grep gcc | tee -a log.txt CC=gcc CXX=g++ cmake --cmake-clean-cache -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -make -j8 || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +make -j8 +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi ./etl_tests | tee log.txt echo "" echo "-----------------------------------------------" | tee -a log.txt @@ -17,7 +23,13 @@ echo " GCC - No STL" | tee -a log.txt echo "-----------------------------------------------" | tee -a log.txt gcc --version | grep gcc | tee -a log.txt CC=gcc CXX=g++ cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -make -j8 || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +make -j8 +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi ./etl_tests | tee log.txt echo "" echo "-----------------------------------------------" | tee -a log.txt @@ -25,7 +37,13 @@ echo " GCC - No STL - Builtins" | tee -a log.txt echo "-----------------------------------------------" | tee -a log.txt gcc --version | grep gcc | tee -a log.txt CC=gcc CXX=g++ cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=ON -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -make -j8 || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +make -j8 +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi ./etl_tests | tee log.txt echo "" echo "-----------------------------------------------" | tee -a log.txt @@ -33,7 +51,13 @@ echo " Clang" | tee -a log.txt echo "-----------------------------------------------" | tee -a log.txt clang --version | grep clang | tee -a log.txt CC=clang CXX=clang++ cmake --cmake-clean-cache -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -make -j8 || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +make -j8 +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi ./etl_tests | tee log.txt echo "" echo "-----------------------------------------------" | tee -a log.txt @@ -41,7 +65,13 @@ echo " Clang - No STL" | tee -a log.txt echo "-----------------------------------------------" | tee -a log.txt clang --version | grep clang | tee -a log.txt CC=clang CXX=clang++ cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -make -j8 || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +make -j8 +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi ./etl_tests | tee log.txt echo "" echo "-----------------------------------------------" | tee -a log.txt @@ -49,7 +79,13 @@ echo " Clang - No STL - Builtins" | tee -a log.txt echo "-----------------------------------------------" | tee -a log.txt clang --version | grep clang | tee -a log.txt CC=clang CXX=clang++ cmake --cmake-clean-cache -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=ON -DETL_USER_DEFINED_TYPE_TRAITS=OFF .. -make -j8 || echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt +make -j8 +if [ $? -eq 0 ]; then + echo "Passed" +else + echo "****************\n**** Failed ****\n****************" | tee -a ../log.txt + exit $? +fi ./etl_tests | tee log.txt echo "" echo "-----------------------------------------------" | tee -a log.txt diff --git a/test/test_message_packet.cpp b/test/test_message_packet.cpp index ae360ad0..75ac200e 100644 --- a/test/test_message_packet.cpp +++ b/test/test_message_packet.cpp @@ -197,9 +197,6 @@ namespace Packet packet2(message2); Packet packet3(message3); - // The next line should result in a compile error. - //Packet packet4(message4); - CHECK_EQUAL(MESSAGE1, packet1.get().get_message_id()); CHECK_EQUAL(MESSAGE2, packet2.get().get_message_id()); CHECK_EQUAL(MESSAGE3, packet3.get().get_message_id()); @@ -251,9 +248,6 @@ namespace const Packet packet2(message2); const Packet packet3(message3); - // The next line should result in a compile error. - //Packet packet4(message4); - CHECK_EQUAL(MESSAGE1, packet1.get().get_message_id()); CHECK_EQUAL(MESSAGE2, packet2.get().get_message_id()); CHECK_EQUAL(MESSAGE3, packet3.get().get_message_id()); diff --git a/test/vs2019/etl.vcxproj b/test/vs2019/etl.vcxproj index 51c01cf3..29d2d692 100644 --- a/test/vs2019/etl.vcxproj +++ b/test/vs2019/etl.vcxproj @@ -424,6 +424,12 @@ true Unicode + + v142 + + + v142 + @@ -1073,7 +1079,7 @@ Level3 Disabled WIN32;_DEBUG;_CONSOLE;_LIB;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;ETL_NO_STL;ETL_USE_TYPE_TRAITS_BUILTINS;__clang__;%(PreprocessorDefinitions) - ../../../unittest-cpp/;../../include;../../test + ./;../../../unittest-cpp/;../../include;../../test false diff --git a/test/vs2019/etl.vcxproj.filters b/test/vs2019/etl.vcxproj.filters index 25e87889..3861d5c3 100644 --- a/test/vs2019/etl.vcxproj.filters +++ b/test/vs2019/etl.vcxproj.filters @@ -2048,6 +2048,108 @@ Source Files\Sanity Checks + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + + + Source Files\Sanity Checks + Source Files\Sanity Checks @@ -2889,7 +2991,10 @@ Source Files\Sanity Checks - Source Files\Sanity Checks + Source Files + + + Source Files @@ -3035,4 +3140,4 @@ Resource Files - \ No newline at end of file +