]> ruin.nu Git - germs.git/blobdiff - src/test/componenttreetest.cpp
BUGFIX: forgot to set parent to 0 on child when removing parent node
[germs.git] / src / test / componenttreetest.cpp
index 3e0b5051a57c62f15ddb7552f2cfb4dbd80a473e..a26946537deff3ed68258018d8aa8c760bcb6671 100644 (file)
@@ -23,6 +23,9 @@ class TESTNAME : public CPPUNIT_NS::TestFixture
 {
   CPPUNIT_TEST_SUITE( TESTNAME );
   CPPUNIT_TEST( testCreate );
+  CPPUNIT_TEST( testMakeUnoriented );
+  CPPUNIT_TEST( testCountLeaves );
+  CPPUNIT_TEST( testShortBranches );
   CPPUNIT_TEST_SUITE_END();
 
 protected:
@@ -38,7 +41,7 @@ public:
                _validPerm.assign(validPerm,validPerm+4);
                int validPerm2[] = {1,-3,-2,4};
                _validPerm2.assign(validPerm2,validPerm2+4);
-               int validPerm3[] = {0,-2,-1,4,3,5,-8,6,7,9};
+               int validPerm3[] = {0,-2,-1,4,3,5,8,6,7,9};
                _validPerm3.assign(validPerm3,validPerm3+10);
                int validPerm4[] = {-3,1,2,4,6,5,7,-15,-13,-14,-12,-10,-11,-9,8};
                _validPerm4.assign(validPerm4,validPerm4+15);
@@ -60,7 +63,7 @@ protected:
        void testCreate (){
                GeneOrder go(_validPerm.begin(),_validPerm.end());
                ComponentTree t(findComponents(go));
-               ComponentTree::Node* n = &t._root;
+               ComponentTree::Node* n = t._root;
 
                CPPUNIT_ASSERT_EQUAL((size_t)4u,count(n));
                CPPUNIT_ASSERT_EQUAL((size_t)5u,count(n,true));
@@ -77,7 +80,7 @@ protected:
 
                GeneOrder go2(_validPerm4.begin(),_validPerm4.end());
                ComponentTree t2(findComponents(go2));
-               n = &t2._root;
+               n = t2._root;
 
                CPPUNIT_ASSERT_EQUAL((size_t)6u,count(n));
                CPPUNIT_ASSERT_EQUAL((size_t)9u,count(n,true));
@@ -91,7 +94,102 @@ protected:
                CPPUNIT_ASSERT(n->_children[0]->_comp == go21);
                CPPUNIT_ASSERT(n->_children[1]->_comp == go22);
                CPPUNIT_ASSERT(n->_children[2]->_comp == go25);
+               CPPUNIT_ASSERT(n->_children[0]->_children[0]->_children[0]->_comp == go20);
+               CPPUNIT_ASSERT(n->_children[2]->_children[0]->_children[0]->_comp == go23);
+               CPPUNIT_ASSERT(n->_children[2]->_children[0]->_children[1]->_comp == go24);
 
+               GeneOrder go3(_validPerm3.begin(),_validPerm3.end());
+               ComponentTree t3(findComponents(go3));
+               n = t3._root;
+
+               CPPUNIT_ASSERT_EQUAL((size_t)4u,count(n));
+               CPPUNIT_ASSERT_EQUAL((size_t)7u,count(n,true));
+               CPPUNIT_ASSERT_EQUAL((size_t)2u,n->_children.size());
+
+               Component go30(-2,-1,0,1,2);
+               Component go31(0,5,0,0,5);
+               Component go32(6,7,0,7,8);
+               Component go33(5,9,1,5,9);
+               CPPUNIT_ASSERT(n->_children[0]->_comp == go31);
+               CPPUNIT_ASSERT(n->_children[1]->_comp == go33);
+               CPPUNIT_ASSERT(n->_children[0]->_children[0]->_children[0]->_comp == go30);
+               CPPUNIT_ASSERT(n->_children[1]->_children[0]->_children[0]->_comp == go32);
+
+       }
+
+       void testMakeUnoriented (){
+               GeneOrder go(_validPerm.begin(),_validPerm.end());
+               ComponentTree t(findComponents(go));
+               t.makeUnoriented();
+               ComponentTree::Node* n = t._root;
+
+               CPPUNIT_ASSERT_EQUAL((size_t)0u,count(n));
+               CPPUNIT_ASSERT_EQUAL((size_t)1u,count(n,true));
+               CPPUNIT_ASSERT_EQUAL((size_t)0u,n->_children.size());
+
+               GeneOrder go2(_validPerm4.begin(),_validPerm4.end());
+               ComponentTree t2(findComponents(go2));
+               t2.makeUnoriented();
+               n = t2._root;
+
+               CPPUNIT_ASSERT_EQUAL((size_t)4u,count(n));
+               CPPUNIT_ASSERT_EQUAL((size_t)6u,count(n,true));
+               CPPUNIT_ASSERT_EQUAL((size_t)2u,n->_children.size());
+               Component go22(4,7,1,4,7);
+               Component go23(-15,-12,-1,8,11);
+               Component go24(-12,-9,-1,11,14);
+               Component go25(7,16,0,7,16);
+               CPPUNIT_ASSERT(n->_children[0]->_comp == go22);
+               CPPUNIT_ASSERT(n->_children[1]->_comp == go25);
+               CPPUNIT_ASSERT(n->_children[1]->_children[0]->_children[0]->_comp == go23);
+               CPPUNIT_ASSERT(n->_children[1]->_children[0]->_children[1]->_comp == go24);
+
+               GeneOrder go3(_validPerm3.begin(),_validPerm3.end());
+               ComponentTree t3(findComponents(go3));
+               t3.makeUnoriented();
+               n = t3._root;
+
+               CPPUNIT_ASSERT_EQUAL((size_t)1u,count(n));
+               CPPUNIT_ASSERT_EQUAL((size_t)1u,count(n,true));
+               CPPUNIT_ASSERT_EQUAL((size_t)0u,n->_children.size());
+       }
+
+       void testCountLeaves (){
+               GeneOrder go(_validPerm.begin(),_validPerm.end());
+               ComponentTree t(findComponents(go));
+               t.makeUnoriented();
+
+               CPPUNIT_ASSERT_EQUAL((size_t)0u,t.countLeaves());
+
+               GeneOrder go2(_validPerm4.begin(),_validPerm4.end());
+               ComponentTree t2(findComponents(go2));
+               t2.makeUnoriented();
+               ComponentTree::Node* n = t2._root;
+               CPPUNIT_ASSERT_EQUAL((size_t)2u,n->_children.size());
+               CPPUNIT_ASSERT_EQUAL(false,n->_children.empty());
+               CPPUNIT_ASSERT_EQUAL((size_t)3u,t2.countLeaves());
+
+               GeneOrder go3(_validPerm3.begin(),_validPerm3.end());
+               ComponentTree t3(findComponents(go3));
+               t3.makeUnoriented();
+               CPPUNIT_ASSERT_EQUAL((size_t)1u,t3.countLeaves());
+       }
+       void testShortBranches (){
+               GeneOrder go(_validPerm.begin(),_validPerm.end());
+               ComponentTree t(findComponents(go));
+               t.makeUnoriented();
+
+               CPPUNIT_ASSERT_EQUAL((size_t)0u,t.shortBranches());
+
+               GeneOrder go2(_validPerm4.begin(),_validPerm4.end());
+               ComponentTree t2(findComponents(go2));
+               t2.makeUnoriented();
+               CPPUNIT_ASSERT_EQUAL((size_t)1u,t2.shortBranches());
+
+               GeneOrder go3(_validPerm3.begin(),_validPerm3.end());
+               ComponentTree t3(findComponents(go3));
+               t3.makeUnoriented();
+               CPPUNIT_ASSERT_EQUAL((size_t)1u,t3.shortBranches());
        }
 
 };