//============================================================================ // 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 #include #include #include #include #include namespace { template struct TestKernel : public vtkm::exec::FunctorBase { CellSetInType CellSet; VTKM_EXEC void operator()(vtkm::Id) const { if (this->CellSet.GetNumberOfElements() != 2) { this->RaiseError("Got bad number of shapes in exec cellset object."); } if (this->CellSet.GetIndices(0).GetNumberOfComponents() != 3 || this->CellSet.GetIndices(1).GetNumberOfComponents() != 4) { this->RaiseError("Got bad number of Indices in exec cellset object."); } if (this->CellSet.GetCellShape(0).Id != 5 || this->CellSet.GetCellShape(1).Id != 9) { this->RaiseError("Got bad cell shape in exec cellset object."); } } }; template bool TransportWholeCellSetIn(Device device) { std::cout << "Trying CellSetIn transport with " << device.GetName() << std::endl; //build a fake cell set const int nVerts = 5; vtkm::cont::CellSetExplicit<> contObject; contObject.PrepareToAddCells(2, 7); contObject.AddCell(vtkm::CELL_SHAPE_TRIANGLE, 3, vtkm::make_Vec(0, 1, 2)); contObject.AddCell(vtkm::CELL_SHAPE_QUAD, 4, vtkm::make_Vec(2, 1, 3, 4)); contObject.CompleteAddingCells(nVerts); using IncidentTopology = vtkm::TopologyElementTagPoint; using VisitTopology = vtkm::TopologyElementTagCell; using ExecObjectType = typename vtkm::cont::CellSetExplicit<>::template ExecConnectivityType; vtkm::cont::arg::Transport< vtkm::cont::arg::TransportTagCellSetIn, vtkm::cont::CellSetExplicit<>, Device> transport; vtkm::cont::Token token; TestKernel kernel; kernel.CellSet = transport(contObject, nullptr, 1, 1, token); vtkm::cont::DeviceAdapterAlgorithm::Schedule(kernel, 1); return true; } void UnitTestCellSetIn() { VTKM_TEST_ASSERT( vtkm::cont::TryExecute([](auto device) { return TransportWholeCellSetIn(device); })); } } // Anonymous namespace int UnitTestTransportCellSetIn(int argc, char* argv[]) { return vtkm::cont::testing::Testing::Run(UnitTestCellSetIn, argc, argv); }