X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Ftest%2Fthreadgenesortertest.cpp;fp=src%2Ftest%2Fthreadgenesortertest.cpp;h=58d489387d55189257363dadf39b0a7624224f00;hb=623097444fac1993a86e6d73b203bc3c6d731c11;hp=0000000000000000000000000000000000000000;hpb=69cfdf79b7597ee6133dc3add1a759bc94861fa6;p=germs.git diff --git a/src/test/threadgenesortertest.cpp b/src/test/threadgenesortertest.cpp new file mode 100644 index 0000000..58d4893 --- /dev/null +++ b/src/test/threadgenesortertest.cpp @@ -0,0 +1,110 @@ +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +using namespace std; + +/* + * A test case that is designed to produce + * example errors and failures. + * + */ + +#define TESTNAME ThreadGeneSorterTest + + +class TESTNAME : public CPPUNIT_NS::TestFixture +{ + CPPUNIT_TEST_SUITE( TESTNAME ); + CPPUNIT_TEST( testCreate ); + CPPUNIT_TEST( testSort ); + CPPUNIT_TEST_SUITE_END(); + +protected: + vector _validPerm; + vector _validPerm2; + vector _validPerm3; + vector _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: + + void testCreate (){ + ThreadGeneSorter so(Model(new Models::ModelImpl)); + so = so; + } + void testSort (){ + ThreadGeneSorter so(Model(new Models::ModelImpl), 3); + GeneOrder go(_validPerm.begin(),_validPerm.end()); + so.start(go); + so.join(); + ThreadGeneSorter::SolutionsQueue sq = so.solutions(); + CPPUNIT_ASSERT_EQUAL((size_t)1u,sq.size()); + GeneSorter::ActionList al = sq.top().second; + CPPUNIT_ASSERT_EQUAL((size_t)0u,al.size()); + + GeneOrder go2(_validPerm2.begin(),_validPerm2.end()); + so.start(go2); + so.join(); + sq = so.solutions(); + CPPUNIT_ASSERT_EQUAL((size_t)1u,sq.size()); + al = sq.top().second; + CPPUNIT_ASSERT_EQUAL((size_t)1u,al.size()); + CPPUNIT_ASSERT(sq.top().second[0] == ReverseAction(2,3)); + + sq.top().second[0](go2); + CPPUNIT_ASSERT(equal(go.begin(),go.end(),go2.begin())); + + GeneOrder go3(_validPerm3.begin(),_validPerm3.end()); + so.start(go3); + so.join(); + sq = so.solutions(); + CPPUNIT_ASSERT_EQUAL((size_t)24u,sq.size()); + al = sq.top().second; + 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,10,11,12,13,14,15,16}; + CPPUNIT_ASSERT(equal(go3.begin(),go3.end(),perm)); + + GeneOrder go4(_validPerm4.begin(),_validPerm4.end()); + + so.start(go3); + so.join(); + sq = so.solutions(); + CPPUNIT_ASSERT_EQUAL((size_t)1u,sq.size()); + al = sq.top().second; + 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)); + + } +}; + +CPPUNIT_TEST_SUITE_REGISTRATION( TESTNAME ); + +#undef TESTNAME