25#include <initializer_list>
32[[noreturn]]
void ThrowAssertError(
const std::string& msg)
35 throw std::runtime_error(msg);
38#define TEST_ASSERT(cond) \
41 std::cout << "=> Check " << #cond << " ... "; \
44 std::cout << "false" << std::endl; \
45 ThrowAssertError(vtkQuoteMacro(__FILE__) ":" vtkQuoteMacro( \
46 __LINE__) ": test assertion failed: (" #cond ")"); \
48 std::cout << "true" << std::endl; \
52struct CellArrayFactory
58struct CellArrayFactory<
vtkCellArray::StorageTypes::Int32>
63 cellArray->Use32BitStorage();
70struct CellArrayFactory<
vtkCellArray::StorageTypes::Int64>
75 cellArray->Use64BitStorage();
82struct CellArrayFactory<
vtkCellArray::StorageTypes::FixedSizeInt32>
87 cellArray->UseFixedSize32BitStorage(3);
94struct CellArrayFactory<
vtkCellArray::StorageTypes::FixedSizeInt64>
99 cellArray->UseFixedSize64BitStorage(3);
107 template <
typename OffsetsT,
typename ConnectivityT>
108 [[maybe_unused]]
void operator()(OffsetsT*, ConnectivityT*)
114template <
typename ConnectivityArrayT,
typename OffsetsArrayT>
115struct CellArrayFactory<
vtkCellArray::StorageTypes::Generic, ConnectivityArrayT, OffsetsArrayT>
119 using OffsetsValueT =
typename OffsetsArrayT::ValueType;
127 countingOffsets->ConstructBackend(3, 0);
130 placeholderOffsets->InsertNextValue(0);
131 cellArray->SetData(placeholderOffsets, placeholderConn);
137 if (!Dispatcher::Execute(
138 cellArray->GetOffsetsArray(), cellArray->GetConnectivityArray(), worker))
150template <
bool FixedSize>
158 ids->InsertNextId(0);
159 ids->InsertNextId(1);
160 ids->InsertNextId(2);
162 else if (cellId == 1)
164 ids->InsertNextId(3);
165 ids->InsertNextId(4);
166 ids->InsertNextId(5);
168 else if (cellId == 2)
170 ids->InsertNextId(7);
171 ids->InsertNextId(8);
172 ids->InsertNextId(9);
176 throw std::runtime_error(
"Invalid cellId");
183 ids->InsertNextId(0);
184 ids->InsertNextId(1);
185 ids->InsertNextId(2);
186 ids->InsertNextId(3);
187 ids->InsertNextId(4);
189 else if (cellId == 1)
191 ids->InsertNextId(3);
192 ids->InsertNextId(4);
193 ids->InsertNextId(5);
195 else if (cellId == 2)
197 ids->InsertNextId(7);
198 ids->InsertNextId(8);
199 ids->InsertNextId(9);
200 ids->InsertNextId(4);
201 ids->InsertNextId(2);
202 ids->InsertNextId(1);
206 throw std::runtime_error(
"Invalid cellId");
211 std::reverse(ids->begin(), ids->end());
215 for (
vtkIdType i = 0; i < ids->GetNumberOfIds(); ++i)
217 ids->SetId(i, ids->GetId(i) + offset);
223template <
bool FixedSize>
224void FillCellArray(
vtkCellArray* cellArray,
bool reverse =
false)
231template <
bool FixedSize>
235 auto ids = GetCellIds<FixedSize>(cellId, reverse, offset);
240 equal &= pts[i] == ids->GetId(i);
245template <
bool FixedSize>
253 for (
int i = 0; i < 3; ++i)
256 it->GetCurrentCell(npts, pts);
257 TEST_ASSERT(ValidateCell<FixedSize>(i, npts, pts, reverse, offset));
268 cellArray->Initialize();
269 cellArray->AllocateEstimate(100, 4);
270 TEST_ASSERT(cellArray->GetOffsetsArray()->GetSize() == 101);
271 TEST_ASSERT(cellArray->GetConnectivityArray()->GetSize() == 400);
273 cellArray->Initialize();
274 cellArray->AllocateExact(100, 256);
275 TEST_ASSERT(cellArray->GetOffsetsArray()->GetSize() == 101);
276 TEST_ASSERT(cellArray->GetConnectivityArray()->GetSize() == 256);
283 cellArray->Initialize();
284 cellArray->ResizeExact(128, 256);
285 TEST_ASSERT(cellArray->GetOffsetsArray()->GetNumberOfValues() == 129);
286 TEST_ASSERT(cellArray->GetConnectivityArray()->GetNumberOfValues() == 256);
293 cellArray->Initialize();
294 cellArray->ResizeExact(128, 256);
295 cellArray->Initialize();
296 TEST_ASSERT(cellArray->GetOffsetsArray()->GetNumberOfValues() == 1);
297 TEST_ASSERT(cellArray->GetConnectivityArray()->GetNumberOfValues() == 0);
298 TEST_ASSERT(cellArray->GetOffsetsArray()->GetSize() == 1);
299 TEST_ASSERT(cellArray->GetConnectivityArray()->GetSize() == 0);
302template <
bool FixedSize>
307 cellArray->Initialize();
308 cellArray->AllocateExact(128, 256);
310 FillCellArray<FixedSize>(cellArray);
312 cellArray->Squeeze();
314 TEST_ASSERT(cellArray->GetOffsetsArray()->GetNumberOfValues() == 4);
315 TEST_ASSERT(cellArray->GetConnectivityArray()->GetNumberOfValues() == (FixedSize ? 9 : 14));
316 TEST_ASSERT(cellArray->GetOffsetsArray()->GetSize() == 4);
317 TEST_ASSERT(cellArray->GetConnectivityArray()->GetSize() == (FixedSize ? 9 : 14));
320 ValidateCellArray<FixedSize>(cellArray);
327 cellArray->Initialize();
328 cellArray->ResizeExact(128, 256);
330 TEST_ASSERT(cellArray->GetOffsetsArray()->GetNumberOfValues() == 1);
331 TEST_ASSERT(cellArray->GetConnectivityArray()->GetNumberOfValues() == 0);
332 TEST_ASSERT(cellArray->GetOffsetsArray()->GetSize() >= 129);
333 TEST_ASSERT(cellArray->GetConnectivityArray()->GetSize() >= 256);
336template <
bool FixedSize>
342 FillCellArray<FixedSize>(cellArray);
345 cellArray->GetOffsetsArray()->Reset();
348 cellArray->GetOffsetsArray()->SetNumberOfValues(4);
351 cellArray->GetOffsetsArray()->SetComponent(1, 0, 5);
352 cellArray->GetOffsetsArray()->SetComponent(2, 0, 3);
354 cellArray->GetOffsetsArray()->SetComponent(1, 0, 3);
355 cellArray->GetOffsetsArray()->SetComponent(2, 0, 5);
359template <
bool FixedSize>
365 FillCellArray<FixedSize>(cellArray);
368 cellArray->GetConnectivityArray()->SetNumberOfValues(5);
370 cellArray->GetConnectivityArray()->SetNumberOfValues(4);
372 cellArray->GetConnectivityArray()->SetNumberOfValues(FixedSize ? 9 : 14);
376template <
bool FixedSize>
383 cellArray->Initialize();
387 FillCellArray<FixedSize>(cellArray);
391 cellArray->Initialize();
396template <
bool FixedSize>
403 cellArray->Initialize();
407 FillCellArray<FixedSize>(cellArray);
411 cellArray->Initialize();
416template <
bool FixedSize>
421 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
423 cellArray->Initialize();
425 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
427 FillCellArray<FixedSize>(cellArray);
429 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == (FixedSize ? 9 : 14));
431 cellArray->Initialize();
433 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
436template <
bool FixedSize>
444 iter->GoToFirstCell();
448 cellArray->Initialize();
453 iter->GoToFirstCell();
457 FillCellArray<FixedSize>(cellArray);
459 ValidateCellArray<FixedSize>(cellArray);
461 cellArray->Initialize();
466 iter->GoToFirstCell();
471template <
typename OffsetsArrayType,
typename ConnectivityArrayType>
475 using OffsetsValueType =
typename OffsetsArrayType::ValueType;
476 using ConnectivityValueType =
typename ConnectivityArrayType::ValueType;
477 constexpr bool FixedSize = std::is_base_of_v<vtkAffineArray<OffsetsValueType>, OffsetsArrayType>;
479 test->DeepCopy(cellArray);
484 countingOffsets->ConstructBackend(GetCellIds<FixedSize>(0)->GetNumberOfIds(), 0);
487 offsets->InsertNextValue(0);
490 auto ids = GetCellIds<FixedSize>(i);
491 offsets->InsertNextValue(offsets->GetValue(i) + ids->GetNumberOfIds());
492 for (
vtkIdType j = 0; j < ids->GetNumberOfIds(); ++j)
494 conn->InsertNextValue(ids->GetId(j));
497 test->SetData(offsets, conn);
502 if (
sizeof(OffsetsValueType) == 4 &&
sizeof(ConnectivityValueType) == 4)
522 if (
sizeof(OffsetsValueType) == 4 &&
sizeof(ConnectivityValueType) == 4)
558 TEST_ASSERT(test->GetNumberOfConnectivityIds() == (FixedSize ? 9 : 14));
561 ValidateCellArray<FixedSize>(test);
570 TestSetDataImpl<vtkCellArray::ArrayType32, vtkCellArray::ArrayType32>(cellArray,
true);
571 TestSetDataImpl<vtkCellArray::ArrayType64, vtkCellArray::ArrayType64>(cellArray,
true);
572 TestSetDataImpl<vtkIdTypeArray, vtkIdTypeArray>(cellArray,
true);
573 TestSetDataImpl<vtkCellArray::AffineArrayType32, vtkCellArray::ArrayType32>(cellArray,
true);
574 TestSetDataImpl<vtkCellArray::AffineArrayType64, vtkCellArray::ArrayType64>(cellArray,
true);
575 TestSetDataImpl<vtkAffineArray<vtkIdType>,
vtkIdTypeArray>(cellArray,
true);
578 TestSetDataImpl<vtkTypeInt32Array, vtkTypeInt32Array>(cellArray,
false);
579 TestSetDataImpl<vtkTypeInt64Array, vtkTypeInt64Array>(cellArray,
false);
580 TestSetDataImpl<vtkIntArray, vtkIntArray>(cellArray,
false);
581 TestSetDataImpl<vtkLongArray, vtkLongArray>(cellArray,
false);
582 TestSetDataImpl<vtkLongLongArray, vtkLongLongArray>(cellArray,
false);
583 TestSetDataImpl<vtkAffineArray<vtkTypeInt32>, vtkTypeInt32Array>(cellArray,
false);
584 TestSetDataImpl<vtkAffineArray<vtkTypeInt64>, vtkTypeInt64Array>(cellArray,
false);
585 TestSetDataImpl<vtkAffineArray<int>,
vtkIntArray>(cellArray,
false);
586 TestSetDataImpl<vtkAffineArray<long>,
vtkLongArray>(cellArray,
false);
587 TestSetDataImpl<vtkAffineArray<long long>,
vtkLongLongArray>(cellArray,
false);
646 template <
class OffsetsT,
class ConnectivityT>
647 void operator()(OffsetsT*, ConnectivityT*,
bool expect64Bit)
const
649 using ValueType = GetAPIType<OffsetsT>;
651 constexpr bool is64Bit =
sizeof(ValueType) == 8 &&
663 cellArray->Dispatch(TestIsStorage64BitImpl{}, cellArray->IsStorage64Bit());
668 template <
class OffsetsT,
class ConnectivityT>
669 void operator()(OffsetsT*, ConnectivityT*,
bool expect32Bit)
const
671 using ValueType = GetAPIType<OffsetsT>;
673 constexpr bool is32Bit =
sizeof(ValueType) == 4 &&
685 cellArray->Dispatch(TestIsStorage32BitImpl{}, cellArray->IsStorage32Bit());
690 template <
class OffsetsT,
class ConnectivityT>
691 void operator()(OffsetsT*, ConnectivityT*,
bool expectFixedSize64Bit)
const
693 using ValueType = GetAPIType<OffsetsT>;
695 constexpr bool isFixedSize64Bit =
sizeof(ValueType) == 8 &&
699 TEST_ASSERT(isFixedSize64Bit == expectFixedSize64Bit);
707 cellArray->Dispatch(TestIsStorageFixedSize64BitImpl{}, cellArray->IsStorageFixedSize64Bit());
712 template <
class OffsetsT,
class ConnectivityT>
713 void operator()(OffsetsT*, ConnectivityT*,
bool expectFixedSize32Bit)
const
715 using ValueType = GetAPIType<OffsetsT>;
717 constexpr bool isFixedSize32Bit =
sizeof(ValueType) == 4 &&
721 TEST_ASSERT(isFixedSize32Bit == expectFixedSize32Bit);
729 cellArray->Dispatch(TestIsStorageFixedSize32BitImpl{}, cellArray->IsStorageFixedSize32Bit());
734 template <
class OffsetsT,
class ConnectivityT>
735 void operator()(OffsetsT*, ConnectivityT*,
bool expectGeneric)
const
737 using ValueType = GetAPIType<OffsetsT>;
739 constexpr bool isGeneric = !std::is_base_of_v<vtkAffineArray<ValueType>, OffsetsT> &&
740 !std::is_base_of_v<vtkAOSDataArrayTemplate<ValueType>, OffsetsT> &&
741 !std::is_base_of_v<vtkAOSDataArrayTemplate<ValueType>, ConnectivityT> &&
742 std::is_base_of_v<vtkDataArray, OffsetsT> && std::is_base_of_v<vtkDataArray, ConnectivityT>;
752 cellArray->Dispatch(TestIsStorageGenericImpl{}, cellArray->IsStorageGeneric());
760 FillCellArray<true>(cellArray);
761 cellArray->Use32BitStorage();
765 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
773 FillCellArray<true>(cellArray);
774 cellArray->Use64BitStorage();
778 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
786 FillCellArray<true>(cellArray);
787 cellArray->UseDefaultStorage();
791 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
799 FillCellArray<true>(cellArray);
800 cellArray->UseFixedSize32BitStorage(3);
804 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
812 FillCellArray<true>(cellArray);
813 cellArray->UseFixedSize64BitStorage(3);
817 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
825 FillCellArray<true>(cellArray);
826 cellArray->UseFixedSizeDefaultStorage(3);
830 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
837 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
839 if (cellArray->IsStorage64Bit())
841 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
842 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
844#ifdef VTK_USE_64BIT_IDS
845 cellArray->InsertNextCell({ 0, 1,
static_cast<vtkTypeInt64
>(VTK_TYPE_INT32_MAX) + 1 });
846 TEST_ASSERT(!cellArray->CanConvertTo32BitStorage());
849 else if (cellArray->IsStorage32Bit())
851 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
852 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
854 else if (cellArray->IsStorageFixedSize64Bit())
856 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
857 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
859#ifdef VTK_USE_64BIT_IDS
860 cellArray->InsertNextCell({ 0, 1,
static_cast<vtkTypeInt64
>(VTK_TYPE_INT32_MAX) + 1 });
861 TEST_ASSERT(!cellArray->CanConvertTo32BitStorage());
866 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
867 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
875 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
877 if (cellArray->IsStorage64Bit())
879 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
880 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
882#ifdef VTK_USE_64BIT_IDS
883 cellArray->InsertNextCell({ 0, 1,
static_cast<vtkTypeInt64
>(VTK_TYPE_INT32_MAX) + 1 });
884 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
885 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT64_MAX });
886 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
889 else if (cellArray->IsStorage32Bit())
891 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
892 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
894 else if (cellArray->IsStorageFixedSize64Bit())
896 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
897 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
899#ifdef VTK_USE_64BIT_IDS
900 cellArray->InsertNextCell({ 0, 1,
static_cast<vtkTypeInt64
>(VTK_TYPE_INT32_MAX) + 1 });
901 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
902 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT64_MAX });
903 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
908 cellArray->InsertNextCell({ 0, VTK_TYPE_INT32_MAX });
909 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
917 TEST_ASSERT(cellArray->CanConvertToFixedSize32BitStorage());
919 if (cellArray->IsStorage64Bit())
921 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
922 TEST_ASSERT(cellArray->CanConvertToFixedSize32BitStorage());
924#ifdef VTK_USE_64BIT_IDS
925 cellArray->InsertNextCell({ 0, 1,
static_cast<vtkTypeInt64
>(VTK_TYPE_INT32_MAX) + 1 });
926 TEST_ASSERT(!cellArray->CanConvertToFixedSize32BitStorage());
929 else if (cellArray->IsStorage32Bit())
931 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
932 TEST_ASSERT(cellArray->CanConvertToFixedSize32BitStorage());
934 else if (cellArray->IsStorageFixedSize64Bit())
936 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
937 TEST_ASSERT(cellArray->CanConvertToFixedSize32BitStorage());
939#ifdef VTK_USE_64BIT_IDS
940 cellArray->InsertNextCell({ 0, 1,
static_cast<vtkTypeInt64
>(VTK_TYPE_INT32_MAX) + 1 });
941 TEST_ASSERT(!cellArray->CanConvertToFixedSize32BitStorage());
946 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
947 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
955 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
957 if (cellArray->IsStorage64Bit())
959 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
960 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
962#ifdef VTK_USE_64BIT_IDS
963 cellArray->InsertNextCell({ 0, 1,
static_cast<vtkTypeInt64
>(VTK_TYPE_INT32_MAX) + 1 });
964 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
965 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT64_MAX });
966 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
969 else if (cellArray->IsStorage32Bit())
971 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
972 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
974 else if (cellArray->IsStorageFixedSize64Bit())
976 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
977 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
979#ifdef VTK_USE_64BIT_IDS
980 cellArray->InsertNextCell({ 0, 1,
static_cast<vtkTypeInt64
>(VTK_TYPE_INT32_MAX) + 1 });
981 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
982 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT64_MAX });
983 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
988 cellArray->InsertNextCell({ 0, VTK_TYPE_INT32_MAX });
989 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
993template <
bool FixedSize>
998 FillCellArray<FixedSize>(cellArray);
1004 ValidateCellArray<FixedSize>(cellArray);
1007template <
bool FixedSize>
1012 FillCellArray<FixedSize>(cellArray);
1018 ValidateCellArray<FixedSize>(cellArray);
1025 FillCellArray<true>(cellArray);
1027 TEST_ASSERT(cellArray->ConvertToFixedSize32BitStorage());
1028 TEST_ASSERT(cellArray->IsStorageFixedSize32Bit());
1031 ValidateCellArray<true>(cellArray);
1038 FillCellArray<true>(cellArray);
1040 TEST_ASSERT(cellArray->ConvertToFixedSize64BitStorage());
1041 TEST_ASSERT(cellArray->IsStorageFixedSize64Bit());
1044 ValidateCellArray<true>(cellArray);
1051 switch (cellArray->GetStorageType())
1054 TEST_ASSERT(cellArray->GetOffsetsArray() == cellArray->GetOffsetsArray64());
1057 TEST_ASSERT(cellArray->GetOffsetsArray() == cellArray->GetOffsetsArray32());
1060 TEST_ASSERT(cellArray->GetOffsetsArray() == cellArray->GetOffsetsAffineArray64());
1063 TEST_ASSERT(cellArray->GetOffsetsArray() == cellArray->GetOffsetsAffineArray32());
1067 TEST_ASSERT(cellArray->GetOffsetsArray() == cellArray->GetOffsetsArray());
1076 switch (cellArray->GetStorageType())
1079 TEST_ASSERT(cellArray->GetConnectivityArray() == cellArray->GetConnectivityArray64());
1082 TEST_ASSERT(cellArray->GetConnectivityArray() == cellArray->GetConnectivityArray32());
1085 TEST_ASSERT(cellArray->GetConnectivityArray() == cellArray->GetConnectivityArray64());
1088 TEST_ASSERT(cellArray->GetConnectivityArray() == cellArray->GetConnectivityArray32());
1092 TEST_ASSERT(cellArray->GetConnectivityArray() == cellArray->GetConnectivityArray());
1097template <
bool FixedSize>
1103 cellArray->Initialize();
1106 FillCellArray<true>(cellArray);
1109 FillCellArray<true>(cellArray);
1114 cellArray->InsertNextCell({ 5, 6 });
1118 cellArray->Initialize();
1122template <
bool FixedSize>
1127 FillCellArray<FixedSize>(cellArray);
1132 cellArray->InitTraversal();
1133 TEST_ASSERT(cellArray->GetTraversalCellId() == 0);
1134 TEST_ASSERT(cellArray->GetNextCell(npts, pts) != 0);
1135 TEST_ASSERT(ValidateCell<FixedSize>(0, npts, pts));
1136 TEST_ASSERT(cellArray->GetTraversalCellId() == 1);
1137 TEST_ASSERT(cellArray->GetNextCell(npts, pts) != 0);
1138 TEST_ASSERT(ValidateCell<FixedSize>(1, npts, pts));
1139 TEST_ASSERT(cellArray->GetTraversalCellId() == 2);
1140 TEST_ASSERT(cellArray->GetNextCell(npts, pts) != 0);
1141 TEST_ASSERT(ValidateCell<FixedSize>(2, npts, pts));
1143 cellArray->SetTraversalCellId(1);
1144 TEST_ASSERT(cellArray->GetTraversalCellId() == 1);
1145 TEST_ASSERT(cellArray->GetNextCell(npts, pts) != 0);
1146 TEST_ASSERT(ValidateCell<FixedSize>(1, npts, pts));
1147 TEST_ASSERT(cellArray->GetTraversalCellId() == 2);
1148 TEST_ASSERT(cellArray->GetNextCell(npts, pts) != 0);
1149 TEST_ASSERT(ValidateCell<FixedSize>(2, npts, pts));
1151 TEST_ASSERT(cellArray->GetNextCell(npts, pts) == 0);
1154template <
bool FixedSize>
1159 FillCellArray<FixedSize>(cellArray);
1162 cellArray->InitTraversal();
1173template <
bool FixedSize>
1178 FillCellArray<FixedSize>(cellArray);
1180 auto validate = [&](
const vtkIdType cellId)
1184 cellArray->GetCellAtId(cellId, npts, pts);
1185 TEST_ASSERT(ValidateCell<FixedSize>(cellId, npts, pts));
1188 cellArray->GetCellAtId(cellId, ids);
1197template <
bool FixedSize>
1202 FillCellArray<FixedSize>(cellArray);
1204 TEST_ASSERT(cellArray->GetCellSize(1) == GetCellIds<FixedSize>(1)->GetNumberOfIds());
1205 TEST_ASSERT(cellArray->GetCellSize(0) == GetCellIds<FixedSize>(0)->GetNumberOfIds());
1206 TEST_ASSERT(cellArray->GetCellSize(2) == GetCellIds<FixedSize>(2)->GetNumberOfIds());
1209template <
bool FixedSize>
1216 auto ids0 = GetCellIds<FixedSize>(0);
1217 TEST_ASSERT(cellArray->InsertNextCell(ids0) == 0);
1220 TEST_ASSERT(cellArray->InsertNextCell({ 3, 4, 5 }) == 1);
1223 auto ids2 = GetCellIds<FixedSize>(2);
1224 TEST_ASSERT(cellArray->InsertNextCell(ids2->GetNumberOfIds(), ids2->GetPointer(0)) == 2);
1228 auto ids3 = triangle->GetPointIds();
1232 TEST_ASSERT(cellArray->InsertNextCell(triangle) == 3);
1238 cellArray->GetCellAtId(0, npts, pts);
1239 TEST_ASSERT(ValidateCell<FixedSize>(0, npts, pts));
1240 cellArray->GetCellAtId(1, npts, pts);
1241 TEST_ASSERT(ValidateCell<FixedSize>(1, npts, pts));
1242 cellArray->GetCellAtId(2, npts, pts);
1243 TEST_ASSERT(ValidateCell<FixedSize>(2, npts, pts));
1244 cellArray->GetCellAtId(3, npts, pts);
1251template <
bool FixedSize>
1256 auto ids0 = GetCellIds<FixedSize>(0);
1257 TEST_ASSERT(cellArray->InsertNextCell(ids0->GetNumberOfIds()) == 0);
1258 for (
vtkIdType i = 0; i < ids0->GetNumberOfIds(); ++i)
1260 cellArray->InsertCellPoint(ids0->GetId(i));
1262 auto ids1 = GetCellIds<FixedSize>(1);
1263 TEST_ASSERT(cellArray->InsertNextCell(ids1->GetNumberOfIds()) == 1);
1264 for (
vtkIdType i = 0; i < ids1->GetNumberOfIds(); ++i)
1266 cellArray->InsertCellPoint(ids1->GetId(i));
1268 auto ids2 = GetCellIds<FixedSize>(2);
1270 cellArray->InsertCellPoint(ids2->GetId(0));
1271 cellArray->UpdateCellCount(ids2->GetNumberOfIds());
1272 for (
vtkIdType i = 1; i < ids2->GetNumberOfIds(); ++i)
1274 cellArray->InsertCellPoint(ids2->GetId(i));
1277 ValidateCellArray<FixedSize>(cellArray);
1280template <
bool FixedSize>
1285 FillCellArray<FixedSize>(cellArray);
1287 auto validate = [&](
const vtkIdType cellId,
bool reverse)
1291 cellArray->GetCellAtId(cellId, npts, pts);
1292 TEST_ASSERT(ValidateCell<FixedSize>(cellId, npts, pts, reverse));
1299 cellArray->ReverseCellAtId(2);
1305 cellArray->ReverseCellAtId(0);
1312template <
bool FixedSize>
1317 FillCellArray<FixedSize>(cellArray);
1319 auto validate = [&](
const vtkIdType cellId,
bool reverse)
1323 cellArray->GetCellAtId(cellId, npts, pts);
1324 TEST_ASSERT(ValidateCell<FixedSize>(cellId, npts, pts, reverse));
1332 auto id2Reverse = GetCellIds<FixedSize>(2,
true);
1333 cellArray->ReplaceCellAtId(2, id2Reverse);
1341 auto id0 = GetCellIds<FixedSize>(0,
true);
1342 cellArray->ReplaceCellAtId(0, id0->GetNumberOfIds(), id0->GetPointer(0));
1349 cellArray->ReplaceCellAtId(1, { 5, 4, 3 });
1356template <
bool FixedSize>
1361 auto ids0 = GetCellIds<FixedSize>(0);
1362 auto ids1 = GetCellIds<FixedSize>(1);
1363 auto ids2 = GetCellIds<FixedSize>(2);
1366 cellArray->InsertNextCell(ids0);
1367 TEST_ASSERT(cellArray->GetMaxCellSize() == ids0->GetNumberOfIds());
1368 cellArray->InsertNextCell(ids1);
1369 TEST_ASSERT(cellArray->GetMaxCellSize() == ids0->GetNumberOfIds());
1370 cellArray->InsertNextCell(ids2);
1371 TEST_ASSERT(cellArray->GetMaxCellSize() == ids2->GetNumberOfIds());
1374template <
bool FixedSize>
1379 FillCellArray<FixedSize>(cellArray);
1382 other->DeepCopy(cellArray);
1384 TEST_ASSERT(cellArray->GetStorageType() == other->GetStorageType());
1385 ValidateCellArray<FixedSize>(other);
1387 cellArray->InsertNextCell({ 0, 1, 2 });
1388 TEST_ASSERT(cellArray->GetNumberOfCells() == other->GetNumberOfCells() + 1);
1391template <
bool FixedSize>
1396 FillCellArray<FixedSize>(cellArray);
1399 other->ShallowCopy(cellArray);
1401 TEST_ASSERT(cellArray->GetStorageType() == other->GetStorageType());
1402 ValidateCellArray<FixedSize>(other);
1404 cellArray->InsertNextCell({ 0, 1, 2 });
1405 TEST_ASSERT(cellArray->GetNumberOfCells() == other->GetNumberOfCells());
1406 TEST_ASSERT(cellArray->GetOffsetsArray() == other->GetOffsetsArray());
1407 TEST_ASSERT(cellArray->GetConnectivityArray() == other->GetConnectivityArray());
1410template <
bool FixedSize>
1413 FillCellArray<FixedSize>(first,
false);
1415 FillCellArray<FixedSize>(second,
true);
1418 concat->DeepCopy(first);
1419 concat->Append(second, 10);
1426 concat->GetCellAtId(cellId, npts, pts);
1427 vtkIdType cellIdQuery = cellId < 3 ? cellId : cellId % 3;
1428 TEST_ASSERT(ValidateCell<FixedSize>(cellIdQuery, npts, pts, reverse, offset));
1431 validate(0,
false, 0);
1432 validate(1,
false, 0);
1433 validate(2,
false, 0);
1435 validate(3,
true, 10);
1436 validate(4,
true, 10);
1437 validate(5,
true, 10);
1440template <
bool FixedSize>
1444 TestAppendImpl<FixedSize>(cellArray, CellArrayFactory<vtkCellArray::Int32>::New());
1447template <
bool FixedSize>
1451 TestAppendImpl<FixedSize>(cellArray, CellArrayFactory<vtkCellArray::Int64>::New());
1454template <
bool FixedSize>
1459 FillCellArray<FixedSize>(cellArray);
1462 cellArray->ExportLegacyFormat(legacy);
1465 std::vector<vtkIdType> expected;
1466 for (
int i = 0; i < 3; ++i)
1468 auto ids = GetCellIds<FixedSize>(i);
1469 expected.push_back(ids->GetNumberOfIds());
1470 for (
vtkIdType j = 0; j < ids->GetNumberOfIds(); ++j)
1472 expected.push_back(ids->GetId(j));
1475 auto legacyRange = vtk::DataArrayValueRange<1>(legacy);
1476 TEST_ASSERT(std::equal(expected.cbegin(), expected.cend(), legacyRange.cbegin()));
1479 cellArray->Initialize();
1480 cellArray->ImportLegacyFormat(legacy);
1486 cellArray->GetCellAtId(cellId, npts, pts);
1487 vtkIdType cellIdQuery = cellId < 3 ? cellId : cellId % 3;
1488 TEST_ASSERT(ValidateCell<FixedSize>(cellIdQuery, npts, pts,
false, offset));
1497 cellArray->InsertNextCell(GetCellIds<FixedSize>(0,
true));
1498 cellArray->ImportLegacyFormat(legacy->
GetPointer(0), legacy->GetNumberOfTuples());
1505 cellArray->AppendLegacyFormat(legacy, 10);
1515 cellArray->AppendLegacyFormat(legacy->
GetPointer(0), legacy->GetNumberOfTuples(), 20);
1531 switch (storageType)
1538 return "FixedSizeInt64";
1540 return "FixedSizeInt32";
1550 vtkLogScopeF(INFO,
"Testing %s storage.", StorageTypeToString(StorageType));
1552 TestAllocate(CellArrayFactory<StorageType, ArrayTypes...>::New());
1553 TestResize(CellArrayFactory<StorageType, ArrayTypes...>::New());
1554 TestInitialize(CellArrayFactory<StorageType, ArrayTypes...>::New());
1555 TestReset(CellArrayFactory<StorageType, ArrayTypes...>::New());
1559 TestSqueeze<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1561 TestIsValidOffsets<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1563 TestIsValidConnectivity<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1565 TestGetNumberOfCells<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1566 TestGetNumberOfOffsets<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1567 TestGetNumberOfConnectivityIds<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1569 TestNewIterator<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1570 TestSetData(CellArrayFactory<StorageType, ArrayTypes...>::New());
1572 TestIsStorage64Bit(CellArrayFactory<StorageType, ArrayTypes...>::New());
1573 TestIsStorage32Bit(CellArrayFactory<StorageType, ArrayTypes...>::New());
1574 TestIsStorageFixedSize64Bit(CellArrayFactory<StorageType, ArrayTypes...>::New());
1575 TestIsStorageFixedSize32Bit(CellArrayFactory<StorageType, ArrayTypes...>::New());
1576 TestIsStorageGeneric(CellArrayFactory<StorageType, ArrayTypes...>::New());
1578 TestUse32BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1579 TestUse64BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1580 TestUseDefaultStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1581 TestUseFixedSize32BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1582 TestUseFixedSize64BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1583 TestUseFixedSizeDefaultStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1585 TestCanConvertTo32BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1586 TestCanConvertTo64BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1587 TestCanConvertToFixedSize32BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1588 TestCanConvertToFixedSize64BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1590 TestConvertTo32BitStorage<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1591 TestConvertTo64BitStorage<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1592 TestConvertToFixedSize32BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1593 TestConvertToFixedSize64BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1595 TestGetOffsetsArray(CellArrayFactory<StorageType, ArrayTypes...>::New());
1596 TestGetConnectivityArray(CellArrayFactory<StorageType, ArrayTypes...>::New());
1598 TestIsHomogeneous<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1600 TestTraversalSizePointer<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1601 TestTraversalIdList<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1603 TestGetCellAtId<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1604 TestGetCellSize<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1606 TestInsertNextCell<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1607 TestIncrementalCellInsertion<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1609 TestReverseCellAtId<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1610 TestReplaceCellAtId<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1612 TestGetMaxCellSize<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1614 TestDeepCopy<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1615 TestShallowCopy<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1617 TestAppend32<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1618 TestAppend64<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1620 TestLegacyFormatImportExportAppend<FixedSize>(
1621 CellArrayFactory<StorageType, ArrayTypes...>::New());
#define TEST_ASSERT(cond)
This class is used in some unit tests to setup a mock data array which derives vtkGenericDataArray.
Array-Of-Structs implementation of vtkGenericDataArray.
vtkTypeList::Create< vtkTypeInt32Array, vtkTypeInt64Array, vtkAffineTypeInt32Array, vtkAffineTypeInt64Array > StorageOffsetsArrays
List of possible array types used for storage of vtkCellArray.
vtkTypeList::Create< vtkTypeInt32Array, vtkTypeInt64Array > StorageConnectivityArrays
List of possible array types used for storage of vtkCellArray.
object to represent cell connectivity
vtkCellArrayIterator * NewIterator()
NewIterator returns a new instance of vtkCellArrayIterator that is initialized to point at the first ...
vtkIdType InsertNextCell(vtkCell *cell)
Insert a cell object.
dynamic, self-adjusting array of vtkIdType
A read only array class that wraps an implicit function from integers to any value type supported by ...
dynamic, self-adjusting array of int
dynamic, self-adjusting array of long
dynamic, self-adjusting array of long long
Allocate and hold a VTK object.
T * GetPointer() const noexcept
Get a raw pointer to the contained object.
Hold a reference to a vtkObjectBase instance.
static vtkSmartPointer< T > New()
Create an instance of a VTK object.
vtkSmartPointer< T > TakeSmartPointer(T *obj)
Construct a vtkSmartPointer<T> containing obj.
Dispatch two arrays, restricting the valid code paths to use only array types specified in the ArrayL...
STL-compatible iterable ranges that provide access to vtkDataArray elements.
#define vtkLogScopeF(verbosity_name,...)
#define vtkLogScopeFunction(verbosity_name)