int __ValidateArray(typename DataArray<T>::Pointer array, size_t numTuples, int numComp) { int err = 0; DREAM3D_REQUIRED(true, ==, array->isAllocated() ); size_t nt = array->getNumberOfTuples(); DREAM3D_REQUIRED(nt, ==, numTuples); int nc = array->getNumberOfComponents(); DREAM3D_REQUIRED(nc, ==, numComp ); size_t typeSize = array->getTypeSize(); DREAM3D_REQUIRE_EQUAL(sizeof(T), typeSize); size_t numElements = array->getSize(); DREAM3D_REQUIRED(numElements, ==, (nt * nc) ); // initialize the array with zeros to get a baseline array->initializeWithZeros(); // Get a pointer to the data and loop through the array making sure all values are Zero T* ptr = array->getPointer(0); for(size_t i = 0; i < numElements; i++) { DREAM3D_REQUIRE_EQUAL(0, ptr[i]); } //Splat another value across the array starting at an offset into the array //and test those values made it into the array correctly array->initializeWithValue(static_cast<T>(1), numComp); for(size_t i = numComp; i < numElements; i++) { DREAM3D_REQUIRE_EQUAL(static_cast<T>(1), ptr[i]); } // Initialize the entire array with a value (offset = 0); array->initializeWithValue(static_cast<T>(2), 0); for(size_t i = 0; i < numElements; i++) { DREAM3D_REQUIRE_EQUAL(static_cast<T>(2), ptr[i]); } // Initialize the entire array with a value (offset = 0), this time using the default value for the offset array->initializeWithValue(static_cast<T>(3)); ptr = array->getPointer(0); for(size_t i = 0; i < numElements; i++) { DREAM3D_REQUIRE_EQUAL(static_cast<T>(3), ptr[i]); array->setValue(i, static_cast<T>(4)); T val = array->getValue(i); DREAM3D_REQUIRE_EQUAL(val, static_cast<T>(4)) } // Test setting of a Tuple with a value, which means all components of that tuple will have the same value size_t index = 0; array->initializeWithZeros(); for(size_t t = 0; t < numTuples; t++) { array->initializeTuple(t, 6.0); for(int j = 0; j < numComp; j++) { T val = array->getComponent(t, j); DREAM3D_REQUIRE_EQUAL(val, (static_cast<T>(6)) ) } } // Test setting individual components to a specific value index = 0; array->initializeWithZeros(); for(size_t t = 0; t < numTuples; t++) { for(int j = 0; j < numComp; j++) { index = t * numComp + j; array->setComponent(t, j, static_cast<T>(t + j) ); T val = array->getComponent(t, j); DREAM3D_REQUIRE_EQUAL(val, (static_cast<T>(t + j))) val = array->getValue(index); DREAM3D_REQUIRE_EQUAL(val, (static_cast<T>(t + j))) } } /// virtual QVector<size_t> getComponentDimensions() // Test resizing the array based on a give number of tuples. The number of Components will stay the same at each tuple array->resize(numTuples * 2); array->initializeWithZeros(); // Init the grown array to all Zeros nt = array->getNumberOfTuples(); DREAM3D_REQUIRED(nt, ==, (numTuples * 2) ); nc = array->getNumberOfComponents(); DREAM3D_REQUIRED(nc, ==, numComp ); // Test resizing the array to a smaller size array->resize(numTuples); array->initializeWithZeros(); // Init the grown array to all Zeros nt = array->getNumberOfTuples(); DREAM3D_REQUIRED(nt, ==, (numTuples) ); nc = array->getNumberOfComponents(); DREAM3D_REQUIRED(nc, ==, numComp ); ////clear() // This resizes the array to Zero destroying all the data in the process. array->clear(); DREAM3D_REQUIRED(false, ==, array->isAllocated() ); nt = array->getNumberOfTuples(); DREAM3D_REQUIRED(nt, ==, 0); nc = array->getNumberOfComponents(); DREAM3D_REQUIRED(nc, ==, numComp); nt = array->getSize(); DREAM3D_REQUIRED(nt, ==, 0); ptr = array->getPointer(0); DREAM3D_REQUIRED_PTR(ptr, ==, NULL); // Test resizing the array to a any larger size array->resize(numTuples); array->initializeWithZeros(); // Init the grown array to all Zeros nt = array->getNumberOfTuples(); DREAM3D_REQUIRED(nt, ==, (numTuples) ); nc = array->getNumberOfComponents(); DREAM3D_REQUIRED(nc, ==, numComp ); ptr = array->getPointer(0); DREAM3D_REQUIRED_PTR(ptr, !=, NULL); return err; }
void __TestEraseElements() { // Test dropping of front elements only { typename DataArray<T>::Pointer array = DataArray<T>::CreateArray(NUM_ELEMENTS, "Test1"); DREAM3D_REQUIRE_EQUAL(array->isAllocated(), true); for(size_t i = 0; i < NUM_ELEMENTS; ++i) { array->setComponent(i, 0, static_cast<T>(i) ); } QVector<size_t> eraseElements; eraseElements.push_back(0); eraseElements.push_back(1); array->eraseTuples(eraseElements); DREAM3D_REQUIRE_EQUAL(array->getValue(0), 2); DREAM3D_REQUIRE_EQUAL(array->getValue(1), 3); DREAM3D_REQUIRE_EQUAL(array->getValue(2), 4); DREAM3D_REQUIRE_EQUAL(array->isAllocated(), true); } // Test Dropping of internal elements { QVector<size_t> dims(1, NUM_COMPONENTS_2); typename DataArray<T>::Pointer array = DataArray<T>::CreateArray(NUM_ELEMENTS_2, dims, "Test2"); DREAM3D_REQUIRE_EQUAL(array->isAllocated(), true); for(size_t i = 0; i < NUM_TUPLES_2; ++i) { array->setComponent(i, 0, static_cast<T>(i)); array->setComponent(i, 1, static_cast<T>(i)); } QVector<size_t> eraseElements; eraseElements.push_back(3); eraseElements.push_back(6); eraseElements.push_back(8); array->eraseTuples(eraseElements); DREAM3D_REQUIRE_EQUAL(array->getComponent(3, 0), 4); DREAM3D_REQUIRE_EQUAL(array->getComponent(3, 1), 4); DREAM3D_REQUIRE_EQUAL(array->getComponent(5, 0), 7); DREAM3D_REQUIRE_EQUAL(array->getComponent(5, 1), 7); DREAM3D_REQUIRE_EQUAL(array->getComponent(6, 0), 9); DREAM3D_REQUIRE_EQUAL(array->getComponent(6, 1), 9); } // Test Dropping of internal elements { QVector<size_t> dims(1, NUM_COMPONENTS_2); typename DataArray<T>::Pointer array = DataArray<T>::CreateArray(NUM_ELEMENTS_2, dims, "Test3"); DREAM3D_REQUIRE_EQUAL(array->isAllocated(), true); for(size_t i = 0; i < NUM_TUPLES_2; ++i) { array->setComponent(i, 0, static_cast<T>(i)); array->setComponent(i, 1, static_cast<T>(i)); } QVector<size_t> eraseElements; eraseElements.push_back(3); eraseElements.push_back(6); eraseElements.push_back(9); array->eraseTuples(eraseElements); DREAM3D_REQUIRE_EQUAL(array->getComponent(3, 0), 4); DREAM3D_REQUIRE_EQUAL(array->getComponent(3, 1), 4); DREAM3D_REQUIRE_EQUAL(array->getComponent(5, 0), 7); DREAM3D_REQUIRE_EQUAL(array->getComponent(5, 1), 7); DREAM3D_REQUIRE_EQUAL(array->getComponent(6, 0), 8); DREAM3D_REQUIRE_EQUAL(array->getComponent(6, 1), 8); } // Test Dropping of internal continuous elements { QVector<size_t> dims(1, NUM_COMPONENTS_2); typename DataArray<T>::Pointer array = DataArray<T>::CreateArray(NUM_ELEMENTS_2, dims, "Test4"); DREAM3D_REQUIRE_EQUAL(array->isAllocated(), true); for(size_t i = 0; i < NUM_TUPLES_2; ++i) { array->setComponent(i, 0, static_cast<T>(i)); array->setComponent(i, 1, static_cast<T>(i)); } QVector<size_t> eraseElements; eraseElements.push_back(3); eraseElements.push_back(4); eraseElements.push_back(5); array->eraseTuples(eraseElements); DREAM3D_REQUIRE_EQUAL(array->getComponent(3, 0), 6); DREAM3D_REQUIRE_EQUAL(array->getComponent(3, 1), 6); DREAM3D_REQUIRE_EQUAL(array->getComponent(4, 0), 7); DREAM3D_REQUIRE_EQUAL(array->getComponent(4, 1), 7); DREAM3D_REQUIRE_EQUAL(array->getComponent(5, 0), 8); DREAM3D_REQUIRE_EQUAL(array->getComponent(5, 1), 8); } // Test Dropping of Front and Back Elements { QVector<size_t> dims(1, NUM_COMPONENTS_2); typename DataArray<T>::Pointer array = DataArray<T>::CreateArray(NUM_ELEMENTS_2, dims, "Test5"); DREAM3D_REQUIRE_EQUAL(array->isAllocated(), true); for(size_t i = 0; i < NUM_TUPLES_2; ++i) { array->setComponent(i, 0, static_cast<T>(i)); array->setComponent(i, 1, static_cast<T>(i)); } QVector<size_t> eraseElements; eraseElements.push_back(0); eraseElements.push_back(9); array->eraseTuples(eraseElements); DREAM3D_REQUIRE_EQUAL(array->getComponent(0, 0), 1); DREAM3D_REQUIRE_EQUAL(array->getComponent(0, 1), 1); DREAM3D_REQUIRE_EQUAL(array->getComponent(7, 0), 8); DREAM3D_REQUIRE_EQUAL(array->getComponent(7, 1), 8); } // Test Dropping of Back Elements { QVector<size_t> dims(1, NUM_COMPONENTS_2); typename DataArray<T>::Pointer array = DataArray<T>::CreateArray(NUM_ELEMENTS_2, dims, "Test6"); DREAM3D_REQUIRE_EQUAL(array->isAllocated(), true); for(size_t i = 0; i < NUM_TUPLES_2; ++i) { array->setComponent(i, 0, static_cast<T>(i)); array->setComponent(i, 1, static_cast<T>(i)); } QVector<size_t> eraseElements; eraseElements.push_back(7); eraseElements.push_back(8); eraseElements.push_back(9); array->eraseTuples(eraseElements); DREAM3D_REQUIRE_EQUAL(array->getComponent(4, 0), 4); DREAM3D_REQUIRE_EQUAL(array->getComponent(4, 1), 4); DREAM3D_REQUIRE_EQUAL(array->getComponent(5, 0), 5); DREAM3D_REQUIRE_EQUAL(array->getComponent(5, 1), 5); } // Test Dropping of indices larger than the number of tuples { QVector<size_t> dims(1, NUM_COMPONENTS_2); typename DataArray<T>::Pointer array = DataArray<T>::CreateArray(NUM_TUPLES_2, dims, "Test6"); DREAM3D_REQUIRE_EQUAL(array->isAllocated(), true); for(size_t i = 0; i < NUM_TUPLES_2; ++i) { array->setComponent(i, 0, static_cast<T>(i)); array->setComponent(i, 1, static_cast<T>(i)); } QVector<size_t> eraseElements; eraseElements.push_back(10); int err = array->eraseTuples(eraseElements); DREAM3D_REQUIRE_EQUAL(err , -100) eraseElements.clear(); err = array->eraseTuples(eraseElements); DREAM3D_REQUIRE_EQUAL(err , 0) eraseElements.resize(20); err = array->eraseTuples(eraseElements); DREAM3D_REQUIRE_EQUAL(err , 0) size_t nTuples = array->getNumberOfTuples(); DREAM3D_REQUIRE_EQUAL(nTuples, 0) } }