Changeset View
Changeset View
Standalone View
Standalone View
source/blender/functions/tests/FN_multi_function_procedure_test.cc
| Show All 26 Lines | TEST(multi_function_procedure, ConstantOutput) | ||||
| auto [var1] = builder.add_call<1>(constant_fn); | auto [var1] = builder.add_call<1>(constant_fn); | ||||
| auto [var2] = builder.add_call<1>(add_fn, {var1, var1}); | auto [var2] = builder.add_call<1>(add_fn, {var1, var1}); | ||||
| builder.add_destruct(*var1); | builder.add_destruct(*var1); | ||||
| builder.add_return(); | builder.add_return(); | ||||
| builder.add_output_parameter(*var2); | builder.add_output_parameter(*var2); | ||||
| EXPECT_TRUE(procedure.validate()); | EXPECT_TRUE(procedure.validate()); | ||||
| MFProcedureExecutor executor{"My Procedure", procedure}; | MFProcedureExecutor executor{procedure}; | ||||
| MFParamsBuilder params{executor, 2}; | MFParamsBuilder params{executor, 2}; | ||||
| MFContextBuilder context; | MFContextBuilder context; | ||||
| Array<int> output_array(2); | Array<int> output_array(2); | ||||
| params.add_uninitialized_single_output(output_array.as_mutable_span()); | params.add_uninitialized_single_output(output_array.as_mutable_span()); | ||||
| executor.call(IndexRange(2), params, context); | executor.call(IndexRange(2), params, context); | ||||
| Show All 24 Lines | TEST(multi_function_procedure, SimpleTest) | ||||
| auto [var4] = builder.add_call<1>(add_fn, {var2, var3}); | auto [var4] = builder.add_call<1>(add_fn, {var2, var3}); | ||||
| builder.add_call(add_10_fn, {var4}); | builder.add_call(add_10_fn, {var4}); | ||||
| builder.add_destruct({var1, var2, var3}); | builder.add_destruct({var1, var2, var3}); | ||||
| builder.add_return(); | builder.add_return(); | ||||
| builder.add_output_parameter(*var4); | builder.add_output_parameter(*var4); | ||||
| EXPECT_TRUE(procedure.validate()); | EXPECT_TRUE(procedure.validate()); | ||||
| MFProcedureExecutor executor{"My Procedure", procedure}; | MFProcedureExecutor executor{procedure}; | ||||
| MFParamsBuilder params{executor, 3}; | MFParamsBuilder params{executor, 3}; | ||||
| MFContextBuilder context; | MFContextBuilder context; | ||||
| Array<int> input_array = {1, 2, 3}; | Array<int> input_array = {1, 2, 3}; | ||||
| params.add_readonly_single_input(input_array.as_span()); | params.add_readonly_single_input(input_array.as_span()); | ||||
| params.add_readonly_single_input_value(3); | params.add_readonly_single_input_value(3); | ||||
| Show All 35 Lines | TEST(multi_function_procedure, BranchTest) | ||||
| branch.branch_true.add_call(add_100_fn, {var1}); | branch.branch_true.add_call(add_100_fn, {var1}); | ||||
| builder.set_cursor_after_branch(branch); | builder.set_cursor_after_branch(branch); | ||||
| builder.add_call(add_10_fn, {var1}); | builder.add_call(add_10_fn, {var1}); | ||||
| builder.add_destruct({var2}); | builder.add_destruct({var2}); | ||||
| builder.add_return(); | builder.add_return(); | ||||
| EXPECT_TRUE(procedure.validate()); | EXPECT_TRUE(procedure.validate()); | ||||
| MFProcedureExecutor procedure_fn{"Condition Test", procedure}; | MFProcedureExecutor procedure_fn{procedure}; | ||||
| MFParamsBuilder params(procedure_fn, 5); | MFParamsBuilder params(procedure_fn, 5); | ||||
| Array<int> values_a = {1, 5, 3, 6, 2}; | Array<int> values_a = {1, 5, 3, 6, 2}; | ||||
| Array<bool> values_cond = {true, false, true, true, false}; | Array<bool> values_cond = {true, false, true, true, false}; | ||||
| params.add_single_mutable(values_a.as_mutable_span()); | params.add_single_mutable(values_a.as_mutable_span()); | ||||
| params.add_readonly_single_input(values_cond.as_span()); | params.add_readonly_single_input(values_cond.as_span()); | ||||
| Show All 25 Lines | TEST(multi_function_procedure, EvaluateOne) | ||||
| MFProcedureBuilder builder{procedure}; | MFProcedureBuilder builder{procedure}; | ||||
| MFVariable *var1 = &builder.add_single_input_parameter<int>(); | MFVariable *var1 = &builder.add_single_input_parameter<int>(); | ||||
| auto [var2] = builder.add_call<1>(add_10_fn, {var1}); | auto [var2] = builder.add_call<1>(add_10_fn, {var1}); | ||||
| builder.add_destruct(*var1); | builder.add_destruct(*var1); | ||||
| builder.add_return(); | builder.add_return(); | ||||
| builder.add_output_parameter(*var2); | builder.add_output_parameter(*var2); | ||||
| MFProcedureExecutor procedure_fn{"Evaluate One", procedure}; | MFProcedureExecutor procedure_fn{procedure}; | ||||
| MFParamsBuilder params{procedure_fn, 5}; | MFParamsBuilder params{procedure_fn, 5}; | ||||
| Array<int> values_out = {1, 2, 3, 4, 5}; | Array<int> values_out = {1, 2, 3, 4, 5}; | ||||
| params.add_readonly_single_input_value(1); | params.add_readonly_single_input_value(1); | ||||
| params.add_uninitialized_single_output(values_out.as_mutable_span()); | params.add_uninitialized_single_output(values_out.as_mutable_span()); | ||||
| MFContextBuilder context; | MFContextBuilder context; | ||||
| procedure_fn.call({0, 1, 3, 4}, params, context); | procedure_fn.call({0, 1, 3, 4}, params, context); | ||||
| ▲ Show 20 Lines • Show All 55 Lines • ▼ Show 20 Lines | TEST(multi_function_procedure, SimpleLoop) | ||||
| builder.set_cursor_after_loop(loop); | builder.set_cursor_after_loop(loop); | ||||
| builder.add_call(add_1000_fn, {var_out}); | builder.add_call(add_1000_fn, {var_out}); | ||||
| builder.add_destruct({var_count, var_index}); | builder.add_destruct({var_count, var_index}); | ||||
| builder.add_return(); | builder.add_return(); | ||||
| builder.add_output_parameter(*var_out); | builder.add_output_parameter(*var_out); | ||||
| EXPECT_TRUE(procedure.validate()); | EXPECT_TRUE(procedure.validate()); | ||||
| MFProcedureExecutor procedure_fn{"Simple Loop", procedure}; | MFProcedureExecutor procedure_fn{procedure}; | ||||
| MFParamsBuilder params{procedure_fn, 5}; | MFParamsBuilder params{procedure_fn, 5}; | ||||
| Array<int> counts = {4, 3, 7, 6, 4}; | Array<int> counts = {4, 3, 7, 6, 4}; | ||||
| Array<int> results(5, -1); | Array<int> results(5, -1); | ||||
| params.add_readonly_single_input(counts.as_span()); | params.add_readonly_single_input(counts.as_span()); | ||||
| params.add_uninitialized_single_output(results.as_mutable_span()); | params.add_uninitialized_single_output(results.as_mutable_span()); | ||||
| Show All 39 Lines | TEST(multi_function_procedure, Vectors) | ||||
| auto [var_len] = builder.add_call<1>(sum_elements_fn, {var_v2}); | auto [var_len] = builder.add_call<1>(sum_elements_fn, {var_v2}); | ||||
| auto [var_v3] = builder.add_call<1>(create_range_fn, {var_len}); | auto [var_v3] = builder.add_call<1>(create_range_fn, {var_len}); | ||||
| builder.add_destruct({var_v1, var_len}); | builder.add_destruct({var_v1, var_len}); | ||||
| builder.add_return(); | builder.add_return(); | ||||
| builder.add_output_parameter(*var_v3); | builder.add_output_parameter(*var_v3); | ||||
| EXPECT_TRUE(procedure.validate()); | EXPECT_TRUE(procedure.validate()); | ||||
| MFProcedureExecutor procedure_fn{"Vectors", procedure}; | MFProcedureExecutor procedure_fn{procedure}; | ||||
| MFParamsBuilder params{procedure_fn, 5}; | MFParamsBuilder params{procedure_fn, 5}; | ||||
| Array<int> v1 = {5, 2, 3}; | Array<int> v1 = {5, 2, 3}; | ||||
| GVectorArray v2{CPPType::get<int>(), 5}; | GVectorArray v2{CPPType::get<int>(), 5}; | ||||
| GVectorArray v3{CPPType::get<int>(), 5}; | GVectorArray v3{CPPType::get<int>(), 5}; | ||||
| int value_10 = 10; | int value_10 = 10; | ||||
| v2.append(0, &value_10); | v2.append(0, &value_10); | ||||
| ▲ Show 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | TEST(multi_function_procedure, BufferReuse) | ||||
| builder.add_destruct(*var_d); | builder.add_destruct(*var_d); | ||||
| auto [var_out] = builder.add_call<1>(add_10_fn, {var_e}); | auto [var_out] = builder.add_call<1>(add_10_fn, {var_e}); | ||||
| builder.add_destruct(*var_e); | builder.add_destruct(*var_e); | ||||
| builder.add_return(); | builder.add_return(); | ||||
| builder.add_output_parameter(*var_out); | builder.add_output_parameter(*var_out); | ||||
| EXPECT_TRUE(procedure.validate()); | EXPECT_TRUE(procedure.validate()); | ||||
| MFProcedureExecutor procedure_fn{"Buffer Reuse", procedure}; | MFProcedureExecutor procedure_fn{procedure}; | ||||
| Array<int> inputs = {4, 1, 6, 2, 3}; | Array<int> inputs = {4, 1, 6, 2, 3}; | ||||
| Array<int> results(5, -1); | Array<int> results(5, -1); | ||||
| MFParamsBuilder params{procedure_fn, 5}; | MFParamsBuilder params{procedure_fn, 5}; | ||||
| params.add_readonly_single_input(inputs.as_span()); | params.add_readonly_single_input(inputs.as_span()); | ||||
| params.add_uninitialized_single_output(results.as_mutable_span()); | params.add_uninitialized_single_output(results.as_mutable_span()); | ||||
| Show All 11 Lines | |||||