mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-16 17:22:55 +00:00
Copy PDS fields in filter. Add more tests.
This commit is contained in:
parent
75b9c398f0
commit
fa401ba016
@ -41,7 +41,7 @@ static void PartitionedDataSetTest()
|
||||
std::vector<vtkm::Id> ids = { 0, 1 };
|
||||
std::vector<vtkm::FloatDefault> var = { 1, 2 };
|
||||
auto idsField = vtkm::cont::make_Field(
|
||||
"ids", vtkm::cont::Field::Association::WholeMesh, ids, vtkm::CopyFlag::On);
|
||||
"ids", vtkm::cont::Field::Association::Partitions, ids, vtkm::CopyFlag::On);
|
||||
auto pdsVar = vtkm::cont::make_Field(
|
||||
"pds_var", vtkm::cont::Field::Association::AllPartitions, ids, vtkm::CopyFlag::On);
|
||||
pds.AddField(idsField);
|
||||
@ -110,7 +110,7 @@ static void PartitionedDataSetTest()
|
||||
|
||||
pdsVar.GetRange(&SourceRange);
|
||||
pds.GetField("pds_var").GetRange(&TestRange);
|
||||
VTKM_TEST_ASSERT(TestRange == SourceRange, "WholePartitions field values incorrect");
|
||||
VTKM_TEST_ASSERT(TestRange == SourceRange, "AllPartitions field values incorrect");
|
||||
|
||||
vtkm::cont::PartitionedDataSet testblocks1;
|
||||
std::vector<vtkm::cont::DataSet> partitions = pds.GetPartitions();
|
||||
@ -138,6 +138,88 @@ static void PartitionedDataSetTest()
|
||||
DataSet_Compare(TDset1, TestDSet);
|
||||
}
|
||||
|
||||
static void PartitionedDataSetFieldTest()
|
||||
{
|
||||
vtkm::cont::testing::MakeTestDataSet testDataSet;
|
||||
|
||||
vtkm::cont::DataSet TDset1 = testDataSet.Make2DUniformDataSet0();
|
||||
vtkm::cont::DataSet TDset2 = testDataSet.Make3DUniformDataSet0();
|
||||
|
||||
constexpr vtkm::Id id0 = 0, id1 = 1;
|
||||
constexpr vtkm::FloatDefault globalScalar = 1.0f;
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
vtkm::cont::PartitionedDataSet pds({ TDset1, TDset2 });
|
||||
std::vector<vtkm::Id> ids = { id0, id1 };
|
||||
std::vector<vtkm::FloatDefault> gs = { globalScalar };
|
||||
|
||||
auto idsArr = vtkm::cont::make_ArrayHandle(ids, vtkm::CopyFlag::Off);
|
||||
auto gsArr = vtkm::cont::make_ArrayHandle(gs, vtkm::CopyFlag::Off);
|
||||
|
||||
if (i == 0) //field
|
||||
{
|
||||
auto idField = vtkm::cont::make_Field(
|
||||
"id", vtkm::cont::Field::Association::Partitions, ids, vtkm::CopyFlag::Off);
|
||||
auto gScalar = vtkm::cont::make_Field(
|
||||
"global_scalar", vtkm::cont::Field::Association::AllPartitions, gs, vtkm::CopyFlag::Off);
|
||||
|
||||
pds.AddField(idField);
|
||||
pds.AddField(gScalar);
|
||||
}
|
||||
else if (i == 1) //array handle
|
||||
{
|
||||
pds.AddPartitionsField("id", idsArr);
|
||||
pds.AddAllPartitionsField("global_scalar", gsArr);
|
||||
}
|
||||
else if (i == 2) //std::vector
|
||||
{
|
||||
pds.AddPartitionsField("id", ids);
|
||||
pds.AddAllPartitionsField("global_scalar", gs);
|
||||
}
|
||||
else if (i == 3) //pointer
|
||||
{
|
||||
pds.AddPartitionsField("id", ids.data(), 2);
|
||||
pds.AddAllPartitionsField("global_scalar", gs.data(), 1);
|
||||
}
|
||||
|
||||
//Validate each method.
|
||||
VTKM_TEST_ASSERT(pds.GetNumberOfFields() == 2, "Wrong number of fields");
|
||||
|
||||
//Make sure fields are there and of the right type.
|
||||
VTKM_TEST_ASSERT(pds.HasField("id") && pds.HasPartitionsField("id"), "id field misssing.");
|
||||
VTKM_TEST_ASSERT(pds.HasField("global_scalar") && pds.HasAllPartitionsField("global_scalar"),
|
||||
"global_scalar field misssing.");
|
||||
|
||||
for (int j = 0; j < 2; j++)
|
||||
{
|
||||
vtkm::cont::Field f0, f1;
|
||||
|
||||
if (j == 0)
|
||||
{
|
||||
f0 = pds.GetField("id");
|
||||
f1 = pds.GetField("global_scalar");
|
||||
}
|
||||
else
|
||||
{
|
||||
f0 = pds.GetPartitionsField("id");
|
||||
f1 = pds.GetAllPartitionsField("global_scalar");
|
||||
}
|
||||
|
||||
//Check the values.
|
||||
auto portal0 = f0.GetData().AsArrayHandle<vtkm::cont::ArrayHandle<vtkm::Id>>().ReadPortal();
|
||||
auto portal1 =
|
||||
f1.GetData().AsArrayHandle<vtkm::cont::ArrayHandle<vtkm::FloatDefault>>().ReadPortal();
|
||||
|
||||
VTKM_TEST_ASSERT(portal0.GetNumberOfValues() == 2, "Wrong number of values in field");
|
||||
VTKM_TEST_ASSERT(portal1.GetNumberOfValues() == 1, "Wrong number of values in field");
|
||||
|
||||
VTKM_TEST_ASSERT(portal0.Get(0) == id0 && portal0.Get(1) == id1, "Wrong field value");
|
||||
VTKM_TEST_ASSERT(portal1.Get(0) == globalScalar, "Wrong field value");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DataSet_Compare(vtkm::cont::DataSet& leftDataSet, vtkm::cont::DataSet& rightDataSet)
|
||||
{
|
||||
for (vtkm::Id j = 0; j < leftDataSet.GetNumberOfFields(); j++)
|
||||
@ -151,7 +233,13 @@ void DataSet_Compare(vtkm::cont::DataSet& leftDataSet, vtkm::cont::DataSet& righ
|
||||
return;
|
||||
}
|
||||
|
||||
static void PartitionedDataSetTests()
|
||||
{
|
||||
PartitionedDataSetTest();
|
||||
PartitionedDataSetFieldTest();
|
||||
}
|
||||
|
||||
int UnitTestPartitionedDataSet(int argc, char* argv[])
|
||||
{
|
||||
return vtkm::cont::testing::Testing::Run(PartitionedDataSetTest, argc, argv);
|
||||
return vtkm::cont::testing::Testing::Run(PartitionedDataSetTests, argc, argv);
|
||||
}
|
||||
|
@ -88,6 +88,11 @@ vtkm::cont::PartitionedDataSet NewFilter::DoExecutePartitions(
|
||||
}
|
||||
}
|
||||
|
||||
//Copy any fields.
|
||||
vtkm::Id numFields = static_cast<vtkm::Id>(input.GetNumberOfFields());
|
||||
for (vtkm::Id i = 0; i < numFields; i++)
|
||||
output.AddField(input.GetField(i));
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user