13 #include <gtest/gtest.h> 19 using std::chrono::milliseconds;
28 root(
"root_sequence"), action(
"action", milliseconds(100)), condition(
"condition")
48 action_1(
"action_1", milliseconds(100)),
49 condition_1(
"condition_1"),
50 condition_2(
"condition_2"),
51 seq_conditions(
"sequence_conditions")
55 seq_conditions.
addChild(&condition_1);
56 seq_conditions.
addChild(&condition_2);
73 root(
"root_sequence"),
74 condition(
"condition"),
75 action_1(
"action_1", milliseconds(100)),
77 action_3(
"action_3", milliseconds(100))
100 root(
"root_sequence"),
101 action_1(
"action_1", milliseconds(100)),
102 action_2(
"action_2", milliseconds(100)),
105 condition_1(
"condition_1"),
106 condition_2(
"condition_2")
130 root(
"root_sequence"), action(
"action", milliseconds(100)), condition(
"condition")
153 root(
"root_sequence"),
154 action_1(
"action_1", milliseconds(100)),
155 action_2(
"action_2", milliseconds(100)),
156 condition_1(
"condition_1"),
157 condition_2(
"condition_2"),
158 seq_conditions(
"sequence_conditions"),
159 seq_actions(
"sequence_actions")
163 seq_conditions.
addChild(&condition_1);
164 seq_conditions.
addChild(&condition_2);
186 root(
"root_parallel", 4),
187 action_1(
"action_1", milliseconds(100)),
188 condition_1(
"condition_1"),
189 action_2(
"action_2", milliseconds(100)),
190 condition_2(
"condition_2")
205 std::cout <<
"Ticking the root node !" << std::endl << std::endl;
210 ASSERT_EQ(NodeStatus::RUNNING, state);
219 ASSERT_EQ(NodeStatus::FAILURE, state);
228 ASSERT_EQ(NodeStatus::RUNNING, state);
229 ASSERT_EQ(NodeStatus::SUCCESS, seq_conditions.status());
230 ASSERT_EQ(NodeStatus::IDLE, condition_1.status());
231 ASSERT_EQ(NodeStatus::IDLE, condition_1.status());
232 ASSERT_EQ(NodeStatus::RUNNING, action_1.status());
239 const auto timeout = system_clock::now() + milliseconds(650);
241 action_1.setTime(milliseconds(300));
242 action_3.setTime(milliseconds(300));
248 ASSERT_EQ(NodeStatus::RUNNING, state);
249 ASSERT_EQ(NodeStatus::RUNNING, action_1.status());
250 ASSERT_EQ(NodeStatus::IDLE, action_2.status());
251 ASSERT_EQ(NodeStatus::IDLE, action_3.status());
254 while (state != NodeStatus::SUCCESS && system_clock::now() < timeout)
256 std::this_thread::sleep_for(milliseconds(10));
260 ASSERT_EQ(NodeStatus::SUCCESS, state);
265 ASSERT_EQ(action_1.tickCount(), 1);
266 ASSERT_EQ(action_2.tickCount(), 1);
267 ASSERT_EQ(action_3.tickCount(), 1);
269 ASSERT_EQ(NodeStatus::IDLE, action_1.status());
270 ASSERT_EQ(NodeStatus::IDLE, action_2.status());
271 ASSERT_EQ(NodeStatus::IDLE, action_3.status());
272 ASSERT_TRUE(system_clock::now() < timeout);
281 ASSERT_EQ(NodeStatus::RUNNING, state);
282 ASSERT_EQ(NodeStatus::RUNNING, seq_1.status());
283 ASSERT_EQ(NodeStatus::SUCCESS, condition_1.status());
284 ASSERT_EQ(NodeStatus::RUNNING, action_1.status());
285 ASSERT_EQ(NodeStatus::IDLE, seq_2.status());
286 ASSERT_EQ(NodeStatus::IDLE, condition_2.status());
287 ASSERT_EQ(NodeStatus::IDLE, action_2.status());
289 std::this_thread::sleep_for(milliseconds(300));
292 ASSERT_EQ(NodeStatus::RUNNING, state);
293 ASSERT_EQ(NodeStatus::SUCCESS, seq_1.status());
294 ASSERT_EQ(NodeStatus::IDLE, condition_1.status());
295 ASSERT_EQ(NodeStatus::IDLE, action_1.status());
296 ASSERT_EQ(NodeStatus::RUNNING, seq_2.status());
297 ASSERT_EQ(NodeStatus::SUCCESS, condition_2.status());
298 ASSERT_EQ(NodeStatus::RUNNING, action_2.status());
307 condition_1.setExpectedResult(NodeStatus::FAILURE);
311 ASSERT_EQ(NodeStatus::FAILURE, state);
312 ASSERT_EQ(NodeStatus::IDLE, seq_conditions.status());
313 ASSERT_EQ(NodeStatus::IDLE, condition_1.status());
314 ASSERT_EQ(NodeStatus::IDLE, condition_2.status());
315 ASSERT_EQ(NodeStatus::IDLE, action_1.status());
322 condition_2.setExpectedResult(NodeStatus::FAILURE);
326 ASSERT_EQ(NodeStatus::FAILURE, state);
327 ASSERT_EQ(NodeStatus::IDLE, seq_conditions.status());
328 ASSERT_EQ(NodeStatus::IDLE, condition_1.status());
329 ASSERT_EQ(NodeStatus::IDLE, condition_2.status());
330 ASSERT_EQ(NodeStatus::IDLE, action_1.status());
336 std::this_thread::sleep_for(milliseconds(50));
338 ASSERT_EQ(NodeStatus::RUNNING, state);
347 ASSERT_EQ(NodeStatus::RUNNING, state);
354 ASSERT_EQ(NodeStatus::RUNNING, state);
363 ASSERT_EQ(NodeStatus::RUNNING, state);
364 ASSERT_EQ(NodeStatus::SUCCESS, seq_conditions.status());
365 ASSERT_EQ(NodeStatus::IDLE, condition_1.status());
366 ASSERT_EQ(NodeStatus::IDLE, condition_2.status());
367 ASSERT_EQ(NodeStatus::RUNNING, seq_actions.status());
368 ASSERT_EQ(NodeStatus::RUNNING, action_1.status());
369 ASSERT_EQ(NodeStatus::IDLE, action_2.status());
376 condition_1.setExpectedResult(NodeStatus::FAILURE);
380 ASSERT_EQ(NodeStatus::RUNNING, state);
381 ASSERT_EQ(NodeStatus::SUCCESS, seq_conditions.status());
382 ASSERT_EQ(NodeStatus::IDLE, condition_1.status());
383 ASSERT_EQ(NodeStatus::IDLE, condition_2.status());
384 ASSERT_EQ(NodeStatus::RUNNING, seq_actions.status());
385 ASSERT_EQ(NodeStatus::RUNNING, action_1.status());
386 ASSERT_EQ(NodeStatus::IDLE, action_2.status());
~SequenceTripleActionTest()
BT::ConditionTestNode condition_1
BT::AsyncActionTest action_2
The SequenceStarNode is used to tick children in an ordered sequence. If any child returns RUNNING...
BT::ConditionTestNode condition_1
SequenceTripleActionTest()
BT::ConditionTestNode condition_2
BT::SequenceStarNode seq_conditions
BT::ConditionTestNode condition_1
TEST_F(SimpleSequenceTest, ConditionTrue)
BT::SequenceStarNode root
BT::AsyncActionTest action_1
NodeStatus status() const
~ComplexSequenceWithMemoryTest()
SimpleSequenceWithMemoryTest()
BT::ConditionTestNode condition_2
BT::AsyncActionTest action
BT::AsyncActionTest action
void setExpectedResult(NodeStatus res)
ComplexSequence2ActionsTest()
BT::AsyncActionTest action_1
BT::ReactiveSequence root
BT::ConditionTestNode condition
BT::SequenceStarNode seq_actions
BT::SyncActionTest action_2
BT::ConditionTestNode condition_2
BT::AsyncActionTest action_3
void addChild(TreeNode *child)
The method used to add nodes to the children vector.
BT::SequenceNode seq_conditions
BT::ConditionTestNode condition
BT::ConditionTestNode condition
BT::AsyncActionTest action_1
BT::AsyncActionTest action_2
The ParallelNode execute all its children concurrently, but not in separate threads! ...
~ComplexSequence2ActionsTest()
ComplexSequenceWithMemoryTest()
The ReactiveSequence is similar to a ParallelNode. All the children are ticked from first to last: ...
BT::SequenceStarNode root
virtual BT::NodeStatus executeTick()
The method that should be used to invoke tick() and setStatus();.
~SimpleSequenceWithMemoryTest()
The SequenceNode is used to tick children in an ordered sequence. If any child returns RUNNING...
BT::AsyncActionTest action_1