00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "ReadFiles.h"
00019 #include "Validate.h"
00020 #include <assert.h>
00021
00022 void testReadSam()
00023 {
00024 SamFile inSam;
00025 assert(inSam.OpenForRead("testFiles/testSam.sam"));
00026
00027
00028
00029 testRead(inSam);
00030 }
00031
00032 void testReadBam()
00033 {
00034 SamFile inSam;
00035 assert(inSam.OpenForRead("testFiles/testBam.bam"));
00036
00037
00038
00039 testRead(inSam);
00040 }
00041
00042 void testRead(SamFile &inSam)
00043 {
00044
00045 SamFileHeader samHeader;
00046 assert(inSam.ReadHeader(samHeader));
00047
00048 validateHeader(samHeader);
00049 testModHeader(samHeader);
00050
00051 SamRecord samRecord;
00052 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00053 validateRead1(samRecord);
00054
00055
00056 samRecord.setQuality("ABCDE");
00057 validateRead1ModQuality(samRecord);
00058
00059
00060 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00061 validateRead2(samRecord);
00062
00063 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00064 validateRead3(samRecord);
00065
00066 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00067 validateRead4(samRecord);
00068
00069 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00070 validateRead5(samRecord);
00071
00072 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00073 validateRead6(samRecord);
00074
00075 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00076 validateRead7(samRecord);
00077
00078 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00079 validateRead8(samRecord);
00080
00081 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00082 validateRead9(samRecord);
00083
00084 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00085 validateRead10(samRecord);
00086 }
00087
00088
00089 void testAddHeaderAndTagToFile(const char* inputName, const char* outputName)
00090 {
00091 SamFile inSam, outSam;
00092 assert(inSam.OpenForRead(inputName));
00093 assert(outSam.OpenForWrite(outputName));
00094
00095
00096 SamFileHeader samHeader;
00097 assert(inSam.ReadHeader(samHeader));
00098
00099
00100 assert(samHeader.addHeaderLine("@RG\tID:myID\tSM:mySM") == false);
00101 assert(samHeader.addHeaderLine("@RG\tID:myID3\tSM:mySM") == true);
00102
00103
00104 assert(outSam.WriteHeader(samHeader));
00105
00106 SamRecord samRecord;
00107 assert(inSam.ReadRecord(samHeader, samRecord));
00108
00109
00110 assert(samRecord.addTag("RG", 'Z', "myID"));
00111 assert(samRecord.addTag("RR", 'Z', "myID"));
00112
00113
00114 assert(outSam.WriteRecord(samHeader, samRecord));
00115
00116
00117
00118
00119
00120 assert(inSam.ReadRecord(samHeader, samRecord));
00121 assert(inSam.ReadRecord(samHeader, samRecord));
00122 }
00123
00124
00125
00126 void testValidateSortedRead()
00127 {
00128
00129 SamFile inSam(ErrorHandler::RETURN);
00130 assert(inSam.OpenForRead("testFiles/testSam.sam"));
00131
00132
00133 inSam.setSortedValidation(SamFile::COORDINATE);
00134
00135
00136 SamFileHeader samHeader;
00137 assert(inSam.ReadHeader(samHeader));
00138
00139 SamRecord samRecord;
00140
00141 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00142 validateRead1(samRecord);
00143
00144
00145 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00146 validateRead2(samRecord);
00147
00148
00149 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00150 validateRead3(samRecord);
00151
00152
00153 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00154 validateRead4(samRecord);
00155
00156
00157 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00158 validateRead5(samRecord);
00159
00160
00161 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00162 validateRead6(samRecord);
00163
00164
00165 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00166 validateRead7(samRecord);
00167
00168
00169 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00170 validateRead8(samRecord);
00171
00172
00173 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00174 validateRead9(samRecord);
00175
00176
00177 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00178 validateRead10(samRecord);
00179
00180
00181
00182
00183 assert(inSam.OpenForRead("testFiles/testSam.sam"));
00184
00185
00186 inSam.setSortedValidation(SamFile::QUERY_NAME);
00187
00188
00189 assert(inSam.ReadHeader(samHeader));
00190
00191
00192 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00193 validateRead1(samRecord);
00194
00195
00196 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00197 validateRead2(samRecord);
00198
00199
00200 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00201 validateRead3(samRecord);
00202
00203
00204 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00205 validateRead4(samRecord);
00206
00207
00208 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00209 validateRead5(samRecord);
00210
00211
00212 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00213 validateRead6(samRecord);
00214
00215
00216 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00217 validateRead7(samRecord);
00218
00219
00220 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00221 validateRead8(samRecord);
00222
00223
00224 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00225 validateRead9(samRecord);
00226
00227
00228 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00229 validateRead10(samRecord);
00230
00231
00232
00233 assert(inSam.OpenForRead("testFiles/testSam.sam"));
00234
00235
00236
00237 inSam.setSortedValidation(SamFile::FLAG);
00238
00239
00240 assert(inSam.ReadHeader(samHeader));
00241
00242 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00243 validateRead1(samRecord);
00244
00245 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00246 validateRead2(samRecord);
00247
00248 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00249 validateRead3(samRecord);
00250
00251 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00252 validateRead4(samRecord);
00253
00254 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00255 validateRead5(samRecord);
00256
00257 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00258 validateRead6(samRecord);
00259
00260 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00261 validateRead7(samRecord);
00262
00263 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00264 validateRead8(samRecord);
00265
00266 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00267 validateRead9(samRecord);
00268
00269 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00270 validateRead10(samRecord);
00271
00272
00273
00274 assert(inSam.OpenForRead("testFiles/testSamSOcoord.sam"));
00275
00276
00277 inSam.setSortedValidation(SamFile::FLAG);
00278
00279
00280 assert(inSam.ReadHeader(samHeader));
00281
00282
00283 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00284 validateRead1(samRecord);
00285
00286
00287 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00288 validateRead2(samRecord);
00289
00290
00291 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00292 validateRead3(samRecord);
00293
00294
00295 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00296 validateRead4(samRecord);
00297
00298
00299 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00300 validateRead5(samRecord);
00301
00302
00303 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00304 validateRead6(samRecord);
00305
00306
00307 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00308 validateRead7(samRecord);
00309
00310
00311 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00312 validateRead8(samRecord);
00313
00314
00315 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00316 validateRead9(samRecord);
00317
00318
00319 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00320 validateRead10(samRecord);
00321
00322
00323
00324
00325 assert(inSam.OpenForRead("testFiles/testSamSOquery.sam"));
00326
00327
00328 inSam.setSortedValidation(SamFile::FLAG);
00329
00330
00331 assert(inSam.ReadHeader(samHeader));
00332
00333
00334 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00335 validateRead1(samRecord);
00336
00337
00338 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00339 validateRead2(samRecord);
00340
00341
00342 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00343 validateRead3(samRecord);
00344
00345
00346 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00347 validateRead4(samRecord);
00348
00349
00350 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00351 validateRead5(samRecord);
00352
00353
00354 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00355 validateRead6(samRecord);
00356
00357
00358 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00359 validateRead7(samRecord);
00360
00361
00362 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00363 validateRead8(samRecord);
00364
00365
00366 assert(inSam.ReadRecord(samHeader, samRecord) == false);
00367 validateRead9(samRecord);
00368
00369
00370 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00371 validateRead10(samRecord);
00372
00373
00374
00375 assert(inSam.OpenForRead("testFiles/testSamSOinvalid.sam"));
00376
00377
00378
00379 inSam.setSortedValidation(SamFile::FLAG);
00380
00381
00382 assert(inSam.ReadHeader(samHeader));
00383
00384 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00385 validateRead1(samRecord);
00386
00387 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00388 validateRead2(samRecord);
00389
00390 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00391 validateRead3(samRecord);
00392
00393 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00394 validateRead4(samRecord);
00395
00396 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00397 validateRead5(samRecord);
00398
00399 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00400 validateRead6(samRecord);
00401
00402 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00403 validateRead7(samRecord);
00404
00405 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00406 validateRead8(samRecord);
00407
00408 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00409 validateRead9(samRecord);
00410
00411 assert(inSam.ReadRecord(samHeader, samRecord) == true);
00412 validateRead10(samRecord);
00413 }
00414
00415
00416
00417 void validateRead1ModQuality(SamRecord& samRecord)
00418 {
00419
00420
00421
00422 int expectedBlockSize = 89;
00423 const char* expectedReferenceName = "1";
00424 const char* expectedMateReferenceName = "1";
00425 const char* expectedMateReferenceNameOrEqual = "=";
00426
00427 bamRecordStruct* expectedRecordPtr =
00428 (bamRecordStruct *) malloc(expectedBlockSize + sizeof(int));
00429
00430 char tag[3];
00431 char type;
00432 void* value;
00433 bamRecordStruct* bufferPtr;
00434 unsigned char* varPtr;
00435
00436 expectedRecordPtr->myBlockSize = expectedBlockSize;
00437 expectedRecordPtr->myReferenceID = 0;
00438 expectedRecordPtr->myPosition = 1010;
00439 expectedRecordPtr->myReadNameLength = 23;
00440 expectedRecordPtr->myMapQuality = 0;
00441 expectedRecordPtr->myBin = 4681;
00442 expectedRecordPtr->myCigarLength = 2;
00443 expectedRecordPtr->myFlag = 73;
00444 expectedRecordPtr->myReadLength = 5;
00445 expectedRecordPtr->myMateReferenceID = 0;
00446 expectedRecordPtr->myMatePosition = 1010;
00447 expectedRecordPtr->myInsertSize = 0;
00448
00449
00450 assert(samRecord.get0BasedAlignmentEnd() == 1016);
00451 assert(samRecord.get1BasedAlignmentEnd() == 1017);
00452 assert(samRecord.getAlignmentLength() == 7);
00453 assert(samRecord.get0BasedUnclippedStart() == 1010);
00454 assert(samRecord.get1BasedUnclippedStart() == 1011);
00455 assert(samRecord.get0BasedUnclippedEnd() == 1016);
00456 assert(samRecord.get1BasedUnclippedEnd() == 1017);
00457
00458
00459 assert(samRecord.getBlockSize() == expectedRecordPtr->myBlockSize);
00460 assert(samRecord.getReferenceID() == expectedRecordPtr->myReferenceID);
00461 assert(strcmp(samRecord.getReferenceName(), expectedReferenceName) == 0);
00462 assert(samRecord.get1BasedPosition() == expectedRecordPtr->myPosition + 1);
00463 assert(samRecord.get0BasedPosition() == expectedRecordPtr->myPosition);
00464 assert(samRecord.getReadNameLength() ==
00465 expectedRecordPtr->myReadNameLength);
00466 assert(samRecord.getMapQuality() == expectedRecordPtr->myMapQuality);
00467 assert(samRecord.getBin() == expectedRecordPtr->myBin);
00468 assert(samRecord.getCigarLength() == expectedRecordPtr->myCigarLength);
00469 assert(samRecord.getFlag() == expectedRecordPtr->myFlag);
00470 assert(samRecord.getReadLength() == expectedRecordPtr->myReadLength);
00471 assert(samRecord.getMateReferenceID() ==
00472 expectedRecordPtr->myMateReferenceID);
00473 assert(strcmp(samRecord.getMateReferenceName(),
00474 expectedMateReferenceName) == 0);
00475 assert(strcmp(samRecord.getMateReferenceNameOrEqual(),
00476 expectedMateReferenceNameOrEqual) == 0);
00477 assert(samRecord.get1BasedMatePosition() ==
00478 expectedRecordPtr->myMatePosition + 1);
00479 assert(samRecord.get0BasedMatePosition() ==
00480 expectedRecordPtr->myMatePosition);
00481 assert(samRecord.getInsertSize() == expectedRecordPtr->myInsertSize);
00482 assert(strcmp(samRecord.getReadName(), "1:1011:F:255+17M15D20M") == 0);
00483 assert(strcmp(samRecord.getCigar(), "5M2D") == 0);
00484 assert(strcmp(samRecord.getSequence(), "CCGAA") == 0);
00485 assert(strcmp(samRecord.getQuality(), "ABCDE") == 0);
00486 assert(samRecord.getNumOverlaps(1010, 1017) == 5);
00487 assert(samRecord.getNumOverlaps(1010, 1016) == 5);
00488 assert(samRecord.getNumOverlaps(1012, 1017) == 3);
00489 assert(samRecord.getNumOverlaps(1015, 1017) == 0);
00490 assert(samRecord.getNumOverlaps(1017, 1010) == 0);
00491 assert(samRecord.getNumOverlaps(1013, 1011) == 0);
00492 assert(samRecord.getNumOverlaps(-1, 1017) == 5);
00493
00494
00495 samRecord.resetTagIter();
00496
00497
00498 assert(samRecord.getNextSamTag(tag, type, &value) == true);
00499 assert(tag[0] == 'A');
00500 assert(tag[1] == 'M');
00501 assert(type == 'i');
00502 assert(*(char*)value == 0);
00503 assert(samRecord.getNextSamTag(tag, type, &value) == true);
00504 assert(tag[0] == 'M');
00505 assert(tag[1] == 'D');
00506 assert(type == 'Z');
00507 assert(*(String*)value == "37");
00508 assert(samRecord.getNextSamTag(tag, type, &value) == true);
00509 assert(tag[0] == 'N');
00510 assert(tag[1] == 'M');
00511 assert(type == 'i');
00512 assert(*(char*)value == 0);
00513 assert(samRecord.getNextSamTag(tag, type, &value) == true);
00514 assert(tag[0] == 'X');
00515 assert(tag[1] == 'T');
00516 assert(type == 'A');
00517 assert(*(char*)value == 'R');
00518
00519 assert(samRecord.getNextSamTag(tag, type, &value) == false);
00520 assert(samRecord.getNextSamTag(tag, type, &value) == false);
00521
00522
00523 bufferPtr = (bamRecordStruct*)samRecord.getRecordBuffer();
00524
00525 assert(bufferPtr->myBlockSize == expectedRecordPtr->myBlockSize);
00526 assert(bufferPtr->myReferenceID == expectedRecordPtr->myReferenceID);
00527 assert(bufferPtr->myPosition == expectedRecordPtr->myPosition);
00528 assert(bufferPtr->myReadNameLength == expectedRecordPtr->myReadNameLength);
00529 assert(bufferPtr->myMapQuality == expectedRecordPtr->myMapQuality);
00530 assert(bufferPtr->myBin == expectedRecordPtr->myBin);
00531 assert(bufferPtr->myCigarLength == expectedRecordPtr->myCigarLength);
00532 assert(bufferPtr->myFlag == expectedRecordPtr->myFlag);
00533 assert(bufferPtr->myReadLength == expectedRecordPtr->myReadLength);
00534 assert(bufferPtr->myMateReferenceID ==
00535 expectedRecordPtr->myMateReferenceID);
00536 assert(bufferPtr->myMatePosition == expectedRecordPtr->myMatePosition);
00537 assert(bufferPtr->myInsertSize == expectedRecordPtr->myInsertSize);
00538
00539
00540
00541 varPtr = (unsigned char*)(&(bufferPtr->myData[0]));
00542
00543
00544 for(int i = 0; i < expectedRecordPtr->myReadNameLength; i++)
00545 {
00546 assert(*varPtr == samRecord.getReadName()[i]);
00547 varPtr++;
00548 }
00549
00550
00551
00552 assert(*(unsigned int*)varPtr == 80);
00553
00554 varPtr += 4;
00555
00556 assert(*(unsigned int*)varPtr == 34);
00557
00558 varPtr += 4;
00559
00560
00561
00562 assert(*varPtr == 0x22);
00563 varPtr++;
00564
00565 assert(*varPtr == 0x41);
00566 varPtr++;
00567
00568 assert(*varPtr == 0x10);
00569 varPtr++;
00570
00571
00572 for(int i = 0; i < expectedRecordPtr->myReadLength; i++)
00573 {
00574 assert(*varPtr == samRecord.getQuality()[i] - 33);
00575 varPtr++;
00576 }
00577
00578
00579 assert(*varPtr == 'A');
00580 varPtr++;
00581 assert(*varPtr == 'M');
00582 varPtr++;
00583 assert(*varPtr == 'C');
00584 varPtr++;
00585 assert(*varPtr == 0);
00586 varPtr++;
00587 assert(*varPtr == 'M');
00588 varPtr++;
00589 assert(*varPtr == 'D');
00590 varPtr++;
00591 assert(*varPtr == 'Z');
00592 varPtr++;
00593 assert(*varPtr == '3');
00594 varPtr++;
00595 assert(*varPtr == '7');
00596 varPtr++;
00597 assert(*varPtr == 0);
00598 varPtr++;
00599 assert(*varPtr == 'N');
00600 varPtr++;
00601 assert(*varPtr == 'M');
00602 varPtr++;
00603 assert(*varPtr == 'C');
00604 varPtr++;
00605 assert(*varPtr == 0);
00606 varPtr++;
00607 assert(*varPtr == 'X');
00608 varPtr++;
00609 assert(*varPtr == 'T');
00610 varPtr++;
00611 assert(*varPtr == 'A');
00612 varPtr++;
00613 assert(*varPtr == 'R');
00614 varPtr++;
00615 }
00616
00617
00618 void testModHeader(SamFileHeader& samHeader)
00619 {
00620
00621 std::string headerString = "";
00622 assert(samHeader.getHeaderString(headerString) == true);
00623 assert(headerString == "@SQ\tSN:1\tLN:247249719\n@SQ\tSN:2\tLN:242951149\n@SQ\tSN:3\tLN:199501827\n@SQ\tSN:4\tLN:191273063\n@SQ\tSN:5\tLN:180857866\n@SQ\tSN:6\tLN:170899992\n@SQ\tSN:7\tLN:158821424\n@SQ\tSN:8\tLN:146274826\n@SQ\tSN:9\tLN:140273252\n@SQ\tSN:10\tLN:135374737\n@SQ\tSN:11\tLN:134452384\n@SQ\tSN:12\tLN:132349534\n@SQ\tSN:13\tLN:114142980\n@SQ\tSN:14\tLN:106368585\n@SQ\tSN:15\tLN:100338915\n@SQ\tSN:16\tLN:88827254\n@SQ\tSN:17\tLN:78774742\n@SQ\tSN:18\tLN:76117153\n@SQ\tSN:19\tLN:63811651\n@SQ\tSN:20\tLN:62435964\n@SQ\tSN:21\tLN:46944323\n@SQ\tSN:22\tLN:49691432\n@SQ\tSN:X\tLN:154913754\n@RG\tID:myID\tLB:library\tSM:sample\n@RG\tID:myID2\tSM:sample2\tLB:library2\n@CO\tComment 1\n@CO\tComment 2\n");
00624
00625
00626 assert(samHeader.setRGTag("LB", "", "myID2") == true);
00627
00628
00629
00630 assert(samHeader.getHeaderString(headerString) == true);
00631 assert(headerString == "@SQ\tSN:1\tLN:247249719\n@SQ\tSN:2\tLN:242951149\n@SQ\tSN:3\tLN:199501827\n@SQ\tSN:4\tLN:191273063\n@SQ\tSN:5\tLN:180857866\n@SQ\tSN:6\tLN:170899992\n@SQ\tSN:7\tLN:158821424\n@SQ\tSN:8\tLN:146274826\n@SQ\tSN:9\tLN:140273252\n@SQ\tSN:10\tLN:135374737\n@SQ\tSN:11\tLN:134452384\n@SQ\tSN:12\tLN:132349534\n@SQ\tSN:13\tLN:114142980\n@SQ\tSN:14\tLN:106368585\n@SQ\tSN:15\tLN:100338915\n@SQ\tSN:16\tLN:88827254\n@SQ\tSN:17\tLN:78774742\n@SQ\tSN:18\tLN:76117153\n@SQ\tSN:19\tLN:63811651\n@SQ\tSN:20\tLN:62435964\n@SQ\tSN:21\tLN:46944323\n@SQ\tSN:22\tLN:49691432\n@SQ\tSN:X\tLN:154913754\n@RG\tID:myID\tLB:library\tSM:sample\n@RG\tID:myID2\tSM:sample2\n@CO\tComment 1\n@CO\tComment 2\n");
00632
00633
00634 SamHeaderHD* hd = new SamHeaderHD();
00635 assert(hd->setTag("VN", "1.3") == true);
00636 assert(samHeader.addHD(hd) == true);
00637 assert(strcmp(samHeader.getHDTagValue("VN"), "1.3") == 0);
00638 assert(samHeader.getHeaderString(headerString) == true);
00639 assert(headerString == "@SQ\tSN:1\tLN:247249719\n@SQ\tSN:2\tLN:242951149\n@SQ\tSN:3\tLN:199501827\n@SQ\tSN:4\tLN:191273063\n@SQ\tSN:5\tLN:180857866\n@SQ\tSN:6\tLN:170899992\n@SQ\tSN:7\tLN:158821424\n@SQ\tSN:8\tLN:146274826\n@SQ\tSN:9\tLN:140273252\n@SQ\tSN:10\tLN:135374737\n@SQ\tSN:11\tLN:134452384\n@SQ\tSN:12\tLN:132349534\n@SQ\tSN:13\tLN:114142980\n@SQ\tSN:14\tLN:106368585\n@SQ\tSN:15\tLN:100338915\n@SQ\tSN:16\tLN:88827254\n@SQ\tSN:17\tLN:78774742\n@SQ\tSN:18\tLN:76117153\n@SQ\tSN:19\tLN:63811651\n@SQ\tSN:20\tLN:62435964\n@SQ\tSN:21\tLN:46944323\n@SQ\tSN:22\tLN:49691432\n@SQ\tSN:X\tLN:154913754\n@RG\tID:myID\tLB:library\tSM:sample\n@RG\tID:myID2\tSM:sample2\n@HD\tVN:1.3\n@CO\tComment 1\n@CO\tComment 2\n");
00640
00641
00642 SamHeaderHD* hd2 = new SamHeaderHD();
00643 assert(hd2->setTag("VN", "1.4") == true);
00644 assert(samHeader.addHD(hd2) == false);
00645 assert(strcmp(samHeader.getHDTagValue("VN"), "1.4") != 0);
00646 assert(strcmp(samHeader.getHDTagValue("VN"), "1.3") == 0);
00647 assert(samHeader.getHeaderString(headerString) == true);
00648 assert(headerString == "@SQ\tSN:1\tLN:247249719\n@SQ\tSN:2\tLN:242951149\n@SQ\tSN:3\tLN:199501827\n@SQ\tSN:4\tLN:191273063\n@SQ\tSN:5\tLN:180857866\n@SQ\tSN:6\tLN:170899992\n@SQ\tSN:7\tLN:158821424\n@SQ\tSN:8\tLN:146274826\n@SQ\tSN:9\tLN:140273252\n@SQ\tSN:10\tLN:135374737\n@SQ\tSN:11\tLN:134452384\n@SQ\tSN:12\tLN:132349534\n@SQ\tSN:13\tLN:114142980\n@SQ\tSN:14\tLN:106368585\n@SQ\tSN:15\tLN:100338915\n@SQ\tSN:16\tLN:88827254\n@SQ\tSN:17\tLN:78774742\n@SQ\tSN:18\tLN:76117153\n@SQ\tSN:19\tLN:63811651\n@SQ\tSN:20\tLN:62435964\n@SQ\tSN:21\tLN:46944323\n@SQ\tSN:22\tLN:49691432\n@SQ\tSN:X\tLN:154913754\n@RG\tID:myID\tLB:library\tSM:sample\n@RG\tID:myID2\tSM:sample2\n@HD\tVN:1.3\n@CO\tComment 1\n@CO\tComment 2\n");
00649
00650
00651 assert(samHeader.removeHD() == true);
00652 assert(strcmp(samHeader.getHDTagValue("VN"), "") == 0);
00653 assert(samHeader.getHeaderString(headerString) == true);
00654 assert(headerString == "@SQ\tSN:1\tLN:247249719\n@SQ\tSN:2\tLN:242951149\n@SQ\tSN:3\tLN:199501827\n@SQ\tSN:4\tLN:191273063\n@SQ\tSN:5\tLN:180857866\n@SQ\tSN:6\tLN:170899992\n@SQ\tSN:7\tLN:158821424\n@SQ\tSN:8\tLN:146274826\n@SQ\tSN:9\tLN:140273252\n@SQ\tSN:10\tLN:135374737\n@SQ\tSN:11\tLN:134452384\n@SQ\tSN:12\tLN:132349534\n@SQ\tSN:13\tLN:114142980\n@SQ\tSN:14\tLN:106368585\n@SQ\tSN:15\tLN:100338915\n@SQ\tSN:16\tLN:88827254\n@SQ\tSN:17\tLN:78774742\n@SQ\tSN:18\tLN:76117153\n@SQ\tSN:19\tLN:63811651\n@SQ\tSN:20\tLN:62435964\n@SQ\tSN:21\tLN:46944323\n@SQ\tSN:22\tLN:49691432\n@SQ\tSN:X\tLN:154913754\n@RG\tID:myID\tLB:library\tSM:sample\n@RG\tID:myID2\tSM:sample2\n@CO\tComment 1\n@CO\tComment 2\n");
00655
00656
00657 assert(strcmp(samHeader.getSQTagValue("LN", "11"), "134452384") == 0);
00658 assert(samHeader.removeSQ("11") == true);
00659 assert(strcmp(samHeader.getSQTagValue("LN", "11"), "") == 0);
00660 assert(samHeader.getHeaderString(headerString) == true);
00661 assert(headerString == "@SQ\tSN:1\tLN:247249719\n@SQ\tSN:2\tLN:242951149\n@SQ\tSN:3\tLN:199501827\n@SQ\tSN:4\tLN:191273063\n@SQ\tSN:5\tLN:180857866\n@SQ\tSN:6\tLN:170899992\n@SQ\tSN:7\tLN:158821424\n@SQ\tSN:8\tLN:146274826\n@SQ\tSN:9\tLN:140273252\n@SQ\tSN:10\tLN:135374737\n@SQ\tSN:12\tLN:132349534\n@SQ\tSN:13\tLN:114142980\n@SQ\tSN:14\tLN:106368585\n@SQ\tSN:15\tLN:100338915\n@SQ\tSN:16\tLN:88827254\n@SQ\tSN:17\tLN:78774742\n@SQ\tSN:18\tLN:76117153\n@SQ\tSN:19\tLN:63811651\n@SQ\tSN:20\tLN:62435964\n@SQ\tSN:21\tLN:46944323\n@SQ\tSN:22\tLN:49691432\n@SQ\tSN:X\tLN:154913754\n@RG\tID:myID\tLB:library\tSM:sample\n@RG\tID:myID2\tSM:sample2\n@CO\tComment 1\n@CO\tComment 2\n");
00662
00663
00664 hd = NULL;
00665 assert(samHeader.addHD(hd) == false);
00666 assert(strcmp(samHeader.getHDTagValue("VN"), "") == 0);
00667 assert(strcmp(samHeader.getHDTagValue("VN"), "1.4") != 0);
00668 assert(strcmp(samHeader.getHDTagValue("VN"), "1.3") != 0);
00669 assert(samHeader.getHeaderString(headerString) == true);
00670 assert(headerString == "@SQ\tSN:1\tLN:247249719\n@SQ\tSN:2\tLN:242951149\n@SQ\tSN:3\tLN:199501827\n@SQ\tSN:4\tLN:191273063\n@SQ\tSN:5\tLN:180857866\n@SQ\tSN:6\tLN:170899992\n@SQ\tSN:7\tLN:158821424\n@SQ\tSN:8\tLN:146274826\n@SQ\tSN:9\tLN:140273252\n@SQ\tSN:10\tLN:135374737\n@SQ\tSN:12\tLN:132349534\n@SQ\tSN:13\tLN:114142980\n@SQ\tSN:14\tLN:106368585\n@SQ\tSN:15\tLN:100338915\n@SQ\tSN:16\tLN:88827254\n@SQ\tSN:17\tLN:78774742\n@SQ\tSN:18\tLN:76117153\n@SQ\tSN:19\tLN:63811651\n@SQ\tSN:20\tLN:62435964\n@SQ\tSN:21\tLN:46944323\n@SQ\tSN:22\tLN:49691432\n@SQ\tSN:X\tLN:154913754\n@RG\tID:myID\tLB:library\tSM:sample\n@RG\tID:myID2\tSM:sample2\n@CO\tComment 1\n@CO\tComment 2\n");
00671
00672
00673 SamHeaderSQ* sq = NULL;
00674 assert(samHeader.addSQ(sq) == false);
00675 assert(samHeader.getHeaderString(headerString) == true);
00676 assert(headerString == "@SQ\tSN:1\tLN:247249719\n@SQ\tSN:2\tLN:242951149\n@SQ\tSN:3\tLN:199501827\n@SQ\tSN:4\tLN:191273063\n@SQ\tSN:5\tLN:180857866\n@SQ\tSN:6\tLN:170899992\n@SQ\tSN:7\tLN:158821424\n@SQ\tSN:8\tLN:146274826\n@SQ\tSN:9\tLN:140273252\n@SQ\tSN:10\tLN:135374737\n@SQ\tSN:12\tLN:132349534\n@SQ\tSN:13\tLN:114142980\n@SQ\tSN:14\tLN:106368585\n@SQ\tSN:15\tLN:100338915\n@SQ\tSN:16\tLN:88827254\n@SQ\tSN:17\tLN:78774742\n@SQ\tSN:18\tLN:76117153\n@SQ\tSN:19\tLN:63811651\n@SQ\tSN:20\tLN:62435964\n@SQ\tSN:21\tLN:46944323\n@SQ\tSN:22\tLN:49691432\n@SQ\tSN:X\tLN:154913754\n@RG\tID:myID\tLB:library\tSM:sample\n@RG\tID:myID2\tSM:sample2\n@CO\tComment 1\n@CO\tComment 2\n");
00677
00678
00679 assert(samHeader.addHD(hd2) == true);
00680 assert(strcmp(samHeader.getHDTagValue("VN"), "1.4") == 0);
00681 assert(strcmp(samHeader.getHDTagValue("VN"), "1.3") != 0);
00682 assert(samHeader.getHeaderString(headerString) == true);
00683 assert(headerString == "@SQ\tSN:1\tLN:247249719\n@SQ\tSN:2\tLN:242951149\n@SQ\tSN:3\tLN:199501827\n@SQ\tSN:4\tLN:191273063\n@SQ\tSN:5\tLN:180857866\n@SQ\tSN:6\tLN:170899992\n@SQ\tSN:7\tLN:158821424\n@SQ\tSN:8\tLN:146274826\n@SQ\tSN:9\tLN:140273252\n@SQ\tSN:10\tLN:135374737\n@SQ\tSN:12\tLN:132349534\n@SQ\tSN:13\tLN:114142980\n@SQ\tSN:14\tLN:106368585\n@SQ\tSN:15\tLN:100338915\n@SQ\tSN:16\tLN:88827254\n@SQ\tSN:17\tLN:78774742\n@SQ\tSN:18\tLN:76117153\n@SQ\tSN:19\tLN:63811651\n@SQ\tSN:20\tLN:62435964\n@SQ\tSN:21\tLN:46944323\n@SQ\tSN:22\tLN:49691432\n@SQ\tSN:X\tLN:154913754\n@RG\tID:myID\tLB:library\tSM:sample\n@RG\tID:myID2\tSM:sample2\n@HD\tVN:1.4\n@CO\tComment 1\n@CO\tComment 2\n");
00684
00685
00686
00687
00688 }