114 lines
3.7 KiB
C++
114 lines
3.7 KiB
C++
|
|
#include <iostream>
|
|
#include <string>
|
|
#include "gtest/gtest.h"
|
|
#include "../src/core/Tree.h"
|
|
#include "../src/core/TreeNode.h"
|
|
|
|
class TreeTest: public ::testing::Test {
|
|
protected:
|
|
virtual void SetUp(){
|
|
for(int i = 0; i < 5; ++i) {
|
|
t2.getRoot()->addChildObject(std::make_shared<std::string>("a"+std::to_string(i)));
|
|
}
|
|
for(int i = 0; i < 5; ++i) {
|
|
t3.getRoot()->addChildObject(std::make_shared<std::string>("a"+std::to_string(i)));
|
|
}
|
|
for(int i = 0; i < 5; ++i) {
|
|
t3.getRoot()->getChildren()->at(2)->addChildObject(std::make_shared<std::string>("b" + std::to_string(i)));
|
|
}
|
|
for(int i = 0; i < 3; ++i) {
|
|
t3.getRoot()->getChildren()->at(4)->addChildObject(std::make_shared<std::string>("c" + std::to_string(i)));
|
|
}
|
|
}
|
|
|
|
virtual void TearDown(){}
|
|
|
|
Tree<std::string> t;
|
|
Tree<std::string> t2;
|
|
Tree<std::string> t3;
|
|
};
|
|
|
|
|
|
TEST_F(TreeTest, IsEmptyInitially) {
|
|
EXPECT_EQ(0, t.getRoot()->getDistanceFromRoot());
|
|
EXPECT_EQ(0, t.getRoot()->getChildren()->size());
|
|
}
|
|
|
|
TEST_F(TreeTest, AddingOneLayer) {
|
|
EXPECT_EQ(5, t2.getRoot()->getChildren()->size());
|
|
auto last = t2.getRoot()->getChildren()->back();
|
|
EXPECT_EQ(1, last->getDistanceFromRoot());
|
|
}
|
|
|
|
TEST_F(TreeTest, AddingTwoLayers) {
|
|
EXPECT_EQ(2, t3.getRoot()->getChildren()->at(2)->getChildren()->at(2)->getDistanceFromRoot());
|
|
}
|
|
|
|
TEST_F(TreeTest, RemovalSingleNode) {
|
|
auto node = t3.getRoot()->getChildren()->at(2)->getChildren()->at(2);
|
|
node->remove();
|
|
EXPECT_EQ(4, t3.getRoot()->getChildren()->at(2)->getChildren()->size());
|
|
}
|
|
|
|
TEST_F(TreeTest, RecursiveRemoval) {
|
|
auto node = t3.getRoot()->getChildren()->at(2);
|
|
node->remove();
|
|
EXPECT_EQ(4, t3.getRoot()->getChildren()->size());
|
|
}
|
|
|
|
TEST_F(TreeTest, SingleMovement) {
|
|
auto node = t3.getRoot()->getChildren()->at(2)->getChildren()->at(3);
|
|
auto to = t3.getRoot()->getChildren()->at(3);
|
|
node->move(to);
|
|
EXPECT_EQ(1, to->getChildren()->size());
|
|
}
|
|
TEST_F(TreeTest, RecursiveMovement) {
|
|
auto node = t3.getRoot()->getChildren()->at(2);
|
|
auto to = t3.getRoot()->getChildren()->at(3);
|
|
node->move(to);
|
|
EXPECT_EQ(1, to->getChildren()->size());
|
|
EXPECT_EQ(5, to->getChildren()->at(0)->getChildren()->size());
|
|
}
|
|
|
|
TEST_F(TreeTest, Copy) {
|
|
auto node = t3.getRoot()->getChildren()->at(2);
|
|
auto newnode = node->copy();
|
|
EXPECT_EQ(0, newnode->getChildren()->size());
|
|
}
|
|
TEST_F(TreeTest, RecursiveCopy) {
|
|
auto node = t3.getRoot()->getChildren()->at(2);
|
|
auto newnode = node->rcopy();
|
|
EXPECT_EQ(5, newnode->getChildren()->size());
|
|
}
|
|
|
|
TEST_F(TreeTest, TraverseTreeDepth) {
|
|
EXPECT_EQ(5, t3.getRoot()->getChildren()->size());
|
|
EXPECT_EQ(5, t3.getRoot()->getChildren()->at(2)->getChildren()->size());
|
|
std::string expectedResult = " a0 a1 a2 b0 b1 b2 b3 b4 a3 a4 c0 c1 c2";
|
|
std::string result = "";
|
|
TreeWalkStrategy walk = TreeWalkStrategy::depthFirst;
|
|
auto node = t3.getFirst();
|
|
while (node != nullptr) {
|
|
result = result + " " + node->getData()->c_str();
|
|
node = node->next(walk);
|
|
}
|
|
std::cout << result <<std::endl;
|
|
EXPECT_EQ(expectedResult, result);
|
|
}
|
|
|
|
TEST_F(TreeTest, TraverseTreeBreadth) {
|
|
EXPECT_EQ(5, t3.getRoot()->getChildren()->size());
|
|
EXPECT_EQ(5, t3.getRoot()->getChildren()->at(2)->getChildren()->size());
|
|
std::string expectedResult = " a0 a1 a2 a3 a4 b0 b1 b2 b3 b4 c0 c1 c2";
|
|
std::string result = "";
|
|
TreeWalkStrategy walk = TreeWalkStrategy::breadthFirst;
|
|
auto node = t3.getFirst();
|
|
while (node != nullptr) {
|
|
result = result + " " + node->getData()->c_str();
|
|
node = node->next(walk);
|
|
}
|
|
std::cout << result <<std::endl;
|
|
EXPECT_EQ(expectedResult, result);
|
|
}
|