VTK  9.5.20251109
TestCellArrayHelpers.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
3
4#include "vtkCellArray.h"
5
6#include "MockDataArray.h"
7#include "vtkArrayDispatch.h"
10#include "vtkDataArrayRange.h"
11#include "vtkIdList.h"
12#include "vtkIdTypeArray.h"
13#include "vtkImplicitArray.h"
14#include "vtkIntArray.h"
15#include "vtkLogger.h"
16#include "vtkLongArray.h"
17#include "vtkLongLongArray.h"
18#include "vtkNew.h"
19#include "vtkPolyData.h"
21#include "vtkSmartPointer.h"
22#include "vtkTriangle.h"
23
24#include <algorithm>
25#include <initializer_list>
26#include <stdexcept>
27#include <type_traits>
28
29namespace
30{
31
32[[noreturn]] void ThrowAssertError(const std::string& msg)
33{
34 // You can set breakpoints here:
35 throw std::runtime_error(msg);
36}
37
38#define TEST_ASSERT(cond) \
39 do \
40 { \
41 std::cout << "=> Check " << #cond << " ... "; \
42 if (!(cond)) \
43 { \
44 std::cout << "false" << std::endl; \
45 ThrowAssertError(vtkQuoteMacro(__FILE__) ":" vtkQuoteMacro( \
46 __LINE__) ": test assertion failed: (" #cond ")"); \
47 } \
48 std::cout << "true" << std::endl; \
49 } while (false)
50
51template <vtkCellArray::StorageTypes StorageType, typename... ArrayTypes>
52struct CellArrayFactory
53{
54 static vtkSmartPointer<vtkCellArray> New() { return nullptr; }
55};
56
57template <>
58struct CellArrayFactory<vtkCellArray::StorageTypes::Int32>
59{
61 {
62 auto cellArray = vtkSmartPointer<vtkCellArray>::New();
63 cellArray->Use32BitStorage();
64 TEST_ASSERT(cellArray->GetStorageType() == vtkCellArray::StorageTypes::Int32);
65 return cellArray;
66 }
67};
68
69template <>
70struct CellArrayFactory<vtkCellArray::StorageTypes::Int64>
71{
73 {
74 auto cellArray = vtkSmartPointer<vtkCellArray>::New();
75 cellArray->Use64BitStorage();
76 TEST_ASSERT(cellArray->GetStorageType() == vtkCellArray::StorageTypes::Int64);
77 return cellArray;
78 }
79};
80
81template <>
82struct CellArrayFactory<vtkCellArray::StorageTypes::FixedSizeInt32>
83{
85 {
86 auto cellArray = vtkSmartPointer<vtkCellArray>::New();
87 cellArray->UseFixedSize32BitStorage(3);
88 TEST_ASSERT(cellArray->GetStorageType() == vtkCellArray::StorageTypes::FixedSizeInt32);
89 return cellArray;
90 }
91};
92
93template <>
94struct CellArrayFactory<vtkCellArray::StorageTypes::FixedSizeInt64>
95{
97 {
98 auto cellArray = vtkSmartPointer<vtkCellArray>::New();
99 cellArray->UseFixedSize64BitStorage(3);
100 TEST_ASSERT(cellArray->GetStorageType() == vtkCellArray::StorageTypes::FixedSizeInt64);
101 return cellArray;
102 }
103};
104
105struct DummyWorker
106{
107 template <typename OffsetsT, typename ConnectivityT>
108 [[maybe_unused]] void operator()(OffsetsT*, ConnectivityT*)
109 {
110 void();
111 }
112};
113
114template <typename ConnectivityArrayT, typename OffsetsArrayT>
115struct CellArrayFactory<vtkCellArray::StorageTypes::Generic, ConnectivityArrayT, OffsetsArrayT>
116{
118 {
119 using OffsetsValueT = typename OffsetsArrayT::ValueType;
120 auto cellArray = vtkSmartPointer<vtkCellArray>::New();
121 // By passing array types which are NOT in vtkCellArray::InputArrayList,
122 // vtkCellArray can be put into the "Generic" storage mode.
123 vtkNew<ConnectivityArrayT> placeholderConn;
124 vtkNew<OffsetsArrayT> placeholderOffsets;
125 if (auto countingOffsets = vtkAffineArray<OffsetsValueT>::FastDownCast(placeholderOffsets))
126 {
127 countingOffsets->ConstructBackend(3, 0);
128 }
129 // initialize the offsets array with one element i.e, number of elements in the connectivity.
130 placeholderOffsets->InsertNextValue(0);
131 cellArray->SetData(placeholderOffsets, placeholderConn);
132 DummyWorker worker;
133 using Dispatcher =
136 // Ensure that the arrays are indeed not in the InputArrayList
137 if (!Dispatcher::Execute(
138 cellArray->GetOffsetsArray(), cellArray->GetConnectivityArray(), worker))
139 {
140 TEST_ASSERT(cellArray->GetStorageType() == vtkCellArray::StorageTypes::Generic);
141 }
142 else
143 {
144 TEST_ASSERT(cellArray->GetStorageType() != vtkCellArray::StorageTypes::Generic);
145 }
146 return cellArray;
147 }
148};
149
150template <bool FixedSize>
151vtkSmartPointer<vtkIdList> GetCellIds(vtkIdType cellId, bool reverse = false, vtkIdType offset = 0)
152{
154 if (FixedSize)
155 {
156 if (cellId == 0)
157 {
158 ids->InsertNextId(0);
159 ids->InsertNextId(1);
160 ids->InsertNextId(2);
161 }
162 else if (cellId == 1)
163 {
164 ids->InsertNextId(3);
165 ids->InsertNextId(4);
166 ids->InsertNextId(5);
167 }
168 else if (cellId == 2)
169 {
170 ids->InsertNextId(7);
171 ids->InsertNextId(8);
172 ids->InsertNextId(9);
173 }
174 else
175 {
176 throw std::runtime_error("Invalid cellId");
177 }
178 }
179 else
180 {
181 if (cellId == 0)
182 {
183 ids->InsertNextId(0);
184 ids->InsertNextId(1);
185 ids->InsertNextId(2);
186 ids->InsertNextId(3);
187 ids->InsertNextId(4);
188 }
189 else if (cellId == 1)
190 {
191 ids->InsertNextId(3);
192 ids->InsertNextId(4);
193 ids->InsertNextId(5);
194 }
195 else if (cellId == 2)
196 {
197 ids->InsertNextId(7);
198 ids->InsertNextId(8);
199 ids->InsertNextId(9);
200 ids->InsertNextId(4);
201 ids->InsertNextId(2);
202 ids->InsertNextId(1);
203 }
204 else
205 {
206 throw std::runtime_error("Invalid cellId");
207 }
208 }
209 if (reverse)
210 {
211 std::reverse(ids->begin(), ids->end());
212 }
213 if (offset > 0)
214 {
215 for (vtkIdType i = 0; i < ids->GetNumberOfIds(); ++i)
216 {
217 ids->SetId(i, ids->GetId(i) + offset);
218 }
219 }
220 return ids;
221}
222
223template <bool FixedSize>
224void FillCellArray(vtkCellArray* cellArray, bool reverse = false)
225{
226 cellArray->InsertNextCell(GetCellIds<FixedSize>(0, reverse));
227 cellArray->InsertNextCell(GetCellIds<FixedSize>(1, reverse));
228 cellArray->InsertNextCell(GetCellIds<FixedSize>(2, reverse));
229}
230
231template <bool FixedSize>
232bool ValidateCell(vtkIdType cellId, vtkIdType npts, const vtkIdType* pts, bool reverse = false,
233 vtkIdType offset = 0)
234{
235 auto ids = GetCellIds<FixedSize>(cellId, reverse, offset);
236 TEST_ASSERT(npts == ids->GetNumberOfIds());
237 bool equal = true;
238 for (vtkIdType i = 0; i < npts; ++i)
239 {
240 equal &= pts[i] == ids->GetId(i);
241 }
242 return equal;
243}
244
245template <bool FixedSize>
246void ValidateCellArray(vtkCellArray* cellArray, bool reverse = false, vtkIdType offset = 0)
247{
248 vtkIdType npts;
249 const vtkIdType* pts;
250 auto it = vtk::TakeSmartPointer(cellArray->NewIterator());
251 it->GoToFirstCell();
252
253 for (int i = 0; i < 3; ++i)
254 {
255 TEST_ASSERT(!it->IsDoneWithTraversal());
256 it->GetCurrentCell(npts, pts);
257 TEST_ASSERT(ValidateCell<FixedSize>(i, npts, pts, reverse, offset));
258 it->GoToNextCell();
259 }
260
261 TEST_ASSERT(it->IsDoneWithTraversal());
262}
263
264void TestAllocate(vtkSmartPointer<vtkCellArray> cellArray)
265{
267
268 cellArray->Initialize();
269 cellArray->AllocateEstimate(100, 4);
270 TEST_ASSERT(cellArray->GetOffsetsArray()->GetSize() == 101);
271 TEST_ASSERT(cellArray->GetConnectivityArray()->GetSize() == 400);
272
273 cellArray->Initialize();
274 cellArray->AllocateExact(100, 256);
275 TEST_ASSERT(cellArray->GetOffsetsArray()->GetSize() == 101);
276 TEST_ASSERT(cellArray->GetConnectivityArray()->GetSize() == 256);
277}
278
279void TestResize(vtkSmartPointer<vtkCellArray> cellArray)
280{
282
283 cellArray->Initialize();
284 cellArray->ResizeExact(128, 256);
285 TEST_ASSERT(cellArray->GetOffsetsArray()->GetNumberOfValues() == 129);
286 TEST_ASSERT(cellArray->GetConnectivityArray()->GetNumberOfValues() == 256);
287}
288
289void TestInitialize(vtkSmartPointer<vtkCellArray> cellArray)
290{
292
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);
300}
301
302template <bool FixedSize>
303void TestSqueeze(vtkSmartPointer<vtkCellArray> cellArray)
304{
306
307 cellArray->Initialize();
308 cellArray->AllocateExact(128, 256);
309
310 FillCellArray<FixedSize>(cellArray);
311
312 cellArray->Squeeze();
313
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));
318
319 TEST_ASSERT(cellArray->GetNumberOfCells() == 3);
320 ValidateCellArray<FixedSize>(cellArray);
321}
322
323void TestReset(vtkSmartPointer<vtkCellArray> cellArray)
324{
326
327 cellArray->Initialize();
328 cellArray->ResizeExact(128, 256);
329 cellArray->Reset();
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);
334}
335
336template <bool FixedSize>
337void TestIsValidOffsets(vtkSmartPointer<vtkCellArray> cellArray)
338{
340
341 TEST_ASSERT(cellArray->IsValid());
342 FillCellArray<FixedSize>(cellArray);
343 TEST_ASSERT(cellArray->IsValid());
344
345 cellArray->GetOffsetsArray()->Reset();
346 TEST_ASSERT(!cellArray->IsValid());
347 // This should reuse the old buffer:
348 cellArray->GetOffsetsArray()->SetNumberOfValues(4);
349 TEST_ASSERT(cellArray->IsValid());
350
351 cellArray->GetOffsetsArray()->SetComponent(1, 0, 5);
352 cellArray->GetOffsetsArray()->SetComponent(2, 0, 3);
353 TEST_ASSERT(!cellArray->IsValid());
354 cellArray->GetOffsetsArray()->SetComponent(1, 0, 3);
355 cellArray->GetOffsetsArray()->SetComponent(2, 0, 5);
356 TEST_ASSERT(cellArray->IsValid());
357}
358
359template <bool FixedSize>
360void TestIsValidConnectivity(vtkSmartPointer<vtkCellArray> cellArray)
361{
363
364 TEST_ASSERT(cellArray->IsValid());
365 FillCellArray<FixedSize>(cellArray);
366 TEST_ASSERT(cellArray->IsValid());
367
368 cellArray->GetConnectivityArray()->SetNumberOfValues(5);
369 TEST_ASSERT(!cellArray->IsValid());
370 cellArray->GetConnectivityArray()->SetNumberOfValues(4);
371 TEST_ASSERT(!cellArray->IsValid());
372 cellArray->GetConnectivityArray()->SetNumberOfValues(FixedSize ? 9 : 14);
373 TEST_ASSERT(cellArray->IsValid());
374}
375
376template <bool FixedSize>
377void TestGetNumberOfCells(vtkSmartPointer<vtkCellArray> cellArray)
378{
380
381 TEST_ASSERT(cellArray->GetNumberOfCells() == 0);
382
383 cellArray->Initialize();
384
385 TEST_ASSERT(cellArray->GetNumberOfCells() == 0);
386
387 FillCellArray<FixedSize>(cellArray);
388
389 TEST_ASSERT(cellArray->GetNumberOfCells() == 3);
390
391 cellArray->Initialize();
392
393 TEST_ASSERT(cellArray->GetNumberOfCells() == 0);
394}
395
396template <bool FixedSize>
397void TestGetNumberOfOffsets(vtkSmartPointer<vtkCellArray> cellArray)
398{
400
401 TEST_ASSERT(cellArray->GetNumberOfOffsets() == 1);
402
403 cellArray->Initialize();
404
405 TEST_ASSERT(cellArray->GetNumberOfOffsets() == 1);
406
407 FillCellArray<FixedSize>(cellArray);
408
409 TEST_ASSERT(cellArray->GetNumberOfOffsets() == 4);
410
411 cellArray->Initialize();
412
413 TEST_ASSERT(cellArray->GetNumberOfOffsets() == 1);
414}
415
416template <bool FixedSize>
417void TestGetNumberOfConnectivityIds(vtkSmartPointer<vtkCellArray> cellArray)
418{
420
421 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
422
423 cellArray->Initialize();
424
425 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
426
427 FillCellArray<FixedSize>(cellArray);
428
429 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == (FixedSize ? 9 : 14));
430
431 cellArray->Initialize();
432
433 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
434}
435
436template <bool FixedSize>
437void TestNewIterator(vtkSmartPointer<vtkCellArray> cellArray)
438{
440
441 {
442 auto iter = vtk::TakeSmartPointer(cellArray->NewIterator());
443 TEST_ASSERT(iter->IsDoneWithTraversal());
444 iter->GoToFirstCell();
445 TEST_ASSERT(iter->IsDoneWithTraversal());
446 }
447
448 cellArray->Initialize();
449
450 {
451 auto iter = vtk::TakeSmartPointer(cellArray->NewIterator());
452 TEST_ASSERT(iter->IsDoneWithTraversal());
453 iter->GoToFirstCell();
454 TEST_ASSERT(iter->IsDoneWithTraversal());
455 }
456
457 FillCellArray<FixedSize>(cellArray);
458
459 ValidateCellArray<FixedSize>(cellArray);
460
461 cellArray->Initialize();
462
463 {
464 auto iter = vtk::TakeSmartPointer(cellArray->NewIterator());
465 TEST_ASSERT(iter->IsDoneWithTraversal());
466 iter->GoToFirstCell();
467 TEST_ASSERT(iter->IsDoneWithTraversal());
468 }
469}
470
471template <typename OffsetsArrayType, typename ConnectivityArrayType>
472void TestSetDataImpl(vtkSmartPointer<vtkCellArray> cellArray, bool checkNoCopy)
473{
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); // copy config settings
480
482 if (auto countingOffsets = vtkAffineArray<OffsetsValueType>::SafeDownCast(offsets))
483 {
484 countingOffsets->ConstructBackend(GetCellIds<FixedSize>(0)->GetNumberOfIds(), 0);
485 }
487 offsets->InsertNextValue(0);
488 for (vtkIdType i = 0; i < 3; ++i)
489 {
490 auto ids = GetCellIds<FixedSize>(i);
491 offsets->InsertNextValue(offsets->GetValue(i) + ids->GetNumberOfIds());
492 for (vtkIdType j = 0; j < ids->GetNumberOfIds(); ++j)
493 {
494 conn->InsertNextValue(ids->GetId(j));
495 }
496 }
497 test->SetData(offsets, conn);
498
499 if (std::is_base_of_v<vtkAOSDataArrayTemplate<OffsetsValueType>, OffsetsArrayType> &&
500 std::is_base_of_v<vtkAOSDataArrayTemplate<ConnectivityValueType>, ConnectivityArrayType>)
501 {
502 if (sizeof(OffsetsValueType) == 4 && sizeof(ConnectivityValueType) == 4)
503 {
504 TEST_ASSERT(!test->IsStorage64Bit());
505 TEST_ASSERT(test->IsStorage32Bit());
506 TEST_ASSERT(!test->IsStorageFixedSize64Bit());
507 TEST_ASSERT(!test->IsStorageFixedSize32Bit());
508 TEST_ASSERT(!test->IsStorageGeneric());
509 }
510 else
511 {
512 TEST_ASSERT(test->IsStorage64Bit());
513 TEST_ASSERT(!test->IsStorage32Bit());
514 TEST_ASSERT(!test->IsStorageFixedSize64Bit());
515 TEST_ASSERT(!test->IsStorageFixedSize32Bit());
516 TEST_ASSERT(!test->IsStorageGeneric());
517 }
518 }
519 else if (std::is_base_of_v<vtkAffineArray<OffsetsValueType>, OffsetsArrayType> &&
520 std::is_base_of_v<vtkAOSDataArrayTemplate<ConnectivityValueType>, ConnectivityArrayType>)
521 {
522 if (sizeof(OffsetsValueType) == 4 && sizeof(ConnectivityValueType) == 4)
523 {
524 TEST_ASSERT(!test->IsStorage64Bit());
525 TEST_ASSERT(!test->IsStorage32Bit());
526 TEST_ASSERT(test->IsStorageFixedSize32Bit());
527 TEST_ASSERT(!test->IsStorageFixedSize64Bit());
528 TEST_ASSERT(!test->IsStorageGeneric());
529 }
530 else
531 {
532 TEST_ASSERT(!test->IsStorage64Bit());
533 TEST_ASSERT(!test->IsStorage32Bit());
534 TEST_ASSERT(test->IsStorageFixedSize64Bit());
535 TEST_ASSERT(!test->IsStorageFixedSize32Bit());
536 TEST_ASSERT(!test->IsStorageGeneric());
537 }
538 }
539 else
540 {
541 TEST_ASSERT(!test->IsStorage64Bit());
542 TEST_ASSERT(!test->IsStorage32Bit());
543 TEST_ASSERT(!test->IsStorageFixedSize64Bit());
544 TEST_ASSERT(!test->IsStorageFixedSize32Bit());
545 TEST_ASSERT(test->IsStorageGeneric());
546 }
547
548 if (checkNoCopy)
549 {
550 TEST_ASSERT(test->GetConnectivityArray()->GetVoidPointer(0) == conn->GetPointer(0));
551 if (!std::is_base_of_v<vtkAffineArray<OffsetsValueType>, OffsetsArrayType>)
552 {
553 TEST_ASSERT(test->GetOffsetsArray()->GetVoidPointer(0) == offsets->GetPointer(0));
554 }
555 }
556
557 TEST_ASSERT(test->GetNumberOfCells() == 3);
558 TEST_ASSERT(test->GetNumberOfConnectivityIds() == (FixedSize ? 9 : 14));
559 TEST_ASSERT(test->GetNumberOfOffsets() == 4);
560 {
561 ValidateCellArray<FixedSize>(test);
562 }
563}
564
565void TestSetData(vtkSmartPointer<vtkCellArray> cellArray)
566{
568
569 // These are documented to not deep copy the input arrays.
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);
576
577 // These should work, but may deep copy:
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);
588
589 // These are documented to not deep copy the input arrays.
590 TestSetDataImpl<MockDataArray<vtkTypeUInt8>, MockDataArray<vtkTypeUInt8>>(cellArray, true);
591 TestSetDataImpl<MockDataArray<vtkTypeUInt8>, MockDataArray<vtkTypeUInt16>>(cellArray, true);
592 TestSetDataImpl<MockDataArray<vtkTypeUInt8>, MockDataArray<vtkTypeUInt32>>(cellArray, true);
593 TestSetDataImpl<MockDataArray<vtkTypeUInt8>, MockDataArray<vtkTypeUInt64>>(cellArray, true);
594 TestSetDataImpl<MockDataArray<vtkTypeUInt16>, MockDataArray<vtkTypeUInt8>>(cellArray, true);
595 TestSetDataImpl<MockDataArray<vtkTypeUInt16>, MockDataArray<vtkTypeUInt16>>(cellArray, true);
596 TestSetDataImpl<MockDataArray<vtkTypeUInt16>, MockDataArray<vtkTypeUInt32>>(cellArray, true);
597 TestSetDataImpl<MockDataArray<vtkTypeUInt16>, MockDataArray<vtkTypeUInt64>>(cellArray, true);
598 TestSetDataImpl<MockDataArray<vtkTypeUInt32>, MockDataArray<vtkTypeUInt8>>(cellArray, true);
599 TestSetDataImpl<MockDataArray<vtkTypeUInt32>, MockDataArray<vtkTypeUInt16>>(cellArray, true);
600 TestSetDataImpl<MockDataArray<vtkTypeUInt32>, MockDataArray<vtkTypeUInt32>>(cellArray, true);
601 TestSetDataImpl<MockDataArray<vtkTypeUInt32>, MockDataArray<vtkTypeUInt64>>(cellArray, true);
602 TestSetDataImpl<MockDataArray<vtkTypeUInt64>, MockDataArray<vtkTypeUInt8>>(cellArray, true);
603 TestSetDataImpl<MockDataArray<vtkTypeUInt64>, MockDataArray<vtkTypeUInt16>>(cellArray, true);
604 TestSetDataImpl<MockDataArray<vtkTypeUInt64>, MockDataArray<vtkTypeUInt32>>(cellArray, true);
605 TestSetDataImpl<MockDataArray<vtkTypeUInt64>, MockDataArray<vtkTypeUInt64>>(cellArray, true);
606
607 TestSetDataImpl<MockDataArray<vtkTypeInt16>, MockDataArray<vtkTypeUInt8>>(cellArray, true);
608 TestSetDataImpl<MockDataArray<vtkTypeInt16>, MockDataArray<vtkTypeUInt16>>(cellArray, true);
609 TestSetDataImpl<MockDataArray<vtkTypeInt16>, MockDataArray<vtkTypeUInt32>>(cellArray, true);
610 TestSetDataImpl<MockDataArray<vtkTypeInt16>, MockDataArray<vtkTypeUInt64>>(cellArray, true);
611 TestSetDataImpl<MockDataArray<vtkTypeInt32>, MockDataArray<vtkTypeUInt8>>(cellArray, true);
612 TestSetDataImpl<MockDataArray<vtkTypeInt32>, MockDataArray<vtkTypeUInt16>>(cellArray, true);
613 TestSetDataImpl<MockDataArray<vtkTypeInt32>, MockDataArray<vtkTypeUInt32>>(cellArray, true);
614 TestSetDataImpl<MockDataArray<vtkTypeInt32>, MockDataArray<vtkTypeUInt64>>(cellArray, true);
615 TestSetDataImpl<MockDataArray<vtkTypeInt64>, MockDataArray<vtkTypeUInt8>>(cellArray, true);
616 TestSetDataImpl<MockDataArray<vtkTypeInt64>, MockDataArray<vtkTypeUInt16>>(cellArray, true);
617 TestSetDataImpl<MockDataArray<vtkTypeInt64>, MockDataArray<vtkTypeUInt32>>(cellArray, true);
618 TestSetDataImpl<MockDataArray<vtkTypeInt64>, MockDataArray<vtkTypeUInt64>>(cellArray, true);
619
620 TestSetDataImpl<MockDataArray<vtkTypeInt16>, MockDataArray<vtkTypeInt16>>(cellArray, true);
621 TestSetDataImpl<MockDataArray<vtkTypeInt16>, MockDataArray<vtkTypeInt32>>(cellArray, true);
622 TestSetDataImpl<MockDataArray<vtkTypeInt16>, MockDataArray<vtkTypeInt64>>(cellArray, true);
623 TestSetDataImpl<MockDataArray<vtkTypeInt32>, MockDataArray<vtkTypeInt16>>(cellArray, true);
624 TestSetDataImpl<MockDataArray<vtkTypeInt32>, MockDataArray<vtkTypeInt32>>(cellArray, true);
625 TestSetDataImpl<MockDataArray<vtkTypeInt32>, MockDataArray<vtkTypeInt64>>(cellArray, true);
626 TestSetDataImpl<MockDataArray<vtkTypeInt64>, MockDataArray<vtkTypeInt16>>(cellArray, true);
627 TestSetDataImpl<MockDataArray<vtkTypeInt64>, MockDataArray<vtkTypeInt32>>(cellArray, true);
628 TestSetDataImpl<MockDataArray<vtkTypeInt64>, MockDataArray<vtkTypeInt64>>(cellArray, true);
629
630 TestSetDataImpl<MockDataArray<vtkTypeUInt8>, MockDataArray<vtkTypeInt16>>(cellArray, true);
631 TestSetDataImpl<MockDataArray<vtkTypeUInt8>, MockDataArray<vtkTypeInt32>>(cellArray, true);
632 TestSetDataImpl<MockDataArray<vtkTypeUInt8>, MockDataArray<vtkTypeInt64>>(cellArray, true);
633 TestSetDataImpl<MockDataArray<vtkTypeUInt16>, MockDataArray<vtkTypeInt16>>(cellArray, true);
634 TestSetDataImpl<MockDataArray<vtkTypeUInt16>, MockDataArray<vtkTypeInt32>>(cellArray, true);
635 TestSetDataImpl<MockDataArray<vtkTypeUInt16>, MockDataArray<vtkTypeInt64>>(cellArray, true);
636 TestSetDataImpl<MockDataArray<vtkTypeUInt32>, MockDataArray<vtkTypeInt16>>(cellArray, true);
637 TestSetDataImpl<MockDataArray<vtkTypeUInt32>, MockDataArray<vtkTypeInt32>>(cellArray, true);
638 TestSetDataImpl<MockDataArray<vtkTypeUInt32>, MockDataArray<vtkTypeInt64>>(cellArray, true);
639 TestSetDataImpl<MockDataArray<vtkTypeUInt64>, MockDataArray<vtkTypeInt16>>(cellArray, true);
640 TestSetDataImpl<MockDataArray<vtkTypeUInt64>, MockDataArray<vtkTypeInt32>>(cellArray, true);
641 TestSetDataImpl<MockDataArray<vtkTypeUInt64>, MockDataArray<vtkTypeInt64>>(cellArray, true);
642}
643
644struct TestIsStorage64BitImpl : public vtkCellArray::DispatchUtilities
645{
646 template <class OffsetsT, class ConnectivityT>
647 void operator()(OffsetsT*, ConnectivityT*, bool expect64Bit) const
648 {
649 using ValueType = GetAPIType<OffsetsT>;
650
651 constexpr bool is64Bit = sizeof(ValueType) == 8 &&
652 std::is_base_of_v<vtkAOSDataArrayTemplate<ValueType>, OffsetsT> &&
653 std::is_base_of_v<vtkAOSDataArrayTemplate<ValueType>, ConnectivityT>;
654
655 TEST_ASSERT(is64Bit == expect64Bit);
656 }
657};
658
659void TestIsStorage64Bit(vtkSmartPointer<vtkCellArray> cellArray)
660{
662
663 cellArray->Dispatch(TestIsStorage64BitImpl{}, cellArray->IsStorage64Bit());
664}
665
666struct TestIsStorage32BitImpl : public vtkCellArray::DispatchUtilities
667{
668 template <class OffsetsT, class ConnectivityT>
669 void operator()(OffsetsT*, ConnectivityT*, bool expect32Bit) const
670 {
671 using ValueType = GetAPIType<OffsetsT>;
672
673 constexpr bool is32Bit = sizeof(ValueType) == 4 &&
674 std::is_base_of_v<vtkAOSDataArrayTemplate<ValueType>, OffsetsT> &&
675 std::is_base_of_v<vtkAOSDataArrayTemplate<ValueType>, ConnectivityT>;
676
677 TEST_ASSERT(is32Bit == expect32Bit);
678 }
679};
680
681void TestIsStorage32Bit(vtkSmartPointer<vtkCellArray> cellArray)
682{
684
685 cellArray->Dispatch(TestIsStorage32BitImpl{}, cellArray->IsStorage32Bit());
686}
687
688struct TestIsStorageFixedSize64BitImpl : public vtkCellArray::DispatchUtilities
689{
690 template <class OffsetsT, class ConnectivityT>
691 void operator()(OffsetsT*, ConnectivityT*, bool expectFixedSize64Bit) const
692 {
693 using ValueType = GetAPIType<OffsetsT>;
694
695 constexpr bool isFixedSize64Bit = sizeof(ValueType) == 8 &&
696 std::is_base_of_v<vtkAffineArray<ValueType>, OffsetsT> &&
697 std::is_base_of_v<vtkAOSDataArrayTemplate<ValueType>, ConnectivityT>;
698
699 TEST_ASSERT(isFixedSize64Bit == expectFixedSize64Bit);
700 }
701};
702
703void TestIsStorageFixedSize32Bit(vtkSmartPointer<vtkCellArray> cellArray)
704{
706
707 cellArray->Dispatch(TestIsStorageFixedSize64BitImpl{}, cellArray->IsStorageFixedSize64Bit());
708}
709
710struct TestIsStorageFixedSize32BitImpl : public vtkCellArray::DispatchUtilities
711{
712 template <class OffsetsT, class ConnectivityT>
713 void operator()(OffsetsT*, ConnectivityT*, bool expectFixedSize32Bit) const
714 {
715 using ValueType = GetAPIType<OffsetsT>;
716
717 constexpr bool isFixedSize32Bit = sizeof(ValueType) == 4 &&
718 std::is_base_of_v<vtkAffineArray<ValueType>, OffsetsT> &&
719 std::is_base_of_v<vtkAOSDataArrayTemplate<ValueType>, ConnectivityT>;
720
721 TEST_ASSERT(isFixedSize32Bit == expectFixedSize32Bit);
722 }
723};
724
725void TestIsStorageFixedSize64Bit(vtkSmartPointer<vtkCellArray> cellArray)
726{
728
729 cellArray->Dispatch(TestIsStorageFixedSize32BitImpl{}, cellArray->IsStorageFixedSize32Bit());
730}
731
732struct TestIsStorageGenericImpl : public vtkCellArray::DispatchUtilities
733{
734 template <class OffsetsT, class ConnectivityT>
735 void operator()(OffsetsT*, ConnectivityT*, bool expectGeneric) const
736 {
737 using ValueType = GetAPIType<OffsetsT>;
738
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>;
743
744 TEST_ASSERT(isGeneric == expectGeneric);
745 }
746};
747
748void TestIsStorageGeneric(vtkSmartPointer<vtkCellArray> cellArray)
749{
751
752 cellArray->Dispatch(TestIsStorageGenericImpl{}, cellArray->IsStorageGeneric());
753}
754
755void TestUse32BitStorage(vtkSmartPointer<vtkCellArray> cellArray)
756{
758
759 // Add some data to make sure that switching storage re-initializes data:
760 FillCellArray<true>(cellArray);
761 cellArray->Use32BitStorage();
762
763 TEST_ASSERT(cellArray->IsStorage32Bit());
764 TEST_ASSERT(cellArray->GetNumberOfOffsets() == 1);
765 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
766}
767
768void TestUse64BitStorage(vtkSmartPointer<vtkCellArray> cellArray)
769{
771
772 // Add some data to make sure that switching storage re-initializes data:
773 FillCellArray<true>(cellArray);
774 cellArray->Use64BitStorage();
775
776 TEST_ASSERT(cellArray->IsStorage64Bit());
777 TEST_ASSERT(cellArray->GetNumberOfOffsets() == 1);
778 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
779}
780
781void TestUseDefaultStorage(vtkSmartPointer<vtkCellArray> cellArray)
782{
784
785 // Add some data to make sure that switching storage re-initializes data:
786 FillCellArray<true>(cellArray);
787 cellArray->UseDefaultStorage();
788
789 TEST_ASSERT(cellArray->IsStorage64Bit() == (sizeof(vtkIdType) == 8));
790 TEST_ASSERT(cellArray->GetNumberOfOffsets() == 1);
791 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
792}
793
794void TestUseFixedSize32BitStorage(vtkSmartPointer<vtkCellArray> cellArray)
795{
797
798 // Add some data to make sure that switching storage re-initializes data:
799 FillCellArray<true>(cellArray);
800 cellArray->UseFixedSize32BitStorage(3);
801
802 TEST_ASSERT(cellArray->IsStorageFixedSize32Bit());
803 TEST_ASSERT(cellArray->GetNumberOfOffsets() == 1);
804 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
805}
806
807void TestUseFixedSize64BitStorage(vtkSmartPointer<vtkCellArray> cellArray)
808{
810
811 // Add some data to make sure that switching storage re-initializes data:
812 FillCellArray<true>(cellArray);
813 cellArray->UseFixedSize64BitStorage(3);
814
815 TEST_ASSERT(cellArray->IsStorageFixedSize64Bit());
816 TEST_ASSERT(cellArray->GetNumberOfOffsets() == 1);
817 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
818}
819
820void TestUseFixedSizeDefaultStorage(vtkSmartPointer<vtkCellArray> cellArray)
821{
823
824 // Add some data to make sure that switching storage re-initializes data:
825 FillCellArray<true>(cellArray);
826 cellArray->UseFixedSizeDefaultStorage(3);
827
828 TEST_ASSERT(cellArray->IsStorageFixedSize64Bit() == (sizeof(vtkIdType) == 8));
829 TEST_ASSERT(cellArray->GetNumberOfOffsets() == 1);
830 TEST_ASSERT(cellArray->GetNumberOfConnectivityIds() == 0);
831}
832
833void TestCanConvertTo32BitStorage(vtkSmartPointer<vtkCellArray> cellArray)
834{
836
837 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
838
839 if (cellArray->IsStorage64Bit())
840 {
841 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
842 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
843
844#ifdef VTK_USE_64BIT_IDS
845 cellArray->InsertNextCell({ 0, 1, static_cast<vtkTypeInt64>(VTK_TYPE_INT32_MAX) + 1 });
846 TEST_ASSERT(!cellArray->CanConvertTo32BitStorage());
847#endif // VTK_USE_64BIT_IDS
848 }
849 else if (cellArray->IsStorage32Bit())
850 {
851 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
852 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
853 }
854 else if (cellArray->IsStorageFixedSize64Bit())
855 {
856 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
857 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
858
859#ifdef VTK_USE_64BIT_IDS
860 cellArray->InsertNextCell({ 0, 1, static_cast<vtkTypeInt64>(VTK_TYPE_INT32_MAX) + 1 });
861 TEST_ASSERT(!cellArray->CanConvertTo32BitStorage());
862#endif // VTK_USE_64BIT_IDS
863 }
864 else
865 {
866 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
867 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
868 }
869}
870
871void TestCanConvertTo64BitStorage(vtkSmartPointer<vtkCellArray> cellArray)
872{
874
875 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
876
877 if (cellArray->IsStorage64Bit())
878 {
879 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
880 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
881
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());
887#endif // VTK_USE_64BIT_IDS
888 }
889 else if (cellArray->IsStorage32Bit())
890 {
891 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
892 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
893 }
894 else if (cellArray->IsStorageFixedSize64Bit())
895 {
896 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
897 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
898
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());
904#endif // VTK_USE_64BIT_IDS
905 }
906 else
907 {
908 cellArray->InsertNextCell({ 0, VTK_TYPE_INT32_MAX });
909 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
910 }
911}
912
913void TestCanConvertToFixedSize32BitStorage(vtkSmartPointer<vtkCellArray> cellArray)
914{
916
917 TEST_ASSERT(cellArray->CanConvertToFixedSize32BitStorage());
918
919 if (cellArray->IsStorage64Bit())
920 {
921 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
922 TEST_ASSERT(cellArray->CanConvertToFixedSize32BitStorage());
923
924#ifdef VTK_USE_64BIT_IDS
925 cellArray->InsertNextCell({ 0, 1, static_cast<vtkTypeInt64>(VTK_TYPE_INT32_MAX) + 1 });
926 TEST_ASSERT(!cellArray->CanConvertToFixedSize32BitStorage());
927#endif // VTK_USE_64BIT_IDS
928 }
929 else if (cellArray->IsStorage32Bit())
930 {
931 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
932 TEST_ASSERT(cellArray->CanConvertToFixedSize32BitStorage());
933 }
934 else if (cellArray->IsStorageFixedSize64Bit())
935 {
936 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
937 TEST_ASSERT(cellArray->CanConvertToFixedSize32BitStorage());
938
939#ifdef VTK_USE_64BIT_IDS
940 cellArray->InsertNextCell({ 0, 1, static_cast<vtkTypeInt64>(VTK_TYPE_INT32_MAX) + 1 });
941 TEST_ASSERT(!cellArray->CanConvertToFixedSize32BitStorage());
942#endif // VTK_USE_64BIT_IDS
943 }
944 else
945 {
946 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
947 TEST_ASSERT(cellArray->CanConvertTo32BitStorage());
948 }
949}
950
951void TestCanConvertToFixedSize64BitStorage(vtkSmartPointer<vtkCellArray> cellArray)
952{
954
955 TEST_ASSERT(cellArray->CanConvertTo64BitStorage());
956
957 if (cellArray->IsStorage64Bit())
958 {
959 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
960 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
961
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());
967#endif // VTK_USE_64BIT_IDS
968 }
969 else if (cellArray->IsStorage32Bit())
970 {
971 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
972 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
973 }
974 else if (cellArray->IsStorageFixedSize64Bit())
975 {
976 cellArray->InsertNextCell({ 0, 1, VTK_TYPE_INT32_MAX });
977 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
978
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());
984#endif // VTK_USE_64BIT_IDS
985 }
986 else
987 {
988 cellArray->InsertNextCell({ 0, VTK_TYPE_INT32_MAX });
989 TEST_ASSERT(cellArray->CanConvertToFixedSize64BitStorage());
990 }
991}
992
993template <bool FixedSize>
994void TestConvertTo32BitStorage(vtkSmartPointer<vtkCellArray> cellArray)
995{
997
998 FillCellArray<FixedSize>(cellArray);
999
1000 TEST_ASSERT(cellArray->ConvertTo32BitStorage());
1001 TEST_ASSERT(cellArray->IsStorage32Bit());
1002
1003 // Ensure that data is still good:
1004 ValidateCellArray<FixedSize>(cellArray);
1005}
1006
1007template <bool FixedSize>
1008void TestConvertTo64BitStorage(vtkSmartPointer<vtkCellArray> cellArray)
1009{
1010 vtkLogScopeFunction(INFO);
1011
1012 FillCellArray<FixedSize>(cellArray);
1013
1014 TEST_ASSERT(cellArray->ConvertTo64BitStorage());
1015 TEST_ASSERT(cellArray->IsStorage64Bit());
1016
1017 // Ensure that data is still good:
1018 ValidateCellArray<FixedSize>(cellArray);
1019}
1020
1021void TestConvertToFixedSize32BitStorage(vtkSmartPointer<vtkCellArray> cellArray)
1022{
1023 vtkLogScopeFunction(INFO);
1024
1025 FillCellArray<true>(cellArray);
1026
1027 TEST_ASSERT(cellArray->ConvertToFixedSize32BitStorage());
1028 TEST_ASSERT(cellArray->IsStorageFixedSize32Bit());
1029
1030 // Ensure that data is still good:
1031 ValidateCellArray<true>(cellArray);
1032}
1033
1034void TestConvertToFixedSize64BitStorage(vtkSmartPointer<vtkCellArray> cellArray)
1035{
1036 vtkLogScopeFunction(INFO);
1037
1038 FillCellArray<true>(cellArray);
1039
1040 TEST_ASSERT(cellArray->ConvertToFixedSize64BitStorage());
1041 TEST_ASSERT(cellArray->IsStorageFixedSize64Bit());
1042
1043 // Ensure that data is still good:
1044 ValidateCellArray<true>(cellArray);
1045}
1046
1047void TestGetOffsetsArray(vtkSmartPointer<vtkCellArray> cellArray)
1048{
1049 vtkLogScopeFunction(INFO);
1050
1051 switch (cellArray->GetStorageType())
1052 {
1054 TEST_ASSERT(cellArray->GetOffsetsArray() == cellArray->GetOffsetsArray64());
1055 break;
1057 TEST_ASSERT(cellArray->GetOffsetsArray() == cellArray->GetOffsetsArray32());
1058 break;
1060 TEST_ASSERT(cellArray->GetOffsetsArray() == cellArray->GetOffsetsAffineArray64());
1061 break;
1063 TEST_ASSERT(cellArray->GetOffsetsArray() == cellArray->GetOffsetsAffineArray32());
1064 break;
1066 default:
1067 TEST_ASSERT(cellArray->GetOffsetsArray() == cellArray->GetOffsetsArray());
1068 break;
1069 }
1070}
1071
1072void TestGetConnectivityArray(vtkSmartPointer<vtkCellArray> cellArray)
1073{
1074 vtkLogScopeFunction(INFO);
1075
1076 switch (cellArray->GetStorageType())
1077 {
1079 TEST_ASSERT(cellArray->GetConnectivityArray() == cellArray->GetConnectivityArray64());
1080 break;
1082 TEST_ASSERT(cellArray->GetConnectivityArray() == cellArray->GetConnectivityArray32());
1083 break;
1085 TEST_ASSERT(cellArray->GetConnectivityArray() == cellArray->GetConnectivityArray64());
1086 break;
1088 TEST_ASSERT(cellArray->GetConnectivityArray() == cellArray->GetConnectivityArray32());
1089 break;
1091 default:
1092 TEST_ASSERT(cellArray->GetConnectivityArray() == cellArray->GetConnectivityArray());
1093 break;
1094 }
1095}
1096
1097template <bool FixedSize>
1098void TestIsHomogeneous(vtkSmartPointer<vtkCellArray> cellArray)
1099{
1100 vtkLogScopeFunction(INFO);
1101
1102 TEST_ASSERT(cellArray->IsHomogeneous() == 0);
1103 cellArray->Initialize();
1104 TEST_ASSERT(cellArray->IsHomogeneous() == 0);
1105
1106 FillCellArray<true>(cellArray);
1107 TEST_ASSERT(cellArray->IsHomogeneous() == 3);
1108
1109 FillCellArray<true>(cellArray);
1110 TEST_ASSERT(cellArray->IsHomogeneous() == 3);
1111
1112 if (!FixedSize)
1113 {
1114 cellArray->InsertNextCell({ 5, 6 });
1115 TEST_ASSERT(cellArray->IsHomogeneous() == -1);
1116 }
1117
1118 cellArray->Initialize();
1119 TEST_ASSERT(cellArray->IsHomogeneous() == 0);
1120}
1121
1122template <bool FixedSize>
1123void TestTraversalSizePointer(vtkSmartPointer<vtkCellArray> cellArray)
1124{
1125 vtkLogScopeFunction(INFO);
1126
1127 FillCellArray<FixedSize>(cellArray);
1128
1129 vtkIdType npts;
1130 const vtkIdType* pts;
1131
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));
1142
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));
1150
1151 TEST_ASSERT(cellArray->GetNextCell(npts, pts) == 0);
1152}
1153
1154template <bool FixedSize>
1155void TestTraversalIdList(vtkSmartPointer<vtkCellArray> cellArray)
1156{
1157 vtkLogScopeFunction(INFO);
1158
1159 FillCellArray<FixedSize>(cellArray);
1160
1162 cellArray->InitTraversal();
1163 TEST_ASSERT(cellArray->GetNextCell(ids) != 0);
1164 TEST_ASSERT(ValidateCell<FixedSize>(0, ids->GetNumberOfIds(), ids->GetPointer(0)));
1165 TEST_ASSERT(cellArray->GetNextCell(ids) != 0);
1166 TEST_ASSERT(ValidateCell<FixedSize>(1, ids->GetNumberOfIds(), ids->GetPointer(0)));
1167 TEST_ASSERT(cellArray->GetNextCell(ids) != 0);
1168 TEST_ASSERT(ValidateCell<FixedSize>(2, ids->GetNumberOfIds(), ids->GetPointer(0)));
1169
1170 TEST_ASSERT(cellArray->GetNextCell(ids) == 0);
1171}
1172
1173template <bool FixedSize>
1174void TestGetCellAtId(vtkSmartPointer<vtkCellArray> cellArray)
1175{
1176 vtkLogScopeFunction(INFO);
1177
1178 FillCellArray<FixedSize>(cellArray);
1179
1180 auto validate = [&](const vtkIdType cellId)
1181 {
1182 vtkIdType npts;
1183 const vtkIdType* pts;
1184 cellArray->GetCellAtId(cellId, npts, pts);
1185 TEST_ASSERT(ValidateCell<FixedSize>(cellId, npts, pts));
1186
1188 cellArray->GetCellAtId(cellId, ids);
1189 TEST_ASSERT(ValidateCell<FixedSize>(cellId, ids->GetNumberOfIds(), ids->GetPointer(0)));
1190 };
1191
1192 validate(2);
1193 validate(0);
1194 validate(1);
1195}
1196
1197template <bool FixedSize>
1198void TestGetCellSize(vtkSmartPointer<vtkCellArray> cellArray)
1199{
1200 vtkLogScopeFunction(INFO);
1201
1202 FillCellArray<FixedSize>(cellArray);
1203
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());
1207}
1208
1209template <bool FixedSize>
1210void TestInsertNextCell(vtkSmartPointer<vtkCellArray> cellArray)
1211{
1212 vtkLogScopeFunction(INFO);
1213
1214 TEST_ASSERT(cellArray->GetNumberOfCells() == 0);
1215
1216 auto ids0 = GetCellIds<FixedSize>(0);
1217 TEST_ASSERT(cellArray->InsertNextCell(ids0) == 0);
1218 TEST_ASSERT(cellArray->GetNumberOfCells() == 1);
1219
1220 TEST_ASSERT(cellArray->InsertNextCell({ 3, 4, 5 }) == 1); // same as GetCellIds<FixedSize>(1)
1221 TEST_ASSERT(cellArray->GetNumberOfCells() == 2);
1222
1223 auto ids2 = GetCellIds<FixedSize>(2);
1224 TEST_ASSERT(cellArray->InsertNextCell(ids2->GetNumberOfIds(), ids2->GetPointer(0)) == 2);
1225 TEST_ASSERT(cellArray->GetNumberOfCells() == 3);
1226
1227 vtkNew<vtkTriangle> triangle;
1228 auto ids3 = triangle->GetPointIds();
1229 ids3->SetId(0, 4);
1230 ids3->SetId(1, 2);
1231 ids3->SetId(2, 1);
1232 TEST_ASSERT(cellArray->InsertNextCell(triangle) == 3);
1233 TEST_ASSERT(cellArray->GetNumberOfCells() == 4);
1234
1235 vtkIdType npts;
1236 const vtkIdType* pts;
1237
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);
1245 TEST_ASSERT(npts == 3);
1246 TEST_ASSERT(pts[0] == 4);
1247 TEST_ASSERT(pts[1] == 2);
1248 TEST_ASSERT(pts[2] == 1);
1249}
1250
1251template <bool FixedSize>
1252void TestIncrementalCellInsertion(vtkSmartPointer<vtkCellArray> cellArray)
1253{
1254 vtkLogScopeFunction(INFO);
1255
1256 auto ids0 = GetCellIds<FixedSize>(0);
1257 TEST_ASSERT(cellArray->InsertNextCell(ids0->GetNumberOfIds()) == 0);
1258 for (vtkIdType i = 0; i < ids0->GetNumberOfIds(); ++i)
1259 {
1260 cellArray->InsertCellPoint(ids0->GetId(i));
1261 }
1262 auto ids1 = GetCellIds<FixedSize>(1);
1263 TEST_ASSERT(cellArray->InsertNextCell(ids1->GetNumberOfIds()) == 1);
1264 for (vtkIdType i = 0; i < ids1->GetNumberOfIds(); ++i)
1265 {
1266 cellArray->InsertCellPoint(ids1->GetId(i));
1267 }
1268 auto ids2 = GetCellIds<FixedSize>(2);
1269 TEST_ASSERT(cellArray->InsertNextCell(3) == 2); // 3 for Fixed Size, 6 for variable
1270 cellArray->InsertCellPoint(ids2->GetId(0));
1271 cellArray->UpdateCellCount(ids2->GetNumberOfIds()); // changing count to 6 for variable size
1272 for (vtkIdType i = 1; i < ids2->GetNumberOfIds(); ++i)
1273 {
1274 cellArray->InsertCellPoint(ids2->GetId(i));
1275 }
1276
1277 ValidateCellArray<FixedSize>(cellArray);
1278}
1279
1280template <bool FixedSize>
1281void TestReverseCellAtId(vtkSmartPointer<vtkCellArray> cellArray)
1282{
1283 vtkLogScopeFunction(INFO);
1284
1285 FillCellArray<FixedSize>(cellArray);
1286
1287 auto validate = [&](const vtkIdType cellId, bool reverse)
1288 {
1289 vtkIdType npts;
1290 const vtkIdType* pts;
1291 cellArray->GetCellAtId(cellId, npts, pts);
1292 TEST_ASSERT(ValidateCell<FixedSize>(cellId, npts, pts, reverse));
1293 };
1294
1295 validate(0, false);
1296 validate(1, false);
1297 validate(2, false);
1298
1299 cellArray->ReverseCellAtId(2);
1300
1301 validate(0, false);
1302 validate(1, false);
1303 validate(2, true);
1304
1305 cellArray->ReverseCellAtId(0);
1306
1307 validate(0, true);
1308 validate(1, false);
1309 validate(2, true);
1310}
1311
1312template <bool FixedSize>
1313void TestReplaceCellAtId(vtkSmartPointer<vtkCellArray> cellArray)
1314{
1315 vtkLogScopeFunction(INFO);
1316
1317 FillCellArray<FixedSize>(cellArray);
1318
1319 auto validate = [&](const vtkIdType cellId, bool reverse)
1320 {
1321 vtkIdType npts;
1322 const vtkIdType* pts;
1323 cellArray->GetCellAtId(cellId, npts, pts);
1324 TEST_ASSERT(ValidateCell<FixedSize>(cellId, npts, pts, reverse));
1325 };
1326
1327 validate(0, false);
1328 validate(1, false);
1329 validate(2, false);
1330
1331 {
1332 auto id2Reverse = GetCellIds<FixedSize>(2, true);
1333 cellArray->ReplaceCellAtId(2, id2Reverse);
1334 }
1335
1336 validate(0, false);
1337 validate(1, false);
1338 validate(2, true);
1339
1340 {
1341 auto id0 = GetCellIds<FixedSize>(0, true);
1342 cellArray->ReplaceCellAtId(0, id0->GetNumberOfIds(), id0->GetPointer(0));
1343 }
1344
1345 validate(0, true);
1346 validate(1, false);
1347 validate(2, true);
1348
1349 cellArray->ReplaceCellAtId(1, { 5, 4, 3 }); // reverse 3, 4, 5
1350
1351 validate(0, true);
1352 validate(1, true);
1353 validate(2, true);
1354}
1355
1356template <bool FixedSize>
1357void TestGetMaxCellSize(vtkSmartPointer<vtkCellArray> cellArray)
1358{
1359 vtkLogScopeFunction(INFO);
1360
1361 auto ids0 = GetCellIds<FixedSize>(0);
1362 auto ids1 = GetCellIds<FixedSize>(1);
1363 auto ids2 = GetCellIds<FixedSize>(2);
1364
1365 TEST_ASSERT(cellArray->GetMaxCellSize() == 0);
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());
1372}
1373
1374template <bool FixedSize>
1375void TestDeepCopy(vtkSmartPointer<vtkCellArray> cellArray)
1376{
1377 vtkLogScopeFunction(INFO);
1378
1379 FillCellArray<FixedSize>(cellArray);
1380
1382 other->DeepCopy(cellArray);
1383
1384 TEST_ASSERT(cellArray->GetStorageType() == other->GetStorageType());
1385 ValidateCellArray<FixedSize>(other);
1386
1387 cellArray->InsertNextCell({ 0, 1, 2 });
1388 TEST_ASSERT(cellArray->GetNumberOfCells() == other->GetNumberOfCells() + 1);
1389}
1390
1391template <bool FixedSize>
1392void TestShallowCopy(vtkSmartPointer<vtkCellArray> cellArray)
1393{
1394 vtkLogScopeFunction(INFO);
1395
1396 FillCellArray<FixedSize>(cellArray);
1397
1399 other->ShallowCopy(cellArray);
1400
1401 TEST_ASSERT(cellArray->GetStorageType() == other->GetStorageType());
1402 ValidateCellArray<FixedSize>(other);
1403
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());
1408}
1409
1410template <bool FixedSize>
1411void TestAppendImpl(vtkSmartPointer<vtkCellArray> first, vtkSmartPointer<vtkCellArray> second)
1412{
1413 FillCellArray<FixedSize>(first, false);
1414
1415 FillCellArray<FixedSize>(second, true);
1416
1417 vtkNew<vtkCellArray> concat;
1418 concat->DeepCopy(first);
1419 concat->Append(second, 10); // add 10 to all point ids from second
1420 TEST_ASSERT(concat->GetNumberOfCells() == 6);
1421
1422 auto validate = [&](const vtkIdType cellId, bool reverse, vtkIdType offset)
1423 {
1424 vtkIdType npts;
1425 const vtkIdType* pts;
1426 concat->GetCellAtId(cellId, npts, pts);
1427 vtkIdType cellIdQuery = cellId < 3 ? cellId : cellId % 3;
1428 TEST_ASSERT(ValidateCell<FixedSize>(cellIdQuery, npts, pts, reverse, offset));
1429 };
1430
1431 validate(0, false, 0);
1432 validate(1, false, 0);
1433 validate(2, false, 0);
1434
1435 validate(3, true, 10);
1436 validate(4, true, 10);
1437 validate(5, true, 10);
1438}
1439
1440template <bool FixedSize>
1441void TestAppend32(vtkSmartPointer<vtkCellArray> cellArray)
1442{
1443 vtkLogScopeFunction(INFO);
1444 TestAppendImpl<FixedSize>(cellArray, CellArrayFactory<vtkCellArray::Int32>::New());
1445}
1446
1447template <bool FixedSize>
1448void TestAppend64(vtkSmartPointer<vtkCellArray> cellArray)
1449{
1450 vtkLogScopeFunction(INFO);
1451 TestAppendImpl<FixedSize>(cellArray, CellArrayFactory<vtkCellArray::Int64>::New());
1452}
1453
1454template <bool FixedSize>
1455void TestLegacyFormatImportExportAppend(vtkSmartPointer<vtkCellArray> cellArray)
1456{
1457 vtkLogScopeFunction(INFO);
1458
1459 FillCellArray<FixedSize>(cellArray);
1460
1462 cellArray->ExportLegacyFormat(legacy);
1463
1464 {
1465 std::vector<vtkIdType> expected;
1466 for (int i = 0; i < 3; ++i)
1467 {
1468 auto ids = GetCellIds<FixedSize>(i);
1469 expected.push_back(ids->GetNumberOfIds());
1470 for (vtkIdType j = 0; j < ids->GetNumberOfIds(); ++j)
1471 {
1472 expected.push_back(ids->GetId(j));
1473 }
1474 }
1475 auto legacyRange = vtk::DataArrayValueRange<1>(legacy);
1476 TEST_ASSERT(std::equal(expected.cbegin(), expected.cend(), legacyRange.cbegin()));
1477 }
1478
1479 cellArray->Initialize();
1480 cellArray->ImportLegacyFormat(legacy);
1481
1482 auto validate = [&](const vtkIdType cellId, vtkIdType offset = 0)
1483 {
1484 vtkIdType npts;
1485 const vtkIdType* pts;
1486 cellArray->GetCellAtId(cellId, npts, pts);
1487 vtkIdType cellIdQuery = cellId < 3 ? cellId : cellId % 3;
1488 TEST_ASSERT(ValidateCell<FixedSize>(cellIdQuery, npts, pts, false, offset));
1489 };
1490
1491 TEST_ASSERT(cellArray->GetNumberOfCells() == 3);
1492 validate(0);
1493 validate(1);
1494 validate(2);
1495
1496 // check that the next import doesn't have this
1497 cellArray->InsertNextCell(GetCellIds<FixedSize>(0, true));
1498 cellArray->ImportLegacyFormat(legacy->GetPointer(0), legacy->GetNumberOfTuples());
1499
1500 TEST_ASSERT(cellArray->GetNumberOfCells() == 3);
1501 validate(0);
1502 validate(1);
1503 validate(2);
1504
1505 cellArray->AppendLegacyFormat(legacy, 10);
1506
1507 TEST_ASSERT(cellArray->GetNumberOfCells() == 6);
1508 validate(0, 0);
1509 validate(1, 0);
1510 validate(2, 0);
1511 validate(3, 10);
1512 validate(4, 10);
1513 validate(5, 10);
1514
1515 cellArray->AppendLegacyFormat(legacy->GetPointer(0), legacy->GetNumberOfTuples(), 20);
1516
1517 TEST_ASSERT(cellArray->GetNumberOfCells() == 9);
1518 validate(0, 0);
1519 validate(1, 0);
1520 validate(2, 0);
1521 validate(3, 10);
1522 validate(4, 10);
1523 validate(5, 10);
1524 validate(6, 20);
1525 validate(7, 20);
1526 validate(8, 20);
1527}
1528
1529const char* StorageTypeToString(vtkCellArray::StorageTypes storageType)
1530{
1531 switch (storageType)
1532 {
1534 return "Int64";
1536 return "Int32";
1538 return "FixedSizeInt64";
1540 return "FixedSizeInt32";
1542 default:
1543 return "Generic";
1544 }
1545}
1546
1547template <vtkCellArray::StorageTypes StorageType, bool FixedSize, typename... ArrayTypes>
1548void RunTests()
1549{
1550 vtkLogScopeF(INFO, "Testing %s storage.", StorageTypeToString(StorageType));
1551
1552 TestAllocate(CellArrayFactory<StorageType, ArrayTypes...>::New());
1553 TestResize(CellArrayFactory<StorageType, ArrayTypes...>::New());
1554 TestInitialize(CellArrayFactory<StorageType, ArrayTypes...>::New());
1555 TestReset(CellArrayFactory<StorageType, ArrayTypes...>::New());
1556 if (!FixedSize)
1557 {
1558 // Squeeze is a no-op for fixed size storage.
1559 TestSqueeze<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1560 // Offsets can't be set manually for fixed size storage.
1561 TestIsValidOffsets<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1562 }
1563 TestIsValidConnectivity<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1564
1565 TestGetNumberOfCells<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1566 TestGetNumberOfOffsets<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1567 TestGetNumberOfConnectivityIds<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1568
1569 TestNewIterator<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1570 TestSetData(CellArrayFactory<StorageType, ArrayTypes...>::New());
1571
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());
1577
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());
1584
1585 TestCanConvertTo32BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1586 TestCanConvertTo64BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1587 TestCanConvertToFixedSize32BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1588 TestCanConvertToFixedSize64BitStorage(CellArrayFactory<StorageType, ArrayTypes...>::New());
1589
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());
1594
1595 TestGetOffsetsArray(CellArrayFactory<StorageType, ArrayTypes...>::New());
1596 TestGetConnectivityArray(CellArrayFactory<StorageType, ArrayTypes...>::New());
1597
1598 TestIsHomogeneous<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1599
1600 TestTraversalSizePointer<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1601 TestTraversalIdList<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1602
1603 TestGetCellAtId<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1604 TestGetCellSize<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1605
1606 TestInsertNextCell<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1607 TestIncrementalCellInsertion<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1608
1609 TestReverseCellAtId<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1610 TestReplaceCellAtId<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1611
1612 TestGetMaxCellSize<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1613
1614 TestDeepCopy<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1615 TestShallowCopy<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1616
1617 TestAppend32<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1618 TestAppend64<FixedSize>(CellArrayFactory<StorageType, ArrayTypes...>::New());
1619
1620 TestLegacyFormatImportExportAppend<FixedSize>(
1621 CellArrayFactory<StorageType, ArrayTypes...>::New());
1622}
1623
1624} // end anon namespace
#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.
Definition vtkNew.h:167
T * GetPointer() const noexcept
Get a raw pointer to the contained object.
Definition vtkNew.h:256
Hold a reference to a vtkObjectBase instance.
static vtkSmartPointer< T > New()
Create an instance of a VTK object.
@ offset
Definition vtkX3D.h:439
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,...)
Definition vtkLogger.h:562
#define vtkLogScopeFunction(verbosity_name)
Definition vtkLogger.h:565
int vtkIdType
Definition vtkType.h:367