Add unit test for serializing an empty ArrayHandle and fix test failure
Fix: Always serialize the size of the Buffer in vtkm/cont/internal/Buffer.cxx but only serialize its contents, if the size differs from zero.
This commit is contained in:
parent
3f52549ac0
commit
d6a7348172
@ -1164,9 +1164,14 @@ void Serialization<vtkm::cont::internal::Buffer>::save(BinaryBuffer& bb,
|
||||
vtkm::BufferSizeType size = obj.GetNumberOfBytes();
|
||||
vtkmdiy::save(bb, size);
|
||||
|
||||
vtkm::cont::Token token;
|
||||
const vtkm::UInt8* data = reinterpret_cast<const vtkm::UInt8*>(obj.ReadPointerHost(token));
|
||||
vtkmdiy::save(bb, data, static_cast<std::size_t>(size));
|
||||
if (size)
|
||||
{
|
||||
// NOTE: If size == 0, obj.ReadPointerHost will be a nullptr, and saving that via
|
||||
// vtkmdiy causes test failure on osheim
|
||||
vtkm::cont::Token token;
|
||||
const vtkm::UInt8* data = reinterpret_cast<const vtkm::UInt8*>(obj.ReadPointerHost(token));
|
||||
vtkmdiy::save(bb, data, static_cast<std::size_t>(size));
|
||||
}
|
||||
}
|
||||
|
||||
void Serialization<vtkm::cont::internal::Buffer>::load(BinaryBuffer& bb,
|
||||
@ -1177,8 +1182,11 @@ void Serialization<vtkm::cont::internal::Buffer>::load(BinaryBuffer& bb,
|
||||
|
||||
vtkm::cont::Token token;
|
||||
obj.SetNumberOfBytes(size, vtkm::CopyFlag::Off, token);
|
||||
vtkm::UInt8* data = reinterpret_cast<vtkm::UInt8*>(obj.WritePointerHost(token));
|
||||
vtkmdiy::load(bb, data, static_cast<std::size_t>(size));
|
||||
if (size)
|
||||
{
|
||||
vtkm::UInt8* data = reinterpret_cast<vtkm::UInt8*>(obj.WritePointerHost(token));
|
||||
vtkmdiy::load(bb, data, static_cast<std::size_t>(size));
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace diy
|
||||
|
@ -150,6 +150,19 @@ struct TestArrayHandleBasic
|
||||
}
|
||||
};
|
||||
|
||||
struct TestArrayHandleBasicEmpty
|
||||
{
|
||||
template <typename T>
|
||||
void operator()(T) const
|
||||
{
|
||||
vtkm::cont::ArrayHandle<T> array;
|
||||
array.Allocate(0);
|
||||
RunTest(array);
|
||||
RunTest(MakeTestUnknownArrayHandle(array));
|
||||
RunTest(MakeTestUncertainArrayHandle(array));
|
||||
}
|
||||
};
|
||||
|
||||
struct TestArrayHandleSOA
|
||||
{
|
||||
template <typename T>
|
||||
@ -372,6 +385,12 @@ void TestArrayHandleSerialization()
|
||||
vtkm::testing::Testing::TryTypes(
|
||||
TestArrayHandleBasic(), vtkm::List<char, long, long long, unsigned long, unsigned long long>());
|
||||
|
||||
std::cout << "Testing empty ArrayHandleBasic\n";
|
||||
vtkm::testing::Testing::TryTypes(TestArrayHandleBasicEmpty(), TestTypesList());
|
||||
vtkm::testing::Testing::TryTypes(
|
||||
TestArrayHandleBasicEmpty(),
|
||||
vtkm::List<char, long, long long, unsigned long, unsigned long long>());
|
||||
|
||||
std::cout << "Testing ArrayHandleSOA\n";
|
||||
vtkm::testing::Testing::TryTypes(TestArrayHandleSOA(), TestTypesListVec());
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user