Fixed bug in ReduceByKey

This commit is contained in:
Chun-Ming Chen 2015-06-01 12:19:17 -04:00 committed by Robert Maynard
parent b695460f39
commit 7ea9563d19
2 changed files with 40 additions and 2 deletions

@ -138,12 +138,12 @@ public:
{
typedef typename vtkm::cont::ArrayHandle<T,KIn>
::template ExecutionTypes<Device>::PortalConst PortalKIn;
typedef typename vtkm::cont::ArrayHandle<T,VIn>
typedef typename vtkm::cont::ArrayHandle<U,VIn>
::template ExecutionTypes<Device>::PortalConst PortalVIn;
typedef typename vtkm::cont::ArrayHandle<T,KOut>
::template ExecutionTypes<Device>::Portal PortalKOut;
typedef typename vtkm::cont::ArrayHandle<T,VOut>
typedef typename vtkm::cont::ArrayHandle<U,VOut>
::template ExecutionTypes<Device>::Portal PortalVOut;
PortalKIn keysPortalIn = keys.PrepareForInput(Device());

@ -1195,6 +1195,44 @@ private:
}
}
//next test with values in vec3d (Added by Jimmy to be reviewed)
{
const vtkm::Id inputLength = 3;
const vtkm::Id expectedLength = 1;
vtkm::Id inputKeys[inputLength] = {0, 0, 0}; // input keys
vtkm::Vec<vtkm::Float64, 3> inputValues[inputLength] = {{13.1, 13.3, 13.5},
{-2.1, -2.3, -2.5},
{-1.0, -1.0, -1.0}}; // input keys
vtkm::Id expectedKeys[expectedLength] = { 0};
vtkm::Vec<vtkm::Float64, 3> expectedValues[expectedLength] = {{10., 10., 10.}};
IdArrayHandle keys = MakeArrayHandle(inputKeys, inputLength);
vtkm::cont::ArrayHandle<vtkm::Vec<vtkm::Float64, 3>, StorageTag> values = MakeArrayHandle(inputValues, inputLength);
IdArrayHandle keysOut;
vtkm::cont::ArrayHandle<vtkm::Vec<vtkm::Float64, 3>, StorageTag> valuesOut;
Algorithm::ReduceByKey( keys,
values,
keysOut,
valuesOut,
vtkm::internal::Add() );
VTKM_TEST_ASSERT(keysOut.GetNumberOfValues() == expectedLength,
"Got wrong number of output keys");
VTKM_TEST_ASSERT(valuesOut.GetNumberOfValues() == expectedLength,
"Got wrong number of output values");
for(vtkm::Id i=0; i < expectedLength; ++i)
{
const vtkm::Id k = keysOut.GetPortalConstControl().Get(i);
const vtkm::Vec<vtkm::Float64, 3> v = valuesOut.GetPortalConstControl().Get(i);
VTKM_TEST_ASSERT( expectedKeys[i] == k, "Incorrect reduced key");
VTKM_TEST_ASSERT( expectedValues[i] == v, "Incorrect reduced vale");
}
}
}
static VTKM_CONT_EXPORT void TestScanInclusive()