1 #include <cppunit/TestFixture.h>
2 #include <cppunit/extensions/HelperMacros.h>
4 #include <genesorter.h>
6 #include <genealgorithms.h>
7 #include <componenttree.h>
14 * A test case that is designed to produce
15 * example errors and failures.
19 #define TESTNAME ComponentTreeTest
22 class TESTNAME : public CPPUNIT_NS::TestFixture
24 CPPUNIT_TEST_SUITE( TESTNAME );
25 CPPUNIT_TEST( testCreate );
26 CPPUNIT_TEST( testMakeUnoriented );
27 CPPUNIT_TEST( testCountLeaves );
28 CPPUNIT_TEST( testShortBranches );
29 CPPUNIT_TEST_SUITE_END();
32 vector<int> _validPerm;
33 vector<int> _validPerm2;
34 vector<int> _validPerm3;
35 vector<int> _validPerm4;
40 int validPerm[] = {1,2,3,4};
41 _validPerm.assign(validPerm,validPerm+4);
42 int validPerm2[] = {1,-3,-2,4};
43 _validPerm2.assign(validPerm2,validPerm2+4);
44 int validPerm3[] = {0,-2,-1,4,3,5,8,6,7,9};
45 _validPerm3.assign(validPerm3,validPerm3+10);
46 int validPerm4[] = {-3,1,2,4,6,5,7,-15,-13,-14,-12,-10,-11,-9,8};
47 _validPerm4.assign(validPerm4,validPerm4+15);
53 size_t count(ComponentTree::Node* n, bool all = false){
55 if (all || n->_comp.i2 != 0)
57 for (vector<ComponentTree::Node*>::iterator c = n->_children.begin();
58 c != n->_children.end(); ++c){
64 GeneOrder go(_validPerm.begin(),_validPerm.end());
65 ComponentTree t(findComponents(go));
66 ComponentTree::Node* n = t._root;
68 CPPUNIT_ASSERT_EQUAL((size_t)4u,count(n));
69 CPPUNIT_ASSERT_EQUAL((size_t)5u,count(n,true));
70 CPPUNIT_ASSERT_EQUAL((size_t)4u,n->_children.size());
72 Component go10(0,1,0,0,1);
73 Component go11(1,2,0,1,2);
74 Component go12(2,3,0,2,3);
75 Component go13(3,4,0,3,4);
76 CPPUNIT_ASSERT(n->_children[0]->_comp == go10);
77 CPPUNIT_ASSERT(n->_children[1]->_comp == go11);
78 CPPUNIT_ASSERT(n->_children[2]->_comp == go12);
79 CPPUNIT_ASSERT(n->_children[3]->_comp == go13);
81 GeneOrder go2(_validPerm4.begin(),_validPerm4.end());
82 ComponentTree t2(findComponents(go2));
85 CPPUNIT_ASSERT_EQUAL((size_t)6u,count(n));
86 CPPUNIT_ASSERT_EQUAL((size_t)9u,count(n,true));
87 CPPUNIT_ASSERT_EQUAL((size_t)3u,n->_children.size());
88 Component go20(1,2,0,2,3);
89 Component go21(0,4,0,0,4);
90 Component go22(4,7,1,4,7);
91 Component go23(-15,-12,-1,8,11);
92 Component go24(-12,-9,-1,11,14);
93 Component go25(7,16,0,7,16);
94 CPPUNIT_ASSERT(n->_children[0]->_comp == go21);
95 CPPUNIT_ASSERT(n->_children[1]->_comp == go22);
96 CPPUNIT_ASSERT(n->_children[2]->_comp == go25);
97 CPPUNIT_ASSERT(n->_children[0]->_children[0]->_children[0]->_comp == go20);
98 CPPUNIT_ASSERT(n->_children[2]->_children[0]->_children[0]->_comp == go23);
99 CPPUNIT_ASSERT(n->_children[2]->_children[0]->_children[1]->_comp == go24);
101 GeneOrder go3(_validPerm3.begin(),_validPerm3.end());
102 ComponentTree t3(findComponents(go3));
105 CPPUNIT_ASSERT_EQUAL((size_t)4u,count(n));
106 CPPUNIT_ASSERT_EQUAL((size_t)7u,count(n,true));
107 CPPUNIT_ASSERT_EQUAL((size_t)2u,n->_children.size());
109 Component go30(-2,-1,0,1,2);
110 Component go31(0,5,0,0,5);
111 Component go32(6,7,0,7,8);
112 Component go33(5,9,1,5,9);
113 CPPUNIT_ASSERT(n->_children[0]->_comp == go31);
114 CPPUNIT_ASSERT(n->_children[1]->_comp == go33);
115 CPPUNIT_ASSERT(n->_children[0]->_children[0]->_children[0]->_comp == go30);
116 CPPUNIT_ASSERT(n->_children[1]->_children[0]->_children[0]->_comp == go32);
120 void testMakeUnoriented (){
121 GeneOrder go(_validPerm.begin(),_validPerm.end());
122 ComponentTree t(findComponents(go));
124 ComponentTree::Node* n = t._root;
126 CPPUNIT_ASSERT_EQUAL((size_t)0u,count(n));
127 CPPUNIT_ASSERT_EQUAL((size_t)1u,count(n,true));
128 CPPUNIT_ASSERT_EQUAL((size_t)0u,n->_children.size());
130 GeneOrder go2(_validPerm4.begin(),_validPerm4.end());
131 ComponentTree t2(findComponents(go2));
135 CPPUNIT_ASSERT_EQUAL((size_t)4u,count(n));
136 CPPUNIT_ASSERT_EQUAL((size_t)6u,count(n,true));
137 CPPUNIT_ASSERT_EQUAL((size_t)2u,n->_children.size());
138 Component go22(4,7,1,4,7);
139 Component go23(-15,-12,-1,8,11);
140 Component go24(-12,-9,-1,11,14);
141 Component go25(7,16,0,7,16);
142 CPPUNIT_ASSERT(n->_children[0]->_comp == go22);
143 CPPUNIT_ASSERT(n->_children[1]->_comp == go25);
144 CPPUNIT_ASSERT(n->_children[1]->_children[0]->_children[0]->_comp == go23);
145 CPPUNIT_ASSERT(n->_children[1]->_children[0]->_children[1]->_comp == go24);
147 GeneOrder go3(_validPerm3.begin(),_validPerm3.end());
148 ComponentTree t3(findComponents(go3));
152 CPPUNIT_ASSERT_EQUAL((size_t)1u,count(n));
153 CPPUNIT_ASSERT_EQUAL((size_t)1u,count(n,true));
154 CPPUNIT_ASSERT_EQUAL((size_t)0u,n->_children.size());
157 void testCountLeaves (){
158 GeneOrder go(_validPerm.begin(),_validPerm.end());
159 ComponentTree t(findComponents(go));
162 CPPUNIT_ASSERT_EQUAL((size_t)0u,t.countLeaves());
164 GeneOrder go2(_validPerm4.begin(),_validPerm4.end());
165 ComponentTree t2(findComponents(go2));
167 ComponentTree::Node* n = t2._root;
168 CPPUNIT_ASSERT_EQUAL((size_t)2u,n->_children.size());
169 CPPUNIT_ASSERT_EQUAL(false,n->_children.empty());
170 CPPUNIT_ASSERT_EQUAL((size_t)3u,t2.countLeaves());
172 GeneOrder go3(_validPerm3.begin(),_validPerm3.end());
173 ComponentTree t3(findComponents(go3));
175 CPPUNIT_ASSERT_EQUAL((size_t)1u,t3.countLeaves());
177 void testShortBranches (){
178 GeneOrder go(_validPerm.begin(),_validPerm.end());
179 ComponentTree t(findComponents(go));
182 CPPUNIT_ASSERT_EQUAL((size_t)0u,t.shortBranches());
184 GeneOrder go2(_validPerm4.begin(),_validPerm4.end());
185 ComponentTree t2(findComponents(go2));
187 CPPUNIT_ASSERT_EQUAL((size_t)1u,t2.shortBranches());
189 GeneOrder go3(_validPerm3.begin(),_validPerm3.end());
190 ComponentTree t3(findComponents(go3));
192 CPPUNIT_ASSERT_EQUAL((size_t)1u,t3.shortBranches());
197 CPPUNIT_TEST_SUITE_REGISTRATION( TESTNAME );