diff --git a/src/cpp/statistics/rtps/StatisticsBase.hpp b/src/cpp/statistics/rtps/StatisticsBase.hpp index b1005de734..971e74a240 100644 --- a/src/cpp/statistics/rtps/StatisticsBase.hpp +++ b/src/cpp/statistics/rtps/StatisticsBase.hpp @@ -56,6 +56,7 @@ struct StatisticsAncillary { std::set> listeners; std::atomic enabled_writers_mask{0}; + virtual ~StatisticsAncillary() = default; }; struct StatisticsWriterAncillary diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 2d12d3687f..efd8ffdee6 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -12,6 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Require C++ 14 for testing as both GTest v1.14.0 and ROS 2 Jazzy require it anyways +set(FORCE_CXX "14") +check_stdcxx(${FORCE_CXX}) + option(PERFORMANCE_TESTS "Activate the building and execution of performance tests" OFF) option(SYSTEM_TESTS "Activate the building and execution of system tests" OFF) option(PROFILING_TESTS "Activate the building and execution of profiling tests" OFF) diff --git a/test/unittest/common/operators.hpp b/test/unittest/common/operators.hpp new file mode 100644 index 0000000000..c5eb289c18 --- /dev/null +++ b/test/unittest/common/operators.hpp @@ -0,0 +1,77 @@ +// Copyright 2024 Proyectos y Sistemas de Mantenimiento SL (eProsima). +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include + +#include + +namespace eprosima { +namespace fastrtps { +namespace rtps { + +// Make SequenceNumberSet_t compatible with GMock macros +bool operator ==( + const SequenceNumberSet_t& a, + const SequenceNumberSet_t& b) +{ + // remember that using SequenceNumberSet_t = BitmapRange; + // see test\unittest\utils\BitmapRangeTests.cpp method TestResult::Check + + if (a.empty() && b.empty()) + { + return true; + } + + if (a.base() == b.base()) + { + uint32_t num_bits[2]; + uint32_t num_longs[2]; + SequenceNumberSet_t::bitmap_type bitmap[2]; + + a.bitmap_get(num_bits[0], bitmap[0], num_longs[0]); + b.bitmap_get(num_bits[1], bitmap[1], num_longs[1]); + + if (num_bits[0] != num_bits[1] || num_longs[0] != num_longs[1]) + { + return false; + } + return std::equal(bitmap[0].cbegin(), bitmap[0].cbegin() + num_longs[0], bitmap[1].cbegin()); + } + else + { + bool equal = true; + + a.for_each([&b, &equal](const SequenceNumber_t& e) + { + equal &= b.is_set(e); + }); + + if (!equal) + { + return false; + } + + b.for_each([&a, &equal](const SequenceNumber_t& e) + { + equal &= a.is_set(e); + }); + + return equal; + } +} + +} // namespace rtps +} // namespace fastrtps +} // namespace eprosima diff --git a/test/unittest/rtps/reader/WriterProxyAcknackTests.cpp b/test/unittest/rtps/reader/WriterProxyAcknackTests.cpp index 9a87434fec..b216494eff 100644 --- a/test/unittest/rtps/reader/WriterProxyAcknackTests.cpp +++ b/test/unittest/rtps/reader/WriterProxyAcknackTests.cpp @@ -28,67 +28,8 @@ #include #include -// Make SequenceNumberSet_t compatible with GMock macros - -namespace testing { -namespace internal { -using namespace eprosima::fastrtps::rtps; - -template<> -bool AnyEq::operator ()( - const SequenceNumberSet_t& a, - const SequenceNumberSet_t& b) const -{ - // remember that using SequenceNumberSet_t = BitmapRange; - // see test\unittest\utils\BitmapRangeTests.cpp method TestResult::Check - - if (a.empty() && b.empty()) - { - return true; - } - - if (a.base() == b.base()) - { - uint32_t num_bits[2]; - uint32_t num_longs[2]; - SequenceNumberSet_t::bitmap_type bitmap[2]; - - a.bitmap_get(num_bits[0], bitmap[0], num_longs[0]); - b.bitmap_get(num_bits[1], bitmap[1], num_longs[1]); - - if (num_bits[0] != num_bits[1] || num_longs[0] != num_longs[1]) - { - return false; - } - return std::equal(bitmap[0].cbegin(), bitmap[0].cbegin() + num_longs[0], bitmap[1].cbegin()); - } - else - { - bool equal = true; - - a.for_each([&b, &equal](const SequenceNumber_t& e) - { - equal &= b.is_set(e); - }); - - if (!equal) - { - return false; - } - - b.for_each([&a, &equal](const SequenceNumber_t& e) - { - equal &= a.is_set(e); - }); - - return equal; - } -} - -} // namespace internal -} // namespace testing - +#include "../../common/operators.hpp" namespace eprosima { namespace fastrtps { diff --git a/test/unittest/rtps/reader/WriterProxyTests.cpp b/test/unittest/rtps/reader/WriterProxyTests.cpp index 8fee1e723d..7d7311fdcb 100644 --- a/test/unittest/rtps/reader/WriterProxyTests.cpp +++ b/test/unittest/rtps/reader/WriterProxyTests.cpp @@ -30,65 +30,7 @@ #include -// Make SequenceNumberSet_t compatible with GMock macros - -namespace testing { -namespace internal { -using namespace eprosima::fastrtps::rtps; - -template<> -bool AnyEq::operator ()( - const SequenceNumberSet_t& a, - const SequenceNumberSet_t& b) const -{ - // remember that using SequenceNumberSet_t = BitmapRange; - // see test\unittest\utils\BitmapRangeTests.cpp method TestResult::Check - - if (a.empty() && b.empty()) - { - return true; - } - - if (a.base() == b.base()) - { - uint32_t num_bits[2]; - uint32_t num_longs[2]; - SequenceNumberSet_t::bitmap_type bitmap[2]; - - a.bitmap_get(num_bits[0], bitmap[0], num_longs[0]); - b.bitmap_get(num_bits[1], bitmap[1], num_longs[1]); - - if (num_bits[0] != num_bits[1] || num_longs[0] != num_longs[1]) - { - return false; - } - return std::equal(bitmap[0].cbegin(), bitmap[0].cbegin() + num_longs[0], bitmap[1].cbegin()); - } - else - { - bool equal = true; - - a.for_each([&b, &equal](const SequenceNumber_t& e) - { - equal &= b.is_set(e); - }); - - if (!equal) - { - return false; - } - - b.for_each([&a, &equal](const SequenceNumber_t& e) - { - equal &= a.is_set(e); - }); - - return equal; - } -} - -} // namespace internal -} // namespace testing +#include "../../common/operators.hpp" namespace eprosima { namespace fastrtps {