Simplify tests by introducing EXPECT_COSTS()

This commit is contained in:
Robert Haschke 2021-09-02 12:13:40 +02:00 committed by v4hn
parent 61399d6d23
commit 61496fecd3
3 changed files with 27 additions and 20 deletions

View File

@ -18,7 +18,7 @@ if (CATKIN_ENABLE_TESTING)
catkin_add_gtest(${PROJECT_NAME}-test-serial test_serial.cpp)
target_link_libraries(${PROJECT_NAME}-test-serial ${PROJECT_NAME} ${PROJECT_NAME}_stages gtest_utils gtest_main)
catkin_add_gtest(${PROJECT_NAME}-test-fallback test_fallback.cpp)
catkin_add_gmock(${PROJECT_NAME}-test-fallback test_fallback.cpp)
target_link_libraries(${PROJECT_NAME}-test-fallback ${PROJECT_NAME} ${PROJECT_NAME}_stages gtest_utils gtest_main)
catkin_add_gtest(${PROJECT_NAME}-test-properties test_properties.cpp)
@ -27,7 +27,7 @@ if (CATKIN_ENABLE_TESTING)
catkin_add_gmock(${PROJECT_NAME}-test-cost_queue test_cost_queue.cpp)
target_link_libraries(${PROJECT_NAME}-test-cost_queue ${PROJECT_NAME} gtest_main)
catkin_add_gtest(${PROJECT_NAME}-test-interface_state test_interface_state.cpp)
catkin_add_gmock(${PROJECT_NAME}-test-interface_state test_interface_state.cpp)
target_link_libraries(${PROJECT_NAME}-test-interface_state ${PROJECT_NAME} gtest_utils gtest_main)
catkin_add_gtest(${PROJECT_NAME}-test-cost_terms test_cost_terms.cpp)

View File

@ -7,6 +7,7 @@
#include "models.h"
#include <gtest/gtest.h>
#include <gmock/gmock.h>
namespace moveit {
namespace task_constructor {
@ -128,5 +129,13 @@ struct TaskTestBase : public testing::Test
}
};
#define EXPECT_COSTS(value, matcher) \
{ \
std ::vector<double> costs; \
std::transform(value.begin(), value.end(), std::back_inserter(costs), \
[](const SolutionBaseConstPtr& s) { return s->cost(); }); \
EXPECT_THAT(costs, matcher); \
}
} // namespace task_constructor
} // namespace moveit

View File

@ -70,21 +70,19 @@ TEST_F(FallbacksFixturePropagate, ComputeFirstSuccessfulStageOnly) {
}
TEST_F(FallbacksFixturePropagate, ComputeFirstSuccessfulStagePerSolutionOnly) {
t.add(std::make_unique<GeneratorMockup>(std::list<double>{ 0.0, 1.0 }));
t.add(std::make_unique<GeneratorMockup>(std::list<double>{ 1.0, 2.0 }));
auto fallbacks = std::make_unique<Fallbacks>("Fallbacks");
fallbacks->add(std::make_unique<ForwardMockup>(std::list<double>{ INF, 0.0 }));
fallbacks->add(std::make_unique<ForwardMockup>(std::list<double>{ 0.0, INF }));
fallbacks->add(std::make_unique<ForwardMockup>(std::list<double>{ INF, 10.0 }));
fallbacks->add(std::make_unique<ForwardMockup>(std::list<double>{ 20.0, INF }));
auto fwd1 = fallbacks->findChild("FWD1");
auto fwd2 = fallbacks->findChild("FWD2");
t.add(std::move(fallbacks));
EXPECT_TRUE(t.plan());
EXPECT_EQ(t.numSolutions(), 2u);
ASSERT_EQ(fwd1->solutions().size(), 1u);
EXPECT_EQ(fwd1->solutions().front()->start()->priority().cost(), 1.0);
ASSERT_EQ(fwd2->solutions().size(), 1u);
EXPECT_EQ(fwd2->solutions().front()->start()->priority().cost(), 0.0);
EXPECT_COSTS(t.solutions(), testing::ElementsAre(12, 21));
EXPECT_EQ(fwd1->solutions().size(), 1u);
EXPECT_EQ(fwd2->solutions().size(), 1u);
}
TEST_F(FallbacksFixturePropagate, successfulWithMixedSolutions) {
@ -96,8 +94,7 @@ TEST_F(FallbacksFixturePropagate, successfulWithMixedSolutions) {
t.add(std::move(fallback));
EXPECT_TRUE(t.plan());
ASSERT_EQ(t.solutions().size(), 1u);
EXPECT_EQ(t.solutions().front()->cost(), 1.0);
EXPECT_COSTS(t.solutions(), testing::ElementsAre(1.0));
}
TEST_F(FallbacksFixturePropagate, successfulWithMixedSolutions2) {
@ -109,22 +106,23 @@ TEST_F(FallbacksFixturePropagate, successfulWithMixedSolutions2) {
t.add(std::move(fallback));
EXPECT_TRUE(t.plan());
ASSERT_EQ(t.solutions().size(), 1u);
EXPECT_EQ(t.solutions().front()->cost(), 1.0);
EXPECT_COSTS(t.solutions(), testing::ElementsAre(1.0));
}
TEST_F(FallbacksFixturePropagate, ActiveChildReset) {
t.add(std::make_unique<GeneratorMockup>(PredefinedCosts{ { 0.0, INF, 0.0 } }));
t.add(std::make_unique<GeneratorMockup>(PredefinedCosts{ { 1.0, INF, 3.0 } }));
auto fallbacks = std::make_unique<Fallbacks>("Fallbacks");
fallbacks->add(std::make_unique<ForwardMockup>(PredefinedCosts::constant(0.0)));
fallbacks->add(std::make_unique<ForwardMockup>(PredefinedCosts::constant(0.0)));
auto first = fallbacks->findChild("FWD1");
fallbacks->add(std::make_unique<ForwardMockup>(PredefinedCosts::constant(10.0)));
fallbacks->add(std::make_unique<ForwardMockup>(PredefinedCosts::constant(20.0)));
auto fwd1 = fallbacks->findChild("FWD1");
auto fwd2 = fallbacks->findChild("FWD2");
t.add(std::move(fallbacks));
EXPECT_TRUE(t.plan());
EXPECT_EQ(t.numSolutions(), 2u);
EXPECT_EQ(first->solutions().size(), 2u);
EXPECT_COSTS(t.solutions(), testing::ElementsAre(11, 13));
EXPECT_COSTS(fwd1->solutions(), testing::ElementsAre(10, 10));
EXPECT_COSTS(fwd2->solutions(), testing::IsEmpty());
}
using FallbacksFixtureConnect = TaskTestBase;