AVL Tree refactor
This commit is contained in:
parent
92d8b04cf8
commit
db1a6b35ef
8 changed files with 511 additions and 376 deletions
|
|
@ -1,5 +1,7 @@
|
|||
#include <iostream>
|
||||
#include "Tests.hpp"
|
||||
#include "Tree.hpp"
|
||||
#include "Timing.hpp"
|
||||
|
||||
using namespace tp;
|
||||
|
||||
|
|
@ -24,7 +26,7 @@ SUITE(AvlTree) {
|
|||
TEST(Persistance) {
|
||||
AvlTree<AvlNumericKey<alni>, TestClass, TestAllocator> tree;
|
||||
|
||||
const auto size = 10;
|
||||
const auto size = 1000;
|
||||
|
||||
struct Item {
|
||||
Item() :
|
||||
|
|
@ -122,4 +124,62 @@ SUITE(AvlTree) {
|
|||
CHECK(tree.maxNode(tree.head()) == nullptr);
|
||||
CHECK(tree.minNode(tree.head()) == nullptr);
|
||||
}
|
||||
|
||||
TEST(Speed) {
|
||||
AvlTree<AvlNumericKey<alni>, TestClass, TestAllocator> tree;
|
||||
|
||||
const auto size = 1000000;
|
||||
|
||||
struct Item {
|
||||
Item() :
|
||||
data(0) {}
|
||||
bool presents = false;
|
||||
TestClass data;
|
||||
};
|
||||
|
||||
Item* buff = new Item[size];
|
||||
|
||||
for (auto i : Range(size)) {
|
||||
buff[i].data.setVal(i);
|
||||
}
|
||||
|
||||
Timer insertTime;
|
||||
|
||||
ualni loadSize = 0;
|
||||
while (loadSize < size / 2) {
|
||||
auto idx = ualni(randomFloat() * (size - 1));
|
||||
if (!buff[idx].presents) {
|
||||
tree.insert((alni) buff[idx].data.getVal(), buff[idx].data);
|
||||
loadSize++;
|
||||
buff[idx].presents = true;
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << "AVL Tree Insert Speed " << (double) loadSize / (double) insertTime.timePassed() << "\n";
|
||||
|
||||
Timer removeTime;
|
||||
|
||||
ualni unloadSize = 0;
|
||||
while (unloadSize < size / 2) {
|
||||
auto idx = ualni(randomFloat() * (size - 1));
|
||||
if (buff[idx].presents) {
|
||||
tree.remove((alni) buff[idx].data.getVal());
|
||||
unloadSize++;
|
||||
buff[idx].presents = false;
|
||||
}
|
||||
}
|
||||
|
||||
for (auto idx = 0; idx < size; idx++) {
|
||||
auto& item = buff[idx];
|
||||
if (item.presents) {
|
||||
tree.remove((alni) item.data.getVal());
|
||||
unloadSize++;
|
||||
item.presents = false;
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << "AVL Tree Remove Speed " << (double) unloadSize / (double) removeTime.timePassed() << "\n";
|
||||
|
||||
delete[] buff;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue