//============================================================================ // Copyright (c) Kitware, Inc. // All rights reserved. // See LICENSE.txt for details. // // This software is distributed WITHOUT ANY WARRANTY; without even // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // PURPOSE. See the above copyright notice for more information. //============================================================================ #include #include #include #include #include namespace { static constexpr vtkm::Id ARRAY_SIZE = 10; struct TypeTest { template void operator()(T) const { std::cout << "Creating data" << std::endl; std::array array; for (vtkm::Id index = 0; index < ARRAY_SIZE; ++index) { array[static_cast(index)] = TestValue(index, T{}); } std::cout << "Construct read portal" << std::endl; using ReadPortalType = vtkm::internal::ArrayPortalBasicRead; VTKM_STATIC_ASSERT((vtkm::internal::PortalSupportsGets::value)); VTKM_STATIC_ASSERT((!vtkm::internal::PortalSupportsSets::value)); VTKM_STATIC_ASSERT((vtkm::internal::PortalSupportsIterators::value)); ReadPortalType readPortal(array.data(), ARRAY_SIZE); VTKM_TEST_ASSERT(readPortal.GetNumberOfValues() == ARRAY_SIZE); VTKM_TEST_ASSERT(readPortal.GetArray() == array.data()); VTKM_TEST_ASSERT(readPortal.GetIteratorBegin() == array.data()); VTKM_TEST_ASSERT(readPortal.GetIteratorEnd() == array.data() + ARRAY_SIZE); std::cout << "Check initial read data" << std::endl; CheckPortal(readPortal); std::cout << "Construct write portal" << std::endl; using WritePortalType = vtkm::internal::ArrayPortalBasicWrite; VTKM_STATIC_ASSERT((vtkm::internal::PortalSupportsGets::value)); VTKM_STATIC_ASSERT((vtkm::internal::PortalSupportsSets::value)); VTKM_STATIC_ASSERT((vtkm::internal::PortalSupportsIterators::value)); WritePortalType writePortal(array.data(), ARRAY_SIZE); VTKM_TEST_ASSERT(writePortal.GetNumberOfValues() == ARRAY_SIZE); VTKM_TEST_ASSERT(writePortal.GetArray() == array.data()); VTKM_TEST_ASSERT(writePortal.GetIteratorBegin() == array.data()); VTKM_TEST_ASSERT(writePortal.GetIteratorEnd() == array.data() + ARRAY_SIZE); std::cout << "Check initial write data" << std::endl; CheckPortal(writePortal); std::cout << "Write new data" << std::endl; for (vtkm::Id index = 0; index < ARRAY_SIZE; ++index) { writePortal.Set(index, TestValue(index + 10, T{})); } std::cout << "Check data written to array." << std::endl; for (vtkm::Id index = 0; index < ARRAY_SIZE; ++index) { VTKM_TEST_ASSERT( test_equal(array[static_cast(index)], TestValue(index + 10, T{}))); } } }; void Run() { vtkm::testing::Testing::TryTypes(TypeTest{}); } } // anonymous namespace int UnitTestArrayPortalBasic(int argc, char* argv[]) { return vtkm::testing::Testing::Run(Run, argc, argv); }