3 #include "testing/testing.h"
12 TEST(field, ConstantFunction)
15 GField constant_field{std::make_shared<FieldOperation>(
23 evaluator.add_with_destination(constant_field,
result.as_mutable_span());
41 auto index_func = [](
int i) {
return i; };
48 GField index_field{std::make_shared<IndexFieldInput>()};
54 evaluator.add_with_destination(index_field, result_1.
as_mutable_span());
68 evaluator_2.add_with_destination(index_field, result_2.
as_mutable_span());
69 evaluator_2.evaluate();
76 TEST(field, VArrayInputMultipleOutputs)
78 std::shared_ptr<FieldInput> index_input = std::make_shared<IndexFieldInput>();
79 GField field_1{index_input};
80 GField field_2{index_input};
105 GField index_field{std::make_shared<IndexFieldInput>()};
107 std::unique_ptr<MultiFunction> add_fn = std::make_unique<CustomMF_SI_SI_SO<int, int, int>>(
108 "add", [](
int a,
int b) {
return a +
b; });
109 GField output_field{std::make_shared<FieldOperation>(
120 evaluator.add_with_destination(output_field,
result.as_mutable_span());
121 evaluator.evaluate();
130 GField index_field{std::make_shared<IndexFieldInput>()};
132 std::unique_ptr<MultiFunction> add_fn = std::make_unique<CustomMF_SI_SI_SO<int, int, int>>(
133 "add", [](
int a,
int b) {
return a +
b; });
134 GField add_field{std::make_shared<FieldOperation>(
138 std::unique_ptr<MultiFunction> add_10_fn = std::make_unique<CustomMF_SI_SO<int, int>>(
139 "add_10", [](
int a) {
return a + 10; });
141 std::make_shared<FieldOperation>(
FieldOperation(std::move(add_10_fn), {add_field})), 0};
150 evaluator.add_with_destination(result_field,
result.as_mutable_span());
151 evaluator.evaluate();
181 add[i] = in1[i] + in2[i];
182 add_10[i] =
add[i] + 10;
187 TEST(field, FunctionTwoOutputs)
190 GField index_field_1{std::make_shared<IndexFieldInput>()};
191 GField index_field_2{std::make_shared<IndexFieldInput>()};
193 std::shared_ptr<FieldOperation> fn = std::make_shared<FieldOperation>(
194 FieldOperation(std::make_unique<TwoOutputFunction>(), {index_field_1, index_field_2}));
196 GField result_field_1{fn, 0};
197 GField result_field_2{fn, 1};
207 evaluator.add_with_destination(result_field_1, result_1.
as_mutable_span());
208 evaluator.add_with_destination(result_field_2, result_2.
as_mutable_span());
209 evaluator.evaluate();
220 TEST(field, TwoFunctionsTwoOutputs)
222 GField index_field{std::make_shared<IndexFieldInput>()};
224 std::shared_ptr<FieldOperation> fn = std::make_shared<FieldOperation>(
225 FieldOperation(std::make_unique<TwoOutputFunction>(), {index_field, index_field}));
233 std::unique_ptr<MultiFunction> add_10_fn = std::make_unique<CustomMF_SI_SO<int, int>>(
234 "add_10", [](
int a) {
return a + 10; });
236 std::make_shared<FieldOperation>(
FieldOperation(std::move(add_10_fn), {intermediate_field})),
243 field_evaluator.add(result_field_1, &result_1);
244 field_evaluator.add(result_field_2, &result_2);
245 field_evaluator.evaluate();
266 scope, {constant_field, constant_field},
mask, field_context);
280 Field<int> field{std::make_shared<FieldOperation>(fn), 0};
285 field_evaluator.add(field, &results);
286 field_evaluator.evaluate();
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
Span< T > as_span() const
MutableSpan< T > as_mutable_span()
T get(const int64_t index) const
static VArray ForFunc(const int64_t size, GetFunc get_func)
void set_signature(const MFSignature *signature)
const MFSignature & signature() const
void call(IndexMask mask, MFParams params, MFContext UNUSED(context)) const override
ccl_gpu_kernel_postfix int ccl_global int * indices
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
bool add(void *owner, const AttributeIDRef &attribute_id, eAttrDomain domain, eCustomDataType data_type, const AttributeInit &initializer)
TEST(field, ConstantFunction)
Vector< GVArray > evaluate_fields(ResourceScope &scope, Span< GFieldRef > fields_to_evaluate, IndexMask mask, const FieldContext &context, Span< GVMutableArray > dst_varrays={})
static const pxr::TfToken b("b", pxr::TfToken::Immortal)