Adding fields to data set builder unit tests to test fields.

This commit is contained in:
James Kress 2017-02-06 16:24:36 -05:00
parent a52f2b5521
commit cefc333a99
3 changed files with 175 additions and 29 deletions

@ -23,6 +23,7 @@
#include <vtkm/cont/DataSetBuilderExplicit.h>
#include <vtkm/cont/DeviceAdapterAlgorithm.h>
#include <vtkm/cont/testing/Testing.h>
#include <vtkm/cont/testing/MakeTestDataSet.h>
#include <vtkm/cont/testing/ExplicitTestData.h>
#include <vector>
@ -53,7 +54,7 @@ void ValidateDataSet(const vtkm::cont::DataSet &ds,
//Verify basics..
VTKM_TEST_ASSERT(ds.GetNumberOfCellSets() == 1,
"Wrong number of cell sets.");
VTKM_TEST_ASSERT(ds.GetNumberOfFields() == 0,
VTKM_TEST_ASSERT(ds.GetNumberOfFields() == 2,
"Wrong number of fields.");
VTKM_TEST_ASSERT(ds.GetNumberOfCoordinateSystems() == 1,
"Wrong number of coordinate systems.");
@ -62,6 +63,26 @@ void ValidateDataSet(const vtkm::cont::DataSet &ds,
VTKM_TEST_ASSERT(ds.GetCellSet().GetNumberOfCells() == numCells,
"Wrong number of cells.");
// test various field-getting methods and associations
try
{
ds.GetField("cellvar", vtkm::cont::Field::ASSOC_CELL_SET);
}
catch (...)
{
VTKM_TEST_FAIL("Failed to get field 'cellvar' with ASSOC_CELL_SET.");
}
try
{
ds.GetField("pointvar", vtkm::cont::Field::ASSOC_POINTS);
}
catch (...)
{
VTKM_TEST_FAIL("Failed to get field 'pointvar' with ASSOC_POINT_SET.");
}
//Make sure bounds are correct.
vtkm::Bounds computedBounds =
ds.GetCoordinateSystem().GetBounds(DeviceAdapter());
@ -97,41 +118,58 @@ CreateDataSetArr(bool useSeparatedCoords,
const vtkm::IdComponent *indices,
const vtkm::UInt8 *shape)
{
vtkm::cont::DataSet dataSet;
vtkm::cont::DataSetFieldAdd dsf;
vtkm::cont::DataSetBuilderExplicit dsb;
if (useSeparatedCoords)
{
std::vector<T> xvals(numPoints), yvals(numPoints), zvals(numPoints);
std::vector<T> varP(numPoints), varC(numCells);
for (std::size_t i = 0; i < numPoints; i++)
{
xvals[i] = coords[i*3 + 0];
yvals[i] = coords[i*3 + 1];
zvals[i] = coords[i*3 + 2];
varP[i] = static_cast<T>(i*1.1f);
}
vtkm::cont::ArrayHandle<T> X,Y,Z;
for (std::size_t i = 0; i < numCells; i++)
varC[i] = static_cast<T>(i*1.1f);
vtkm::cont::ArrayHandle<T> X,Y,Z,P,C;
DFA::Copy(vtkm::cont::make_ArrayHandle(xvals), X);
DFA::Copy(vtkm::cont::make_ArrayHandle(yvals), Y);
DFA::Copy(vtkm::cont::make_ArrayHandle(zvals), Z);
return dsb.Create(X,Y,Z,
createAH(numCells, shape),
createAH(numCells, indices),
createAH(numConn, conn));
DFA::Copy(vtkm::cont::make_ArrayHandle(varP), P);
DFA::Copy(vtkm::cont::make_ArrayHandle(varC), C);
dataSet = dsb.Create(X,Y,Z,
createAH(numCells, shape),
createAH(numCells, indices),
createAH(numConn, conn));
dsf.AddPointField(dataSet, "pointvar", P);
dsf.AddCellField(dataSet, "cellvar", C);
return dataSet;
}
else
{
std::vector<vtkm::Vec<T,3> > tmp(numPoints);
std::vector<vtkm::Vec<T,1> > varP(numPoints), varC(numCells);
for (std::size_t i = 0; i < numPoints; i++)
{
tmp[i][0] = coords[i*3 + 0];
tmp[i][1] = coords[i*3 + 1];
tmp[i][2] = coords[i*3 + 2];
varP[i][0] = static_cast<T>(i*1.1f);
}
for (std::size_t i = 0; i < numCells; i++)
varC[i][0] = static_cast<T>(i*1.1f);
vtkm::cont::ArrayHandle<vtkm::Vec<T,3> > pts;
DFA::Copy(vtkm::cont::make_ArrayHandle(tmp), pts);
return dsb.Create(pts,
createAH(numCells, shape),
createAH(numCells, indices),
createAH(numConn, conn));
dataSet = dsb.Create(pts,
createAH(numCells, shape),
createAH(numCells, indices),
createAH(numConn, conn));
dsf.AddPointField(dataSet, "pointvar", varP);
dsf.AddCellField(dataSet, "cellvar", varC);
return dataSet;
}
}
@ -144,35 +182,50 @@ CreateDataSetVec(bool useSeparatedCoords,
const vtkm::IdComponent *indices,
const vtkm::UInt8 *shape)
{
vtkm::cont::DataSet dataSet;
vtkm::cont::DataSetFieldAdd dsf;
vtkm::cont::DataSetBuilderExplicit dsb;
if (useSeparatedCoords)
{
std::vector<T> X(numPoints), Y(numPoints), Z(numPoints);
std::vector<T> X(numPoints), Y(numPoints), Z(numPoints), varP(numPoints), varC(numCells);
for (std::size_t i = 0; i < numPoints; i++)
{
X[i] = coords[i*3 + 0];
Y[i] = coords[i*3 + 1];
Z[i] = coords[i*3 + 2];
varP[i] = static_cast<T>(i*1.1f);
}
return dsb.Create(X,Y,Z,
createVec(numCells, shape),
createVec(numCells, indices),
createVec(numConn, conn));
for (std::size_t i = 0; i < numCells; i++)
varC[i] = static_cast<T>(i*1.1f);
dataSet = dsb.Create(X,Y,Z,
createVec(numCells, shape),
createVec(numCells, indices),
createVec(numConn, conn));
dsf.AddPointField(dataSet, "pointvar", varP);
dsf.AddCellField(dataSet, "cellvar", varC);
return dataSet;
}
else
{
std::vector<vtkm::Vec<T,3> > pts(numPoints);
std::vector<vtkm::Vec<T,1> > varP(numPoints), varC(numCells);
for (std::size_t i = 0; i < numPoints; i++)
{
pts[i][0] = coords[i*3 + 0];
pts[i][1] = coords[i*3 + 1];
pts[i][2] = coords[i*3 + 2];
varP[i][0] = static_cast<T>(i*1.1f);
}
return dsb.Create(pts,
createVec(numCells, shape),
createVec(numCells, indices),
createVec(numConn, conn));
for (std::size_t i = 0; i < numCells; i++)
varC[i][0] = static_cast<T>(i*1.1f);
dataSet = dsb.Create(pts,
createVec(numCells, shape),
createVec(numCells, indices),
createVec(numConn, conn));
dsf.AddPointField(dataSet, "pointvar", varP);
dsf.AddCellField(dataSet, "cellvar", varC);
return dataSet;
}
}

@ -24,7 +24,7 @@
#include <vtkm/cont/DataSetBuilderRectilinear.h>
#include <vtkm/cont/DeviceAdapterAlgorithm.h>
#include <vtkm/cont/DynamicCellSet.h>
#include <vtkm/cont/testing/MakeTestDataSet.h>
#include <vtkm/cont/testing/Testing.h>
#include <ctime>
@ -46,7 +46,7 @@ void ValidateDataSet(const vtkm::cont::DataSet &ds,
//Verify basics..
VTKM_TEST_ASSERT(ds.GetNumberOfCellSets() == 1,
"Wrong number of cell sets.");
VTKM_TEST_ASSERT(ds.GetNumberOfFields() == 0,
VTKM_TEST_ASSERT(ds.GetNumberOfFields() == 2,
"Wrong number of fields.");
VTKM_TEST_ASSERT(ds.GetNumberOfCoordinateSystems() == 1,
"Wrong number of coordinate systems.");
@ -55,6 +55,25 @@ void ValidateDataSet(const vtkm::cont::DataSet &ds,
VTKM_TEST_ASSERT(ds.GetCellSet().GetNumberOfCells() == numCells,
"Wrong number of cells.");
// test various field-getting methods and associations
try
{
ds.GetField("cellvar", vtkm::cont::Field::ASSOC_CELL_SET);
}
catch (...)
{
VTKM_TEST_FAIL("Failed to get field 'cellvar' with ASSOC_CELL_SET.");
}
try
{
ds.GetField("pointvar", vtkm::cont::Field::ASSOC_POINTS);
}
catch (...)
{
VTKM_TEST_FAIL("Failed to get field 'pointvar' with ASSOC_POINT_SET.");
}
//Make sure the bounds are correct.
vtkm::Bounds res = ds.GetCoordinateSystem().GetBounds(DeviceAdapter());
VTKM_TEST_ASSERT(test_equal(bounds, res),
@ -108,6 +127,7 @@ RectilinearTests()
vtkm::cont::DataSetBuilderRectilinear dataSetBuilder;
vtkm::cont::DataSet dataSet;
vtkm::cont::DataSetFieldAdd dsf;
std::uniform_int_distribution<vtkm::Id> randomDim(2,MAX_DIM_SIZE);
std::uniform_int_distribution<vtkm::IdComponent> randomFill(0,NUM_FILL_METHODS-1);
@ -142,18 +162,33 @@ RectilinearTests()
std::cout << "1D cases" << std::endl;
numPoints = dimensions[0];
numCells = dimensions[0]-1;
std::vector<T> varP1D(numPoints);
for (std::size_t i = 0; i < numPoints; i++)
varP1D[i] = static_cast<T>(i*1.1f);
std::vector<T> varC1D(numCells);
for (std::size_t i = 0; i < numCells; i++)
varC1D[i] = static_cast<T>(i*1.1f);
bounds.X = vtkm::Range(xCoordinates.front(), xCoordinates.back());
std::cout << " Create with std::vector" << std::endl;
dataSet = dataSetBuilder.Create(xCoordinates);
dsf.AddPointField(dataSet, "pointvar", varP1D);
dsf.AddCellField(dataSet, "cellvar", varC1D);
ValidateDataSet(dataSet, 1, numPoints, numCells, bounds);
std::cout << "2D cases" << std::endl;
numPoints = dimensions[0]*dimensions[1];
numCells = (dimensions[0]-1)*(dimensions[1]-1);
std::vector<T> varP2D(numPoints);
for (std::size_t i = 0; i < numPoints; i++)
varP2D[i] = static_cast<T>(i*1.1f);
std::vector<T> varC2D(numPoints);
for (std::size_t i = 0; i < numCells; i++)
varC2D[i] = static_cast<T>(i*1.1f);
bounds.Y = vtkm::Range(yCoordinates.front(), yCoordinates.back());
std::cout << " Create with std::vector" << std::endl;
dataSet = dataSetBuilder.Create(xCoordinates, yCoordinates);
dsf.AddPointField(dataSet, "pointvar", varP2D);
dsf.AddCellField(dataSet, "cellvar", varC2D);
ValidateDataSet(dataSet, 2, numPoints, numCells, bounds);
std::cout << " Create with C array" << std::endl;
@ -161,20 +196,32 @@ RectilinearTests()
dimensions[1],
&xCoordinates.front(),
&yCoordinates.front());
dsf.AddPointField(dataSet, "pointvar", &varP2D.front(), numPoints);
dsf.AddCellField(dataSet, "cellvar", &varC2D.front(), numCells);
ValidateDataSet(dataSet, 2, numPoints, numCells, bounds);
std::cout << " Create with ArrayHandle" << std::endl;
dataSet = dataSetBuilder.Create(vtkm::cont::make_ArrayHandle(xCoordinates),
vtkm::cont::make_ArrayHandle(yCoordinates));
dsf.AddPointField(dataSet, "pointvar", vtkm::cont::make_ArrayHandle(varP2D));
dsf.AddCellField(dataSet, "cellvar", vtkm::cont::make_ArrayHandle(varC2D));
ValidateDataSet(dataSet, 2, numPoints, numCells, bounds);
std::cout << "3D cases" << std::endl;
numPoints *= dimensions[2];
numCells *= dimensions[2]-1;
std::vector<T> varP3D(numPoints);
for (std::size_t i = 0; i < numPoints; i++)
varP3D[i] = static_cast<T>(i*1.1f);;
std::vector<T> varC3D(numPoints);
for (std::size_t i = 0; i < numCells; i++)
varC3D[i] = static_cast<T>(i*1.1f);
bounds.Z = vtkm::Range(zCoordinates.front(), zCoordinates.back());
std::cout << " Create with std::vector" << std::endl;
dataSet = dataSetBuilder.Create(xCoordinates, yCoordinates, zCoordinates);
dsf.AddPointField(dataSet, "pointvar", varP3D);
dsf.AddCellField(dataSet, "cellvar", varC3D);
ValidateDataSet(dataSet, 3, numPoints, numCells, bounds);
std::cout << " Create with C array" << std::endl;
@ -184,12 +231,16 @@ RectilinearTests()
&xCoordinates.front(),
&yCoordinates.front(),
&zCoordinates.front());
dsf.AddPointField(dataSet, "pointvar", vtkm::cont::make_ArrayHandle(varP3D));
dsf.AddCellField(dataSet, "cellvar", vtkm::cont::make_ArrayHandle(varC3D));
ValidateDataSet(dataSet, 3, numPoints, numCells, bounds);
std::cout << " Create with ArrayHandle" << std::endl;
dataSet = dataSetBuilder.Create(vtkm::cont::make_ArrayHandle(xCoordinates),
vtkm::cont::make_ArrayHandle(yCoordinates),
vtkm::cont::make_ArrayHandle(zCoordinates));
dsf.AddPointField(dataSet, "pointvar", vtkm::cont::make_ArrayHandle(varP3D));
dsf.AddCellField(dataSet, "cellvar", vtkm::cont::make_ArrayHandle(varC3D));
ValidateDataSet(dataSet, 3, numPoints, numCells, bounds);
}
}

@ -25,7 +25,6 @@
#include <vtkm/cont/DeviceAdapterAlgorithm.h>
#include <vtkm/cont/DynamicCellSet.h>
#include <vtkm/cont/testing/MakeTestDataSet.h>
#include <vtkm/cont/testing/Testing.h>
#include <time.h>
@ -47,7 +46,7 @@ void ValidateDataSet(const vtkm::cont::DataSet &ds,
//Verify basics..
VTKM_TEST_ASSERT(ds.GetNumberOfCellSets() == 1,
"Wrong number of cell sets.");
VTKM_TEST_ASSERT(ds.GetNumberOfFields() == 0,
VTKM_TEST_ASSERT(ds.GetNumberOfFields() == 2,
"Wrong number of fields.");
VTKM_TEST_ASSERT(ds.GetNumberOfCoordinateSystems() == 1,
"Wrong number of coordinate systems.");
@ -56,11 +55,29 @@ void ValidateDataSet(const vtkm::cont::DataSet &ds,
VTKM_TEST_ASSERT(ds.GetCellSet().GetNumberOfCells() == numCells,
"Wrong number of cells.");
// test various field-getting methods and associations
try
{
ds.GetField("cellvar", vtkm::cont::Field::ASSOC_CELL_SET);
}
catch (...)
{
VTKM_TEST_FAIL("Failed to get field 'cellvar' with ASSOC_CELL_SET.");
}
try
{
ds.GetField("pointvar", vtkm::cont::Field::ASSOC_POINTS);
}
catch (...)
{
VTKM_TEST_FAIL("Failed to get field 'pointvar' with ASSOC_POINT_SET.");
}
//Make sure bounds are correct.
vtkm::Bounds res = ds.GetCoordinateSystem().GetBounds(DeviceAdapter());
VTKM_TEST_ASSERT(test_equal(bounds, res),
"Bounds of coordinates do not match");
"Bounds of coordinates do not match");
if (dim == 1)
{
vtkm::cont::CellSetStructured<1> cellSet;
@ -130,6 +147,7 @@ UniformTests()
vtkm::cont::DataSetBuilderUniform dataSetBuilder;
vtkm::cont::DataSet dataSet;
vtkm::cont::DataSetFieldAdd dsf;
std::uniform_int_distribution<vtkm::Id> randomDim(2, MAX_DIM_SIZE);
std::uniform_int_distribution<vtkm::IdComponent> randomFill(0, NUM_FILL_METHODS-1);
@ -166,20 +184,36 @@ UniformTests()
dimensions[2],
origin[2],
spacing[2]);
std::cout << "3D case" << std::endl;
vtkm::Id numPoints = dimensions[0]*dimensions[1]*dimensions[2];
vtkm::Id numCells = (dimensions[0]-1)*(dimensions[1]-1)*(dimensions[2]-1);
T varP3D[numPoints];
for (std::size_t i = 0; i < numPoints; i++)
varP3D[i] = static_cast<T>(i*1.1f);
T varC3D[numCells];
for (std::size_t i = 0; i < numCells; i++)
varC3D[i] = static_cast<T>(i*1.1f);
dataSet = dataSetBuilder.Create(dimensions, origin, spacing);
dsf.AddPointField(dataSet, "pointvar", varP3D, numPoints);
dsf.AddCellField(dataSet, "cellvar", varC3D, numCells);
ValidateDataSet(dataSet, 3, numPoints, numCells, bounds);
std::cout << "2D case" << std::endl;
numPoints = dimensions[0]*dimensions[1];
numCells = (dimensions[0]-1)*(dimensions[1]-1);
bounds.Z = vtkm::Range(0, 0);
T varP2D[numPoints];
for (std::size_t i = 0; i < numPoints; i++)
varP2D[i] = static_cast<T>(i*1.1f);
T varC2D[numCells];
for (std::size_t i = 0; i < numCells; i++)
varC2D[i] = static_cast<T>(i*1.1f);
dataSet = dataSetBuilder.Create(vtkm::Id2(dimensions[0], dimensions[1]),
vtkm::Vec<T,2>(origin[0], origin[1]),
vtkm::Vec<T,2>(spacing[0], spacing[1]));
dsf.AddPointField(dataSet, "pointvar", varP2D, numPoints);
dsf.AddCellField(dataSet, "cellvar", varC2D, numCells);
ValidateDataSet(dataSet, 2, numPoints, numCells, bounds);
std::cout << "1D case" <<std::endl;
@ -187,7 +221,15 @@ UniformTests()
numCells = dimensions[0]-1;
bounds.Y = vtkm::Range(0, 0);
bounds.Z = vtkm::Range(0, 0);
T varP1D[numPoints];
for (std::size_t i = 0; i < numPoints; i++)
varP1D[i] = static_cast<T>(i*1.1f);
T varC1D[numCells];
for (std::size_t i = 0; i < numCells; i++)
varC1D[i] = static_cast<T>(i*1.1f);
dataSet = dataSetBuilder.Create(dimensions[0], origin[0], spacing[0]);
dsf.AddPointField(dataSet, "pointvar", varP1D, numPoints);
dsf.AddCellField(dataSet, "cellvar", varC1D, numCells);
ValidateDataSet(dataSet, 1, numPoints, numCells, bounds);
}
}