#include <geneorder.h>
#include <genealgorithms.h>
#include <reverseaction.h>
+#include <models.h>
+#include <model.h>
#include <algorithm>
#include <iterator>
void testSort (){
GeneSorter so;
GeneOrder go(_validPerm.begin(),_validPerm.end());
- GeneSorter::ActionList al = so.sort(go);
- CPPUNIT_ASSERT_EQUAL(0ul,al.size());
+ GeneSorter::ActionList al = so.sort(go,Model(new Models::ModelImpl));
+ CPPUNIT_ASSERT_EQUAL((size_t)0u,al.size());
GeneOrder go2(_validPerm2.begin(),_validPerm2.end());
- al = so.sort(go2);
- CPPUNIT_ASSERT_EQUAL(1ul,al.size());
+ al = so.sort(go2,Model(new Models::ModelImpl));
+ CPPUNIT_ASSERT_EQUAL((size_t)1u,al.size());
CPPUNIT_ASSERT(al[0] == ReverseAction(2,3));
al[0](go2);
CPPUNIT_ASSERT(equal(go.begin(),go.end(),go2.begin()));
GeneOrder go3(_validPerm3.begin(),_validPerm3.end());
- al = so.sort(go3);
- CPPUNIT_ASSERT_EQUAL(5ul,al.size());
+ al = so.sort(go3,Model(new Models::ModelImpl));
+ CPPUNIT_ASSERT_EQUAL((size_t)5u,al.size());
for (size_t i = 0; i < al.size(); ++i)
al[i](go3);
- int perm[] = {0,1,2,3,4,5,6,7,8,9};
+ int perm[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
+ CPPUNIT_ASSERT(equal(go3.begin(),go3.end(),perm));
+
+ GeneOrder go4(_validPerm4.begin(),_validPerm4.end());
+ al = so.sort(go4,Model(new Models::ModelImpl));
+ CPPUNIT_ASSERT_EQUAL((size_t)13u,al.size());
+ for (size_t i = 0; i < al.size(); ++i)
+ al[i](go4);
CPPUNIT_ASSERT(equal(go3.begin(),go3.end(),perm));
}
void testSafeActions (){
GeneSorter so;
GeneOrder go(_validPerm.begin(),_validPerm.end());
GeneSorter::ActionList al = so.safeActions(go);
- CPPUNIT_ASSERT_EQUAL(0ul,al.size());
+ CPPUNIT_ASSERT_EQUAL((size_t)0u,al.size());
GeneOrder go2(_validPerm2.begin(),_validPerm2.end());
al = so.safeActions(go2);
- CPPUNIT_ASSERT_EQUAL(1ul,al.size());
+ CPPUNIT_ASSERT_EQUAL((size_t)2u,al.size());
CPPUNIT_ASSERT(al[0] == ReverseAction(2,3));
+ CPPUNIT_ASSERT(al[1] == ReverseAction(2,3));
CPPUNIT_ASSERT(!(al[0] == ReverseAction(2,5)));
+
+ GeneOrder go3(_validPerm3.begin(),_validPerm3.end());
+ al = so.safeActions(go3);
+ CPPUNIT_ASSERT(al.size() > 0);
+ size_t dist = inversionDistance(go3);
+ for (size_t i = 0; i < al.size(); ++i){
+ GeneOrder go(go3);
+ al[0](go);
+ CPPUNIT_ASSERT(dist > inversionDistance(go));
+ }
}
};