From 88fa9cab0ee855dae804bb26fcef8b6d88d8d688 Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Fri, 30 Apr 2021 12:03:48 +0200 Subject: [PATCH] Fix tests for EntityInstance --- .../armem/core/base/EntityInstanceBase.h | 8 - .../armem/core/diskmemory/EntityInstance.cpp | 9 +- .../armem/core/diskmemory/EntityInstance.h | 7 +- .../core/longtermmemory/EntityInstance.cpp | 13 - .../core/longtermmemory/EntityInstance.h | 7 +- .../core/workingmemory/EntityInstance.cpp | 27 +- .../armem/core/workingmemory/EntityInstance.h | 12 +- .../libraries/armem/test/ArMemMemoryTest.cpp | 331 ++++++++++++------ 8 files changed, 262 insertions(+), 152 deletions(-) diff --git a/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.h b/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.h index fdf8d2be7..4e2471f3d 100644 --- a/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.h +++ b/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.h @@ -36,14 +36,6 @@ namespace armarx::armem::base { } - /* - EntityInstanceBase& operator=(const EntityInstanceBase& other) - { - other._copySelf(*this); - return *this; - } - */ - inline int& index() { diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp index 1ee7691f4..49bfe419d 100644 --- a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp +++ b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp @@ -13,23 +13,20 @@ namespace armarx::armem::d_ltm { + EntityInstance::EntityInstance(const EntityInstance& other) : Base(other), path(other.path) { } - EntityInstance& EntityInstance::operator=(const EntityInstance& other) - { - other._copySelf(*this); - return *this; - } - bool EntityInstance::equalsDeep(const EntityInstance& other) const { return id() == other.id(); } + + void EntityInstance::update(const EntityUpdate& update, int index) { ARMARX_CHECK_FITS_SIZE(index, update.instancesData.size()); diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h index 37bebb7b6..9ee48c55b 100644 --- a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h +++ b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h @@ -20,8 +20,11 @@ namespace armarx::armem::d_ltm using Base::EntityInstanceBase; - EntityInstance(const EntityInstance&); - EntityInstance& operator=(const EntityInstance& other); + EntityInstance(const EntityInstance& other); + EntityInstance(EntityInstance&& other) = default; + EntityInstance& operator=(const EntityInstance& other) = default; + EntityInstance& operator=(EntityInstance&& other) = default; + /** * @brief Fill `*this` with the update's values. diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.cpp b/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.cpp index b83f77e74..6332be7ea 100644 --- a/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.cpp +++ b/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.cpp @@ -13,19 +13,6 @@ namespace armarx::armem::ltm && std::abs(confidence - other.confidence) < 1e-6f; } - EntityInstance::EntityInstance(const EntityInstance& other) : - Base(other), - _metadata(other._metadata) - { - } - - - EntityInstance& EntityInstance::operator=(const EntityInstance& other) - { - other._copySelf(*this); - return *this; - } - bool EntityInstance::equalsDeep(const EntityInstance& other) const { return id() == other.id() && _metadata == other.metadata(); diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h b/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h index 39225dd6e..f78668e5e 100644 --- a/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h +++ b/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h @@ -42,8 +42,11 @@ namespace armarx::armem::ltm using Base::EntityInstanceBase; - EntityInstance(const EntityInstance& other); - EntityInstance& operator=(const EntityInstance& other); + EntityInstance(const EntityInstance& other) = default; + EntityInstance(EntityInstance&& other) = default; + EntityInstance& operator=(const EntityInstance& other) = default; + EntityInstance& operator=(EntityInstance&& other) = default; + EntityInstanceMetadata& metadata() { diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.cpp index 4d8de5156..95e508bde 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.cpp +++ b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.cpp @@ -3,6 +3,17 @@ #include <ArmarXCore/core/exceptions/local/ExpressionException.h> +std::ostream& armarx::armem::wm::operator<<(std::ostream& os, const EntityInstanceMetadata& d) +{ + os << "EntityInstanceMetadata: " + << "\n- t_create = \t" << armem::toStringMicroSeconds(d.timeCreated) << " us" + << "\n- t_sent = \t" << armem::toStringMicroSeconds(d.timeSent) << " us" + << "\n- t_arrived = \t" << armem::toStringMicroSeconds(d.timeArrived) << " us" + << "\n- confidence = \t" << d.confidence << " us" + ; + return os; +} + namespace armarx::armem::wm { @@ -15,22 +26,6 @@ namespace armarx::armem::wm } - /* - EntityInstance::EntityInstance(const EntityInstance& other) : - Base(other), - _metadata(other._metadata), - _data(other._data) - { - } - - EntityInstance& EntityInstance::operator=(const EntityInstance& other) - { - other._copySelf(*this); - return *this; - } - */ - - bool EntityInstance::equalsDeep(const EntityInstance& other) const { return id() == other.id() diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h index 0a289c787..8e6eb1afe 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h +++ b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h @@ -31,6 +31,9 @@ namespace armarx::armem::wm } }; + std::ostream& operator<<(std::ostream& os, const EntityInstanceMetadata& rhs); + + /** * @brief Data of a single entity instance. */ @@ -44,10 +47,11 @@ namespace armarx::armem::wm using Base::EntityInstanceBase; - /* - EntityInstance(const EntityInstance& other); - EntityInstance& operator=(const EntityInstance& other); - */ + EntityInstance(const EntityInstance& other) = default; + EntityInstance(EntityInstance&& other) = default; + EntityInstance& operator=(const EntityInstance& other) = default; + EntityInstance& operator=(EntityInstance&& other) = default; + EntityInstanceMetadata& metadata() { diff --git a/source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp b/source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp index 42c1238a3..8d8fbed9f 100644 --- a/source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp +++ b/source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp @@ -244,46 +244,6 @@ BOOST_AUTO_TEST_CASE(test_key_ctors) } -template <class T> -void test_the_copy_move_ctors_ops_instance() -{ - const armem::MemoryID id("A/B/C/123000"); // int index would not be moved - const armem::MemoryID idMoved; - - BOOST_TEST_CONTEXT("Type " << simox::meta::get_type_name<T>()) - { - T in(id); - BOOST_CHECK_EQUAL(in.id(), id); - BOOST_TEST_CONTEXT("copy ctor") - { - T out { in }; - BOOST_CHECK_EQUAL(out.id(), id); - } - BOOST_TEST_CONTEXT("copy op") - { - T out; - out = in; - BOOST_CHECK_EQUAL(out.id(), id); - } - in = T{id}; - BOOST_TEST_CONTEXT("move ctor") - { - T out { std::move(in) }; - BOOST_CHECK_EQUAL(in.id(), idMoved); - BOOST_CHECK_EQUAL(out.id(), id); - } - in = T{id}; - BOOST_TEST_CONTEXT("move op") - { - T out; - out = std::move(in); - BOOST_CHECK_EQUAL(in.id(), idMoved); - BOOST_CHECK_EQUAL(out.id(), id); - } - } -} - - template <class ...Args> auto add_element(std::vector<Args...>& vector) { @@ -295,81 +255,250 @@ auto add_element(std::map<Args...>& map) return map.emplace(); } + template <class T> -void test_the_copy_move_ctors_ops_container() +struct CustomChecks +{ + static void checkEqual(const T& lhs, const T& rhs) + { + (void) lhs, (void) rhs; + } + static void checkMoved(const T& moved) + { + (void) moved; + } +}; +template <> +struct CustomChecks<armem::wm::EntityInstance> +{ + static void checkEqual(const armem::wm::EntityInstance& lhs, const armem::wm::EntityInstance& rhs) + { + BOOST_CHECK_EQUAL(lhs.metadata(), rhs.metadata()); + BOOST_CHECK_EQUAL(lhs.data(), rhs.data()); + } + static void checkMoved(const armem::wm::EntityInstance& moved) + { + BOOST_CHECK_EQUAL(moved.data(), nullptr); + } +}; +template <> +struct CustomChecks<armem::d_ltm::EntityInstance> +{ + static void checkEqual(const armem::d_ltm::EntityInstance& lhs, const armem::d_ltm::EntityInstance& rhs) + { + BOOST_CHECK_EQUAL(lhs.path, rhs.path); + } + static void checkMoved(const armem::d_ltm::EntityInstance& moved) + { + BOOST_CHECK_EQUAL(moved.path, nullptr); + } +}; + + +struct CopyMoveCtorsOpsTestBase { - const armem::MemoryID id("A/B/C/123000"); // int index would not be moved + const armem::MemoryID id {"A/B/C/123000"}; // int index would not be moved const armem::MemoryID idMoved; - BOOST_TEST_CONTEXT("Type " << simox::meta::get_type_name<T>()) + std::string typeName; + + CopyMoveCtorsOpsTestBase(const std::string& typeName) : + typeName(typeName) + { + } + virtual ~CopyMoveCtorsOpsTestBase() + { + } + + + void test() { - T in(id); + BOOST_TEST_CONTEXT("Type " << typeName) + { + reset(); + BOOST_TEST_CONTEXT("copy ctor") + { + testCopyCtor(); + } + reset(); + BOOST_TEST_CONTEXT("copy op") + { + testCopyOp(); + } + reset(); + BOOST_TEST_CONTEXT("move ctor") + { + testMoveCtor(); + } + reset(); + BOOST_TEST_CONTEXT("move op") + { + testMoveOp(); + } + } + } + + virtual void reset() + { + } + + virtual void testCopyCtor() = 0; + virtual void testCopyOp() = 0; + virtual void testMoveCtor() = 0; + virtual void testMoveOp() = 0; +}; + + + +template <class T> +struct InstanceCopyMoveCtorsOpsTest : public CopyMoveCtorsOpsTestBase +{ + T in; + + InstanceCopyMoveCtorsOpsTest() : + CopyMoveCtorsOpsTestBase(simox::meta::get_type_name<T>()) + { + } + virtual ~InstanceCopyMoveCtorsOpsTest() override = default; + + void reset() override + { + in = T {id}; + BOOST_CHECK_EQUAL(in.id(), id); + } + + void testCopyCtor() override + { + T out { in }; + + BOOST_CHECK_EQUAL(out.id(), id); + + CustomChecks<T>::checkEqual(out, in); + } + void testCopyOp() override + { + T out; + out = in; + + BOOST_CHECK_EQUAL(out.id(), id); + + CustomChecks<T>::checkEqual(out, in); + } + void testMoveCtor() override + { + T out { std::move(in) }; + + BOOST_CHECK_EQUAL(in.id(), idMoved); + BOOST_CHECK_EQUAL(out.id(), id); + + CustomChecks<T>::checkMoved(in); + } + void testMoveOp() override + { + T out; + out = std::move(in); + + BOOST_CHECK_EQUAL(in.id(), idMoved); + BOOST_CHECK_EQUAL(out.id(), id); + + CustomChecks<T>::checkMoved(in); + } +}; + + +template <class T> +struct CopyMoveCtorsOpsTest : public CopyMoveCtorsOpsTestBase +{ + T in; + + CopyMoveCtorsOpsTest() : CopyMoveCtorsOpsTestBase(simox::meta::get_type_name<T>()) + { + } + virtual ~CopyMoveCtorsOpsTest() override = default; + + void reset() override + { + in = T {id}; add_element(in.container()); + BOOST_CHECK_EQUAL(in.id(), id); BOOST_CHECK_EQUAL(in.size(), 1); + } - BOOST_TEST_CONTEXT("copy ctor") - { - T out { in }; - BOOST_CHECK_EQUAL(in.id(), id); - BOOST_CHECK_EQUAL(in.size(), 1); - BOOST_CHECK_EQUAL(out.id(), id); - BOOST_CHECK_EQUAL(out.size(), 1); - } - BOOST_TEST_CONTEXT("copy op") - { - T out; - out = in; - BOOST_CHECK_EQUAL(in.id(), id); - BOOST_CHECK_EQUAL(in.size(), 1); - BOOST_CHECK_EQUAL(out.id(), id); - BOOST_CHECK_EQUAL(out.size(), 1); - } - in = T{id}; - BOOST_TEST_CONTEXT("move ctor") - { - T out { std::move(in) }; - BOOST_CHECK_EQUAL(in.id(), idMoved); - BOOST_CHECK(in.empty()); - BOOST_CHECK_EQUAL(out.id(), id); - BOOST_CHECK_EQUAL(out.size(), 1); - } - in = T{id}; - BOOST_TEST_CONTEXT("move op") - { - T out; - out = std::move(in); - BOOST_CHECK_EQUAL(in.id(), idMoved); - BOOST_CHECK(in.empty()); - BOOST_CHECK_EQUAL(out.id(), id); - BOOST_CHECK_EQUAL(out.size(), 1); - } + void testCopyCtor() override + { + T out { in }; + BOOST_CHECK_EQUAL(in.id(), id); + BOOST_CHECK_EQUAL(in.size(), 1); + BOOST_CHECK_EQUAL(out.id(), id); + BOOST_CHECK_EQUAL(out.size(), 1); + + CustomChecks<T>::checkEqual(out, in); } -} + void testCopyOp() override + { + T out; + out = in; + BOOST_CHECK_EQUAL(in.id(), id); + BOOST_CHECK_EQUAL(in.size(), 1); + BOOST_CHECK_EQUAL(out.id(), id); + BOOST_CHECK_EQUAL(out.size(), 1); + + CustomChecks<T>::checkEqual(out, in); + } + void testMoveCtor() override + { + T out { std::move(in) }; + + BOOST_CHECK_EQUAL(in.id(), idMoved); + BOOST_CHECK_EQUAL(in.size(), 0); + BOOST_CHECK_EQUAL(out.id(), id); + BOOST_CHECK_EQUAL(out.size(), 1); + + CustomChecks<T>::checkMoved(in); + } + void testMoveOp() override + { + T out; + out = std::move(in); + + BOOST_CHECK_EQUAL(in.id(), idMoved); + BOOST_CHECK_EQUAL(in.size(), 0); + BOOST_CHECK_EQUAL(out.id(), id); + BOOST_CHECK_EQUAL(out.size(), 1); + + CustomChecks<T>::checkMoved(in); + } +}; + BOOST_AUTO_TEST_CASE(test_copy_move_ctors_ops) { - test_the_copy_move_ctors_ops_instance<armem::wm::EntityInstance>(); - test_the_copy_move_ctors_ops_container<armem::wm::EntitySnapshot>(); - test_the_copy_move_ctors_ops_container<armem::wm::Entity>(); - test_the_copy_move_ctors_ops_container<armem::wm::ProviderSegment>(); - test_the_copy_move_ctors_ops_container<armem::wm::CoreSegment>(); - test_the_copy_move_ctors_ops_container<armem::wm::Memory>(); - - test_the_copy_move_ctors_ops_instance<armem::ltm::EntityInstance>(); - test_the_copy_move_ctors_ops_container<armem::ltm::EntitySnapshot>(); - test_the_copy_move_ctors_ops_container<armem::ltm::Entity>(); - test_the_copy_move_ctors_ops_container<armem::ltm::ProviderSegment>(); - test_the_copy_move_ctors_ops_container<armem::ltm::CoreSegment>(); - test_the_copy_move_ctors_ops_container<armem::ltm::Memory>(); - - test_the_copy_move_ctors_ops_instance<armem::d_ltm::EntityInstance>(); - test_the_copy_move_ctors_ops_container<armem::d_ltm::EntitySnapshot>(); - test_the_copy_move_ctors_ops_container<armem::d_ltm::Entity>(); - test_the_copy_move_ctors_ops_container<armem::d_ltm::ProviderSegment>(); - test_the_copy_move_ctors_ops_container<armem::d_ltm::CoreSegment>(); - test_the_copy_move_ctors_ops_container<armem::d_ltm::Memory>(); + { + InstanceCopyMoveCtorsOpsTest<armem::wm::EntityInstance>().test(); + CopyMoveCtorsOpsTest<armem::wm::EntitySnapshot>().test(); + CopyMoveCtorsOpsTest<armem::wm::Entity>().test(); + CopyMoveCtorsOpsTest<armem::wm::ProviderSegment>().test(); + CopyMoveCtorsOpsTest<armem::wm::CoreSegment>().test(); + CopyMoveCtorsOpsTest<armem::wm::Memory>().test(); + } + { + InstanceCopyMoveCtorsOpsTest<armem::ltm::EntityInstance>().test(); + CopyMoveCtorsOpsTest<armem::ltm::EntitySnapshot>().test(); + CopyMoveCtorsOpsTest<armem::ltm::Entity>().test(); + CopyMoveCtorsOpsTest<armem::ltm::ProviderSegment>().test(); + CopyMoveCtorsOpsTest<armem::ltm::CoreSegment>().test(); + CopyMoveCtorsOpsTest<armem::ltm::Memory>().test(); + } + { + InstanceCopyMoveCtorsOpsTest<armem::d_ltm::EntityInstance>().test(); + CopyMoveCtorsOpsTest<armem::d_ltm::EntitySnapshot>().test(); + CopyMoveCtorsOpsTest<armem::d_ltm::Entity>().test(); + CopyMoveCtorsOpsTest<armem::d_ltm::ProviderSegment>().test(); + CopyMoveCtorsOpsTest<armem::d_ltm::CoreSegment>().test(); + CopyMoveCtorsOpsTest<armem::d_ltm::Memory>().test(); + } } -- GitLab