2015-02-22 19:30:42 +01:00
|
|
|
#include <messmer/blobstore/test/implementations/onblocks/datatreestore/shrinking/testutils/DataTreeShrinkingTest.h>
|
|
|
|
|
|
|
|
using namespace blobstore::onblocks::datanodestore;
|
|
|
|
|
|
|
|
using std::unique_ptr;
|
|
|
|
using std::make_unique;
|
|
|
|
using cpputils::dynamic_pointer_move;
|
|
|
|
using blockstore::Key;
|
|
|
|
using blobstore::onblocks::datatreestore::DataTree;
|
|
|
|
|
|
|
|
void DataTreeShrinkingTest::Shrink(const Key &key) {
|
|
|
|
DataTree tree(&nodeStore, nodeStore.load(key));
|
|
|
|
tree.removeLastDataLeaf();
|
|
|
|
}
|
|
|
|
|
|
|
|
Key DataTreeShrinkingTest::CreateFourNodeThreeLeafTree() {
|
|
|
|
auto leaf1 = nodeStore.createNewLeafNode();
|
|
|
|
auto root = nodeStore.createNewInnerNode(*leaf1);
|
|
|
|
root->addChild(*nodeStore.createNewLeafNode());
|
|
|
|
root->addChild(*nodeStore.createNewLeafNode());
|
|
|
|
return root->key();
|
|
|
|
}
|
|
|
|
|
|
|
|
Key DataTreeShrinkingTest::CreateTwoInnerNodeOneTwoLeavesTree() {
|
|
|
|
auto leaf1 = nodeStore.createNewLeafNode();
|
|
|
|
auto node1 = nodeStore.createNewInnerNode(*leaf1);
|
|
|
|
auto leaf2 = nodeStore.createNewLeafNode();
|
|
|
|
auto node2 = nodeStore.createNewInnerNode(*leaf2);
|
|
|
|
node2->addChild(*nodeStore.createNewLeafNode());
|
|
|
|
auto root = nodeStore.createNewInnerNode(*node1);
|
|
|
|
root->addChild(*node2);
|
|
|
|
return root->key();
|
|
|
|
}
|
|
|
|
|
|
|
|
Key DataTreeShrinkingTest::CreateTwoInnerNodeTwoOneLeavesTree() {
|
|
|
|
auto leaf1 = nodeStore.createNewLeafNode();
|
|
|
|
auto node1 = nodeStore.createNewInnerNode(*leaf1);
|
|
|
|
node1->addChild(*nodeStore.createNewLeafNode());
|
|
|
|
auto leaf2 = nodeStore.createNewLeafNode();
|
|
|
|
auto node2 = nodeStore.createNewInnerNode(*leaf2);
|
|
|
|
auto root = nodeStore.createNewInnerNode(*node1);
|
|
|
|
root->addChild(*node2);
|
|
|
|
return root->key();
|
|
|
|
}
|
|
|
|
|
|
|
|
Key DataTreeShrinkingTest::CreateThreeLevelMinDataTree() {
|
2015-02-23 17:03:45 +01:00
|
|
|
auto fullTwoLevelRoot = CreateFullTwoLevel();
|
2015-02-22 19:30:42 +01:00
|
|
|
auto root = nodeStore.createNewInnerNode(*fullTwoLevelRoot);
|
|
|
|
auto leaf = nodeStore.createNewLeafNode();
|
|
|
|
auto inner = nodeStore.createNewInnerNode(*leaf);
|
|
|
|
root->addChild(*inner);
|
|
|
|
return root->key();
|
|
|
|
}
|
|
|
|
|
|
|
|
Key DataTreeShrinkingTest::CreateFourLevelMinDataTree() {
|
2015-02-23 17:03:45 +01:00
|
|
|
auto fullThreeLevelRoot = CreateFullThreeLevel();
|
2015-02-22 19:30:42 +01:00
|
|
|
auto root = nodeStore.createNewInnerNode(*fullThreeLevelRoot);
|
|
|
|
auto leaf = nodeStore.createNewLeafNode();
|
|
|
|
auto inner = nodeStore.createNewInnerNode(*leaf);
|
|
|
|
auto nodechainRoot = nodeStore.createNewInnerNode(*inner);
|
|
|
|
root->addChild(*nodechainRoot);
|
|
|
|
return root->key();
|
|
|
|
}
|
|
|
|
|
|
|
|
Key DataTreeShrinkingTest::CreateFourLevelTreeWithTwoSiblingLeaves1() {
|
2015-02-23 17:03:45 +01:00
|
|
|
auto fullThreeLevelRoot = CreateFullThreeLevel();
|
2015-02-22 19:30:42 +01:00
|
|
|
auto root = nodeStore.createNewInnerNode(*fullThreeLevelRoot);
|
|
|
|
auto leaf = nodeStore.createNewLeafNode();
|
|
|
|
auto inner = nodeStore.createNewInnerNode(*leaf);
|
|
|
|
inner->addChild(*nodeStore.createNewLeafNode());
|
|
|
|
auto inner_top = nodeStore.createNewInnerNode(*inner);
|
|
|
|
root->addChild(*inner_top);
|
|
|
|
return root->key();
|
|
|
|
}
|
|
|
|
|
|
|
|
Key DataTreeShrinkingTest::CreateFourLevelTreeWithTwoSiblingLeaves2() {
|
2015-02-23 17:03:45 +01:00
|
|
|
auto fullThreeLevelRoot = CreateFullThreeLevel();
|
2015-02-22 19:30:42 +01:00
|
|
|
auto root = nodeStore.createNewInnerNode(*fullThreeLevelRoot);
|
|
|
|
auto leaf1 = nodeStore.createNewLeafNode();
|
|
|
|
auto inner1 = nodeStore.createNewInnerNode(*leaf1);
|
|
|
|
FillNode(inner1.get());
|
|
|
|
auto leaf2 = nodeStore.createNewLeafNode();
|
|
|
|
auto inner2 = nodeStore.createNewInnerNode(*leaf2);
|
|
|
|
inner2->addChild(*nodeStore.createNewLeafNode());
|
|
|
|
auto inner_top = nodeStore.createNewInnerNode(*inner1);
|
|
|
|
inner_top->addChild(*inner2);
|
|
|
|
root->addChild(*inner_top);
|
|
|
|
return root->key();
|
|
|
|
}
|
|
|
|
|
|
|
|
Key DataTreeShrinkingTest::CreateTreeWithFirstChildOfRootFullThreelevelAndSecondChildMindataThreelevel() {
|
2015-02-23 17:03:45 +01:00
|
|
|
auto fullThreeLevelRoot = CreateFullThreeLevel();
|
2015-02-22 19:30:42 +01:00
|
|
|
auto root = nodeStore.createNewInnerNode(*fullThreeLevelRoot);
|
|
|
|
auto leaf1 = nodeStore.createNewLeafNode();
|
|
|
|
auto inner1 = nodeStore.createNewInnerNode(*leaf1);
|
|
|
|
FillNode(inner1.get());
|
|
|
|
auto leaf2 = nodeStore.createNewLeafNode();
|
|
|
|
auto inner2 = nodeStore.createNewInnerNode(*leaf2);
|
|
|
|
auto inner_top = nodeStore.createNewInnerNode(*inner1);
|
|
|
|
inner_top->addChild(*inner2);
|
|
|
|
root->addChild(*inner_top);
|
|
|
|
return root->key();
|
|
|
|
}
|
|
|
|
|
|
|
|
Key DataTreeShrinkingTest::CreateThreeLevelTreeWithThreeChildrenOfRoot() {
|
2015-02-23 17:03:45 +01:00
|
|
|
auto fullTwoLevelTree1 = CreateFullTwoLevel();
|
|
|
|
auto fullTwoLevelTree2 = CreateFullTwoLevel();
|
2015-02-22 19:30:42 +01:00
|
|
|
auto twonodechain = nodeStore.createNewInnerNode(*nodeStore.createNewLeafNode());
|
|
|
|
auto root = nodeStore.createNewInnerNode(*fullTwoLevelTree1);
|
|
|
|
root->addChild(*fullTwoLevelTree2);
|
|
|
|
root->addChild(*twonodechain);
|
|
|
|
return root->key();
|
|
|
|
}
|