1 #include <cppunit/TestFixture.h>
2 #include <cppunit/extensions/HelperMacros.h>
4 #include <threadgenesorter.h>
6 #include <genealgorithms.h>
7 #include <reverseaction.h>
18 * A test case that is designed to produce
19 * example errors and failures.
23 #define TESTNAME ThreadGeneSorterTest
26 class TESTNAME : public CPPUNIT_NS::TestFixture
28 CPPUNIT_TEST_SUITE( TESTNAME );
29 CPPUNIT_TEST( testCreate );
30 CPPUNIT_TEST( testSort );
31 CPPUNIT_TEST_SUITE_END();
34 vector<int> _validPerm;
35 vector<int> _validPerm2;
36 vector<int> _validPerm3;
37 vector<int> _validPerm4;
42 int validPerm[] = {1,2,3,4};
43 _validPerm.assign(validPerm,validPerm+4);
44 int validPerm2[] = {1,-3,-2,4};
45 _validPerm2.assign(validPerm2,validPerm2+4);
46 int validPerm3[] = {0,-2,-1,4,3,5,-8,6,7,9};
47 _validPerm3.assign(validPerm3,validPerm3+10);
48 int validPerm4[] = {-3,1,2,4,6,5,7,-15,-13,-14,-12,-10,-11,-9,8};
49 _validPerm4.assign(validPerm4,validPerm4+15);
56 ThreadGeneSorter so(Model(new Models::ModelImpl));
60 ThreadGeneSorter so(Model(new Models::ModelImpl), 3);
61 GeneOrder go(_validPerm.begin(),_validPerm.end());
64 ThreadGeneSorter::SolutionsQueue sq = so.solutions();
65 CPPUNIT_ASSERT_EQUAL((size_t)1u,sq.size());
66 GeneSorter::ActionList al = sq.top().second;
67 CPPUNIT_ASSERT_EQUAL((size_t)0u,al.size());
69 GeneOrder go2(_validPerm2.begin(),_validPerm2.end());
73 CPPUNIT_ASSERT_EQUAL((size_t)1u,sq.size());
75 CPPUNIT_ASSERT_EQUAL((size_t)1u,al.size());
76 CPPUNIT_ASSERT(sq.top().second[0] == ReverseAction(2,3));
78 sq.top().second[0](go2);
79 CPPUNIT_ASSERT(equal(go.begin(),go.end(),go2.begin()));
81 GeneOrder go3(_validPerm3.begin(),_validPerm3.end());
85 CPPUNIT_ASSERT_EQUAL((size_t)24u,sq.size());
87 CPPUNIT_ASSERT_EQUAL((size_t)5u,al.size());
88 for (size_t i = 0; i < al.size(); ++i)
90 int perm[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
91 CPPUNIT_ASSERT(equal(go3.begin(),go3.end(),perm));
93 GeneOrder go4(_validPerm4.begin(),_validPerm4.end());
98 CPPUNIT_ASSERT_EQUAL((size_t)1u,sq.size());
100 CPPUNIT_ASSERT_EQUAL((size_t)13u,al.size());
101 for (size_t i = 0; i < al.size(); ++i)
103 CPPUNIT_ASSERT(equal(go3.begin(),go3.end(),perm));
108 CPPUNIT_TEST_SUITE_REGISTRATION( TESTNAME );