| 15 | #define SILENT |
| 16 | |
| 17 | int TestDataArrayIterators(int, char*[]) |
| 18 | { |
| 19 | vtkIdType numComps = 4; |
| 20 | vtkIdType numValues = 100000000; // 10 million |
| 21 | assert(numValues % numComps == 0); |
| 22 | vtkIdType numTuples = numValues / numComps; |
| 23 | |
| 24 | vtkNew<vtkFloatArray> arrayContainer; |
| 25 | vtkFloatArray* array = arrayContainer; |
| 26 | array->SetNumberOfComponents(numComps); |
| 27 | array->SetNumberOfTuples(numTuples); |
| 28 | for (vtkIdType i = 0; i < numValues; ++i) |
| 29 | { |
| 30 | // Just fill with consistent data |
| 31 | array->SetValue(i, i % 97); |
| 32 | } |
| 33 | |
| 34 | // Create the vtkAOSDataArrayTemplate testing implementation: |
| 35 | vtkNew<vtkAOSDataArrayTemplate<float>> tdaContainer; |
| 36 | vtkAOSDataArrayTemplate<float>* tda = tdaContainer; |
| 37 | tda->SetNumberOfComponents(numComps); |
| 38 | tda->SetArray(arrayContainer->GetPointer(0), numValues, 1); |
| 39 | |
| 40 | // should be vtkAOSDataArrayTemplate<float>::Iterator (float*): |
| 41 | vtkFloatArray::Iterator datBegin = array->Begin(); |
| 42 | vtkFloatArray::Iterator datIter = array->Begin(); |
| 43 | if (typeid(datBegin) != typeid(float*)) |
| 44 | { |
| 45 | std::cerr << "Error: vtkFloatArray::Iterator is not a float*."; |
| 46 | return EXIT_FAILURE; |
| 47 | } |
| 48 | |
| 49 | // should be vtkTypedDataArrayIterator<float>: |
| 50 | vtkAOSDataArrayTemplate<float>::Iterator tdaBegin = |
| 51 | vtkAOSDataArrayTemplate<float>::FastDownCast(tda)->Begin(); |
| 52 | vtkAOSDataArrayTemplate<float>::Iterator tdaIter = |
| 53 | vtkAOSDataArrayTemplate<float>::FastDownCast(tda)->Begin(); |
| 54 | if (typeid(tdaBegin) != typeid(float*)) |
| 55 | { |
| 56 | std::cerr << "Error: vtkAOSDataArrayTemplate<float>::Iterator is not a " |
| 57 | "float*."; |
| 58 | return EXIT_FAILURE; |
| 59 | } |
| 60 | |
| 61 | // Validate that the iterators return the same values from operator[] and |
| 62 | // operator* as GetValue; |
| 63 | for (vtkIdType i = 0; i < numValues; ++i) |
| 64 | { |
| 65 | float lookup = array->GetValue(i); |
| 66 | if (lookup != datBegin[i] || lookup != tdaBegin[i] || lookup != *datIter || lookup != *tdaIter) |
| 67 | { |
| 68 | std::cerr << "Mismatch at " << i << ":" |
| 69 | << " GetValue(i)=" << lookup << " datBegin[i]=" << datBegin[i] |
| 70 | << " tdaBegin[i]=" << tdaBegin[i] << " *datIter=" << *datIter |
| 71 | << " *tdaIter=" << *tdaIter << std::endl; |
| 72 | return EXIT_FAILURE; |
| 73 | } |
| 74 | ++datIter; |
nothing calls this directly
no test coverage detected