18 #include "TestCigarHelper.h" 19 #include "TestValidate.h" 20 #include "CigarHelper.h" 23 void testCigarHelper()
26 CigarHelperTest::testCigarHelper();
30 void CigarHelperTest::testCigarHelper()
32 testSoftClipBeginByRefPos();
33 testSoftClipEndByRefPos();
37 void CigarHelperTest::testSoftClipBeginByRefPos()
41 std::string newCigarString;
50 const char* origCigar =
"3H3S3M3D3M3I3M3P3M3D3M3S3H";
59 assert(strcmp(newCigarString.c_str(),
"3H24S3H") == 0);
64 CigarHelper::NO_CLIP);
66 assert(strcmp(newCigarString.c_str(), origCigar) == 0);
79 assert(strcmp(newCigarString.c_str(),
"3H4S2M3D3M3I3M3P3M3D3M3S3H") == 0);
87 assert(strcmp(newCigarString.c_str(),
"3H5S1M3D3M3I3M3P3M3D3M3S3H") == 0);
94 assert(strcmp(newCigarString.c_str(),
"3H6S3M3I3M3P3M3D3M3S3H") == 0);
101 assert(strcmp(newCigarString.c_str(),
"3H6S3M3I3M3P3M3D3M3S3H") == 0);
105 assert(newPos == 16);
108 assert(strcmp(newCigarString.c_str(),
"3H6S3M3I3M3P3M3D3M3S3H") == 0);
112 assert(newPos == 16);
115 assert(strcmp(newCigarString.c_str(),
"3H6S3M3I3M3P3M3D3M3S3H") == 0);
119 assert(newPos == 17);
122 assert(strcmp(newCigarString.c_str(),
"3H7S2M3I3M3P3M3D3M3S3H") == 0);
126 assert(newPos == 18);
129 assert(strcmp(newCigarString.c_str(),
"3H8S1M3I3M3P3M3D3M3S3H") == 0);
133 assert(newPos == 19);
136 assert(strcmp(newCigarString.c_str(),
"3H12S3M3P3M3D3M3S3H") == 0);
140 assert(newPos == 20);
143 assert(strcmp(newCigarString.c_str(),
"3H13S2M3P3M3D3M3S3H") == 0);
147 assert(newPos == 21);
150 assert(strcmp(newCigarString.c_str(),
"3H14S1M3P3M3D3M3S3H") == 0);
154 assert(newPos == 22);
157 assert(strcmp(newCigarString.c_str(),
"3H15S3M3D3M3S3H") == 0);
161 assert(newPos == 23);
164 assert(strcmp(newCigarString.c_str(),
"3H16S2M3D3M3S3H") == 0);
168 assert(newPos == 24);
171 assert(strcmp(newCigarString.c_str(),
"3H17S1M3D3M3S3H") == 0);
175 assert(newPos == 28);
178 assert(strcmp(newCigarString.c_str(),
"3H18S3M3S3H") == 0);
182 assert(newPos == 28);
185 assert(strcmp(newCigarString.c_str(),
"3H18S3M3S3H") == 0);
189 assert(newPos == 28);
192 assert(strcmp(newCigarString.c_str(),
"3H18S3M3S3H") == 0);
196 assert(newPos == 28);
199 assert(strcmp(newCigarString.c_str(),
"3H18S3M3S3H") == 0);
203 assert(newPos == 29);
206 assert(strcmp(newCigarString.c_str(),
"3H19S2M3S3H") == 0);
210 assert(newPos == 30);
213 assert(strcmp(newCigarString.c_str(),
"3H20S1M3S3H") == 0);
217 assert(newPos == 10);
220 assert(strcmp(newCigarString.c_str(),
"3H24S3H") == 0);
224 assert(newPos == 10);
227 assert(strcmp(newCigarString.c_str(),
"3H24S3H") == 0);
233 origCigar =
"3M3D3I3M";
243 CigarHelper::NO_CLIP);
244 assert(newPos == 10);
247 assert(strcmp(newCigarString.c_str(), origCigar) == 0);
251 assert(newPos == 11);
254 assert(strcmp(newCigarString.c_str(),
"1S2M3D3I3M") == 0);
258 assert(newPos == 12);
261 assert(strcmp(newCigarString.c_str(),
"2S1M3D3I3M") == 0);
265 assert(newPos == 16);
268 assert(strcmp(newCigarString.c_str(),
"6S3M") == 0);
272 assert(newPos == 16);
275 assert(strcmp(newCigarString.c_str(),
"6S3M") == 0);
279 assert(newPos == 16);
282 assert(strcmp(newCigarString.c_str(),
"6S3M") == 0);
286 assert(newPos == 16);
289 assert(strcmp(newCigarString.c_str(),
"6S3M") == 0);
293 assert(newPos == 17);
296 assert(strcmp(newCigarString.c_str(),
"7S2M") == 0);
300 assert(newPos == 18);
303 assert(strcmp(newCigarString.c_str(),
"8S1M") == 0);
307 assert(newPos == 10);
310 assert(strcmp(newCigarString.c_str(),
"9S") == 0);
314 assert(newPos == 10);
317 assert(strcmp(newCigarString.c_str(),
"9S") == 0);
322 origCigar =
"3H3S3D3M3S3H";
332 CigarHelper::NO_CLIP);
333 assert(newPos == 10);
336 assert(strcmp(newCigarString.c_str(), origCigar) == 0);
340 assert(newPos == 13);
343 assert(strcmp(newCigarString.c_str(),
"3H3S3M3S3H") == 0);
347 assert(newPos == 13);
350 assert(strcmp(newCigarString.c_str(),
"3H3S3M3S3H") == 0);
354 assert(newPos == 13);
357 assert(strcmp(newCigarString.c_str(),
"3H3S3M3S3H") == 0);
361 assert(newPos == 14);
364 assert(strcmp(newCigarString.c_str(),
"3H4S2M3S3H") == 0);
368 assert(newPos == 15);
371 assert(strcmp(newCigarString.c_str(),
"3H5S1M3S3H") == 0);
375 assert(newPos == 10);
378 assert(strcmp(newCigarString.c_str(),
"3H9S3H") == 0);
382 assert(newPos == 10);
385 assert(strcmp(newCigarString.c_str(),
"3H9S3H") == 0);
390 origCigar =
"3H3S3I3M3S3H";
400 CigarHelper::NO_CLIP);
401 assert(newPos == 10);
404 assert(strcmp(newCigarString.c_str(), origCigar) == 0);
408 assert(newPos == 11);
411 assert(strcmp(newCigarString.c_str(),
"3H7S2M3S3H") == 0);
415 assert(newPos == 12);
418 assert(strcmp(newCigarString.c_str(),
"3H8S1M3S3H") == 0);
422 assert(newPos == 10);
425 assert(strcmp(newCigarString.c_str(),
"3H12S3H") == 0);
429 assert(newPos == 10);
432 assert(strcmp(newCigarString.c_str(),
"3H12S3H") == 0);
436 void CigarHelperTest::testSoftClipEndByRefPos()
440 std::string newCigarString;
448 const char* origCigar =
"3H3S3M3D3M3I3M3P3M3D3M3S3H";
456 CigarHelper::NO_CLIP);
458 assert(strcmp(newCigarString.c_str(), origCigar) == 0);
465 assert(strcmp(newCigarString.c_str(),
"3H24S3H") == 0);
477 assert(strcmp(newCigarString.c_str(),
"3H24S3H") == 0);
484 assert(strcmp(newCigarString.c_str(),
"3H3S1M20S3H") == 0);
491 assert(strcmp(newCigarString.c_str(),
"3H3S2M19S3H") == 0);
498 assert(strcmp(newCigarString.c_str(),
"3H3S3M18S3H") == 0);
505 assert(strcmp(newCigarString.c_str(),
"3H3S3M18S3H") == 0);
512 assert(strcmp(newCigarString.c_str(),
"3H3S3M18S3H") == 0);
519 assert(strcmp(newCigarString.c_str(),
"3H3S3M18S3H") == 0);
526 assert(strcmp(newCigarString.c_str(),
"3H3S3M3D1M17S3H") == 0);
533 assert(strcmp(newCigarString.c_str(),
"3H3S3M3D2M16S3H") == 0);
540 assert(strcmp(newCigarString.c_str(),
"3H3S3M3D3M3I12S3H") == 0);
547 assert(strcmp(newCigarString.c_str(),
"3H3S3M3D3M3I1M11S3H") == 0);
554 assert(strcmp(newCigarString.c_str(),
"3H3S3M3D3M3I2M10S3H") == 0);
561 assert(strcmp(newCigarString.c_str(),
"3H3S3M3D3M3I3M9S3H") == 0);
568 assert(strcmp(newCigarString.c_str(),
"3H3S3M3D3M3I3M3P1M8S3H") == 0);
575 assert(strcmp(newCigarString.c_str(),
"3H3S3M3D3M3I3M3P2M7S3H") == 0);
582 assert(strcmp(newCigarString.c_str(),
"3H3S3M3D3M3I3M3P3M6S3H") == 0);
589 assert(strcmp(newCigarString.c_str(),
"3H3S3M3D3M3I3M3P3M6S3H") == 0);
596 assert(strcmp(newCigarString.c_str(),
"3H3S3M3D3M3I3M3P3M6S3H") == 0);
603 assert(strcmp(newCigarString.c_str(),
"3H3S3M3D3M3I3M3P3M6S3H") == 0);
610 assert(strcmp(newCigarString.c_str(),
"3H3S3M3D3M3I3M3P3M3D1M5S3H") == 0);
617 assert(strcmp(newCigarString.c_str(),
"3H3S3M3D3M3I3M3P3M3D2M4S3H") == 0);
622 CigarHelper::NO_CLIP);
625 assert(strcmp(newCigarString.c_str(), origCigar) == 0);
631 origCigar =
"3M3D3I3M";
643 assert(strcmp(newCigarString.c_str(),
"9S") == 0);
649 assert(strcmp(newCigarString.c_str(),
"9S") == 0);
655 assert(strcmp(newCigarString.c_str(),
"1M8S") == 0);
661 assert(strcmp(newCigarString.c_str(),
"2M7S") == 0);
667 assert(strcmp(newCigarString.c_str(),
"3M6S") == 0);
673 assert(strcmp(newCigarString.c_str(),
"3M6S") == 0);
679 assert(strcmp(newCigarString.c_str(),
"3M6S") == 0);
685 assert(strcmp(newCigarString.c_str(),
"3M3D3I3S") == 0);
691 assert(strcmp(newCigarString.c_str(),
"3M3D3I1M2S") == 0);
697 assert(strcmp(newCigarString.c_str(),
"3M3D3I2M1S") == 0);
701 CigarHelper::NO_CLIP);
704 assert(strcmp(newCigarString.c_str(), origCigar) == 0);
709 origCigar =
"3H3S3D3M3S3H";
721 assert(strcmp(newCigarString.c_str(),
"3H9S3H") == 0);
727 assert(strcmp(newCigarString.c_str(),
"3H9S3H") == 0);
733 assert(strcmp(newCigarString.c_str(),
"3H9S3H") == 0);
739 assert(strcmp(newCigarString.c_str(),
"3H9S3H") == 0);
745 assert(strcmp(newCigarString.c_str(),
"3H9S3H") == 0);
751 assert(strcmp(newCigarString.c_str(),
"3H3S3D1M5S3H") == 0);
757 assert(strcmp(newCigarString.c_str(),
"3H3S3D2M4S3H") == 0);
761 CigarHelper::NO_CLIP);
764 assert(strcmp(newCigarString.c_str(), origCigar) == 0);
769 origCigar =
"3H3S3I3M3S3H";
781 assert(strcmp(newCigarString.c_str(),
"3H12S3H") == 0);
787 assert(strcmp(newCigarString.c_str(),
"3H3S3I6S3H") == 0);
793 assert(strcmp(newCigarString.c_str(),
"3H3S3I1M5S3H") == 0);
799 assert(strcmp(newCigarString.c_str(),
"3H3S3I2M4S3H") == 0);
803 CigarHelper::NO_CLIP);
806 assert(strcmp(newCigarString.c_str(), origCigar) == 0);
static int32_t softClipEndByRefPos(SamRecord &record, int32_t refPosition0Based, CigarRoller &newCigar)
Soft clip the cigar from the back of the read at the specified reference position.
static int32_t softClipBeginByRefPos(SamRecord &record, int32_t refPosition0Based, CigarRoller &newCigar, int32_t &new0BasedPosition)
Soft clip the cigar from the beginning of the read at the specified reference position.
bool setSequence(const char *seq)
Sets the sequence (SEQ) to the specified SAM formatted sequence string.
void getCigarString(String &cigarString) const
Set the passed in String to the string reprentation of the Cigar operations in this object...
bool setCigar(const char *cigar)
Set the CIGAR to the specified SAM formatted cigar string.
Class providing an easy to use interface to get/set/operate on the fields in a SAM/BAM record...
bool set0BasedPosition(int32_t position)
Set the leftmost position using the specified 0-based (BAM format) value.
The purpose of this class is to provide accessors for setting, updating, modifying the CIGAR object...