From 02d8c3782d66500690216262809c87a5072a95f2 Mon Sep 17 00:00:00 2001 From: dpugmire Date: Thu, 18 Jun 2020 15:45:36 -0400 Subject: [PATCH] Add unittest for particlearraycopy --- vtkm/Bitset.h | 5 ++ vtkm/cont/testing/CMakeLists.txt | 1 + .../testing/UnitTestParticleArrayCopy.cxx | 75 +++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 vtkm/cont/testing/UnitTestParticleArrayCopy.cxx diff --git a/vtkm/Bitset.h b/vtkm/Bitset.h index 92acf1563..ebce66506 100644 --- a/vtkm/Bitset.h +++ b/vtkm/Bitset.h @@ -55,6 +55,11 @@ struct Bitset return ((this->Mask & (static_cast(1) << bitIndex)) != 0); } + VTKM_EXEC_CONT bool operator==(const vtkm::Bitset& otherBitset) const + { + return this->Mask == otherBitset.Mask; + } + private: MaskType Mask = 0; }; diff --git a/vtkm/cont/testing/CMakeLists.txt b/vtkm/cont/testing/CMakeLists.txt index a73c57b07..3d60f9cc5 100644 --- a/vtkm/cont/testing/CMakeLists.txt +++ b/vtkm/cont/testing/CMakeLists.txt @@ -76,6 +76,7 @@ set(unit_tests UnitTestInitialize.cxx UnitTestLogging.cxx UnitTestMoveConstructors.cxx + UnitTestParticleArrayCopy.cxx UnitTestPartitionedDataSet.cxx UnitTestRuntimeDeviceInformation.cxx UnitTestRuntimeDeviceNames.cxx diff --git a/vtkm/cont/testing/UnitTestParticleArrayCopy.cxx b/vtkm/cont/testing/UnitTestParticleArrayCopy.cxx new file mode 100644 index 000000000..ada47ac47 --- /dev/null +++ b/vtkm/cont/testing/UnitTestParticleArrayCopy.cxx @@ -0,0 +1,75 @@ +//============================================================================ +// 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 + +void TestParticleArrayCopy() +{ + std::default_random_engine generator(static_cast(277)); + vtkm::FloatDefault x0(-1), x1(1); + std::uniform_real_distribution dist(x0, x1); + + std::vector particles; + vtkm::Id N = 17; + for (vtkm::Id i = 0; i < N; i++) + { + auto x = dist(generator); + auto y = dist(generator); + auto z = dist(generator); + particles.push_back(vtkm::Particle(vtkm::Vec3f(x, y, z), i)); + } + + for (int i = 0; i < 2; i++) + { + auto particleAH = vtkm::cont::make_ArrayHandle(particles); + + //Test copy position only + if (i == 0) + { + vtkm::cont::ArrayHandle pos; + vtkm::cont::ParticleArrayCopy(particleAH, pos); + + auto pPortal = particleAH.ReadPortal(); + for (vtkm::Id j = 0; j < N; j++) + { + auto p = pPortal.Get(j); + auto pt = pos.ReadPortal().Get(j); + VTKM_TEST_ASSERT(p.Pos == pt, "Positions do not match"); + } + } + else //Test copy everything + { + vtkm::cont::ArrayHandle pos; + vtkm::cont::ArrayHandle ids, steps; + vtkm::cont::ArrayHandle status; + vtkm::cont::ArrayHandle ptime; + + vtkm::cont::ParticleArrayCopy(particleAH, pos, ids, steps, status, ptime); + + auto pPortal = particleAH.ReadPortal(); + for (vtkm::Id j = 0; j < N; j++) + { + auto p = pPortal.Get(j); + auto pt = pos.ReadPortal().Get(j); + VTKM_TEST_ASSERT(p.Pos == pt, "Positions do not match"); + VTKM_TEST_ASSERT(p.ID == ids.ReadPortal().Get(j), "IDs do not match"); + VTKM_TEST_ASSERT(p.NumSteps == steps.ReadPortal().Get(j), "Steps do not match"); + VTKM_TEST_ASSERT(p.Status == status.ReadPortal().Get(j), "Steps do not match"); + VTKM_TEST_ASSERT(p.Time == ptime.ReadPortal().Get(j), "Times do not match"); + } + } + } +} + +int UnitTestParticleArrayCopy(int argc, char* argv[]) +{ + return vtkm::cont::testing::Testing::Run(TestParticleArrayCopy, argc, argv); +}