void TopSegmentIteratorReverseTest::checkCallBack(AlignmentConstPtr alignment) { BottomSegmentIteratorConstPtr bi; TopSegmentIteratorConstPtr ti, ti2; const Genome* parent1 = alignment->openGenome("parent1"); const Genome* child1 = alignment->openGenome("child1"); ti = child1->getTopSegmentIterator(); bi = parent1->getBottomSegmentIterator(); ti2 = child1->getTopSegmentIterator(); ti2->toChild(bi, 0); CuAssertTrue(_testCase, ti->getStartPosition() == 0); CuAssertTrue(_testCase, ti->getLength() == 10); CuAssertTrue(_testCase, ti->getReversed() == false); CuAssertTrue(_testCase, ti2->getStartPosition() == 9); CuAssertTrue(_testCase, ti2->getLength() == 10); CuAssertTrue(_testCase, ti2->getReversed() == true); bi->slice(1, 3); ti2->toChild(bi, 0); CuAssertTrue(_testCase, bi->getStartPosition() == 1); CuAssertTrue(_testCase, bi->getLength() == 6); CuAssertTrue(_testCase, ti2->getStartPosition() == 8); CuAssertTrue(_testCase, ti2->getLength() == 6); string buffer; bi->getString(buffer); CuAssertTrue(_testCase, buffer == "CCTACG"); ti2->getString(buffer); CuAssertTrue(_testCase, buffer == "CACGTA"); bi = child1->getBottomSegmentIterator(); CuAssertTrue(_testCase, bi->getReversed() == false); ti->toParseUp(bi); CuAssertTrue(_testCase, ti->getStartPosition() == 0); CuAssertTrue(_testCase, ti->getLength() == 5); bi->toReverse(); ti->toParseUp(bi); CuAssertTrue(_testCase, ti->getStartPosition() == 4); CuAssertTrue(_testCase, ti->getLength() == 5); bi->toReverse(); CuAssertTrue(_testCase, bi->getReversed() == false); bi->toRight(); ti->toParseUp(bi); CuAssertTrue(_testCase, ti->getStartPosition() == 5); CuAssertTrue(_testCase, ti->getLength() == 5); bi->toReverse(); ti->toParseUp(bi); CuAssertTrue(_testCase, ti->getStartPosition() == 9); CuAssertTrue(_testCase, ti->getLength() == 5); }
void MappedSegmentMapDownTest::testBottomSegment( AlignmentConstPtr alignment, BottomSegmentIteratorConstPtr bottom, hal_size_t childIndex) { const Genome* child = bottom->getGenome()->getChild(childIndex); set<MappedSegmentConstPtr> results; bottom->getMappedSegments(results, child, NULL, false); CuAssertTrue(_testCase, results.size() == 1); MappedSegmentConstPtr mseg = *results.begin(); CuAssertTrue(_testCase, mseg->getSource()->getGenome() == bottom->getGenome()); CuAssertTrue(_testCase, mseg->getSource()->getStartPosition() == bottom->getStartPosition()); CuAssertTrue(_testCase, mseg->getSource()->getLength() == bottom->getLength()); CuAssertTrue(_testCase, mseg->getSource()->getReversed() == bottom->getReversed()); TopSegmentIteratorConstPtr top = child->getTopSegmentIterator(); top->toChild(bottom, childIndex); CuAssertTrue(_testCase, mseg->getGenome() == top->getGenome()); CuAssertTrue(_testCase, mseg->getStartPosition() == top->getStartPosition()); CuAssertTrue(_testCase, mseg->getLength() == top->getLength()); CuAssertTrue(_testCase, mseg->getReversed() == top->getReversed()); }
void MappedSegmentMapUpTest::testTopSegment(AlignmentConstPtr alignment, TopSegmentIteratorConstPtr top, const string& ancName) { const Genome* parent = alignment->openGenome(ancName); set<MappedSegmentConstPtr> results; top->getMappedSegments(results, parent, NULL, false); CuAssertTrue(_testCase, results.size() == 1); MappedSegmentConstPtr mseg = *results.begin(); CuAssertTrue(_testCase, mseg->getSource()->getGenome() == top->getGenome()); CuAssertTrue(_testCase, mseg->getSource()->getStartPosition() == top->getStartPosition()); CuAssertTrue(_testCase, mseg->getSource()->getLength() == top->getLength()); CuAssertTrue(_testCase, mseg->getSource()->getReversed() == top->getReversed()); BottomSegmentIteratorConstPtr bottom = parent->getBottomSegmentIterator(); bottom->toParent(top); // extra hop for when top is in grand child if (bottom->getGenome() != parent) { TopSegmentIteratorConstPtr temp = bottom->getGenome()->getTopSegmentIterator(); temp->toParseUp(bottom); bottom->toParent(temp); } CuAssertTrue(_testCase, mseg->getGenome() == bottom->getGenome()); CuAssertTrue(_testCase, mseg->getStartPosition() == bottom->getStartPosition()); CuAssertTrue(_testCase, mseg->getLength() == bottom->getLength()); CuAssertTrue(_testCase, mseg->getReversed() == bottom->getReversed()); }
void DefaultGappedBottomSegmentIterator::toRightNextUngapped( BottomSegmentIteratorConstPtr bs) const { while (bs->hasChild(_childIndex) == false && bs->getLength() <= _gapThreshold) { if ((!bs->getReversed() && bs->getBottomSegment()->isLast()) || (bs->getReversed() && bs->getBottomSegment()->isFirst())) { break; } bs->toRight(); } }