Added Tests for MathAdd Node

AnimGraphEditor
Martin Felis 2022-04-11 11:40:53 +02:00
parent e7314e3477
commit bf0c7a7daa
2 changed files with 158 additions and 12 deletions

View File

@ -223,6 +223,8 @@ void AnimGraph::evaluate() {
finishNodeEval(node->m_index); finishNodeEval(node->m_index);
} }
evalOutputNode();
} }
Socket* AnimGraph::getInputSocket(const std::string& name) { Socket* AnimGraph::getInputSocket(const std::string& name) {

View File

@ -150,8 +150,8 @@ TEST_CASE("ResourceSaveLoadMathGraphInputs", "[AnimGraphResource]") {
graph_resource_origin.clear(); graph_resource_origin.clear();
graph_resource_origin.m_name = "TestInputOutputGraph"; graph_resource_origin.m_name = "TestInputOutputGraph";
size_t float_to_vec3_node_index = size_t float_to_vec3_node_index = graph_resource_origin.addNode(
graph_resource_origin.addNode(AnimNodeResourceFactory("MathFloatToVec3Node")); AnimNodeResourceFactory("MathFloatToVec3Node"));
AnimNodeResource& graph_output_node = AnimNodeResource& graph_output_node =
graph_resource_origin.getGraphOutputNode(); graph_resource_origin.getGraphOutputNode();
@ -200,7 +200,6 @@ TEST_CASE("ResourceSaveLoadMathGraphInputs", "[AnimGraphResource]") {
graph_output_node, graph_output_node,
"GraphVec3Output")); "GraphVec3Output"));
WHEN("Saving and loading graph resource") { WHEN("Saving and loading graph resource") {
const char* filename = "ResourceSaveLoadGraphInputs.json"; const char* filename = "ResourceSaveLoadGraphInputs.json";
graph_resource_origin.saveToFile(filename); graph_resource_origin.saveToFile(filename);
@ -240,28 +239,173 @@ TEST_CASE("ResourceSaveLoadMathGraphInputs", "[AnimGraphResource]") {
AnimGraph anim_graph = graph_resource_loaded.createInstance(); AnimGraph anim_graph = graph_resource_loaded.createInstance();
REQUIRE(anim_graph.getInputSocket("GraphFloatInput") != nullptr); REQUIRE(anim_graph.getInputSocket("GraphFloatInput") != nullptr);
REQUIRE(anim_graph.getInputPtr("GraphFloatInput") == anim_graph.m_input_buffer); REQUIRE(
anim_graph.getInputPtr("GraphFloatInput")
== anim_graph.m_input_buffer);
float* graph_float_input = nullptr; float* graph_float_input = nullptr;
graph_float_input = static_cast<float*>(anim_graph.getInputPtr("GraphFloatInput")); graph_float_input =
static_cast<float*>(anim_graph.getInputPtr("GraphFloatInput"));
*graph_float_input = 123.456f; *graph_float_input = 123.456f;
AND_WHEN("Evaluating Graph") {
anim_graph.updateTime(0.f); anim_graph.updateTime(0.f);
anim_graph.evaluate(); anim_graph.evaluate();
anim_graph.evalOutputNode(); Socket* float_output_socket =
anim_graph.getOutputSocket("GraphFloatOutput");
Socket* float_output_socket = anim_graph.getOutputSocket("GraphFloatOutput"); Socket* vec3_output_socket =
Socket* vec3_output_socket = anim_graph.getOutputSocket("GraphVec3Output"); anim_graph.getOutputSocket("GraphVec3Output");
Vec3& vec3_output = *static_cast<Vec3*>(vec3_output_socket->m_value.ptr); Vec3& vec3_output =
*static_cast<Vec3*>(vec3_output_socket->m_value.ptr);
THEN("output vector components equal the graph input vaulues") {
CHECK(vec3_output[0] == *graph_float_input); CHECK(vec3_output[0] == *graph_float_input);
CHECK(vec3_output[1] == *graph_float_input); CHECK(vec3_output[1] == *graph_float_input);
CHECK(vec3_output[2] == *graph_float_input); CHECK(vec3_output[2] == *graph_float_input);
} }
} }
} }
}
}
}
TEST_CASE("SimpleMathEvaluations", "[AnimGraphResource]") {
AnimGraphResource graph_resource_origin;
graph_resource_origin.clear();
graph_resource_origin.m_name = "TestInputOutputGraph";
size_t math_add0_node_index =
graph_resource_origin.addNode(AnimNodeResourceFactory("MathAddNode"));
size_t math_add1_node_index =
graph_resource_origin.addNode(AnimNodeResourceFactory("MathAddNode"));
AnimNodeResource& graph_output_node =
graph_resource_origin.getGraphOutputNode();
graph_output_node.m_socket_accessor->RegisterInput<float>(
"GraphFloat0Output",
nullptr);
graph_output_node.m_socket_accessor->RegisterInput<float>(
"GraphFloat1Output",
nullptr);
graph_output_node.m_socket_accessor->RegisterInput<float>(
"GraphFloat2Output",
nullptr);
AnimNodeResource& graph_input_node =
graph_resource_origin.getGraphInputNode();
graph_input_node.m_socket_accessor->RegisterOutput<float>(
"GraphFloatInput",
nullptr);
// Prepare graph inputs and outputs
AnimNodeResource& math_add0_node =
graph_resource_origin.m_nodes[math_add0_node_index];
AnimNodeResource& math_add1_node =
graph_resource_origin.m_nodes[math_add1_node_index];
// direct output
REQUIRE(graph_resource_origin.connectSockets(
graph_input_node,
"GraphFloatInput",
graph_output_node,
"GraphFloat0Output"));
// add0 node
REQUIRE(graph_resource_origin.connectSockets(
graph_input_node,
"GraphFloatInput",
math_add0_node,
"Input0"));
REQUIRE(graph_resource_origin.connectSockets(
graph_input_node,
"GraphFloatInput",
math_add0_node,
"Input1"));
REQUIRE(graph_resource_origin.connectSockets(
math_add0_node,
"Output",
graph_output_node,
"GraphFloat1Output"));
// add1 node
REQUIRE(graph_resource_origin.connectSockets(
math_add0_node,
"Output",
math_add1_node,
"Input0"));
REQUIRE(graph_resource_origin.connectSockets(
graph_input_node,
"GraphFloatInput",
math_add1_node,
"Input1"));
REQUIRE(graph_resource_origin.connectSockets(
math_add1_node,
"Output",
graph_output_node,
"GraphFloat2Output"));
WHEN("Saving and loading graph resource") {
const char* filename = "ResourceSaveLoadGraphInputs.json";
graph_resource_origin.saveToFile(filename);
AnimGraphResource graph_resource_loaded;
graph_resource_loaded.loadFromFile(filename);
const AnimNodeResource& graph_loaded_output_node =
graph_resource_loaded.m_nodes[0];
const AnimNodeResource& graph_loaded_input_node =
graph_resource_loaded.m_nodes[1];
WHEN("Instantiating an AnimGraph") {
AnimGraph anim_graph = graph_resource_loaded.createInstance();
REQUIRE(anim_graph.getInputSocket("GraphFloatInput") != nullptr);
REQUIRE(
anim_graph.getInputPtr("GraphFloatInput")
== anim_graph.m_input_buffer);
float* graph_float_input = nullptr;
graph_float_input =
static_cast<float*>(anim_graph.getInputPtr("GraphFloatInput"));
*graph_float_input = 123.456f;
AND_WHEN("Evaluating Graph") {
anim_graph.updateTime(0.f);
anim_graph.evaluate();
Socket* float0_output_socket =
anim_graph.getOutputSocket("GraphFloat0Output");
Socket* float1_output_socket =
anim_graph.getOutputSocket("GraphFloat1Output");
Socket* float2_output_socket =
anim_graph.getOutputSocket("GraphFloat2Output");
REQUIRE(float0_output_socket != nullptr);
REQUIRE(float1_output_socket != nullptr);
REQUIRE(float2_output_socket != nullptr);
float& float0_output = *static_cast<float*>(float0_output_socket->m_value.ptr);
float& float1_output = *static_cast<float*>(float1_output_socket->m_value.ptr);
float& float2_output = *static_cast<float*>(float2_output_socket->m_value.ptr);
THEN("output vector components equal the graph input vaulues") {
CHECK(float0_output == Approx(*graph_float_input));
CHECK(float1_output == Approx(*graph_float_input * 2.));
CHECK(float2_output == Approx(*graph_float_input * 3.));
}
}
}
}
} }
/* /*