Skip to content

Commit

Permalink
Fix fundamental bug in iterator parse offset with respect to reversal…
Browse files Browse the repository at this point in the history
…s. Crack is bad.
  • Loading branch information
glennhickey committed Oct 2, 2012
1 parent b5f115c commit 9b19965
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 26 deletions.
5 changes: 5 additions & 0 deletions api/hdf5_impl/hdf5BottomSegmentIterator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ void HDF5BottomSegmentIterator::toReverse() const
{
assert (inRange() == true);
_reversed = !_reversed;
swap(_startOffset, _endOffset);
}

void HDF5BottomSegmentIterator::toSite(hal_index_t position, bool slice) const
Expand Down Expand Up @@ -189,6 +190,10 @@ void HDF5BottomSegmentIterator::toSite(hal_index_t position, bool slice) const
_startOffset = position - _bottomSegment.getStartPosition();
_endOffset = _bottomSegment.getStartPosition() + _bottomSegment.getLength()
- position - 1;
if (_reversed)
{
swap(_startOffset, _endOffset);
}
}
}

Expand Down
5 changes: 5 additions & 0 deletions api/hdf5_impl/hdf5TopSegmentIterator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ void HDF5TopSegmentIterator::toReverse() const
{
assert (inRange() == true);
_reversed = !_reversed;
swap(_startOffset, _endOffset);
}

void HDF5TopSegmentIterator::toSite(hal_index_t position, bool slice) const
Expand Down Expand Up @@ -189,6 +190,10 @@ void HDF5TopSegmentIterator::toSite(hal_index_t position, bool slice) const
_startOffset = position - _topSegment.getStartPosition();
_endOffset = _topSegment.getStartPosition() + _topSegment.getLength()
- position - 1;
if (_reversed)
{
swap(_startOffset, _endOffset);
}
}
}

Expand Down
4 changes: 2 additions & 2 deletions api/tests/halBottomSegmentTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -477,14 +477,14 @@ void BottomSegmentIteratorReverseTest::checkCallBack(AlignmentConstPtr alignment

CuAssertTrue(_testCase, ti->getStartPosition() == 1);
CuAssertTrue(_testCase, ti->getLength() == 6);
CuAssertTrue(_testCase, bi2->getStartPosition() == 8);
CuAssertTrue(_testCase, bi2->getStartPosition() == 6);
CuAssertTrue(_testCase, bi2->getLength() == 6);

string buffer;
ti->getString(buffer);
CuAssertTrue(_testCase, buffer == "CCTACG");
bi2->getString(buffer);
CuAssertTrue(_testCase, buffer == "CACGTA");
CuAssertTrue(_testCase, buffer == "CGTAGG");

ti = parent1->getTopSegmentIterator();
CuAssertTrue(_testCase, ti->getReversed() == false);
Expand Down
31 changes: 9 additions & 22 deletions api/tests/halColumnIteratorTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -459,44 +459,31 @@ void ColumnIteratorInvTest::checkGenome(const Genome* genome)
if (colNumber >= 0 && colNumber < 10)
{
CuAssertTrue(_testCase, dnaIt->getReversed() == false);
CuAssertTrue(_testCase,
dnaIt->getArrayIndex() == (hal_index_t)colNumber);

// inversion on bottom branch
CuAssertTrue(_testCase, dadIt->getReversed() == true);
CuAssertTrue(_testCase,
dadIt->getArrayIndex() == 9 - (hal_index_t)colNumber);

CuAssertTrue(_testCase, graIt->getReversed() == true);
CuAssertTrue(_testCase,
graIt->getArrayIndex() == 9 - (hal_index_t)colNumber);
}
else if (colNumber >= 10 && colNumber < 20)
{
CuAssertTrue(_testCase, dnaIt->getReversed() == false);
CuAssertTrue(_testCase,
dnaIt->getArrayIndex() == (hal_index_t)colNumber);

// inversion on bottom branch
CuAssertTrue(_testCase, dadIt->getReversed() == true);
CuAssertTrue(_testCase,
dadIt->getArrayIndex() == 29 - (hal_index_t)colNumber);

// inversion on top branch
CuAssertTrue(_testCase, graIt->getReversed() == false);
CuAssertTrue(_testCase,
graIt->getArrayIndex() == (hal_index_t)colNumber);

}
else
{
CuAssertTrue(_testCase,
dnaIt->getArrayIndex() == (hal_index_t)colNumber);
CuAssertTrue(_testCase,
dadIt->getArrayIndex() == (hal_index_t)colNumber);
CuAssertTrue(_testCase,
graIt->getArrayIndex() == (hal_index_t)colNumber);
}

CuAssertTrue(_testCase,
dnaIt->getArrayIndex() == (hal_index_t)colNumber);
CuAssertTrue(_testCase,
dadIt->getArrayIndex() == (hal_index_t)colNumber);
CuAssertTrue(_testCase,
graIt->getArrayIndex() == (hal_index_t)colNumber);

}
}
}
Expand Down Expand Up @@ -947,7 +934,7 @@ void ColumnIteratorMultiGapInvTest::checkCallBack(AlignmentConstPtr alignment)
CuAssertTrue(_testCase, entry->size() == 1);
DNAIteratorConstPtr dna = entry->at(0);
CuAssertTrue(_testCase, dna->getSequence() == adamSeq);
CuAssertTrue(_testCase, dna->getArrayIndex() == 11 - i);
CuAssertTrue(_testCase, dna->getArrayIndex() == i);

CuAssertTrue(_testCase, colMap->find(grandpaSeq) != colMap->end());
entry = colMap->find(grandpaSeq)->second;
Expand Down
4 changes: 2 additions & 2 deletions api/tests/halTopSegmentTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -462,14 +462,14 @@ void TopSegmentIteratorReverseTest::checkCallBack(AlignmentConstPtr alignment)

CuAssertTrue(_testCase, bi->getStartPosition() == 1);
CuAssertTrue(_testCase, bi->getLength() == 6);
CuAssertTrue(_testCase, ti2->getStartPosition() == 8);
CuAssertTrue(_testCase, ti2->getStartPosition() == 6);
CuAssertTrue(_testCase, ti2->getLength() == 6);

string buffer;
bi->getString(buffer);
CuAssertTrue(_testCase, buffer == "CCTACG");
ti2->getString(buffer);
CuAssertTrue(_testCase, buffer == "CACGTA");
CuAssertTrue(_testCase, buffer == "CGTAGG");

bi = child1->getBottomSegmentIterator();
CuAssertTrue(_testCase, bi->getReversed() == false);
Expand Down

0 comments on commit 9b19965

Please sign in to comment.