BTSetVar: Cover operations in unit tests & fix bugs
This commit is contained in:
parent
554ae5a165
commit
c48eeef081
|
@ -15,6 +15,7 @@
|
||||||
#include "modules/limboai/util/limbo_utility.h"
|
#include "modules/limboai/util/limbo_utility.h"
|
||||||
|
|
||||||
#include "core/variant/callable.h"
|
#include "core/variant/callable.h"
|
||||||
|
#include "core/variant/variant.h"
|
||||||
|
|
||||||
String BTSetVar::_generate_name() const {
|
String BTSetVar::_generate_name() const {
|
||||||
if (variable.is_empty()) {
|
if (variable.is_empty()) {
|
||||||
|
@ -39,6 +40,7 @@ BT::Status BTSetVar::_tick(double p_delta) {
|
||||||
Variant left_value = get_blackboard()->get_var(variable, error_result);
|
Variant left_value = get_blackboard()->get_var(variable, error_result);
|
||||||
ERR_FAIL_COND_V_MSG(left_value == error_result, FAILURE, vformat("BTSetVar: Failed to get \"%s\" blackboard variable. Returning FAILURE.", variable));
|
ERR_FAIL_COND_V_MSG(left_value == error_result, FAILURE, vformat("BTSetVar: Failed to get \"%s\" blackboard variable. Returning FAILURE.", variable));
|
||||||
result = LimboUtility::get_singleton()->perform_operation(operation, left_value, right_value);
|
result = LimboUtility::get_singleton()->perform_operation(operation, left_value, right_value);
|
||||||
|
ERR_FAIL_COND_V_MSG(result == Variant(), FAILURE, "BTSetVar: Operation not valid. Returning FAILURE.");
|
||||||
}
|
}
|
||||||
get_blackboard()->set_var(variable, result);
|
get_blackboard()->set_var(variable, result);
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
|
|
|
@ -43,7 +43,7 @@ TEST_CASE("[Modules][LimboAI] BTSetVar") {
|
||||||
sv->set_value(value);
|
sv->set_value(value);
|
||||||
sv->set_variable("var");
|
sv->set_variable("var");
|
||||||
|
|
||||||
SUBCASE("When setting to a provided value") {
|
SUBCASE("When assigning a raw value") {
|
||||||
value->set_value_source(BBParam::SAVED_VALUE);
|
value->set_value_source(BBParam::SAVED_VALUE);
|
||||||
value->set_saved_value(123);
|
value->set_saved_value(123);
|
||||||
CHECK(sv->execute(0.01666) == BTTask::SUCCESS);
|
CHECK(sv->execute(0.01666) == BTTask::SUCCESS);
|
||||||
|
@ -74,6 +74,91 @@ TEST_CASE("[Modules][LimboAI] BTSetVar") {
|
||||||
CHECK(bb->get_var("var", 0) == Variant(123));
|
CHECK(bb->get_var("var", 0) == Variant(123));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
SUBCASE("When performing an operation") {
|
||||||
|
bb->set_var("var", 8);
|
||||||
|
value->set_value_source(BBParam::SAVED_VALUE);
|
||||||
|
value->set_saved_value(3);
|
||||||
|
|
||||||
|
SUBCASE("Addition") {
|
||||||
|
sv->set_operation(LimboUtility::OPERATION_ADDITION);
|
||||||
|
CHECK(sv->execute(0.01666) == BTTask::SUCCESS);
|
||||||
|
CHECK(bb->get_var("var", 0) == Variant(11));
|
||||||
|
}
|
||||||
|
SUBCASE("Subtraction") {
|
||||||
|
sv->set_operation(LimboUtility::OPERATION_SUBTRACTION);
|
||||||
|
CHECK(sv->execute(0.01666) == BTTask::SUCCESS);
|
||||||
|
CHECK(bb->get_var("var", 0) == Variant(5));
|
||||||
|
}
|
||||||
|
SUBCASE("Multiplication") {
|
||||||
|
sv->set_operation(LimboUtility::OPERATION_MULTIPLICATION);
|
||||||
|
CHECK(sv->execute(0.01666) == BTTask::SUCCESS);
|
||||||
|
CHECK(bb->get_var("var", 0) == Variant(24));
|
||||||
|
}
|
||||||
|
SUBCASE("Division") {
|
||||||
|
sv->set_operation(LimboUtility::OPERATION_DIVISION);
|
||||||
|
CHECK(sv->execute(0.01666) == BTTask::SUCCESS);
|
||||||
|
CHECK(bb->get_var("var", 0) == Variant(2));
|
||||||
|
}
|
||||||
|
SUBCASE("Modulo") {
|
||||||
|
sv->set_operation(LimboUtility::OPERATION_MODULO);
|
||||||
|
CHECK(sv->execute(0.01666) == BTTask::SUCCESS);
|
||||||
|
CHECK(bb->get_var("var", 0) == Variant(2));
|
||||||
|
}
|
||||||
|
SUBCASE("Power") {
|
||||||
|
sv->set_operation(LimboUtility::OPERATION_POWER);
|
||||||
|
CHECK(sv->execute(0.01666) == BTTask::SUCCESS);
|
||||||
|
CHECK(bb->get_var("var", 0) == Variant(512));
|
||||||
|
}
|
||||||
|
SUBCASE("Bitwise shift left") {
|
||||||
|
sv->set_operation(LimboUtility::OPERATION_BIT_SHIFT_LEFT);
|
||||||
|
CHECK(sv->execute(0.01666) == BTTask::SUCCESS);
|
||||||
|
CHECK(bb->get_var("var", 0) == Variant(64));
|
||||||
|
}
|
||||||
|
SUBCASE("Bitwise shift right") {
|
||||||
|
sv->set_operation(LimboUtility::OPERATION_BIT_SHIFT_RIGHT);
|
||||||
|
CHECK(sv->execute(0.01666) == BTTask::SUCCESS);
|
||||||
|
CHECK(bb->get_var("var", 0) == Variant(1));
|
||||||
|
}
|
||||||
|
SUBCASE("Bitwise AND") {
|
||||||
|
bb->set_var("var", 6);
|
||||||
|
sv->set_operation(LimboUtility::OPERATION_BIT_AND);
|
||||||
|
CHECK(sv->execute(0.01666) == BTTask::SUCCESS);
|
||||||
|
CHECK(bb->get_var("var", 0) == Variant(2));
|
||||||
|
}
|
||||||
|
SUBCASE("Bitwise OR") {
|
||||||
|
bb->set_var("var", 6);
|
||||||
|
sv->set_operation(LimboUtility::OPERATION_BIT_OR);
|
||||||
|
CHECK(sv->execute(0.01666) == BTTask::SUCCESS);
|
||||||
|
CHECK(bb->get_var("var", 0) == Variant(7));
|
||||||
|
}
|
||||||
|
SUBCASE("Bitwise XOR") {
|
||||||
|
bb->set_var("var", 6);
|
||||||
|
sv->set_operation(LimboUtility::OPERATION_BIT_XOR);
|
||||||
|
CHECK(sv->execute(0.01666) == BTTask::SUCCESS);
|
||||||
|
CHECK(bb->get_var("var", 0) == Variant(5));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SUBCASE("Performing an operation when assigned variable doesn't exist.") {
|
||||||
|
value->set_value_source(BBParam::SAVED_VALUE);
|
||||||
|
value->set_saved_value(3);
|
||||||
|
sv->set_operation(LimboUtility::OPERATION_ADDITION);
|
||||||
|
|
||||||
|
ERR_PRINT_OFF;
|
||||||
|
CHECK(sv->execute(0.01666) == BTTask::FAILURE);
|
||||||
|
ERR_PRINT_ON;
|
||||||
|
CHECK_FALSE(bb->has_var("var"));
|
||||||
|
}
|
||||||
|
SUBCASE("Performing an operation with incompatible operand types.") {
|
||||||
|
bb->set_var("var", 2); // int
|
||||||
|
value->set_value_source(BBParam::SAVED_VALUE);
|
||||||
|
value->set_saved_value("3"); // String
|
||||||
|
sv->set_operation(LimboUtility::OPERATION_ADDITION);
|
||||||
|
|
||||||
|
ERR_PRINT_OFF;
|
||||||
|
CHECK(sv->execute(0.01666) == BTTask::FAILURE);
|
||||||
|
ERR_PRINT_ON;
|
||||||
|
CHECK(bb->get_var("var", 0) == Variant(2));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -211,7 +211,7 @@ Variant LimboUtility::perform_operation(Operation p_operation, const Variant &le
|
||||||
return Variant::evaluate(Variant::OP_MODULE, left_value, right_value);
|
return Variant::evaluate(Variant::OP_MODULE, left_value, right_value);
|
||||||
} break;
|
} break;
|
||||||
case OPERATION_POWER: {
|
case OPERATION_POWER: {
|
||||||
return Variant::evaluate(Variant::OP_MODULE, left_value, right_value);
|
return Variant::evaluate(Variant::OP_POWER, left_value, right_value);
|
||||||
} break;
|
} break;
|
||||||
case OPERATION_BIT_SHIFT_LEFT: {
|
case OPERATION_BIT_SHIFT_LEFT: {
|
||||||
return Variant::evaluate(Variant::OP_SHIFT_LEFT, left_value, right_value);
|
return Variant::evaluate(Variant::OP_SHIFT_LEFT, left_value, right_value);
|
||||||
|
|
Loading…
Reference in New Issue