|
#include "tree.h" |
|
|
|
#define BOOST_TEST_MODULE TreeTest |
|
#include <boost/test/unit_test.hpp> |
|
|
|
#include <boost/scoped_ptr.hpp> |
|
|
|
namespace MosesTraining { |
|
namespace Syntax { |
|
namespace { |
|
|
|
|
|
BOOST_AUTO_TEST_CASE(pre_order_1) { |
|
boost::scoped_ptr<Tree<int> > root(new Tree<int>(123)); |
|
Tree<int>::PreOrderIterator p(*root); |
|
BOOST_REQUIRE(p != Tree<int>::PreOrderIterator()); |
|
BOOST_REQUIRE(p->value() == 123); |
|
++p; |
|
BOOST_REQUIRE(p == Tree<int>::PreOrderIterator()); |
|
} |
|
|
|
|
|
BOOST_AUTO_TEST_CASE(pre_order_2) { |
|
boost::scoped_ptr<Tree<int> > root(new Tree<int>(1)); |
|
root->children().push_back(new Tree<int>(2)); |
|
root->children()[0]->children().push_back(new Tree<int>(3)); |
|
root->children().push_back(new Tree<int>(4)); |
|
root->children().push_back(new Tree<int>(5)); |
|
root->children()[2]->children().push_back(new Tree<int>(6)); |
|
root->children()[2]->children().push_back(new Tree<int>(7)); |
|
root->children()[2]->children()[1]->children().push_back(new Tree<int>(8)); |
|
root->SetParents(); |
|
|
|
Tree<int>::PreOrderIterator p(*root); |
|
Tree<int>::PreOrderIterator end; |
|
|
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 1); |
|
++p; |
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 2); |
|
++p; |
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 3); |
|
++p; |
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 4); |
|
++p; |
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 5); |
|
++p; |
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 6); |
|
++p; |
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 7); |
|
++p; |
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 8); |
|
++p; |
|
BOOST_REQUIRE(p == end); |
|
} |
|
|
|
|
|
BOOST_AUTO_TEST_CASE(const_pre_order_1) { |
|
boost::scoped_ptr<Tree<int> > root(new Tree<int>(1)); |
|
root->children().push_back(new Tree<int>(2)); |
|
root->children()[0]->children().push_back(new Tree<int>(3)); |
|
root->children()[0]->children()[0]->children().push_back(new Tree<int>(4)); |
|
root->children()[0]->children()[0]->children()[0]->children().push_back( |
|
new Tree<int>(5)); |
|
root->children()[0]->children()[0]->children()[0]->children().push_back( |
|
new Tree<int>(6)); |
|
root->children().push_back(new Tree<int>(7)); |
|
root->SetParents(); |
|
|
|
Tree<int>::ConstPreOrderIterator p(*root); |
|
Tree<int>::ConstPreOrderIterator end; |
|
|
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 1); |
|
++p; |
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 2); |
|
++p; |
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 3); |
|
++p; |
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 4); |
|
++p; |
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 5); |
|
++p; |
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 6); |
|
++p; |
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 7); |
|
++p; |
|
BOOST_REQUIRE(p == end); |
|
} |
|
|
|
|
|
BOOST_AUTO_TEST_CASE(leaf_1) { |
|
boost::scoped_ptr<Tree<int> > root(new Tree<int>(123)); |
|
Tree<int>::LeafIterator p(*root); |
|
BOOST_REQUIRE(p != Tree<int>::LeafIterator()); |
|
BOOST_REQUIRE(p->value() == 123); |
|
++p; |
|
BOOST_REQUIRE(p == Tree<int>::LeafIterator()); |
|
} |
|
|
|
|
|
BOOST_AUTO_TEST_CASE(leaf_2) { |
|
boost::scoped_ptr<Tree<int> > root(new Tree<int>(1)); |
|
root->children().push_back(new Tree<int>(2)); |
|
root->children()[0]->children().push_back(new Tree<int>(3)); |
|
root->children().push_back(new Tree<int>(4)); |
|
root->children().push_back(new Tree<int>(5)); |
|
root->children()[2]->children().push_back(new Tree<int>(6)); |
|
root->children()[2]->children().push_back(new Tree<int>(7)); |
|
root->children()[2]->children()[1]->children().push_back(new Tree<int>(8)); |
|
root->SetParents(); |
|
|
|
Tree<int>::LeafIterator p(*root); |
|
Tree<int>::LeafIterator end; |
|
|
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 3); |
|
++p; |
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 4); |
|
++p; |
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 6); |
|
++p; |
|
BOOST_REQUIRE(p != end); |
|
BOOST_REQUIRE(p->value() == 8); |
|
++p; |
|
BOOST_REQUIRE(p == end); |
|
} |
|
|
|
} |
|
} |
|
} |
|
|