18#include "TestCigarHelper.h"
19#include "TestValidate.h"
20#include "CigarHelper.h"
26 CigarHelperTest::testCigarHelper();
30void CigarHelperTest::testCigarHelper()
32 testSoftClipBeginByRefPos();
33 testSoftClipEndByRefPos();
37void 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);
436void 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 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.
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.
The purpose of this class is to provide accessors for setting, updating, modifying the CIGAR object....
void getCigarString(String &cigarString) const
Set the passed in String to the string reprentation of the Cigar operations in this object.
Class providing an easy to use interface to get/set/operate on the fields in a SAM/BAM record.
bool setCigar(const char *cigar)
Set the CIGAR to the specified SAM formatted cigar string.
bool setSequence(const char *seq)
Sets the sequence (SEQ) to the specified SAM formatted sequence string.
bool set0BasedPosition(int32_t position)
Set the leftmost position using the specified 0-based (BAM format) value.