mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-16 17:22:55 +00:00
add unit test for WorkletMapTopology
Signed-off-by: Vicente Adolfo Bolea Sanchez <vicente.bolea@kitware.com>
This commit is contained in:
parent
0e90c22e70
commit
e2c32ffac7
@ -181,7 +181,6 @@ private:
|
||||
vtkm::Id OutputIndex;
|
||||
LogicalIndexType LogicalIndex;
|
||||
IndicesIncidentType IndicesIncident;
|
||||
//CellShapeTag CellShape;
|
||||
vtkm::Id GlobalThreadIndexOffset;
|
||||
};
|
||||
|
||||
@ -214,7 +213,6 @@ public:
|
||||
this->VisitIndex = 0;
|
||||
this->LogicalIndex = logicalIndex;
|
||||
this->IndicesIncident = connectivity.GetIndices(logicalIndex);
|
||||
//this->CellShape = connectivity.GetCellShape(index);
|
||||
this->GlobalThreadIndexOffset = globalThreadIndexOffset;
|
||||
}
|
||||
|
||||
@ -232,7 +230,6 @@ public:
|
||||
this->VisitIndex = 0;
|
||||
this->LogicalIndex = logicalIndex;
|
||||
this->IndicesIncident = connectivity.GetIndices(logicalIndex);
|
||||
//this->CellShape = connectivity.GetCellShape(index);
|
||||
this->GlobalThreadIndexOffset = globalThreadIndexOffset;
|
||||
}
|
||||
|
||||
@ -253,7 +250,6 @@ public:
|
||||
this->VisitIndex = visitIndex;
|
||||
this->LogicalIndex = logicalIndex;
|
||||
this->IndicesIncident = connectivity.GetIndices(logicalIndex);
|
||||
//this->CellShape = connectivity.GetCellShape(index);
|
||||
this->GlobalThreadIndexOffset = globalThreadIndexOffset;
|
||||
}
|
||||
|
||||
@ -341,7 +337,6 @@ private:
|
||||
vtkm::Id OutputIndex;
|
||||
LogicalIndexType LogicalIndex;
|
||||
IndicesIncidentType IndicesIncident;
|
||||
//CellShapeTag CellShape;
|
||||
vtkm::Id GlobalThreadIndexOffset;
|
||||
};
|
||||
|
||||
|
@ -58,6 +58,7 @@ set(unit_tests
|
||||
UnitTestScatterPermutation.cxx
|
||||
UnitTestSplatKernels.cxx
|
||||
UnitTestSplitSharpEdges.cxx
|
||||
UnitTestScatterAndMaskWithTopology.cxx
|
||||
UnitTestStreamingSine.cxx
|
||||
UnitTestStreamLineUniformGrid.cxx
|
||||
UnitTestStreamSurface.cxx
|
||||
|
211
vtkm/worklet/testing/UnitTestScatterAndMaskWithTopology.cxx
Normal file
211
vtkm/worklet/testing/UnitTestScatterAndMaskWithTopology.cxx
Normal file
@ -0,0 +1,211 @@
|
||||
//============================================================================
|
||||
// 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/cont/ArrayCopy.h>
|
||||
|
||||
#include <vtkm/cont/testing/MakeTestDataSet.h>
|
||||
#include <vtkm/worklet/DispatcherMapTopology.h>
|
||||
#include <vtkm/worklet/ScatterCounting.h>
|
||||
#include <vtkm/worklet/WorkletMapTopology.h>
|
||||
|
||||
#include <vtkm/cont/testing/Testing.h>
|
||||
#include <vtkm/worklet/MaskSelect.h>
|
||||
#include <vtkm/worklet/ScatterUniform.h>
|
||||
|
||||
namespace maptopology3d
|
||||
{
|
||||
|
||||
class TestWorkletMapTopo : public vtkm::worklet::WorkletVisitPointsWithCells
|
||||
{
|
||||
public:
|
||||
using ControlSignature = void(CellSetIn topology, FieldInVisit pointCoords);
|
||||
using ExecutionSignature = void(_2, WorkIndex, InputIndex, OutputIndex, VisitIndex);
|
||||
|
||||
virtual VTKM_EXEC void operator()(const vtkm::Vec<int, 3>& vtkmNotUsed(coords),
|
||||
const vtkm::Id& workIndex,
|
||||
const vtkm::Id& inputIndex,
|
||||
const vtkm::Id& outputIndex,
|
||||
const vtkm::Id& visitIndex) const = 0;
|
||||
};
|
||||
|
||||
class TestWorkletMapTopoIdentity : public TestWorkletMapTopo
|
||||
{
|
||||
public:
|
||||
using ScatterType = vtkm::worklet::ScatterIdentity;
|
||||
|
||||
VTKM_EXEC void operator()(const vtkm::Vec<int, 3>& vtkmNotUsed(coords),
|
||||
const vtkm::Id& workIndex,
|
||||
const vtkm::Id& inputIndex,
|
||||
const vtkm::Id& outputIndex,
|
||||
const vtkm::Id& visitIndex) const override
|
||||
{
|
||||
if (workIndex != inputIndex)
|
||||
{
|
||||
this->RaiseError("Got wrong input value.");
|
||||
}
|
||||
if (outputIndex != workIndex)
|
||||
{
|
||||
this->RaiseError("Got work and output index don't match.");
|
||||
}
|
||||
if (visitIndex != 0)
|
||||
{
|
||||
this->RaiseError("Got wrong visit value.");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class TestWorkletMapTopoUniform : public TestWorkletMapTopo
|
||||
{
|
||||
public:
|
||||
using ScatterType = vtkm::worklet::ScatterUniform<2>;
|
||||
|
||||
VTKM_EXEC void operator()(const vtkm::Vec<int, 3>& vtkmNotUsed(coords),
|
||||
const vtkm::Id& workIndex,
|
||||
const vtkm::Id& inputIndex,
|
||||
const vtkm::Id& outputIndex,
|
||||
const vtkm::Id& visitIndex) const override
|
||||
{
|
||||
if ((workIndex / 2) != inputIndex)
|
||||
{
|
||||
this->RaiseError("Got wrong input value.");
|
||||
}
|
||||
if (outputIndex != workIndex)
|
||||
{
|
||||
this->RaiseError("Got work and output index don't match.");
|
||||
}
|
||||
if ((workIndex % 2) != visitIndex)
|
||||
{
|
||||
this->RaiseError("Got wrong visit value.");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class TestWorkletMapTopoNone : public TestWorkletMapTopo
|
||||
{
|
||||
public:
|
||||
using MaskType = vtkm::worklet::MaskNone;
|
||||
|
||||
VTKM_EXEC void operator()(const vtkm::Vec<int, 3>& vtkmNotUsed(coords),
|
||||
const vtkm::Id& workIndex,
|
||||
const vtkm::Id& inputIndex,
|
||||
const vtkm::Id& outputIndex,
|
||||
const vtkm::Id& visitIndex) const override
|
||||
{
|
||||
if (workIndex != inputIndex)
|
||||
{
|
||||
this->RaiseError("Got wrong input value.");
|
||||
}
|
||||
if (outputIndex != workIndex)
|
||||
{
|
||||
this->RaiseError("Got work and output index don't match.");
|
||||
}
|
||||
if (visitIndex != 0)
|
||||
{
|
||||
this->RaiseError("Got wrong visit value.");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class TestWorkletMapTopoSelect : public TestWorkletMapTopo
|
||||
{
|
||||
public:
|
||||
using MaskType = vtkm::worklet::MaskSelect;
|
||||
|
||||
VTKM_EXEC void operator()(const vtkm::Vec<int, 3>& vtkmNotUsed(coords),
|
||||
const vtkm::Id& vtkmNotUsed(workIndex),
|
||||
const vtkm::Id& vtkmNotUsed(inputIndex),
|
||||
const vtkm::Id& vtkmNotUsed(outputIndex),
|
||||
const vtkm::Id& vtkmNotUsed(visitIndex)) const override
|
||||
{
|
||||
// This method should never be called
|
||||
this->RaiseError("An element was selected, this test selects none.");
|
||||
}
|
||||
};
|
||||
|
||||
template <typename WorkletType>
|
||||
struct DoTestWorklet
|
||||
{
|
||||
template <typename T>
|
||||
VTKM_CONT void operator()(T) const
|
||||
{
|
||||
vtkm::cont::testing::MakeTestDataSet testDataSet;
|
||||
vtkm::cont::DataSet dataSet3D = testDataSet.Make3DUniformDataSet0();
|
||||
|
||||
vtkm::cont::CellSetStructured<3> cellSet =
|
||||
dataSet3D.GetCellSet().Cast<vtkm::cont::CellSetStructured<3>>();
|
||||
|
||||
vtkm::cont::Invoker invoker;
|
||||
invoker(WorkletType{}, cellSet, dataSet3D.GetCoordinateSystem());
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct DoTestWorklet<TestWorkletMapTopoSelect>
|
||||
{
|
||||
template <typename T>
|
||||
VTKM_CONT void operator()(T) const
|
||||
{
|
||||
// 18 are the number of vertices at the DataSet created by Make3DUniformDataSet0
|
||||
const vtkm::Id selectArraySize = 18;
|
||||
const vtkm::IdComponent selectArray[selectArraySize] = { 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
auto selectArrayHandle = vtkm::cont::make_ArrayHandle(selectArray, selectArraySize);
|
||||
|
||||
vtkm::cont::testing::MakeTestDataSet testDataSet;
|
||||
vtkm::cont::DataSet dataSet3D = testDataSet.Make3DUniformDataSet0();
|
||||
|
||||
vtkm::cont::CellSetStructured<3> cellSet =
|
||||
dataSet3D.GetCellSet().Cast<vtkm::cont::CellSetStructured<3>>();
|
||||
|
||||
vtkm::cont::Invoker invoker;
|
||||
invoker(TestWorkletMapTopoSelect{},
|
||||
vtkm::worklet::MaskSelect(selectArrayHandle),
|
||||
cellSet,
|
||||
dataSet3D.GetCoordinateSystem());
|
||||
}
|
||||
};
|
||||
|
||||
void TestWorkletMapField3d(vtkm::cont::DeviceAdapterId id)
|
||||
{
|
||||
using HandleTypesToTest3D =
|
||||
vtkm::List<vtkm::Id, vtkm::Vec2i_32, vtkm::FloatDefault, vtkm::Vec3f_64>;
|
||||
|
||||
std::cout << "Testing WorkletMapTopology with ScatterIdentity on device adapter: " << id.GetName()
|
||||
<< std::endl;
|
||||
|
||||
vtkm::testing::Testing::TryTypes(maptopology3d::DoTestWorklet<TestWorkletMapTopoIdentity>(),
|
||||
HandleTypesToTest3D());
|
||||
|
||||
std::cout << "Testing WorkletMapTopology with ScatterUniform on device adapter: " << id.GetName()
|
||||
<< std::endl;
|
||||
|
||||
vtkm::testing::Testing::TryTypes(maptopology3d::DoTestWorklet<TestWorkletMapTopoUniform>(),
|
||||
HandleTypesToTest3D());
|
||||
|
||||
std::cout << "Testing WorkletMapTopology with MaskNone on device adapter: " << id.GetName()
|
||||
<< std::endl;
|
||||
|
||||
vtkm::testing::Testing::TryTypes(maptopology3d::DoTestWorklet<TestWorkletMapTopoNone>(),
|
||||
HandleTypesToTest3D());
|
||||
|
||||
std::cout << "Testing WorkletMapTopology with MaskSelect on device adapter: " << id.GetName()
|
||||
<< std::endl;
|
||||
|
||||
vtkm::testing::Testing::TryTypes(maptopology3d::DoTestWorklet<TestWorkletMapTopoSelect>(),
|
||||
HandleTypesToTest3D());
|
||||
}
|
||||
|
||||
} // maptopology3d namespace
|
||||
|
||||
int UnitTestScatterAndMaskWithTopology(int argc, char* argv[])
|
||||
{
|
||||
return vtkm::cont::testing::Testing::RunOnDevice(
|
||||
maptopology3d::TestWorkletMapField3d, argc, argv);
|
||||
}
|
Loading…
Reference in New Issue
Block a user