vtk-m2/vtkm/worklet/testing/UnitTestKeys.cxx
Kenneth Moreland 3e1339f9a7 Remove deprecated features from VTK-m
With the major revision 2.0 of VTK-m, many items previously marked as
deprecated were removed. If updating to a new version of VTK-m, it is
recommended to first update to VTK-m 1.9, which will include the deprecated
features but provide warnings (with the right compiler) that will point to
the replacement code. Once the deprecations have been fixed, updating to
2.0 should be smoother.
2022-11-17 07:12:31 -06:00

97 lines
3.2 KiB
C++

//============================================================================
// 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 <vtkm/worklet/Keys.h>
#include <vtkm/cont/ArrayCopy.h>
#include <vtkm/cont/testing/Testing.h>
namespace
{
static constexpr vtkm::Id ARRAY_SIZE = 1033;
static constexpr vtkm::Id NUM_UNIQUE = ARRAY_SIZE / 10;
template <typename KeyPortal, typename IdPortal, typename IdComponentPortal>
void CheckKeyReduce(const KeyPortal& originalKeys,
const KeyPortal& uniqueKeys,
const IdPortal& sortedValuesMap,
const IdPortal& offsets,
const IdComponentPortal& counts)
{
using KeyType = typename KeyPortal::ValueType;
vtkm::Id originalSize = originalKeys.GetNumberOfValues();
vtkm::Id uniqueSize = uniqueKeys.GetNumberOfValues();
VTKM_TEST_ASSERT(originalSize == sortedValuesMap.GetNumberOfValues(), "Inconsistent array size.");
VTKM_TEST_ASSERT(uniqueSize == offsets.GetNumberOfValues() - 1, "Inconsistent array size.");
VTKM_TEST_ASSERT(uniqueSize == counts.GetNumberOfValues(), "Inconsistent array size.");
for (vtkm::Id uniqueIndex = 0; uniqueIndex < uniqueSize; uniqueIndex++)
{
KeyType key = uniqueKeys.Get(uniqueIndex);
vtkm::Id offset = offsets.Get(uniqueIndex);
vtkm::IdComponent groupCount = counts.Get(uniqueIndex);
for (vtkm::IdComponent groupIndex = 0; groupIndex < groupCount; groupIndex++)
{
vtkm::Id originalIndex = sortedValuesMap.Get(offset + groupIndex);
KeyType originalKey = originalKeys.Get(originalIndex);
VTKM_TEST_ASSERT(key == originalKey, "Bad key lookup.");
}
}
}
template <typename KeyType>
void TryKeyType(KeyType)
{
KeyType keyBuffer[ARRAY_SIZE];
for (vtkm::Id index = 0; index < ARRAY_SIZE; index++)
{
keyBuffer[index] = TestValue(index % NUM_UNIQUE, KeyType());
}
vtkm::cont::ArrayHandle<KeyType> keyArray =
vtkm::cont::make_ArrayHandle(keyBuffer, ARRAY_SIZE, vtkm::CopyFlag::On);
vtkm::cont::ArrayHandle<KeyType> sortedKeys;
vtkm::cont::ArrayCopy(keyArray, sortedKeys);
vtkm::worklet::Keys<KeyType> keys(sortedKeys);
VTKM_TEST_ASSERT(keys.GetInputRange() == NUM_UNIQUE, "Keys has bad input range.");
CheckKeyReduce(keyArray.ReadPortal(),
keys.GetUniqueKeys().ReadPortal(),
keys.GetSortedValuesMap().ReadPortal(),
keys.GetOffsets().ReadPortal(),
keys.GetCounts().ReadPortal());
}
void TestKeys()
{
std::cout << "Testing vtkm::Id keys." << std::endl;
TryKeyType(vtkm::Id());
std::cout << "Testing vtkm::IdComponent keys." << std::endl;
TryKeyType(vtkm::IdComponent());
std::cout << "Testing vtkm::UInt8 keys." << std::endl;
TryKeyType(vtkm::UInt8());
std::cout << "Testing vtkm::Id3 keys." << std::endl;
TryKeyType(vtkm::Id3());
}
} // anonymous namespace
int UnitTestKeys(int argc, char* argv[])
{
return vtkm::cont::testing::Testing::Run(TestKeys, argc, argv);
}