Changeset View
Changeset View
Standalone View
Standalone View
source/blender/functions/tests/FN_field_test.cc
| Show First 20 Lines • Show All 154 Lines • ▼ Show 20 Lines | TEST(field, TwoFunctions) | ||||
| EXPECT_EQ(result[8], 26); | EXPECT_EQ(result[8], 26); | ||||
| } | } | ||||
| class TwoOutputFunction : public MultiFunction { | class TwoOutputFunction : public MultiFunction { | ||||
| private: | private: | ||||
| MFSignature signature_; | MFSignature signature_; | ||||
| public: | public: | ||||
| TwoOutputFunction(StringRef name) | TwoOutputFunction() | ||||
| { | { | ||||
| MFSignatureBuilder signature{name}; | MFSignatureBuilder signature{"Two Outputs"}; | ||||
| signature.single_input<int>("In1"); | signature.single_input<int>("In1"); | ||||
| signature.single_input<int>("In2"); | signature.single_input<int>("In2"); | ||||
| signature.single_output<int>("Add"); | signature.single_output<int>("Add"); | ||||
| signature.single_output<int>("Add10"); | signature.single_output<int>("Add10"); | ||||
| signature_ = signature.build(); | signature_ = signature.build(); | ||||
| this->set_signature(&signature_); | this->set_signature(&signature_); | ||||
| } | } | ||||
| Show All 11 Lines | |||||
| }; | }; | ||||
| TEST(field, FunctionTwoOutputs) | TEST(field, FunctionTwoOutputs) | ||||
| { | { | ||||
| /* Also use two separate input fields, why not. */ | /* Also use two separate input fields, why not. */ | ||||
| GField index_field_1{std::make_shared<IndexFieldInput>()}; | GField index_field_1{std::make_shared<IndexFieldInput>()}; | ||||
| GField index_field_2{std::make_shared<IndexFieldInput>()}; | GField index_field_2{std::make_shared<IndexFieldInput>()}; | ||||
| std::shared_ptr<FieldOperation> fn = std::make_shared<FieldOperation>(FieldOperation( | std::shared_ptr<FieldOperation> fn = std::make_shared<FieldOperation>( | ||||
| std::make_unique<TwoOutputFunction>("SI_SI_SO_SO"), {index_field_1, index_field_2})); | FieldOperation(std::make_unique<TwoOutputFunction>(), {index_field_1, index_field_2})); | ||||
| GField result_field_1{fn, 0}; | GField result_field_1{fn, 0}; | ||||
| GField result_field_2{fn, 1}; | GField result_field_2{fn, 1}; | ||||
| Array<int> result_1(10); | Array<int> result_1(10); | ||||
| Array<int> result_2(10); | Array<int> result_2(10); | ||||
| const Array<int64_t> indices = {2, 4, 6, 8}; | const Array<int64_t> indices = {2, 4, 6, 8}; | ||||
| Show All 13 Lines | TEST(field, FunctionTwoOutputs) | ||||
| EXPECT_EQ(result_2[6], 22); | EXPECT_EQ(result_2[6], 22); | ||||
| EXPECT_EQ(result_2[8], 26); | EXPECT_EQ(result_2[8], 26); | ||||
| } | } | ||||
| TEST(field, TwoFunctionsTwoOutputs) | TEST(field, TwoFunctionsTwoOutputs) | ||||
| { | { | ||||
| GField index_field{std::make_shared<IndexFieldInput>()}; | GField index_field{std::make_shared<IndexFieldInput>()}; | ||||
| std::shared_ptr<FieldOperation> fn = std::make_shared<FieldOperation>(FieldOperation( | std::shared_ptr<FieldOperation> fn = std::make_shared<FieldOperation>( | ||||
| std::make_unique<TwoOutputFunction>("SI_SI_SO_SO"), {index_field, index_field})); | FieldOperation(std::make_unique<TwoOutputFunction>(), {index_field, index_field})); | ||||
| Array<int64_t> mask_indices = {2, 4, 6, 8}; | Array<int64_t> mask_indices = {2, 4, 6, 8}; | ||||
| IndexMask mask = mask_indices.as_span(); | IndexMask mask = mask_indices.as_span(); | ||||
| Field<int> result_field_1{fn, 0}; | Field<int> result_field_1{fn, 0}; | ||||
| Field<int> intermediate_field{fn, 1}; | Field<int> intermediate_field{fn, 1}; | ||||
| std::unique_ptr<MultiFunction> add_10_fn = std::make_unique<CustomMF_SI_SO<int, int>>( | std::unique_ptr<MultiFunction> add_10_fn = std::make_unique<CustomMF_SI_SO<int, int>>( | ||||
| ▲ Show 20 Lines • Show All 59 Lines • Show Last 20 Lines | |||||