From 1b15af4a3c2e2bd5e10dd3f8e150bc34131739c3 Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Tue, 27 Jan 2015 16:54:46 +0100 Subject: [PATCH] Add some tests to DataTree --- .../onblocks/datatreestore/DataTreeTest.cpp | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/src/test/blobstore/implementations/onblocks/datatreestore/DataTreeTest.cpp b/src/test/blobstore/implementations/onblocks/datatreestore/DataTreeTest.cpp index c422eae9..7a253d74 100644 --- a/src/test/blobstore/implementations/onblocks/datatreestore/DataTreeTest.cpp +++ b/src/test/blobstore/implementations/onblocks/datatreestore/DataTreeTest.cpp @@ -51,6 +51,27 @@ public: return key; } + Key CreateTreeAddThreeLeavesReturnRootKey() { + auto tree = CreateLeafOnlyTree(); + auto key = tree->key(); + tree->addDataLeaf(); + tree->addDataLeaf(); + tree->addDataLeaf(); + return key; + } + + Key CreateThreeNodeChainedTreeReturnRootKey() { + auto leaf = nodeStore.createNewLeafNode(); + auto node = nodeStore.createNewInnerNode(*leaf); + auto root = nodeStore.createNewInnerNode(*node); + return root->key(); + } + + void AddLeafTo(const Key &key) { + DataTree tree(&nodeStore, nodeStore.load(key)); + tree.addDataLeaf(); + } + unique_ptr LoadInnerNode(const Key &key) { auto node = nodeStore.load(key); return dynamic_pointer_move(node); @@ -112,6 +133,51 @@ TEST_F(DataTreeTest, GrowATwoNodeTree_Structure) { EXPECT_IS_LEAF_NODE(root->getChild(2)->key()); } +TEST_F(DataTreeTest, GrowAThreeNodeTree_KeyDoesntChange) { + auto tree = CreateLeafOnlyTree(); + auto key = tree->key(); + tree->addDataLeaf(); + tree->addDataLeaf(); + tree->addDataLeaf(); + EXPECT_EQ(key, tree->key()); +} + +TEST_F(DataTreeTest, GrowAThreeNodeTree_Structure) { + auto key = CreateTreeAddThreeLeavesReturnRootKey(); + + EXPECT_IS_INNER_NODE(key); + auto root = LoadInnerNode(key); + + EXPECT_EQ(4u, root->numChildren()); + EXPECT_IS_LEAF_NODE(root->getChild(0)->key()); + EXPECT_IS_LEAF_NODE(root->getChild(1)->key()); + EXPECT_IS_LEAF_NODE(root->getChild(2)->key()); + EXPECT_IS_LEAF_NODE(root->getChild(3)->key()); +} + +TEST_F(DataTreeTest, GrowAThreeNodeChainedTree_KeyDoesntChange) { + auto root_key = CreateThreeNodeChainedTreeReturnRootKey(); + DataTree tree(&nodeStore, nodeStore.load(root_key)); + tree.addDataLeaf(); + EXPECT_EQ(root_key, tree.key()); +} + +TEST_F(DataTreeTest, GrowAThreeNodeChainedTree_Structure) { + auto key = CreateThreeNodeChainedTreeReturnRootKey(); + AddLeafTo(key); + + EXPECT_IS_INNER_NODE(key); + auto root = LoadInnerNode(key); + + EXPECT_EQ(1u, root->numChildren()); + EXPECT_IS_INNER_NODE(root->getChild(0)->key()); + auto node = LoadInnerNode(root->getChild(0)->key()); + + EXPECT_EQ(2u, node->numChildren()); + EXPECT_IS_LEAF_NODE(node->getChild(0)->key()); + EXPECT_IS_LEAF_NODE(node->getChild(1)->key()); +} + //TODO Grow a full two-level tree //TODO Grow a three-level tree //TODO Go through some cases where the right border node chosen is special