]> ruin.nu Git - germs.git/blobdiff - src/test/componenttreetest.cpp
inital commit of componenttree with associated changes
[germs.git] / src / test / componenttreetest.cpp
diff --git a/src/test/componenttreetest.cpp b/src/test/componenttreetest.cpp
new file mode 100644 (file)
index 0000000..3e0b505
--- /dev/null
@@ -0,0 +1,101 @@
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <genesorter.h>
+#include <geneorder.h>
+#include <genealgorithms.h>
+#include <componenttree.h>
+
+#include <algorithm>
+#include <iterator>
+using namespace std;
+
+/* 
+ * A test case that is designed to produce
+ * example errors and failures.
+ *
+ */
+
+#define TESTNAME ComponentTreeTest
+
+
+class TESTNAME : public CPPUNIT_NS::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TESTNAME );
+  CPPUNIT_TEST( testCreate );
+  CPPUNIT_TEST_SUITE_END();
+
+protected:
+               vector<int> _validPerm;
+               vector<int> _validPerm2;
+               vector<int> _validPerm3;
+               vector<int> _validPerm4;
+
+public:
+
+       void setUp (){
+               int validPerm[] = {1,2,3,4};
+               _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};
+               _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);
+
+       }
+
+protected:
+
+       size_t count(ComponentTree::Node* n, bool all = false){
+               size_t num = 0;
+               if (all || n->_comp.i2 != 0)
+                       num += 1;
+               for (vector<ComponentTree::Node*>::iterator c = n->_children.begin();
+                               c != n->_children.end(); ++c){
+                       num += count(*c,all);
+               }
+               return num;
+       }
+       void testCreate (){
+               GeneOrder go(_validPerm.begin(),_validPerm.end());
+               ComponentTree t(findComponents(go));
+               ComponentTree::Node* n = &t._root;
+
+               CPPUNIT_ASSERT_EQUAL((size_t)4u,count(n));
+               CPPUNIT_ASSERT_EQUAL((size_t)5u,count(n,true));
+               CPPUNIT_ASSERT_EQUAL((size_t)4u,n->_children.size());
+
+               Component go10(0,1,0,0,1);
+               Component go11(1,2,0,1,2);
+               Component go12(2,3,0,2,3);
+               Component go13(3,4,0,3,4);
+               CPPUNIT_ASSERT(n->_children[0]->_comp == go10);
+               CPPUNIT_ASSERT(n->_children[1]->_comp == go11);
+               CPPUNIT_ASSERT(n->_children[2]->_comp == go12);
+               CPPUNIT_ASSERT(n->_children[3]->_comp == go13);
+
+               GeneOrder go2(_validPerm4.begin(),_validPerm4.end());
+               ComponentTree t2(findComponents(go2));
+               n = &t2._root;
+
+               CPPUNIT_ASSERT_EQUAL((size_t)6u,count(n));
+               CPPUNIT_ASSERT_EQUAL((size_t)9u,count(n,true));
+               CPPUNIT_ASSERT_EQUAL((size_t)3u,n->_children.size());
+               Component go20(1,2,0,2,3);
+               Component go21(0,4,0,0,4);
+               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 == go21);
+               CPPUNIT_ASSERT(n->_children[1]->_comp == go22);
+               CPPUNIT_ASSERT(n->_children[2]->_comp == go25);
+
+       }
+
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TESTNAME );
+
+#undef TESTNAME