void EigenVectors::InitArray(DArray &darr, int size) const { if(!darr.empty()) { darr.clear(); } darr.reserve(size); for(int i = 0; i < size; ++i) { darr.push_back(0.); } }
int TestDArray() { DArray<int> *darray = new DArray<int>(); size_t pos; pos = darray->insert(1); TEST_ASSERT(darray->valid(pos)); TEST_ASSERT(darray->get(pos) == 1); pos = darray->insert(3); TEST_ASSERT(darray->valid(pos)); TEST_ASSERT(darray->get(pos) == 3); pos = darray->insert(5); TEST_ASSERT(darray->valid(pos)); TEST_ASSERT(darray->get(pos) == 5); pos = darray->insert(7); TEST_ASSERT(darray->valid(pos)); TEST_ASSERT(darray->get(pos) == 7); TEST_ASSERT(darray->used() == 4); TEST_ASSERT(darray->get(0) == 1); TEST_ASSERT(darray->get(3) == 7); TEST_ASSERT(darray->get(1) == 3); TEST_ASSERT(darray->valid(0)); TEST_ASSERT(darray->valid(1)); TEST_ASSERT(darray->valid(2)); TEST_ASSERT(darray->valid(3)); TEST_ASSERT(!darray->valid((unsigned int)-1)); TEST_ASSERT(!darray->valid(4)); darray->remove(0); TEST_ASSERT(darray->used() == 3); TEST_ASSERT(!darray->valid(0)); TEST_ASSERT(darray->valid(1)); TEST_ASSERT(darray->get(1) == 3); TEST_ASSERT(darray->get(3) == 7); darray->remove(3); TEST_ASSERT(darray->used() == 2); TEST_ASSERT(!darray->valid(0)); TEST_ASSERT(darray->valid(1)); TEST_ASSERT(darray->valid(2)); TEST_ASSERT(!darray->valid(3)); TEST_ASSERT(darray->get(1) == 3); TEST_ASSERT(darray->get(2) == 5); darray->empty(); TEST_ASSERT(darray->used() == 0); delete darray; return 0; }
void TestTree(T _tree, DArray<ktype_t> *dataset, unsigned long _size) { console->Write("%10lu ", _size); // fill tree Stopwatch sw; sw.Start(); for (size_t i = 0; i < _size; i++) { ktype_t item = dataset->get(i); _tree->insert(item, item); } sw.Stop(); console->Write("%9.5lfs ", sw.Elapsed()); DArray<ktype_t> searchItems; // create valid item list searchItems.empty(); while (searchItems.used() < MaxSearches) { unsigned long idx = RandomNumber() % _size; searchItems.insert(dataset->get(idx)); } // successful searches sw.Start(); for (size_t i = 0; i < MaxSearches; i++) { _tree->find(searchItems[i], 0); } sw.Stop(); console->Write("%9.5lfs ", sw.Elapsed()); // create mixed item list searchItems.empty(); while (searchItems.used() < MaxSearches) { unsigned long idx; idx = RandomNumber() % _size; searchItems.insert(dataset->get(idx)); idx = _size + (RandomNumber() % _size); searchItems.insert(dataset->get(idx)); } // mixed success searches sw.Start(); for (size_t i = 0; i < MaxSearches; i++) { _tree->find(searchItems[i], 0); } sw.Stop(); console->Write("%9.5lfs ", sw.Elapsed()); // create invalid item list searchItems.empty(); while (searchItems.used() < MaxSearches) { unsigned long idx = _size + (RandomNumber() % _size); searchItems.insert(dataset->get(idx)); } // invalid searches sw.Start(); for (size_t i = 0; i < MaxSearches; i++) { _tree->find(searchItems[i], 0); } sw.Stop(); console->Write("%9.5lfs ", sw.Elapsed()); // empty tree sw.Start(); _tree->empty(); sw.Stop(); console->WriteLine("%9.5lfs", sw.Elapsed()); }