//============================================================================ // 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. // // Copyright 2014 National Technology & Engineering Solutions of Sandia, LLC (NTESS). // Copyright 2014 UT-Battelle, LLC. // Copyright 2014 Los Alamos National Security. // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // // Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National // Laboratory (LANL), the U.S. Government retains certain rights in // this software. //============================================================================ #include #include #include namespace { template void createVectors(std::vector>& vecs) { vecs.push_back(vtkm::make_Vec(2, 0, 0)); vecs.push_back(vtkm::make_Vec(0, 2, 0)); vecs.push_back(vtkm::make_Vec(0, 0, 2)); vecs.push_back(vtkm::make_Vec(1, 1, 1)); vecs.push_back(vtkm::make_Vec(2, 2, 2)); vecs.push_back(vtkm::make_Vec(2, 1, 1)); vecs.push_back(vtkm::make_Vec(1000000, 0, 0)); vecs.push_back(vtkm::make_Vec(static_cast(.1), static_cast(0), static_cast(0))); vecs.push_back(vtkm::make_Vec(static_cast(.001), static_cast(0), static_cast(0))); } template void createVectors(std::vector>& vecs) { vecs.push_back(vtkm::make_Vec(1, 0)); vecs.push_back(vtkm::make_Vec(0, 1)); vecs.push_back(vtkm::make_Vec(1, 1)); vecs.push_back(vtkm::make_Vec(2, 0)); vecs.push_back(vtkm::make_Vec(0, 2)); vecs.push_back(vtkm::make_Vec(2, 2)); vecs.push_back(vtkm::make_Vec(1000000, 0)); vecs.push_back(vtkm::make_Vec(static_cast(.1), static_cast(0))); vecs.push_back(vtkm::make_Vec(static_cast(.001), static_cast(0))); } template void TestNormal() { std::vector> inputVecs; createVectors(inputVecs); vtkm::cont::ArrayHandle> inputArray; vtkm::cont::ArrayHandle> outputArray; inputArray = vtkm::cont::make_ArrayHandle(inputVecs); vtkm::worklet::Normal normalWorklet; vtkm::worklet::DispatcherMapField dispatcherNormal(normalWorklet); dispatcherNormal.Invoke(inputArray, outputArray); //Validate results. //Make sure the number of values match. VTKM_TEST_ASSERT(outputArray.GetNumberOfValues() == inputArray.GetNumberOfValues(), "Wrong number of results for Normalize worklet"); //Make sure each vector is correct. for (vtkm::Id i = 0; i < inputArray.GetNumberOfValues(); i++) { //Make sure that the value is correct. vtkm::Vec v = inputArray.GetPortalConstControl().Get(i); vtkm::Vec vN = outputArray.GetPortalConstControl().Get(i); T len = vtkm::Magnitude(v); VTKM_TEST_ASSERT(test_equal(v / len, vN), "Wrong result for Normalize worklet"); //Make sure the magnitudes are all 1.0 len = vtkm::Magnitude(vN); VTKM_TEST_ASSERT(test_equal(len, 1), "Wrong magnitude for Normalize worklet"); } } template void TestNormalize() { std::vector> inputVecs; createVectors(inputVecs); vtkm::cont::ArrayHandle> inputArray; vtkm::cont::ArrayHandle> outputArray; inputArray = vtkm::cont::make_ArrayHandle(inputVecs); vtkm::worklet::Normalize normalizeWorklet; vtkm::worklet::DispatcherMapField dispatcherNormalize(normalizeWorklet); dispatcherNormalize.Invoke(inputArray); //Make sure each vector is correct. for (vtkm::Id i = 0; i < inputArray.GetNumberOfValues(); i++) { //Make sure that the value is correct. vtkm::Vec v = inputVecs[static_cast(i)]; vtkm::Vec vN = inputArray.GetPortalConstControl().Get(i); T len = vtkm::Magnitude(v); VTKM_TEST_ASSERT(test_equal(v / len, vN), "Wrong result for Normalize worklet"); //Make sure the magnitudes are all 1.0 len = vtkm::Magnitude(vN); VTKM_TEST_ASSERT(test_equal(len, 1), "Wrong magnitude for Normalize worklet"); } } void TestNormalWorklets() { std::cout << "Testing Normal Worklet" << std::endl; TestNormal(); TestNormal(); TestNormal(); TestNormal(); std::cout << "Testing Normalize Worklet" << std::endl; TestNormalize(); TestNormalize(); TestNormalize(); TestNormalize(); } } int UnitTestNormalize(int, char* []) { return vtkm::cont::testing::Testing::Run(TestNormalWorklets); }