From: Michael Andreen Date: Tue, 19 Jun 2007 10:59:29 +0000 (+0000) Subject: first point in points is now a dummy so indexes matches points X-Git-Tag: v0.1~62 X-Git-Url: https://ruin.nu/git/?p=germs.git;a=commitdiff_plain;h=172455c7649ea714eb13f9ac1fd96652f0617ca0 first point in points is now a dummy so indexes matches points --- diff --git a/src/genealgorithms.cpp b/src/genealgorithms.cpp index d9d86a3..04875da 100644 --- a/src/genealgorithms.cpp +++ b/src/genealgorithms.cpp @@ -67,6 +67,7 @@ struct FindP{ std::vector findIntervalsAtPoints(const vector& intervals){ vector points; + points.push_back(Interval(intervals.size(),intervals.size())); //Dummy interval to match point and index for (size_t p = 1; p <= intervals.size(); ++p){ size_t f = 0; size_t s = 0; @@ -106,13 +107,13 @@ int countCycles(const GeneOrder& go){ for (size_t p = 1; p < go.size(); ++p){ if (marked.find(p) != marked.end()) continue; - Interval i = intervals[points[p-1].first]; + Interval i = intervals[points[p].first]; while (marked.find(p) == marked.end()){ marked.insert(p); - if (i == intervals[points[p-1].first]) - i = intervals[points[p-1].second]; + if (i == intervals[points[p].first]) + i = intervals[points[p].second]; else - i = intervals[points[p-1].first]; + i = intervals[points[p].first]; if (p == i.first) p = i.second; diff --git a/src/test/genealgorithmstest.cpp b/src/test/genealgorithmstest.cpp index 3f57e0f..b06f416 100644 --- a/src/test/genealgorithmstest.cpp +++ b/src/test/genealgorithmstest.cpp @@ -101,20 +101,20 @@ protected: GeneOrder go(_validPerm.begin(),_validPerm.end()); vector v = findIntervals(go); v = findIntervalsAtPoints(v); - CPPUNIT_ASSERT_EQUAL(4ul,v.size()); + CPPUNIT_ASSERT_EQUAL(5ul,v.size()); Interval go10(0,0); Interval go12(2,2); - CPPUNIT_ASSERT(go10 == v[0]); - CPPUNIT_ASSERT(go12 == v[2]); + CPPUNIT_ASSERT(go10 == v[1]); + CPPUNIT_ASSERT(go12 == v[3]); GeneOrder go2(_validPerm3.begin(),_validPerm3.end()); v = findIntervals(go2); v = findIntervalsAtPoints(v); - CPPUNIT_ASSERT_EQUAL(16ul,v.size()); + CPPUNIT_ASSERT_EQUAL(17ul,v.size()); Interval go20(0,3); Interval go22(1,1); - CPPUNIT_ASSERT(go20 == v[0]); - CPPUNIT_ASSERT(go22 == v[2]); + CPPUNIT_ASSERT(go20 == v[1]); + CPPUNIT_ASSERT(go22 == v[3]); } void testCountCycles (){ GeneOrder go(_validPerm.begin(),_validPerm.end());