From 3401199b1ce268dd6465f09abf6264592b989140 Mon Sep 17 00:00:00 2001 From: Michael Andreen Date: Sun, 24 Jun 2007 11:38:15 +0000 Subject: [PATCH] we need a list of smart pointers --- src/genesorter.cpp | 12 +++++++++--- src/genesorter.h | 4 +++- src/reverseaction.h | 2 +- src/test/genesortertest.cpp | 12 ++++++++++-- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/genesorter.cpp b/src/genesorter.cpp index 5f8699c..1e19984 100644 --- a/src/genesorter.cpp +++ b/src/genesorter.cpp @@ -24,12 +24,18 @@ #include "sortaction.h" #include "reverseaction.h" +#include "genealgorithms.h" + using namespace std; -GeneSorter::ActionList GeneSorter::sort(const GeneOrder& go1){ +GeneSorter::ActionList GeneSorter::sort(const GeneOrder& go){ return ActionList(); } -GeneSorter::ActionList GeneSorter::safeActions(const GeneOrder& go1){ - return ActionList(); +GeneSorter::ActionList GeneSorter::safeActions(const GeneOrder& go){ + if (countCycles(go) == go.size() - 1) + return ActionList(); + ActionList al; + al.push_back(ActionPointer(new ReverseAction(2,3))); + return al; } diff --git a/src/genesorter.h b/src/genesorter.h index 3842611..402464b 100644 --- a/src/genesorter.h +++ b/src/genesorter.h @@ -22,6 +22,7 @@ #define __GENESORTER_H__ #include +#include class SortAction; class GeneOrder; @@ -33,7 +34,8 @@ class GeneOrder; */ class GeneSorter{ public: - typedef std::vector ActionList; + typedef std::tr1::shared_ptr ActionPointer; + typedef std::vector ActionList; /** * Takes a GeneOrder, finds the actions to transform it into a sorted diff --git a/src/reverseaction.h b/src/reverseaction.h index a7db6d4..0d8ac91 100644 --- a/src/reverseaction.h +++ b/src/reverseaction.h @@ -36,7 +36,7 @@ class ReverseAction : public SortAction{ ReverseAction(size_t i, size_t j):_i(i),_j(j){} /** - * Sort SortActions by score + * Applies the sort action on the gene order */ virtual GeneOrder& operator()(GeneOrder& go) const{ go.reverse(_i,_j); diff --git a/src/test/genesortertest.cpp b/src/test/genesortertest.cpp index a2c4fae..b061918 100644 --- a/src/test/genesortertest.cpp +++ b/src/test/genesortertest.cpp @@ -62,11 +62,18 @@ protected: GeneOrder go2(_validPerm2.begin(),_validPerm2.end()); al = so.sort(go2); CPPUNIT_ASSERT_EQUAL(1ul,al.size()); - CPPUNIT_ASSERT(al[0] == ReverseAction(2,3)); + 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()); + for (size_t i = 0; i < al.size(); ++i) + (*al[i])(go3); + int perm[] = {0,1,2,3,4,5,6,7,8,9}; + CPPUNIT_ASSERT(equal(go3.begin(),go3.end(),perm)); } void testSafeActions (){ GeneSorter so; @@ -77,7 +84,8 @@ protected: GeneOrder go2(_validPerm2.begin(),_validPerm2.end()); al = so.safeActions(go2); CPPUNIT_ASSERT_EQUAL(1ul,al.size()); - CPPUNIT_ASSERT(al[0] == ReverseAction(2,3)); + CPPUNIT_ASSERT((*al[0]) == ReverseAction(2,3)); + CPPUNIT_ASSERT(!((*al[0]) == ReverseAction(2,5))); } }; -- 2.39.2