3 #include "testing/testing.h"
12 TEST(multi_function_network, Test1)
14 CustomMF_SI_SO<int, int> add_10_fn(
"add 10", [](
int value) {
return value + 10; });
15 CustomMF_SI_SI_SO<int, int, int> multiply_fn(
"multiply", [](
int a,
int b) {
return a * b; });
19 MFNode &node1 = network.add_function(add_10_fn);
20 MFNode &node2 = network.add_function(multiply_fn);
21 MFOutputSocket &input_socket = network.add_input(
"Input", MFDataType::ForSingle<int>());
22 MFInputSocket &output_socket = network.add_output(
"Output", MFDataType::ForSingle<int>());
23 network.add_link(node1.output(0), node2.input(0));
24 network.add_link(node1.output(0), node2.input(1));
25 network.add_link(node2.output(0), output_socket);
26 network.add_link(input_socket, node1.input(0));
28 MFNetworkEvaluator network_fn{{&input_socket}, {&output_socket}};
31 Array<int> values = {4, 6, 1, 2, 0};
32 Array<int> results(values.size(), 0);
34 MFParamsBuilder
params(network_fn, values.size());
35 params.add_readonly_single_input(values.as_span());
36 params.add_uninitialized_single_output(results.as_mutable_span());
50 Array<int> results(5, 0);
52 MFParamsBuilder
params(network_fn, results.size());
53 params.add_readonly_single_input(&value);
54 params.add_uninitialized_single_output(results.as_mutable_span());
68 class ConcatVectorsFunction :
public MultiFunction {
70 ConcatVectorsFunction()
72 static MFSignature signature = create_signature();
73 this->set_signature(&signature);
76 static MFSignature create_signature()
78 MFSignatureBuilder signature{
"Concat Vectors"};
79 signature.vector_mutable<
int>(
"A");
80 signature.vector_input<
int>(
"B");
81 return signature.build();
86 GVectorArray &
a =
params.vector_mutable(0);
87 const GVVectorArray &b =
params.readonly_vector_input(1);
92 class AppendFunction :
public MultiFunction {
96 static MFSignature signature = create_signature();
97 this->set_signature(&signature);
100 static MFSignature create_signature()
102 MFSignatureBuilder signature{
"Append"};
103 signature.vector_mutable<
int>(
"Vector");
104 signature.single_input<
int>(
"Value");
105 return signature.build();
110 GVectorArray_TypedMutableRef<int> vectors =
params.vector_mutable<
int>(0);
111 const VArray<int> &values =
params.readonly_single_input<
int>(1);
114 vectors.append(i, values[i]);
119 class SumVectorFunction :
public MultiFunction {
123 static MFSignature signature = create_signature();
124 this->set_signature(&signature);
127 static MFSignature create_signature()
129 MFSignatureBuilder signature{
"Sum Vectors"};
130 signature.vector_input<
int>(
"Vector");
131 signature.single_output<
int>(
"Sum");
132 return signature.build();
137 const VVectorArray<int> &vectors =
params.readonly_vector_input<
int>(0);
138 MutableSpan<int> sums =
params.uninitialized_single_output<
int>(1);
142 for (
int j : IndexRange(vectors.get_vector_size(i))) {
143 sum += vectors.get_vector_element(i, j);
150 class CreateRangeFunction :
public MultiFunction {
152 CreateRangeFunction()
154 static MFSignature signature = create_signature();
155 this->set_signature(&signature);
158 static MFSignature create_signature()
160 MFSignatureBuilder signature{
"Create Range"};
161 signature.single_input<
int>(
"Size");
162 signature.vector_output<
int>(
"Range");
163 return signature.build();
168 const VArray<int> &sizes =
params.readonly_single_input<
int>(0,
"Size");
169 GVectorArray_TypedMutableRef<int> ranges =
params.vector_output<
int>(1,
"Range");
173 for (
int j : IndexRange(
size)) {
180 TEST(multi_function_network, Test2)
182 CustomMF_SI_SO<int, int> add_3_fn(
"add 3", [](
int value) {
return value + 3; });
184 ConcatVectorsFunction concat_vectors_fn;
185 AppendFunction append_fn;
186 SumVectorFunction sum_fn;
187 CreateRangeFunction create_range_fn;
191 MFOutputSocket &input1 = network.add_input(
"Input 1", MFDataType::ForVector<int>());
192 MFOutputSocket &input2 = network.add_input(
"Input 2", MFDataType::ForSingle<int>());
193 MFInputSocket &output1 = network.add_output(
"Output 1", MFDataType::ForVector<int>());
194 MFInputSocket &output2 = network.add_output(
"Output 2", MFDataType::ForSingle<int>());
196 MFNode &node1 = network.add_function(add_3_fn);
197 MFNode &node2 = network.add_function(create_range_fn);
198 MFNode &node3 = network.add_function(concat_vectors_fn);
199 MFNode &node4 = network.add_function(sum_fn);
200 MFNode &node5 = network.add_function(append_fn);
201 MFNode &node6 = network.add_function(sum_fn);
203 network.add_link(input2, node1.input(0));
204 network.add_link(node1.output(0), node2.input(0));
205 network.add_link(node2.output(0), node3.input(1));
206 network.add_link(input1, node3.input(0));
207 network.add_link(input1, node4.input(0));
208 network.add_link(node4.output(0), node5.input(1));
209 network.add_link(node3.output(0), node5.input(0));
210 network.add_link(node5.output(0), node6.input(0));
211 network.add_link(node3.output(0), output1);
212 network.add_link(node6.output(0), output2);
216 MFNetworkEvaluator network_fn{{&input1, &input2}, {&output1, &output2}};
219 Array<int> input_value_1 = {3, 6};
220 int input_value_2 = 4;
222 GVectorArray output_value_1(CPPType::get<int32_t>(), 5);
223 Array<int> output_value_2(5, -1);
225 MFParamsBuilder
params(network_fn, 5);
226 GVVectorArrayForSingleGSpan inputs_1{input_value_1.as_span(), 5};
227 params.add_readonly_vector_input(inputs_1);
228 params.add_readonly_single_input(&input_value_2);
229 params.add_vector_output(output_value_1);
230 params.add_uninitialized_single_output(output_value_2.as_mutable_span());
249 GVectorArray input_value_1(CPPType::get<int32_t>(), 3);
250 GVectorArray_TypedMutableRef<int> input_value_1_ref{input_value_1};
251 input_value_1_ref.extend(0, {3, 4, 5});
252 input_value_1_ref.extend(1, {1, 2});
254 Array<int> input_value_2 = {4, 2, 3};
256 GVectorArray output_value_1(CPPType::get<int32_t>(), 3);
257 Array<int> output_value_2(3, -1);
259 MFParamsBuilder
params(network_fn, 3);
260 params.add_readonly_vector_input(input_value_1);
261 params.add_readonly_single_input(input_value_2.as_span());
262 params.add_vector_output(output_value_1);
263 params.add_uninitialized_single_output(output_value_2.as_mutable_span());
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
static T sum(const btAlignedObjectArray< T > &items)
struct SELECTID_Context context
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)