Skip to content

Commit 9cf3c01

Browse files
committed
pruning tests: restructure tests
1 parent be1c829 commit 9cf3c01

File tree

1 file changed

+56
-48
lines changed

1 file changed

+56
-48
lines changed

core/test/test_serial.cpp

Lines changed: 56 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -54,44 +54,45 @@ struct GeneratorMockup : Generator
5454
void compute() override { spawn(InterfaceState(ps_), costs_.cost()); }
5555
};
5656

57-
class PropagatorMockup : public PropagatingEitherWay
57+
struct PropagatorMockup : public PropagatingEitherWay
5858
{
5959
PredefinedCosts costs_;
6060
std::size_t solutions_per_compute_;
6161

62-
public:
62+
unsigned int calls_ = 0;
63+
6364
PropagatorMockup(std::initializer_list<double> costs = { 0.0 }, std::size_t solutions_per_compute = 1)
6465
: PropagatingEitherWay(), costs_(false, costs), solutions_per_compute_(solutions_per_compute) {}
6566

6667
void computeForward(const InterfaceState& from) override {
68+
++calls_;
6769
for (std::size_t i = 0; i < solutions_per_compute_; ++i) {
6870
SubTrajectory solution(robot_trajectory::RobotTrajectoryConstPtr(), costs_.cost());
6971
sendForward(from, InterfaceState(from.scene()->diff()), std::move(solution));
7072
}
7173
}
7274
void computeBackward(const InterfaceState& to) override {
75+
++calls_;
7376
for (std::size_t i = 0; i < solutions_per_compute_; ++i) {
7477
SubTrajectory solution(robot_trajectory::RobotTrajectoryConstPtr(), costs_.cost());
7578
sendBackward(InterfaceState(to.scene()->diff()), to, std::move(solution));
7679
}
7780
}
7881
};
79-
class ForwardMockup : public PropagatorMockup
82+
struct ForwardMockup : public PropagatorMockup
8083
{
8184
static unsigned int id_;
8285

83-
public:
8486
ForwardMockup(std::initializer_list<double> costs = { 0.0 }, std::size_t solutions_per_compute = 1)
8587
: PropagatorMockup(costs, solutions_per_compute) {
8688
restrictDirection(FORWARD);
8789
setName("FW" + std::to_string(++id_));
8890
}
8991
};
90-
class BackwardMockup : public PropagatorMockup
92+
struct BackwardMockup : public PropagatorMockup
9193
{
9294
static unsigned int id_;
9395

94-
public:
9596
BackwardMockup(std::initializer_list<double> costs = { 0.0 }) : PropagatorMockup(costs) {
9697
restrictDirection(BACKWARD);
9798
setName("BW" + std::to_string(++id_));
@@ -137,9 +138,17 @@ unsigned int ForwardMockup::id_ = 0;
137138
unsigned int BackwardMockup::id_ = 0;
138139
unsigned int Connect::id_ = 0;
139140

141+
void resetIds() {
142+
GeneratorMockup::id_ = 0;
143+
ForwardMockup::id_ = 0;
144+
BackwardMockup::id_ = 0;
145+
Connect::id_ = 0;
146+
}
147+
140148
// https://github.com/ros-planning/moveit_task_constructor/issues/182
141149
TEST(ConnectConnect, SuccSucc) {
142-
GeneratorMockup::id_ = Connect::id_ = 0; // reset IDs
150+
resetIds();
151+
143152
Task t;
144153
t.setRobotModel(getModel());
145154
t.add(Stage::pointer(new GeneratorMockup({ 1, 2, 3 })));
@@ -158,8 +167,44 @@ TEST(ConnectConnect, SuccSucc) {
158167
}
159168
}
160169

161-
TEST(ConnectConnect, PruningForward) {
162-
GeneratorMockup::id_ = Connect::id_ = 0; // reset IDs
170+
// https://github.com/ros-planning/moveit_task_constructor/issues/218
171+
TEST(ConnectConnect, FailSucc) {
172+
resetIds();
173+
Task t;
174+
t.setRobotModel(getModel());
175+
t.add(Stage::pointer(new GeneratorMockup()));
176+
t.add(Stage::pointer(new Connect({ inf }, true)));
177+
t.add(Stage::pointer(new GeneratorMockup()));
178+
t.add(Stage::pointer(new Connect()));
179+
t.add(Stage::pointer(new GeneratorMockup()));
180+
t.add(Stage::pointer(new ForwardDummy()));
181+
182+
EXPECT_FALSE(t.plan());
183+
}
184+
185+
TEST(Pruning, PruningMultiForward) {
186+
resetIds();
187+
Task t;
188+
t.setRobotModel(getModel());
189+
190+
t.add(Stage::pointer(new BackwardMockup()));
191+
t.add(Stage::pointer(new BackwardMockup()));
192+
t.add(Stage::pointer(new GeneratorMockup()));
193+
// spawn two solutions for the only incoming state
194+
t.add(Stage::pointer(new ForwardMockup({ 0, 0 }, 2)));
195+
// fail to exten
196+
t.add(Stage::pointer(new ForwardMockup({ 0, inf })));
197+
198+
t.plan();
199+
200+
// the second (infeasible) solution in the last stage must not disable
201+
// the earlier partial solution just because they share stage solutions
202+
ASSERT_EQ(t.solutions().size(), 1);
203+
EXPECT_EQ((*t.solutions().begin())->cost(), 0u);
204+
}
205+
206+
TEST(Pruning, ConnectConnectForward) {
207+
resetIds();
163208
Task t;
164209
t.setRobotModel(getModel());
165210
Connect *c1, *c2;
@@ -183,30 +228,8 @@ TEST(ConnectConnect, PruningForward) {
183228
EXPECT_EQ(c2->calls_, 6u);
184229
}
185230

186-
TEST(ConnectConnect, PruningMultiForward) {
187-
GeneratorMockup::id_ = Connect::id_ = 0; // reset IDs
188-
Task t;
189-
190-
t.setRobotModel(getModel());
191-
t.add(Stage::pointer(new GeneratorMockup()));
192-
t.add(Stage::pointer(new Connect()));
193-
t.add(Stage::pointer(new BackwardMockup()));
194-
/* TODO(v4hn):
195-
* t.add(Stage::pointer(new GeneratorMockup()));
196-
* should be enough instead of the above, but propagators do not even respect ENABLED/DISABLED yet
197-
*/
198-
199-
t.add(Stage::pointer(new GeneratorMockup()));
200-
t.add(Stage::pointer(new ForwardMockup({ 0, 0 }, 2))); // spawn two solutions for the only incoming state
201-
t.add(Stage::pointer(new ForwardMockup({ 0, inf })));
202-
t.plan();
203-
204-
ASSERT_EQ(t.solutions().size(), 1);
205-
EXPECT_EQ((*t.solutions().begin())->cost(), 0u);
206-
}
207-
208-
TEST(ConnectConnect, PruningBackward) {
209-
GeneratorMockup::id_ = Connect::id_ = 0; // reset IDs
231+
TEST(Pruning, ConnectConnectBackward) {
232+
resetIds();
210233
Task t;
211234
t.setRobotModel(getModel());
212235
Connect *c1, *c2;
@@ -229,18 +252,3 @@ TEST(ConnectConnect, PruningBackward) {
229252
EXPECT_EQ(c2->calls_, 3u);
230253
EXPECT_EQ(c1->calls_, 6u);
231254
}
232-
233-
// https://github.com/ros-planning/moveit_task_constructor/issues/218
234-
TEST(ConnectConnect, FailSucc) {
235-
GeneratorMockup::id_ = Connect::id_ = 0; // reset IDs
236-
Task t;
237-
t.setRobotModel(getModel());
238-
t.add(Stage::pointer(new GeneratorMockup()));
239-
t.add(Stage::pointer(new Connect({ inf }, true)));
240-
t.add(Stage::pointer(new GeneratorMockup()));
241-
t.add(Stage::pointer(new Connect()));
242-
t.add(Stage::pointer(new GeneratorMockup()));
243-
t.add(Stage::pointer(new ForwardDummy()));
244-
245-
EXPECT_FALSE(t.plan());
246-
}

0 commit comments

Comments
 (0)