std::vector<Interval> findIntervalsAtPoints(const vector<Interval>& intervals){
vector<Interval> 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;
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;
GeneOrder go(_validPerm.begin(),_validPerm.end());
vector<Interval> 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());