diff --git a/vtkm/cont/testing/UnitTestAlgorithm.cxx b/vtkm/cont/testing/UnitTestAlgorithm.cxx index 45c0e6880..f7ea9e3e1 100644 --- a/vtkm/cont/testing/UnitTestAlgorithm.cxx +++ b/vtkm/cont/testing/UnitTestAlgorithm.cxx @@ -8,6 +8,7 @@ // PURPOSE. See the above copyright notice for more information. //============================================================================ +#include #include #include @@ -173,6 +174,41 @@ void SynchronizeTest() vtkm::cont::Algorithm::Synchronize(); } +template +void AssertArrayHandlesEqual(const ArrayHandle1T& ah1, const ArrayHandle2T& ah2) +{ + VTKM_ASSERT(ah1.GetNumberOfValues() == ah2.GetNumberOfValues()); + auto rp1 = ah1.ReadPortal(); + auto rp2 = ah2.ReadPortal(); + + for (vtkm::Id i = 0; i < ah1.GetNumberOfValues(); ++i) + { + VTKM_ASSERT(rp1.Get(i) == rp2.Get(i)); + } +} + +void TransformTest() +{ + auto transformInput = vtkm::cont::make_ArrayHandle({ 1, 3, 5, 7, 9, 11, 13, 15 }); + auto transformInputOutput = + vtkm::cont::make_ArrayHandle({ 0, 2, 4, 8, 10, 12, 14, 16 }); + auto transformExpectedResult = + vtkm::cont::make_ArrayHandle({ 1, 5, 9, 15, 19, 23, 27, 31 }); + + // Test simple call on two different arrays + std::cout << "Testing Transform for summing arrays" << std::endl; + vtkm::cont::ArrayHandle transformOutput; + vtkm::cont::Algorithm::Transform( + transformInput, transformInputOutput, transformOutput, vtkm::Sum{}); + AssertArrayHandlesEqual(transformOutput, transformExpectedResult); + + // Test using an array as both input and output + std::cout << "Testing Transform with array for both input and output" << std::endl; + vtkm::cont::Algorithm::Transform( + transformInputOutput, transformInput, transformInputOutput, vtkm::Sum{}); + AssertArrayHandlesEqual(transformInputOutput, transformExpectedResult); +} + void UniqueTest() { vtkm::cont::ArrayHandle input; @@ -194,6 +230,7 @@ void TestAll() ScheduleTest(); SortTest(); SynchronizeTest(); + TransformTest(); UniqueTest(); }