vtk-m/vtkm/exec/testing/UnitTestFetchExecObject.cxx
Kenneth Moreland ad1e7b5bdb Add module mechanism
This mechanism sets up CMake variables that allow a user to select which
modules/libraries to create. Dependencies will be tracked down to ensure
that all of a module's dependencies are also enabled.

The modules are also arranged into groups.
Groups allow you to set the enable flag for a group of modules at once.
Thus, if you have several modules that are likely to be used together,
you can create a group for them.

This can be handy in converting user-friendly CMake options (such as
`VTKm_ENABLE_RENDERING`) to the modules that enable that by pointing to
the appropriate group.
2022-10-26 12:51:05 -06:00

71 lines
1.8 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/exec/arg/FetchTagExecObject.h>
#include <vtkm/exec/testing/ThreadIndicesTesting.h>
#include <vtkm/testing/Testing.h>
#define EXPECTED_NUMBER 67
namespace
{
struct TestExecutionObject
{
TestExecutionObject()
: Number(static_cast<vtkm::Int32>(0xDEADDEAD))
{
}
TestExecutionObject(vtkm::Int32 number)
: Number(number)
{
}
vtkm::Int32 Number;
};
void TryInvocation()
{
TestExecutionObject execObjectStore(EXPECTED_NUMBER);
using FetchType = vtkm::exec::arg::Fetch<vtkm::exec::arg::FetchTagExecObject,
vtkm::exec::arg::AspectTagDefault,
TestExecutionObject>;
FetchType fetch;
vtkm::exec::arg::ThreadIndicesTesting indices(0);
TestExecutionObject execObject = fetch.Load(indices, execObjectStore);
VTKM_TEST_ASSERT(execObject.Number == EXPECTED_NUMBER, "Did not load object correctly.");
execObject.Number = -1;
// This should be a no-op.
fetch.Store(indices, execObjectStore, execObject);
// Data in Invocation should not have changed.
VTKM_TEST_ASSERT(execObjectStore.Number == EXPECTED_NUMBER,
"Fetch changed read-only execution object.");
}
void TestExecObjectFetch()
{
TryInvocation();
}
} // anonymous namespace
int UnitTestFetchExecObject(int argc, char* argv[])
{
return vtkm::testing::Testing::Run(TestExecObjectFetch, argc, argv);
}