]> ruin.nu Git - germs.git/blob - src/test/genealgorithmstest.cpp
sorting without hurdles seems to work
[germs.git] / src / test / genealgorithmstest.cpp
1 #include <cppunit/TestFixture.h>
2 #include <cppunit/extensions/HelperMacros.h>
3
4 #include <geneorder.h>
5 #include <genealgorithms.h>
6
7 #include <algorithm>
8 #include <iterator>
9 using namespace std;
10
11 /* 
12  * A test case that is designed to produce
13  * example errors and failures.
14  *
15  */
16
17 #define TESTNAME GeneAlgorithmsTest
18
19
20 class TESTNAME : public CPPUNIT_NS::TestFixture
21 {
22   CPPUNIT_TEST_SUITE( TESTNAME );
23   CPPUNIT_TEST( testRobinsonSchensted );
24   CPPUNIT_TEST( testLongestSequences );
25   CPPUNIT_TEST( testFindIntervals );
26   CPPUNIT_TEST( testFindIntervalsAtPoints );
27   CPPUNIT_TEST( testCountCycles );
28   CPPUNIT_TEST( testFindComponents );
29   CPPUNIT_TEST( testInversionDistance );
30   CPPUNIT_TEST_SUITE_END();
31
32 protected:
33                 vector<int> _validPerm;
34                 vector<int> _validPerm2;
35                 vector<int> _validPerm3;
36                 vector<int> _bigvalidPerm;
37                 vector<int> _invalidPerm;
38
39 public:
40
41         void setUp (){
42                 int validPerm[] = {1,2,3,4};
43                 _validPerm.assign(validPerm,validPerm+4);
44                 int validPerm2[] = {0,-2,-1,4,3,5,-8,6,7,9};
45                 _validPerm2.assign(validPerm2,validPerm2+10);
46                 int validPerm3[] = {-3,1,2,4,6,5,7,-15,-13,-14,-12,-10,-11,-9,8};
47                 _validPerm3.assign(validPerm3,validPerm3+15);
48                 int invalidPerm[] = {1,3,4,5};
49                 _invalidPerm.assign(invalidPerm,validPerm+4);
50                 int test[] = {0,493,494,495,299,336,-490,-489,-488,-487,-486,-484,481,-482,503,-140,504,292,-507,97,-506,-505,154,157,509,510,511,512,513,514,515,-235,516,517,132,518,-308,519,520,521,523,525,526,383,384,-116,-119,529,530,531,532,533,433,-432,-431,-430,-429,-428,-426,-425,-424,-423,-422,-421,185,-420,-419,-418,-417,-416,-415,-414,-413,-412,-411,-410,-409,-408,-407,-406,-405,-404,-403,-402,-401,-400,-399,-398,-397,-396,-395,-394,-393,-63,-392,-391,-390,-238,-389,-388,-387,-386,385,-382,162,-381,-380,-379,-378,-377,-376,-375,-374,-58,-373,-372,-371,-370,-369,-368,-366,-365,-364,-363,-362,-359,-358,-357,-356,-355,-354,-353,-352,-351,-350,-349,-348,-347,-346,-84,-345,-344,-343,-329,-328,-67,146,-321,596,-316,-315,-314,-313,-311,-310,175,51,-309,-134,-342,-340,-339,-338,-337,-334,-333,-331,-194,-330,-306,-305,-302,-301,-300,-298,297,-296,-295,293,-291,294,-290,632,-40,-273,633,634,322,-323,-324,-327,-325,5,6,-7,-106,-216,-75,-215,-214,-213,-212,-211,188,-209,-208,-207,-206,-203,-202,-201,-200,141,-199,-198,-197,-92,93,94,95,98,-192,-191,-190,-196,-195,-193,36,37,39,-41,42,43,44,46,47,50,52,53,56,54,59,61,62,65,66,68,69,70,71,72,73,74,76,77,78,-60,79,80,81,82,85,86,88,-90,91,-189,-187,-186,-48,-184,-16,-182,-181,-180,-179,-178,64,-177,-176,-174,-159,-158,-170,-169,-156,-153,-152,-121,122,172,-617,128,130,127,129,137,138,139,113,114,-151,-150,-149,-148,-147,118,-145,-144,173,183,-163,-117,-161,124,123,126,125,-160,115,120,485,108,110,111,142,143,164,-19,-136,-135,-133,-131,-107,-168,-167,165,100,-105,-104,-102,-101,-35,-34,-33,-32,-20,-31,-30,-29,-28,-26,-25,-24,-23,-22,-21,-17,-55,13,14,15,-12,-11,-10,-252,-18,231,232,233,234,237,239,240,241,242,243,244,245,246,247,83,248,-219,220,221,222,223,224,225,227,228,229,230,38,254,255,256,257,258,-49,259,260,261,263,265,266,57,-361,-4,-3,-2,-1,-280,-281,96,-9,-8,267,-249,250,251,268,269,-360,270,271,272,528,166,274,275,276,277,278,279,282,283,171,284,285,286,287,264,253,452,-631,-630,-629,-628,-627,-626,-625,-451,-624,-623,-622,-621,-620,-619,-618,-87,-218,-616,-615,-614,-613,-612,-611,-610,-609,-608,-607,-606,-605,-604,-603,591,-602,27,-601,-600,-598,-599,-597,226,318,320,-326,-595,-594,-593,-592,-155,590,-589,-588,-587,-586,-585,-584,-583,-582,-581,-580,-579,-578,427,-577,-540,-560,-576,-575,-574,-573,-572,-571,-570,-569,-568,335,-567,-332,508,-112,-566,545,-565,204,-564,205,-103,563,-109,-562,-559,-558,-45,-557,-556,-312,-555,-554,-553,262,-552,-551,-317,-550,-549,-548,-547,-546,304,544,543,-542,-541,527,-236,-539,-538,-537,-522,483,-536,-436,-341,217,319,-289,-535,-534,-524,-288,99,434,435,-437,89,438,439,440,441,442,443,444,445,446,447,448,449,450,210,453,454,455,303,456,457,458,-561,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,367,496,497,498,499,500,501,502,476,477,478,-307,479,480,-491,492,635};
51
52                 _bigvalidPerm.assign(test,test+636);
53         }
54
55 protected:
56
57         void testRobinsonSchensted (){
58                 GeneOrder go(_validPerm.begin(),_validPerm.end());
59                 vector<vector<int> > v = robinsonSchensted(go);
60                 CPPUNIT_ASSERT_EQUAL(1ul,v.size());
61                 
62                 int go11[] = {0,1,2,3,4};
63                 CPPUNIT_ASSERT(equal(v[0].begin(),v[0].end(),go11));
64
65                 GeneOrder go2(_validPerm2.begin(),_validPerm2.end());
66                 v = robinsonSchensted(go2);
67                 int first[] = {0,1,3,5,6,7,9};
68                 int second[] = {2,4,8};
69                 CPPUNIT_ASSERT_EQUAL(2ul,v.size());
70                 CPPUNIT_ASSERT(equal(v[0].begin(),v[0].end(),first));
71                 CPPUNIT_ASSERT(equal(v[1].begin(),v[1].end(),second));
72         }
73
74         void testLongestSequences (){
75                 GeneOrder go(_validPerm.begin(),_validPerm.end());
76                 pair<int,int> p = longestSequences(go);
77                 CPPUNIT_ASSERT_EQUAL(5,p.first);
78                 CPPUNIT_ASSERT_EQUAL(1,p.second);
79                 
80                 GeneOrder go2(_validPerm2.begin(),_validPerm2.end());
81                 p = longestSequences(go2);
82                 CPPUNIT_ASSERT_EQUAL(7,p.first);
83                 CPPUNIT_ASSERT_EQUAL(2,p.second);
84         }
85         void testFindIntervals (){
86                 GeneOrder go(_validPerm.begin(),_validPerm.end());
87                 vector<Interval> v = findIntervals(go);
88                 CPPUNIT_ASSERT_EQUAL(4ul,v.size());
89                 Interval go10(1,1);
90                 Interval go12(3,3);
91                 CPPUNIT_ASSERT(go10 == v[0]);
92                 CPPUNIT_ASSERT(go12 == v[2]);
93                 
94                 GeneOrder go2(_validPerm2.begin(),_validPerm2.end());
95                 v = findIntervals(go2);
96                 CPPUNIT_ASSERT_EQUAL(9ul,v.size());
97                 Interval go20(1,3,true);
98                 Interval go21(2,2);
99                 Interval go22(1,4,true);
100                 Interval go23(5,3);
101                 Interval go25(6,7);
102                 Interval go26(8,8);
103                 Interval go27(9,7,true);
104                 CPPUNIT_ASSERT(go20 == v[0]);
105                 CPPUNIT_ASSERT(go21 == v[1]);
106                 CPPUNIT_ASSERT(go22 == v[2]);
107                 CPPUNIT_ASSERT(go23 == v[3]);
108                 CPPUNIT_ASSERT(go25 == v[5]);
109                 CPPUNIT_ASSERT(go26 == v[6]);
110                 CPPUNIT_ASSERT(go27 == v[7]);
111
112                 /*GeneOrder go2(_validPerm3.begin(),_validPerm3.end());
113                 v = findIntervals(go2);
114                 CPPUNIT_ASSERT_EQUAL(16ul,v.size());
115                 Interval go20(1,2,true);
116                 Interval go22(4,2);
117                 Interval go215(8,16);
118                 CPPUNIT_ASSERT(go20 == v[0]);
119                 CPPUNIT_ASSERT(go22 == v[2]);
120                 CPPUNIT_ASSERT(go215 == v[15]);*/
121         }
122         void testFindIntervalsAtPoints (){
123                 GeneOrder go(_validPerm.begin(),_validPerm.end());
124                 vector<Interval> v = findIntervals(go);
125                 v = findIntervalsAtPoints(v);
126                 CPPUNIT_ASSERT_EQUAL(5ul,v.size());
127                 Interval go10(0,0);
128                 Interval go12(2,2);
129                 CPPUNIT_ASSERT(go10 == v[1]);
130                 CPPUNIT_ASSERT(go12 == v[3]);
131                 
132                 GeneOrder go2(_validPerm3.begin(),_validPerm3.end());
133                 v = findIntervals(go2);
134                 v = findIntervalsAtPoints(v);
135                 CPPUNIT_ASSERT_EQUAL(17ul,v.size());
136                 Interval go20(0,3);
137                 Interval go22(1,1);
138                 CPPUNIT_ASSERT(go20 == v[1]);
139                 CPPUNIT_ASSERT(go22 == v[3]);
140         }
141         void testCountCycles (){
142                 GeneOrder go(_validPerm.begin(),_validPerm.end());
143                 int c = countCycles(go);
144                 CPPUNIT_ASSERT_EQUAL(4,c);
145                 
146                 GeneOrder go2(_validPerm3.begin(),_validPerm3.end());
147                 c = countCycles(go2);
148                 CPPUNIT_ASSERT_EQUAL(6,c);
149         }
150
151         void testInversionDistance (){
152                 GeneOrder go(_validPerm.begin(),_validPerm.end());
153                 size_t d = inversionDistance(go);
154                 CPPUNIT_ASSERT_EQUAL(0ul,d);
155                 
156                 GeneOrder go2(_validPerm2.begin(),_validPerm2.end());
157                 d = inversionDistance(go2);
158                 CPPUNIT_ASSERT_EQUAL(5ul,d);
159
160                 GeneOrder go3(_validPerm3.begin(),_validPerm3.end());
161                 d = inversionDistance(go3);
162                 CPPUNIT_ASSERT_EQUAL(13ul,d);
163         }
164
165         void testFindComponents (){
166                 GeneOrder go(_validPerm.begin(),_validPerm.end());
167                 vector<Component> v = findComponents(go);
168                 CPPUNIT_ASSERT_EQUAL(4ul,v.size());
169                 Component go10(0,1,0);
170                 Component go11(1,2,0);
171                 Component go12(2,3,0);
172                 Component go13(3,4,0);
173                 CPPUNIT_ASSERT(go10 == v[0]);
174                 CPPUNIT_ASSERT(go11 == v[1]);
175                 CPPUNIT_ASSERT(go12 == v[2]);
176                 CPPUNIT_ASSERT(go13 == v[3]);
177                 
178                 GeneOrder go2(_validPerm3.begin(),_validPerm3.end());
179                 v = findComponents(go2);
180                 CPPUNIT_ASSERT_EQUAL(6ul,v.size());
181                 Component go20(1,2,0);
182                 Component go21(0,4,0);
183                 Component go22(4,7,1);
184                 Component go23(-15,-12,-1);
185                 Component go24(-12,-9,-1);
186                 Component go25(7,16,0);
187                 CPPUNIT_ASSERT(go20 == v[0]);
188                 CPPUNIT_ASSERT(go21 == v[1]);
189                 CPPUNIT_ASSERT(go22 == v[2]);
190                 CPPUNIT_ASSERT(go23 == v[3]);
191                 CPPUNIT_ASSERT(go24 == v[4]);
192                 CPPUNIT_ASSERT(go25 == v[5]);
193         }
194
195 };
196
197 CPPUNIT_TEST_SUITE_REGISTRATION( TESTNAME );
198
199 #undef TESTNAME