From 6f8292bc2d7dba00c5b21ffd965d110592588a1b Mon Sep 17 00:00:00 2001 From: Serhii Snitsaruk Date: Thu, 31 Aug 2023 14:38:04 +0200 Subject: [PATCH] Add tests for BTRepeatUntilFailure and BTRepeatUntilSuccess --- tests/test_repeat_until_failure.h | 51 +++++++++++++++++++++++++++++++ tests/test_repeat_until_success.h | 51 +++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 tests/test_repeat_until_failure.h create mode 100644 tests/test_repeat_until_success.h diff --git a/tests/test_repeat_until_failure.h b/tests/test_repeat_until_failure.h new file mode 100644 index 0000000..e1142e7 --- /dev/null +++ b/tests/test_repeat_until_failure.h @@ -0,0 +1,51 @@ +/** + * test_repeat_until_failure.h + * ============================================================================= + * Copyright 2021-2023 Serhii Snitsaruk + * + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + * ============================================================================= + */ + +#ifndef TEST_REPEAT_UNTIL_FAILURE_H +#define TEST_REPEAT_UNTIL_FAILURE_H + +#include "limbo_test.h" + +#include "modules/limboai/bt/tasks/bt_task.h" +#include "modules/limboai/bt/tasks/decorators/bt_repeat_until_failure.h" + +namespace TestRepeatUntilFailure { + +TEST_CASE("[Modules][LimboAI] BTRepeatUntilFailure") { + Ref rep = memnew(BTRepeatUntilFailure); + + SUBCASE("When empty") { + ERR_PRINT_OFF; + CHECK(rep->execute(0.01666) == BTTask::FAILURE); + ERR_PRINT_ON; + } + + Ref task = memnew(BTTestAction); + rep->add_child(task); + + SUBCASE("With various return statuses") { + task->ret_status = BTTask::SUCCESS; + CHECK(rep->execute(0.01666) == BTTask::RUNNING); + CHECK_STATUS_ENTRIES_TICKS_EXITS(task, BTTask::SUCCESS, 1, 1, 1); + + task->ret_status = BTTask::RUNNING; + CHECK(rep->execute(0.01666) == BTTask::RUNNING); + CHECK_STATUS_ENTRIES_TICKS_EXITS(task, BTTask::RUNNING, 2, 2, 1); + + task->ret_status = BTTask::FAILURE; + CHECK(rep->execute(0.01666) == BTTask::SUCCESS); + CHECK_STATUS_ENTRIES_TICKS_EXITS(task, BTTask::FAILURE, 2, 3, 2); + } +} + +} //namespace TestRepeatUntilFailure + +#endif // TEST_REPEAT_UNTIL_FAILURE_H diff --git a/tests/test_repeat_until_success.h b/tests/test_repeat_until_success.h new file mode 100644 index 0000000..64acd80 --- /dev/null +++ b/tests/test_repeat_until_success.h @@ -0,0 +1,51 @@ +/** + * test_repeat_until_success.h + * ============================================================================= + * Copyright 2021-2023 Serhii Snitsaruk + * + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + * ============================================================================= + */ + +#ifndef TEST_REPEAT_UNTIL_SUCCESS_H +#define TEST_REPEAT_UNTIL_SUCCESS_H + +#include "limbo_test.h" + +#include "modules/limboai/bt/tasks/bt_task.h" +#include "modules/limboai/bt/tasks/decorators/bt_repeat_until_success.h" + +namespace TestRepeatUntilSuccess { + +TEST_CASE("[Modules][LimboAI] BTRepeatUntilSuccess") { + Ref rep = memnew(BTRepeatUntilSuccess); + + SUBCASE("When empty") { + ERR_PRINT_OFF; + CHECK(rep->execute(0.01666) == BTTask::FAILURE); + ERR_PRINT_ON; + } + + Ref task = memnew(BTTestAction); + rep->add_child(task); + + SUBCASE("With various return statuses") { + task->ret_status = BTTask::FAILURE; + CHECK(rep->execute(0.01666) == BTTask::RUNNING); + CHECK_STATUS_ENTRIES_TICKS_EXITS(task, BTTask::FAILURE, 1, 1, 1); + + task->ret_status = BTTask::RUNNING; + CHECK(rep->execute(0.01666) == BTTask::RUNNING); + CHECK_STATUS_ENTRIES_TICKS_EXITS(task, BTTask::RUNNING, 2, 2, 1); + + task->ret_status = BTTask::SUCCESS; + CHECK(rep->execute(0.01666) == BTTask::SUCCESS); + CHECK_STATUS_ENTRIES_TICKS_EXITS(task, BTTask::SUCCESS, 2, 3, 2); + } +} + +} //namespace TestRepeatUntilSuccess + +#endif // TEST_REPEAT_UNTIL_SUCCESS_H