5#include "testing/testing.h"
14TEST(field, ConstantFunction)
39 auto index_func = [](
int i) {
return i; };
46 GField index_field{std::make_shared<IndexFieldInput>()};
68 evaluator_2.evaluate();
75TEST(field, VArrayInputMultipleOutputs)
77 std::shared_ptr<FieldInput> index_input = std::make_shared<IndexFieldInput>();
78 GField field_1{index_input};
79 GField field_2{index_input};
105 GField index_field{std::make_shared<IndexFieldInput>()};
107 auto add_fn = mf::build::SI2_SO<int, int, int>(
"add", [](
int a,
int b) {
return a +
b; });
119 evaluator.evaluate();
128 GField index_field{std::make_shared<IndexFieldInput>()};
130 auto add_fn = mf::build::SI2_SO<int, int, int>(
"add", [](
int a,
int b) {
return a +
b; });
133 auto add_10_fn = mf::build::SI1_SO<int, int>(
"add_10", [](
int a) {
return a + 10; });
145 evaluator.evaluate();
160 builder.single_input<
int>(
"In1");
161 builder.single_input<
int>(
"In2");
162 builder.single_output<
int>(
"Add");
163 builder.single_output<
int>(
"Add10");
173 mask.foreach_index([&](
const int64_t i) {
174 add[i] = in1[i] + in2[i];
175 add_10[i] = add[i] + 10;
183 GField index_field_1{std::make_shared<IndexFieldInput>()};
184 GField index_field_2{std::make_shared<IndexFieldInput>()};
187 std::make_unique<TwoOutputFunction>(), {index_field_1, index_field_2});
189 GField result_field_1{fn, 0};
190 GField result_field_2{fn, 1};
202 evaluator.add_with_destination(result_field_2, result_2.
as_mutable_span());
203 evaluator.evaluate();
214TEST(field, TwoFunctionsTwoOutputs)
216 GField index_field{std::make_shared<IndexFieldInput>()};
219 std::make_unique<TwoOutputFunction>(), {index_field, index_field});
228 auto add_10_fn = mf::build::SI1_SO<int, int>(
"add_10", [](
int a) {
return a + 10; });
235 field_evaluator.add(result_field_1, &result_1);
236 field_evaluator.add(result_field_2, &result_2);
237 field_evaluator.evaluate();
258 scope, {constant_field, constant_field},
mask, field_context);
271 static mf::tests::OptionalOutputsFunction fn;
277 field_evaluator.add(field, &results);
278 field_evaluator.evaluate();
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
MutableSpan< T > as_mutable_span()
T get(const int64_t index) const
static VArray ForFunc(const int64_t size, GetFunc get_func)
int add_with_destination(GField field, GVMutableArray dst)
static std::shared_ptr< FieldOperation > Create(std::shared_ptr< const mf::MultiFunction > function, Vector< GField > inputs={})
void set_signature(const Signature *signature)
void call(const IndexMask &mask, mf::Params params, mf::Context) const override
static IndexMask from_indices(Span< T > indices, IndexMaskMemory &memory)
local_group_size(16, 16) .push_constant(Type b
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
ccl_device_inline float4 mask(const int4 mask, const float4 a)
TEST(field, ConstantFunction)
Vector< GVArray > evaluate_fields(ResourceScope &scope, Span< GFieldRef > fields_to_evaluate, const IndexMask &mask, const FieldContext &context, Span< GVMutableArray > dst_varrays={})