23#include <initializer_list>
31[[noreturn]]
void ThrowAssertError(
const std::string& msg)
34 throw std::runtime_error(msg);
37#define TEST_ASSERT(cond) \
40 std::cout << "=> Check " << #cond << " ... "; \
43 std::cout << "false" << std::endl; \
44 ThrowAssertError(vtkQuoteMacro(__FILE__) ":" vtkQuoteMacro( \
45 __LINE__) ": test assertion failed: (" #cond ")"); \
47 std::cout << "true" << std::endl; \
51struct CellArrayFactory
57struct CellArrayFactory<
vtkCellArray::StorageTypes::Int32>
59 static vtkSmartPointer<vtkCellArray> New()
62 cellArray->Use32BitStorage();
69struct CellArrayFactory<
vtkCellArray::StorageTypes::Int64>
71 static vtkSmartPointer<vtkCellArray> New()
74 cellArray->Use64BitStorage();
81struct CellArrayFactory<
vtkCellArray::StorageTypes::FixedSizeInt32>
83 static vtkSmartPointer<vtkCellArray> New()
86 cellArray->UseFixedSize32BitStorage(3);
93struct CellArrayFactory<
vtkCellArray::StorageTypes::FixedSizeInt64>
95 static vtkSmartPointer<vtkCellArray> New()
98 cellArray->UseFixedSize64BitStorage(3);
106 template <
typename OffsetsT,
typename ConnectivityT>
107 [[maybe_unused]]
void operator()(OffsetsT*, ConnectivityT*)
113template <
typename ConnectivityArrayT,
typename OffsetsArrayT>
114struct CellArrayFactory<
vtkCellArray::StorageTypes::Generic, ConnectivityArrayT, OffsetsArrayT>
116 static vtkSmartPointer<vtkCellArray> New()
118 using OffsetsValueT =
typename OffsetsArrayT::ValueType;
122 vtkNew<ConnectivityArrayT> placeholderConn;
123 vtkNew<OffsetsArrayT> placeholderOffsets;
126 countingOffsets->ConstructBackend(3, 0);
129 placeholderOffsets->InsertNextValue(0);
130 cellArray->SetData(placeholderOffsets, placeholderConn);
136 if (!Dispatcher::Execute(
137 cellArray->GetOffsetsArray(), cellArray->GetConnectivityArray(), worker))
149template <
bool FixedSize>
157 ids->InsertNextId(0);
158 ids->InsertNextId(1);
159 ids->InsertNextId(2);
161 else if (cellId == 1)
163 ids->InsertNextId(3);
164 ids->InsertNextId(4);
165 ids->InsertNextId(5);
167 else if (cellId == 2)
169 ids->InsertNextId(7);
170 ids->InsertNextId(8);
171 ids->InsertNextId(9);
175 throw std::runtime_error(
"Invalid cellId");
182 ids->InsertNextId(0);
183 ids->InsertNextId(1);
184 ids->InsertNextId(2);
185 ids->InsertNextId(3);
186 ids->InsertNextId(4);
188 else if (cellId == 1)
190 ids->InsertNextId(3);
191 ids->InsertNextId(4);
192 ids->InsertNextId(5);
194 else if (cellId == 2)
196 ids->InsertNextId(7);
197 ids->InsertNextId(8);
198 ids->InsertNextId(9);
199 ids->InsertNextId(4);
200 ids->InsertNextId(2);
201 ids->InsertNextId(1);
205 throw std::runtime_error(
"Invalid cellId");
210 std::reverse(ids->begin(), ids->end());
214 for (
vtkIdType i = 0; i < ids->GetNumberOfIds(); ++i)
216 ids->SetId(i, ids->GetId(i) + offset);
222template <
bool FixedSize>
223void FillCellArray(
vtkCellArray* cellArray,
bool reverse =
false)
230template <
bool FixedSize>
234 auto ids = GetCellIds<FixedSize>(cellId, reverse, offset);
239 equal &= pts[i] == ids->GetId(i);
244template <
bool FixedSize>
252 for (
int i = 0; i < 3; ++i)
255 it->GetCurrentCell(npts, pts);
256 TEST_ASSERT(ValidateCell<FixedSize>(i, npts, pts, reverse, offset));
267 cellArray->Initialize();
268 cellArray->AllocateEstimate(100, 4);
269 TEST_ASSERT(cellArray->GetOffsetsArray()->GetSize() == 101);
270 TEST_ASSERT(cellArray->GetConnectivityArray()->GetSize() == 400);
272 cellArray->Initialize();
273 cellArray->AllocateExact(100, 256);
274 TEST_ASSERT(cellArray->GetOffsetsArray()->GetSize() == 101);
275 TEST_ASSERT(cellArray->GetConnectivityArray()->GetSize() == 256);
282 cellArray->Initialize();
283 cellArray->ResizeExact(128, 256);
284 TEST_ASSERT(cellArray->GetOffsetsArray()->GetNumberOfValues() == 129);
285 TEST_ASSERT(cellArray->GetConnectivityArray()->GetNumberOfValues() == 256);
292 cellArray->Initialize();
293 cellArray->ResizeExact(128, 256);
294 cellArray->Initialize();
295 TEST_ASSERT(cellArray->GetOffsetsArray()->GetNumberOfValues() == 1);
296 TEST_ASSERT(cellArray->GetConnectivityArray()->GetNumberOfValues() == 0);
297 TEST_ASSERT(cellArray->GetOffsetsArray()->GetSize() == 1);
298 TEST_ASSERT(cellArray->GetConnectivityArray()->GetSize() == 0);
301template <
bool FixedSize>
306 cellArray->Initialize();
307 cellArray->AllocateExact(128, 256);
309 FillCellArray<FixedSize>(cellArray);
311 cellArray->Squeeze();
313 TEST_ASSERT(cellArray->GetOffsetsArray()->GetNumberOfValues() == 4);
314 TEST_ASSERT(cellArray->GetConnectivityArray()->GetNumberOfValues() == (FixedSize ? 9 : 14));
315 TEST_ASSERT(cellArray->GetOffsetsArray()->GetSize() == 4);
316 TEST_ASSERT(cellArray->GetConnectivityArray()->GetSize() == (FixedSize ? 9 : 14));
319 ValidateCellArray<FixedSize>(cellArray);
326 cellArray->Initialize();
327 cellArray->ResizeExact(128, 256);
329 TEST_ASSERT(cellArray->GetOffsetsArray()->GetNumberOfValues() == 1);
330 TEST_ASSERT(cellArray->GetConnectivityArray()->GetNumberOfValues() == 0);
331 TEST_ASSERT(cellArray->GetOffsetsArray()->GetSize() >= 129);
332 TEST_ASSERT(cellArray->GetConnectivityArray()->GetSize() >= 256);
335template <
bool FixedSize>
341 FillCellArray<FixedSize>(cellArray);
344 cellArray->GetOffsetsArray()->Reset();
347 cellArray->GetOffsetsArray()->SetNumberOfValues(4);
350 cellArray->GetOffsetsArray()->SetComponent(1, 0, 5);
351 cellArray->GetOffsetsArray()->SetComponent(2, 0, 3);
353 cellArray->GetOffsetsArray()->SetComponent(1, 0, 3);
354 cellArray->GetOffsetsArray()->SetComponent(2, 0, 5);
358template <
bool FixedSize>
364 FillCellArray<FixedSize>(cellArray);
367 cellArray->GetConnectivityArray()->SetNumberOfValues(5);
369 cellArray->GetConnectivityArray()->SetNumberOfValues(4);
371 cellArray->GetConnectivityArray()->SetNumberOfValues(FixedSize ? 9 : 14);
375template <
bool FixedSize>
382 cellArray->Initialize();
386 FillCellArray<FixedSize>(cellArray);
390 cellArray->Initialize();
395template <
bool FixedSize>
402 cellArray->Initialize();
406 FillCellArray<FixedSize>(cellArray);
410 cellArray->Initialize();
415template <
bool FixedSize>
420 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
422 cellArray->Initialize();
424 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
426 FillCellArray<FixedSize>(cellArray);
428 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == (FixedSize ? 9 : 14));
430 cellArray->Initialize();
432 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
435template <
bool FixedSize>
443 iter->GoToFirstCell();
447 cellArray->Initialize();
452 iter->GoToFirstCell();
456 FillCellArray<FixedSize>(cellArray);
458 ValidateCellArray<FixedSize>(cellArray);
460 cellArray->Initialize();
465 iter->GoToFirstCell();
470template <
typename OffsetsArrayType,
typename ConnectivityArrayType>
474 using OffsetsValueType =
typename OffsetsArrayType::ValueType;
475 using ConnectivityValueType =
typename ConnectivityArrayType::ValueType;
476 constexpr bool FixedSize = std::is_base_of_v<vtkAffineArray<OffsetsValueType>, OffsetsArrayType>;
478 test->DeepCopy(cellArray);
483 countingOffsets->ConstructBackend(GetCellIds<FixedSize>(0)->GetNumberOfIds(), 0);
486 offsets->InsertNextValue(0);
489 auto ids = GetCellIds<FixedSize>(i);
490 offsets->InsertNextValue(offsets->GetValue(i) + ids->GetNumberOfIds());
491 for (
vtkIdType j = 0; j < ids->GetNumberOfIds(); ++j)
493 conn->InsertNextValue(ids->GetId(j));
496 auto offsetsMTtime = offsets->GetMTime();
497 auto connMTtime = conn->GetMTime();
498 test->SetData(offsets, conn);
501 TEST_ASSERT(test->GetOffsetsArray() == offsets && offsets->GetMTime() == offsetsMTtime);
502 TEST_ASSERT(test->GetConnectivityArray() == conn && conn->GetMTime() == connMTtime);
506 std::is_same_v<OffsetsValueType, ConnectivityValueType>)
508 if (std::is_same_v<OffsetsValueType, vtkTypeInt32>)
516 else if (std::is_same_v<OffsetsValueType, vtkTypeInt64>)
535 std::is_same_v<OffsetsValueType, ConnectivityValueType>)
537 if (std::is_same_v<OffsetsValueType, vtkTypeInt32>)
545 else if (std::is_same_v<OffsetsValueType, vtkTypeInt64>)
572 TEST_ASSERT(test->GetNumberOfConnectivityIds() == (FixedSize ? 9 : 14));
575 ValidateCellArray<FixedSize>(test);
583 TestSetDataImpl<vtkCellArray::AOSArray32, vtkCellArray::AOSArray32>(cellArray);
584 TestSetDataImpl<vtkCellArray::AOSArray64, vtkCellArray::AOSArray64>(cellArray);
585 TestSetDataImpl<vtkIdTypeArray, vtkIdTypeArray>(cellArray);
586 TestSetDataImpl<vtkCellArray::AffineArray32, vtkCellArray::AOSArray32>(cellArray);
587 TestSetDataImpl<vtkCellArray::AffineArray64, vtkCellArray::AOSArray64>(cellArray);
588 TestSetDataImpl<vtkAffineArray<vtkIdType>,
vtkIdTypeArray>(cellArray);
589 TestSetDataImpl<vtkTypeInt32Array, vtkTypeInt32Array>(cellArray);
590 TestSetDataImpl<vtkTypeInt64Array, vtkTypeInt64Array>(cellArray);
591 TestSetDataImpl<vtkIntArray, vtkIntArray>(cellArray);
592 TestSetDataImpl<vtkLongArray, vtkLongArray>(cellArray);
593 TestSetDataImpl<vtkLongLongArray, vtkLongLongArray>(cellArray);
594 TestSetDataImpl<vtkAffineArray<vtkTypeInt32>, vtkTypeInt32Array>(cellArray);
595 TestSetDataImpl<vtkAffineArray<vtkTypeInt64>, vtkTypeInt64Array>(cellArray);
596 TestSetDataImpl<vtkAffineArray<int>,
vtkIntArray>(cellArray);
597 TestSetDataImpl<vtkAffineArray<long>,
vtkLongArray>(cellArray);
656 template <
class OffsetsT,
class ConnectivityT>
657 void operator()(OffsetsT*, ConnectivityT*,
bool expect64Bit)
const
659 using ValueType = GetAPIType<OffsetsT>;
661 constexpr bool is64Bit =
sizeof(ValueType) == 8 &&
662 std::is_base_of_v<vtkAOSDataArrayTemplate<ValueType>, OffsetsT> &&
663 std::is_base_of_v<vtkAOSDataArrayTemplate<ValueType>, ConnectivityT>;
673 cellArray->Dispatch(TestIsStorage64BitImpl{}, cellArray->IsStorage64Bit());
678 template <
class OffsetsT,
class ConnectivityT>
679 void operator()(OffsetsT*, ConnectivityT*,
bool expect32Bit)
const
681 using ValueType = GetAPIType<OffsetsT>;
683 constexpr bool is32Bit =
sizeof(ValueType) == 4 &&
684 std::is_base_of_v<vtkAOSDataArrayTemplate<ValueType>, OffsetsT> &&
685 std::is_base_of_v<vtkAOSDataArrayTemplate<ValueType>, ConnectivityT>;
695 cellArray->Dispatch(TestIsStorage32BitImpl{}, cellArray->IsStorage32Bit());
700 template <
class OffsetsT,
class ConnectivityT>
701 void operator()(OffsetsT*, ConnectivityT*,
bool expectFixedSize64Bit)
const
703 using ValueType = GetAPIType<OffsetsT>;
705 constexpr bool isFixedSize64Bit =
sizeof(ValueType) == 8 &&
707 std::is_base_of_v<vtkAOSDataArrayTemplate<ValueType>, ConnectivityT>;
709 TEST_ASSERT(isFixedSize64Bit == expectFixedSize64Bit);
717 cellArray->Dispatch(TestIsStorageFixedSize64BitImpl{}, cellArray->IsStorageFixedSize64Bit());
722 template <
class OffsetsT,
class ConnectivityT>
723 void operator()(OffsetsT*, ConnectivityT*,
bool expectFixedSize32Bit)
const
725 using ValueType = GetAPIType<OffsetsT>;
727 constexpr bool isFixedSize32Bit =
sizeof(ValueType) == 4 &&
729 std::is_base_of_v<vtkAOSDataArrayTemplate<ValueType>, ConnectivityT>;
731 TEST_ASSERT(isFixedSize32Bit == expectFixedSize32Bit);
739 cellArray->Dispatch(TestIsStorageFixedSize32BitImpl{}, cellArray->IsStorageFixedSize32Bit());
744 template <
class OffsetsT,
class ConnectivityT>
745 void operator()(OffsetsT*, ConnectivityT*,
bool expectGeneric)
const
747 using ValueType = GetAPIType<OffsetsT>;
749 constexpr bool isGeneric = !std::is_base_of_v<vtkAffineArray<ValueType>, OffsetsT> &&
750 !std::is_base_of_v<vtkAOSDataArrayTemplate<ValueType>, OffsetsT> &&
751 !std::is_base_of_v<vtkAOSDataArrayTemplate<ValueType>, ConnectivityT> &&
752 std::is_base_of_v<vtkDataArray, OffsetsT> && std::is_base_of_v<vtkDataArray, ConnectivityT>;
762 cellArray->Dispatch(TestIsStorageGenericImpl{}, cellArray->IsStorageGeneric());
770 FillCellArray<true>(cellArray);
771 cellArray->Use32BitStorage();
775 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
783 FillCellArray<true>(cellArray);
784 cellArray->Use64BitStorage();
788 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
796 FillCellArray<true>(cellArray);
797 cellArray->UseDefaultStorage();
801 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
809 FillCellArray<true>(cellArray);
810 cellArray->UseFixedSize32BitStorage(3);
814 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
822 FillCellArray<true>(cellArray);
823 cellArray->UseFixedSize64BitStorage(3);
827 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
835 FillCellArray<true>(cellArray);
836 cellArray->UseFixedSizeDefaultStorage(3);
840 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
847 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
849 if (cellArray->IsStorage64Bit())
851 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
852 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
854#ifdef VTK_USE_64BIT_IDS
855 cellArray->InsertNextCell({ 0, 1,
static_cast<vtkTypeInt64
>(VTK_TYPE_INT32_MAX) + 1 });
856 TEST_ASSERT(!cellArray->CanConvertTo32BitStorage());
859 else if (cellArray->IsStorage32Bit())
861 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
862 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
864 else if (cellArray->IsStorageFixedSize64Bit())
866 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
867 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
869#ifdef VTK_USE_64BIT_IDS
870 cellArray->InsertNextCell({ 0, 1,
static_cast<vtkTypeInt64
>(VTK_TYPE_INT32_MAX) + 1 });
871 TEST_ASSERT(!cellArray->CanConvertTo32BitStorage());
876 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
877 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
885 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
887 if (cellArray->IsStorage64Bit())
889 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
890 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
892#ifdef VTK_USE_64BIT_IDS
893 cellArray->InsertNextCell({ 0, 1,
static_cast<vtkTypeInt64
>(VTK_TYPE_INT32_MAX) + 1 });
894 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
895 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT64_MAX });
896 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
899 else if (cellArray->IsStorage32Bit())
901 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
902 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
904 else if (cellArray->IsStorageFixedSize64Bit())
906 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
907 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
909#ifdef VTK_USE_64BIT_IDS
910 cellArray->InsertNextCell({ 0, 1,
static_cast<vtkTypeInt64
>(VTK_TYPE_INT32_MAX) + 1 });
911 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
912 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT64_MAX });
913 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
918 cellArray->InsertNextCell({ 0, VTK_TYPE_INT32_MAX });
919 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
927 TEST_ASSERT(cellArray->CanConvertToFixedSize32BitStorage());
929 if (cellArray->IsStorage64Bit())
931 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
932 TEST_ASSERT(cellArray->CanConvertToFixedSize32BitStorage());
934#ifdef VTK_USE_64BIT_IDS
935 cellArray->InsertNextCell({ 0, 1,
static_cast<vtkTypeInt64
>(VTK_TYPE_INT32_MAX) + 1 });
936 TEST_ASSERT(!cellArray->CanConvertToFixedSize32BitStorage());
939 else if (cellArray->IsStorage32Bit())
941 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
942 TEST_ASSERT(cellArray->CanConvertToFixedSize32BitStorage());
944 else if (cellArray->IsStorageFixedSize64Bit())
946 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
947 TEST_ASSERT(cellArray->CanConvertToFixedSize32BitStorage());
949#ifdef VTK_USE_64BIT_IDS
950 cellArray->InsertNextCell({ 0, 1,
static_cast<vtkTypeInt64
>(VTK_TYPE_INT32_MAX) + 1 });
951 TEST_ASSERT(!cellArray->CanConvertToFixedSize32BitStorage());
956 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
957 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
965 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
967 if (cellArray->IsStorage64Bit())
969 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
970 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
972#ifdef VTK_USE_64BIT_IDS
973 cellArray->InsertNextCell({ 0, 1,
static_cast<vtkTypeInt64
>(VTK_TYPE_INT32_MAX) + 1 });
974 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
975 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT64_MAX });
976 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
979 else if (cellArray->IsStorage32Bit())
981 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
982 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
984 else if (cellArray->IsStorageFixedSize64Bit())
986 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
987 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
989#ifdef VTK_USE_64BIT_IDS
990 cellArray->InsertNextCell({ 0, 1,
static_cast<vtkTypeInt64
>(VTK_TYPE_INT32_MAX) + 1 });
991 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
992 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT64_MAX });
993 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
998 cellArray->InsertNextCell({ 0, VTK_TYPE_INT32_MAX });
999 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
1003template <
bool FixedSize>
1008 FillCellArray<FixedSize>(cellArray);
1014 ValidateCellArray<FixedSize>(cellArray);
1017template <
bool FixedSize>
1022 FillCellArray<FixedSize>(cellArray);
1028 ValidateCellArray<FixedSize>(cellArray);
1035 FillCellArray<true>(cellArray);
1037 TEST_ASSERT(cellArray->ConvertToFixedSize32BitStorage());
1038 TEST_ASSERT(cellArray->IsStorageFixedSize32Bit());
1041 ValidateCellArray<true>(cellArray);
1048 FillCellArray<true>(cellArray);
1050 TEST_ASSERT(cellArray->ConvertToFixedSize64BitStorage());
1051 TEST_ASSERT(cellArray->IsStorageFixedSize64Bit());
1054 ValidateCellArray<true>(cellArray);
1061 switch (cellArray->GetStorageType())
1064 TEST_ASSERT(cellArray->GetOffsetsArray() == cellArray->GetOffsetsAOSArray64());
1067 TEST_ASSERT(cellArray->GetOffsetsArray() == cellArray->GetOffsetsAOSArray32());
1070 TEST_ASSERT(cellArray->GetOffsetsArray() == cellArray->GetOffsetsAffineArray64());
1073 TEST_ASSERT(cellArray->GetOffsetsArray() == cellArray->GetOffsetsAffineArray32());
1077 TEST_ASSERT(cellArray->GetOffsetsArray() == cellArray->GetOffsetsArray());
1086 switch (cellArray->GetStorageType())
1089 TEST_ASSERT(cellArray->GetConnectivityArray() == cellArray->GetConnectivityAOSArray64());
1092 TEST_ASSERT(cellArray->GetConnectivityArray() == cellArray->GetConnectivityAOSArray32());
1095 TEST_ASSERT(cellArray->GetConnectivityArray() == cellArray->GetConnectivityAOSArray64());
1098 TEST_ASSERT(cellArray->GetConnectivityArray() == cellArray->GetConnectivityAOSArray32());
1102 TEST_ASSERT(cellArray->GetConnectivityArray() == cellArray->GetConnectivityArray());
1107template <
bool FixedSize>
1113 cellArray->Initialize();
1116 FillCellArray<true>(cellArray);
1119 FillCellArray<true>(cellArray);
1124 cellArray->InsertNextCell({ 5, 6 });
1128 cellArray->Initialize();
1132template <
bool FixedSize>
1137 FillCellArray<FixedSize>(cellArray);
1142 cellArray->InitTraversal();
1143 TEST_ASSERT(cellArray->GetTraversalCellId() == 0);
1144 TEST_ASSERT(cellArray->GetNextCell(npts, pts) != 0);
1145 TEST_ASSERT(ValidateCell<FixedSize>(0, npts, pts));
1146 TEST_ASSERT(cellArray->GetTraversalCellId() == 1);
1147 TEST_ASSERT(cellArray->GetNextCell(npts, pts) != 0);
1148 TEST_ASSERT(ValidateCell<FixedSize>(1, npts, pts));
1149 TEST_ASSERT(cellArray->GetTraversalCellId() == 2);
1150 TEST_ASSERT(cellArray->GetNextCell(npts, pts) != 0);
1151 TEST_ASSERT(ValidateCell<FixedSize>(2, npts, pts));
1153 cellArray->SetTraversalCellId(1);
1154 TEST_ASSERT(cellArray->GetTraversalCellId() == 1);
1155 TEST_ASSERT(cellArray->GetNextCell(npts, pts) != 0);
1156 TEST_ASSERT(ValidateCell<FixedSize>(1, npts, pts));
1157 TEST_ASSERT(cellArray->GetTraversalCellId() == 2);
1158 TEST_ASSERT(cellArray->GetNextCell(npts, pts) != 0);
1159 TEST_ASSERT(ValidateCell<FixedSize>(2, npts, pts));
1161 TEST_ASSERT(cellArray->GetNextCell(npts, pts) == 0);
1164template <
bool FixedSize>
1169 FillCellArray<FixedSize>(cellArray);
1172 cellArray->InitTraversal();
1183template <
bool FixedSize>
1188 FillCellArray<FixedSize>(cellArray);
1190 auto validate = [&](
const vtkIdType cellId)
1194 cellArray->GetCellAtId(cellId, npts, pts);
1195 TEST_ASSERT(ValidateCell<FixedSize>(cellId, npts, pts));
1198 cellArray->GetCellAtId(cellId, ids);
1207template <
bool FixedSize>
1212 FillCellArray<FixedSize>(cellArray);
1214 TEST_ASSERT(cellArray->GetCellSize(1) == GetCellIds<FixedSize>(1)->GetNumberOfIds());
1215 TEST_ASSERT(cellArray->GetCellSize(0) == GetCellIds<FixedSize>(0)->GetNumberOfIds());
1216 TEST_ASSERT(cellArray->GetCellSize(2) == GetCellIds<FixedSize>(2)->GetNumberOfIds());
1219template <
bool FixedSize>
1226 auto ids0 = GetCellIds<FixedSize>(0);
1227 TEST_ASSERT(cellArray->InsertNextCell(ids0) == 0);
1230 TEST_ASSERT(cellArray->InsertNextCell({ 3, 4, 5 }) == 1);
1233 auto ids2 = GetCellIds<FixedSize>(2);
1234 TEST_ASSERT(cellArray->InsertNextCell(ids2->GetNumberOfIds(), ids2->GetPointer(0)) == 2);
1238 auto ids3 = triangle->GetPointIds();
1242 TEST_ASSERT(cellArray->InsertNextCell(triangle) == 3);
1248 cellArray->GetCellAtId(0, npts, pts);
1249 TEST_ASSERT(ValidateCell<FixedSize>(0, npts, pts));
1250 cellArray->GetCellAtId(1, npts, pts);
1251 TEST_ASSERT(ValidateCell<FixedSize>(1, npts, pts));
1252 cellArray->GetCellAtId(2, npts, pts);
1253 TEST_ASSERT(ValidateCell<FixedSize>(2, npts, pts));
1254 cellArray->GetCellAtId(3, npts, pts);
1261template <
bool FixedSize>
1266 auto ids0 = GetCellIds<FixedSize>(0);
1267 TEST_ASSERT(cellArray->InsertNextCell(ids0->GetNumberOfIds()) == 0);
1268 for (
vtkIdType i = 0; i < ids0->GetNumberOfIds(); ++i)
1270 cellArray->InsertCellPoint(ids0->GetId(i));
1272 auto ids1 = GetCellIds<FixedSize>(1);
1273 TEST_ASSERT(cellArray->InsertNextCell(ids1->GetNumberOfIds()) == 1);
1274 for (
vtkIdType i = 0; i < ids1->GetNumberOfIds(); ++i)
1276 cellArray->InsertCellPoint(ids1->GetId(i));
1278 auto ids2 = GetCellIds<FixedSize>(2);
1280 cellArray->InsertCellPoint(ids2->GetId(0));
1281 cellArray->UpdateCellCount(ids2->GetNumberOfIds());
1282 for (
vtkIdType i = 1; i < ids2->GetNumberOfIds(); ++i)
1284 cellArray->InsertCellPoint(ids2->GetId(i));
1287 ValidateCellArray<FixedSize>(cellArray);
1290template <
bool FixedSize>
1295 FillCellArray<FixedSize>(cellArray);
1297 auto validate = [&](
const vtkIdType cellId,
bool reverse)
1301 cellArray->GetCellAtId(cellId, npts, pts);
1302 TEST_ASSERT(ValidateCell<FixedSize>(cellId, npts, pts, reverse));
1309 cellArray->ReverseCellAtId(2);
1315 cellArray->ReverseCellAtId(0);
1322template <
bool FixedSize>
1327 FillCellArray<FixedSize>(cellArray);
1329 auto validate = [&](
const vtkIdType cellId,
bool reverse)
1333 cellArray->GetCellAtId(cellId, npts, pts);
1334 TEST_ASSERT(ValidateCell<FixedSize>(cellId, npts, pts, reverse));
1342 auto id2Reverse = GetCellIds<FixedSize>(2,
true);
1343 cellArray->ReplaceCellAtId(2, id2Reverse);
1351 auto id0 = GetCellIds<FixedSize>(0,
true);
1352 cellArray->ReplaceCellAtId(0, id0->GetNumberOfIds(), id0->GetPointer(0));
1359 cellArray->ReplaceCellAtId(1, { 5, 4, 3 });
1366template <
bool FixedSize>
1371 auto ids0 = GetCellIds<FixedSize>(0);
1372 auto ids1 = GetCellIds<FixedSize>(1);
1373 auto ids2 = GetCellIds<FixedSize>(2);
1376 cellArray->InsertNextCell(ids0);
1377 TEST_ASSERT(cellArray->GetMaxCellSize() == ids0->GetNumberOfIds());
1378 cellArray->InsertNextCell(ids1);
1379 TEST_ASSERT(cellArray->GetMaxCellSize() == ids0->GetNumberOfIds());
1380 cellArray->InsertNextCell(ids2);
1381 TEST_ASSERT(cellArray->GetMaxCellSize() == ids2->GetNumberOfIds());
1384template <
bool FixedSize>
1389 FillCellArray<FixedSize>(cellArray);
1392 other->DeepCopy(cellArray);
1394 TEST_ASSERT(cellArray->GetStorageType() == other->GetStorageType());
1395 ValidateCellArray<FixedSize>(other);
1397 cellArray->InsertNextCell({ 0, 1, 2 });
1398 TEST_ASSERT(cellArray->GetNumberOfCells() == other->GetNumberOfCells() + 1);
1401template <
bool FixedSize>
1406 FillCellArray<FixedSize>(cellArray);
1409 other->ShallowCopy(cellArray);
1411 TEST_ASSERT(cellArray->GetStorageType() == other->GetStorageType());
1412 ValidateCellArray<FixedSize>(other);
1414 cellArray->InsertNextCell({ 0, 1, 2 });
1415 TEST_ASSERT(cellArray->GetNumberOfCells() == other->GetNumberOfCells());
1416 TEST_ASSERT(cellArray->GetOffsetsArray() == other->GetOffsetsArray());
1417 TEST_ASSERT(cellArray->GetConnectivityArray() == other->GetConnectivityArray());
1420template <
bool FixedSize>
1423 FillCellArray<FixedSize>(first,
false);
1425 FillCellArray<FixedSize>(second,
true);
1428 concat->DeepCopy(first);
1429 concat->Append(second, 10);
1436 concat->GetCellAtId(cellId, npts, pts);
1437 vtkIdType cellIdQuery = cellId < 3 ? cellId : cellId % 3;
1438 TEST_ASSERT(ValidateCell<FixedSize>(cellIdQuery, npts, pts, reverse, offset));
1441 validate(0,
false, 0);
1442 validate(1,
false, 0);
1443 validate(2,
false, 0);
1445 validate(3,
true, 10);
1446 validate(4,
true, 10);
1447 validate(5,
true, 10);
1450template <
bool FixedSize>
1454 TestAppendImpl<FixedSize>(cellArray, CellArrayFactory<vtkCellArray::Int32>::New());
1457template <
bool FixedSize>
1461 TestAppendImpl<FixedSize>(cellArray, CellArrayFactory<vtkCellArray::Int64>::New());
1464template <
bool FixedSize>
1469 FillCellArray<FixedSize>(cellArray);
1472 cellArray->ExportLegacyFormat(legacy);
1475 std::vector<vtkIdType> expected;
1476 for (
int i = 0; i < 3; ++i)
1478 auto ids = GetCellIds<FixedSize>(i);
1479 expected.push_back(ids->GetNumberOfIds());
1480 for (
vtkIdType j = 0; j < ids->GetNumberOfIds(); ++j)
1482 expected.push_back(ids->GetId(j));
1486 TEST_ASSERT(std::equal(expected.cbegin(), expected.cend(), legacyRange.cbegin()));
1489 cellArray->Initialize();
1490 cellArray->ImportLegacyFormat(legacy);
1496 cellArray->GetCellAtId(cellId, npts, pts);
1497 vtkIdType cellIdQuery = cellId < 3 ? cellId : cellId % 3;
1498 TEST_ASSERT(ValidateCell<FixedSize>(cellIdQuery, npts, pts,
false, offset));
1507 cellArray->InsertNextCell(GetCellIds<FixedSize>(0,
true));
1508 cellArray->ImportLegacyFormat(legacy->
GetPointer(0), legacy->GetNumberOfTuples());
1515 cellArray->AppendLegacyFormat(legacy, 10);
1525 cellArray->AppendLegacyFormat(legacy->
GetPointer(0), legacy->GetNumberOfTuples(), 20);
1541 switch (storageType)
1548 return "FixedSizeInt64";
1550 return "FixedSizeInt32";
1560 vtkLogScopeF(INFO,
"Testing %s storage.", StorageTypeToString(StorageType));
1562 TestAllocate(CellArrayFactory<StorageType, ArrayTypes...>::New());
1563 TestResize(CellArrayFactory<StorageType, ArrayTypes...>::New());
1564 TestInitialize(CellArrayFactory<StorageType, ArrayTypes...>::New());
1565 TestReset(CellArrayFactory<StorageType, ArrayTypes...>::New());
1569 TestSqueeze<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1571 TestIsValidOffsets<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1573 TestIsValidConnectivity<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1575 TestGetNumberOfCells<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1576 TestGetNumberOfOffsets<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1577 TestGetNumberOfConnectivityIds<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1579 TestNewIterator<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1580 TestSetData(CellArrayFactory<StorageType, ArrayTypes...>::New());
1582 TestIsStorage64Bit(CellArrayFactory<StorageType, ArrayTypes...>::New());
1583 TestIsStorage32Bit(CellArrayFactory<StorageType, ArrayTypes...>::New());
1584 TestIsStorageFixedSize64Bit(CellArrayFactory<StorageType, ArrayTypes...>::New());
1585 TestIsStorageFixedSize32Bit(CellArrayFactory<StorageType, ArrayTypes...>::New());
1586 TestIsStorageGeneric(CellArrayFactory<StorageType, ArrayTypes...>::New());
1588 TestUse32BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1589 TestUse64BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1590 TestUseDefaultStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1591 TestUseFixedSize32BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1592 TestUseFixedSize64BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1593 TestUseFixedSizeDefaultStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1595 TestCanConvertTo32BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1596 TestCanConvertTo64BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1597 TestCanConvertToFixedSize32BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1598 TestCanConvertToFixedSize64BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1600 TestConvertTo32BitStorage<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1601 TestConvertTo64BitStorage<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1602 TestConvertToFixedSize32BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1603 TestConvertToFixedSize64BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1605 TestGetOffsetsArray(CellArrayFactory<StorageType, ArrayTypes...>::New());
1606 TestGetConnectivityArray(CellArrayFactory<StorageType, ArrayTypes...>::New());
1608 TestIsHomogeneous<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1610 TestTraversalSizePointer<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1611 TestTraversalIdList<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1613 TestGetCellAtId<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1614 TestGetCellSize<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1616 TestInsertNextCell<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1617 TestIncrementalCellInsertion<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1619 TestReverseCellAtId<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1620 TestReplaceCellAtId<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1622 TestGetMaxCellSize<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1624 TestDeepCopy<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1625 TestShallowCopy<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1627 TestAppend32<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1628 TestAppend64<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1630 TestLegacyFormatImportExportAppend<FixedSize>(
1631 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.
static vtkAbstractArray * SafeDownCast(vtkObjectBase *o)
vtkTypeList::Create< vtkAOSDataArrayTemplate< vtkTypeInt32 >, vtkAOSDataArrayTemplate< vtkTypeInt64 > > ConnectivityArrays
List of possible array types used for storage of vtkCellArray.
vtkTypeList::Create< vtkAOSDataArrayTemplate< vtkTypeInt32 >, vtkAOSDataArrayTemplate< vtkTypeInt64 >, vtkAffineArray< vtkTypeInt32 >, vtkAffineArray< vtkTypeInt64 > > OffsetsArrays
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
static vtkImplicitArray< vtkAffineImplicitBackend< T >, ArrayType > * FastDownCast(vtkAbstractArray *source)
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.
VTK_ITER_INLINE auto DataArrayValueRange(const ArrayTypePtr &array, ValueIdType start=-1, ValueIdType end=-1) -> typename detail::SelectValueRange< ArrayTypePtr, TupleSize, ForceValueTypeForVtkDataArray >::type
Generate an stl and for-range compatible range of flat AOS iterators from a vtkDataArray.
vtkImplicitArray< vtkAffineImplicitBackend< T >, vtkArrayTypes::VTK_AFFINE_ARRAY > vtkAffineArray
A utility alias for wrapping affine functions in implicit arrays.
STL-compatible iterable ranges that provide access to vtkDataArray elements.
#define vtkLogScopeF(verbosity_name,...)
#define vtkLogScopeFunction(verbosity_name)