vtk-m/vtkm/exec/testing/UnitTestFetchExecObject.cxx

71 lines
1.8 KiB
C++
Raw Permalink Normal View History

//============================================================================
// Copyright (c) Kitware, Inc.
// All rights reserved.
// See LICENSE.txt for details.
2019-04-15 23:24:21 +00:00
//
// 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
2017-05-18 14:29:41 +00:00
namespace
{
struct TestExecutionObject
{
2017-05-18 14:29:41 +00:00
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);
2017-05-18 14:29:41 +00:00
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);
}