]> ruin.nu Git - germs.git/blob - src/test/genesortertest.cpp
bad testcase
[germs.git] / src / test / genesortertest.cpp
1 #include <cppunit/TestFixture.h>
2 #include <cppunit/extensions/HelperMacros.h>
3
4 #include <genesorter.h>
5 #include <geneorder.h>
6 #include <genealgorithms.h>
7 #include <reverseaction.h>
8 #include <models.h>
9 #include <model.h>
10
11 #include <algorithm>
12 #include <iterator>
13 using namespace std;
14
15 /* 
16  * A test case that is designed to produce
17  * example errors and failures.
18  *
19  */
20
21 #define TESTNAME GeneSorterTest
22
23
24 class TESTNAME : public CPPUNIT_NS::TestFixture
25 {
26   CPPUNIT_TEST_SUITE( TESTNAME );
27   CPPUNIT_TEST( testCreate );
28   CPPUNIT_TEST( testSafeActions );
29   CPPUNIT_TEST( testSort );
30   CPPUNIT_TEST_SUITE_END();
31
32 protected:
33                 vector<int> _validPerm;
34                 vector<int> _validPerm2;
35                 vector<int> _validPerm3;
36                 vector<int> _validPerm4;
37
38 public:
39
40         void setUp (){
41                 int validPerm[] = {1,2,3,4};
42                 _validPerm.assign(validPerm,validPerm+4);
43                 int validPerm2[] = {1,-3,-2,4};
44                 _validPerm2.assign(validPerm2,validPerm2+4);
45                 int validPerm3[] = {0,-2,-1,4,3,5,-8,6,7,9};
46                 _validPerm3.assign(validPerm3,validPerm3+10);
47                 int validPerm4[] = {-3,1,2,4,6,5,7,-15,-13,-14,-12,-10,-11,-9,8};
48                 _validPerm4.assign(validPerm4,validPerm4+15);
49
50         }
51
52 protected:
53
54         void testCreate (){
55                 GeneSorter so;
56                 so = so;
57         }
58         void testSort (){
59                 GeneSorter so;
60                 GeneOrder go(_validPerm.begin(),_validPerm.end());
61                 GeneSorter::ActionList al = so.sort(go,Model(new Models::ModelImpl));
62                 CPPUNIT_ASSERT_EQUAL((size_t)0u,al.size());
63
64                 GeneOrder go2(_validPerm2.begin(),_validPerm2.end());
65                 al = so.sort(go2,Model(new Models::ModelImpl));
66                 CPPUNIT_ASSERT_EQUAL((size_t)1u,al.size());
67                 CPPUNIT_ASSERT(al[0] == ReverseAction(2,3));
68
69                 al[0](go2);
70                 CPPUNIT_ASSERT(equal(go.begin(),go.end(),go2.begin()));
71
72                 GeneOrder go3(_validPerm3.begin(),_validPerm3.end());
73                 al = so.sort(go3,Model(new Models::ModelImpl));
74                 CPPUNIT_ASSERT_EQUAL((size_t)5u,al.size());
75                 for (size_t i = 0; i < al.size(); ++i)
76                         al[i](go3);
77                 int perm[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
78                 CPPUNIT_ASSERT(equal(go3.begin(),go3.end(),perm));
79
80                 GeneOrder go4(_validPerm4.begin(),_validPerm4.end());
81                 al = so.sort(go4,Model(new Models::ModelImpl));
82                 CPPUNIT_ASSERT_EQUAL((size_t)13u,al.size());
83                 for (size_t i = 0; i < al.size(); ++i)
84                         al[i](go4);
85                 CPPUNIT_ASSERT(equal(go3.begin(),go3.end(),perm));
86         }
87         void testSafeActions (){
88                 GeneSorter so;
89                 GeneOrder go(_validPerm.begin(),_validPerm.end());
90                 GeneSorter::ActionList al = so.safeActions(go);
91                 CPPUNIT_ASSERT_EQUAL((size_t)0u,al.size());
92
93                 GeneOrder go2(_validPerm2.begin(),_validPerm2.end());
94                 al = so.safeActions(go2);
95                 CPPUNIT_ASSERT_EQUAL((size_t)2u,al.size());
96                 CPPUNIT_ASSERT(al[0] == ReverseAction(2,3));
97                 CPPUNIT_ASSERT(al[1] == ReverseAction(2,3));
98                 CPPUNIT_ASSERT(!(al[0] == ReverseAction(2,5)));
99
100                 GeneOrder go3(_validPerm3.begin(),_validPerm3.end());
101                 al = so.safeActions(go3);
102                 CPPUNIT_ASSERT(al.size() > 0);
103                 size_t dist = inversionDistance(go3);
104                 for (size_t i = 0; i < al.size(); ++i){
105                         GeneOrder go(go3);
106                         al[0](go);
107                         CPPUNIT_ASSERT(dist > inversionDistance(go));
108                 }
109         }
110
111 };
112
113 CPPUNIT_TEST_SUITE_REGISTRATION( TESTNAME );
114
115 #undef TESTNAME