2015-02-20 18:31:18 +01:00
|
|
|
#include "testutils/DataTreeGrowingTest.h"
|
|
|
|
|
2015-02-20 20:16:44 +01:00
|
|
|
using blobstore::onblocks::datanodestore::DataInnerNode;
|
|
|
|
using blockstore::Key;
|
|
|
|
|
2015-02-20 18:31:18 +01:00
|
|
|
class DataTreeGrowingTest_Structure: public DataTreeGrowingTest {};
|
|
|
|
|
|
|
|
TEST_F(DataTreeGrowingTest_Structure, GrowAOneNodeTree) {
|
|
|
|
auto key = CreateTreeAddOneLeafReturnRootKey();
|
|
|
|
EXPECT_INNER_NODE_NUMBER_OF_LEAVES_IS(2, key);
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_F(DataTreeGrowingTest_Structure, GrowATwoNodeTree) {
|
|
|
|
auto key = CreateTreeAddTwoLeavesReturnRootKey();
|
|
|
|
EXPECT_INNER_NODE_NUMBER_OF_LEAVES_IS(3, key);
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_F(DataTreeGrowingTest_Structure, GrowATwoLevelThreeNodeTree) {
|
|
|
|
auto key = CreateTreeAddThreeLeavesReturnRootKey();
|
|
|
|
EXPECT_INNER_NODE_NUMBER_OF_LEAVES_IS(4, key);
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_F(DataTreeGrowingTest_Structure, GrowAThreeNodeChainedTree) {
|
|
|
|
auto key = CreateThreeNodeChainedTreeReturnRootKey();
|
|
|
|
AddLeafTo(key);
|
|
|
|
|
|
|
|
auto root = LoadInnerNode(key);
|
|
|
|
EXPECT_EQ(1u, root->numChildren());
|
|
|
|
|
|
|
|
EXPECT_INNER_NODE_NUMBER_OF_LEAVES_IS(2, root->getChild(0)->key());
|
|
|
|
}
|
|
|
|
|
2015-02-20 20:16:44 +01:00
|
|
|
TEST_F(DataTreeGrowingTest_Structure, GrowAFullTwoLevelTreeFromGroundUp) {
|
|
|
|
auto key = CreateLeafOnlyTree()->key();
|
|
|
|
for (int i = 1; i < DataInnerNode::MAX_STORED_CHILDREN; ++i) {
|
|
|
|
AddLeafTo(key);
|
|
|
|
}
|
|
|
|
EXPECT_IS_FULL_TWOLEVEL_TREE(key);
|
|
|
|
}
|
|
|
|
|
2015-02-20 18:31:18 +01:00
|
|
|
TEST_F(DataTreeGrowingTest_Structure, GrowAFullTwoLevelTree) {
|
2015-02-23 17:03:45 +01:00
|
|
|
auto root_key = CreateFullTwoLevel()->key();
|
2015-02-20 18:31:18 +01:00
|
|
|
AddLeafTo(root_key);
|
|
|
|
|
|
|
|
auto root = LoadInnerNode(root_key);
|
|
|
|
EXPECT_EQ(2u, root->numChildren());
|
|
|
|
|
|
|
|
EXPECT_IS_FULL_TWOLEVEL_TREE(root->getChild(0)->key());
|
|
|
|
EXPECT_IS_TWONODE_CHAIN(root->getChild(1)->key());
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_F(DataTreeGrowingTest_Structure, GrowAThreeLevelTreeWithLowerLevelFull) {
|
|
|
|
auto root_key = CreateThreeLevelTreeWithLowerLevelFullReturnRootKey();
|
|
|
|
AddLeafTo(root_key);
|
|
|
|
|
|
|
|
auto root = LoadInnerNode(root_key);
|
|
|
|
EXPECT_EQ(2u, root->numChildren());
|
|
|
|
|
|
|
|
EXPECT_IS_FULL_TWOLEVEL_TREE(root->getChild(0)->key());
|
|
|
|
EXPECT_IS_TWONODE_CHAIN(root->getChild(1)->key());
|
|
|
|
}
|
|
|
|
|
2015-02-20 20:16:44 +01:00
|
|
|
TEST_F(DataTreeGrowingTest_Structure, GrowAFullThreeLevelTreeFromGroundUp) {
|
|
|
|
auto key = CreateLeafOnlyTree()->key();
|
|
|
|
for (int i = 1; i < DataInnerNode::MAX_STORED_CHILDREN * DataInnerNode::MAX_STORED_CHILDREN; ++i) {
|
|
|
|
AddLeafTo(key);
|
|
|
|
}
|
|
|
|
EXPECT_IS_FULL_THREELEVEL_TREE(key);
|
|
|
|
}
|
|
|
|
|
2015-02-20 18:31:18 +01:00
|
|
|
TEST_F(DataTreeGrowingTest_Structure, GrowAFullThreeLevelTree) {
|
2015-02-23 17:03:45 +01:00
|
|
|
auto root_key = CreateFullThreeLevel()->key();
|
2015-02-20 18:31:18 +01:00
|
|
|
AddLeafTo(root_key);
|
|
|
|
|
|
|
|
auto root = LoadInnerNode(root_key);
|
|
|
|
EXPECT_EQ(2u, root->numChildren());
|
|
|
|
|
|
|
|
EXPECT_IS_FULL_THREELEVEL_TREE(root->getChild(0)->key());
|
|
|
|
EXPECT_IS_THREENODE_CHAIN(root->getChild(1)->key());
|
|
|
|
}
|
|
|
|
|
2015-02-20 20:16:44 +01:00
|
|
|
TEST_F(DataTreeGrowingTest_Structure, GrowAThreeLevelTreeWithTwoFullSubtreesFromGroundUp) {
|
|
|
|
auto key = CreateLeafOnlyTree()->key();
|
|
|
|
for (int i = 1; i < 2 * DataInnerNode::MAX_STORED_CHILDREN; ++i) {
|
|
|
|
AddLeafTo(key);
|
|
|
|
}
|
|
|
|
|
|
|
|
auto root = LoadInnerNode(key);
|
|
|
|
EXPECT_EQ(2u, root->numChildren());
|
|
|
|
|
|
|
|
EXPECT_IS_FULL_TWOLEVEL_TREE(root->getChild(0)->key());
|
|
|
|
EXPECT_IS_FULL_TWOLEVEL_TREE(root->getChild(1)->key());
|
|
|
|
}
|
|
|
|
|
2015-02-20 18:31:18 +01:00
|
|
|
TEST_F(DataTreeGrowingTest_Structure, GrowAThreeLevelTreeWithTwoFullSubtrees) {
|
2015-02-20 20:16:44 +01:00
|
|
|
auto key = CreateThreeLevelTreeWithTwoFullSubtrees();
|
|
|
|
AddLeafTo(key);
|
2015-02-20 18:31:18 +01:00
|
|
|
|
2015-02-20 20:16:44 +01:00
|
|
|
auto root = LoadInnerNode(key);
|
2015-02-20 18:31:18 +01:00
|
|
|
EXPECT_EQ(3u, root->numChildren());
|
|
|
|
|
|
|
|
EXPECT_IS_FULL_TWOLEVEL_TREE(root->getChild(0)->key());
|
|
|
|
EXPECT_IS_FULL_TWOLEVEL_TREE(root->getChild(1)->key());
|
|
|
|
EXPECT_IS_TWONODE_CHAIN(root->getChild(2)->key());
|
|
|
|
}
|