3 #include "testing/testing.h"
12 TEST(multi_function_procedure, ConstantOutput)
27 auto [var1] = builder.add_call<1>(constant_fn);
28 auto [var2] = builder.add_call<1>(add_fn, {var1, var1});
29 builder.add_destruct(*var1);
31 builder.add_output_parameter(*var2);
49 TEST(multi_function_procedure, SimpleTest)
65 MFVariable *var1 = &builder.add_single_input_parameter<
int>();
66 MFVariable *var2 = &builder.add_single_input_parameter<
int>();
67 auto [var3] = builder.add_call<1>(add_fn, {var1, var2});
68 auto [var4] = builder.add_call<1>(add_fn, {var2, var3});
69 builder.add_call(add_10_fn, {var4});
70 builder.add_destruct({var1, var2, var3});
72 builder.add_output_parameter(*var4);
83 params.add_readonly_single_input_value(3);
95 TEST(multi_function_procedure, BranchTest)
115 MFVariable *var1 = &builder.add_single_mutable_parameter<
int>();
116 MFVariable *var2 = &builder.add_single_input_parameter<
bool>();
120 branch.branch_true.add_call(add_100_fn, {var1});
121 builder.set_cursor_after_branch(branch);
122 builder.add_call(add_10_fn, {var1});
123 builder.add_destruct({var2});
124 builder.add_return();
132 Array<bool> values_cond = {
true,
false,
true,
true,
false};
147 TEST(multi_function_procedure, EvaluateOne)
155 int tot_evaluations = 0;
164 MFVariable *var1 = &builder.add_single_input_parameter<
int>();
165 auto [var2] = builder.add_call<1>(add_10_fn, {var1});
166 builder.add_destruct(*var1);
167 builder.add_return();
168 builder.add_output_parameter(*var2);
174 params.add_readonly_single_input_value(1);
189 TEST(multi_function_procedure, SimpleLoop)
209 [](
int a,
int b) {
return a >=
b; }};
217 MFVariable *var_count = &builder.add_single_input_parameter<
int>(
"count");
218 auto [var_out] = builder.add_call<1>(const_1_fn);
220 auto [var_index] = builder.add_call<1>(const_0_fn);
221 var_index->set_name(
"index");
224 auto [var_condition] = builder.add_call<1>(greater_or_equal_fn, {var_index, var_count});
225 var_condition->set_name(
"condition");
230 builder.set_cursor_after_branch(branch);
231 builder.add_call(double_fn, {var_out});
232 builder.add_call(add_1_fn, {var_index});
233 builder.add_loop_continue(loop);
234 builder.set_cursor_after_loop(loop);
235 builder.add_call(add_1000_fn, {var_out});
236 builder.add_destruct({var_count, var_index});
237 builder.add_return();
238 builder.add_output_parameter(*var_out);
261 TEST(multi_function_procedure, Vectors)
283 MFVariable *var_v1 = &builder.add_input_parameter(MFDataType::ForVector<int>());
285 builder.add_call(extend_fn, {var_v1, var_v2});
286 auto [var_constant] = builder.add_call<1>(constant_5_fn);
287 builder.add_call(append_fn, {var_v2, var_constant});
288 builder.add_destruct(*var_constant);
289 builder.add_call(extend_fn, {var_v2, var_v1});
290 auto [var_len] = builder.add_call<1>(sum_elements_fn, {var_v2});
291 auto [var_v3] = builder.add_call<1>(create_range_fn, {var_len});
292 builder.add_destruct({var_v1, var_len});
293 builder.add_return();
294 builder.add_output_parameter(*var_v3);
306 v2.append(0, &value_10);
307 v2.append(4, &value_10);
309 params.add_readonly_vector_input(
v1.as_span());
311 params.add_vector_output(v3);
329 TEST(multi_function_procedure, BufferReuse)
346 MFVariable *var_a = &builder.add_single_input_parameter<
int>();
347 auto [var_b] = builder.add_call<1>(add_10_fn, {var_a});
348 builder.add_destruct(*var_a);
349 auto [var_c] = builder.add_call<1>(add_10_fn, {var_b});
350 builder.add_destruct(*var_b);
351 auto [var_d] = builder.add_call<1>(add_10_fn, {var_c});
352 builder.add_destruct(*var_c);
353 auto [var_e] = builder.add_call<1>(add_10_fn, {var_d});
354 builder.add_destruct(*var_d);
355 auto [var_out] = builder.add_call<1>(add_10_fn, {var_e});
356 builder.add_destruct(*var_e);
357 builder.add_return();
358 builder.add_output_parameter(*var_out);
381 TEST(multi_function_procedure, OutputBufferReplaced)
386 const int output_value = 42;
389 builder.add_output_parameter(var_o);
390 builder.add_call_with_all_variables(constant_fn, {&var_o});
391 builder.add_destruct(var_o);
392 builder.add_call_with_all_variables(constant_fn, {&var_o});
393 builder.add_return();
401 params.add_uninitialized_single_output(
output.as_mutable_span());
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
ATTR_WARN_UNUSED_RESULT const BMVert * v2
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Span< T > as_span() const
MutableSpan< T > as_mutable_span()
static MFParamType ForMutableVector(const CPPType &base_type)
void add_destruct(MFVariable &variable)
void add_loop_break(Loop &loop)
Vector< MFVariable * > add_call(const MultiFunction &fn, Span< MFVariable * > input_and_mutable_variables={})
MFVariable & new_variable(MFDataType data_type, std::string name="")
void set_name(std::string name)
ccl_global KernelShaderEvalInput ccl_global float * output
TEST(field, ConstantFunction)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
static bNodeSocketTemplate inputs[]
MFProcedureBuilder branch_false
MFProcedureBuilder branch_true