libStatGen Software 1
Loading...
Searching...
No Matches
SamCoordOutputTest Class Reference

Static Public Member Functions

static void testSamCoordOutput ()
 

Detailed Description

Definition at line 23 of file TestSamCoordOutput.h.

Member Function Documentation

◆ testSamCoordOutput()

void SamCoordOutputTest::testSamCoordOutput ( )
static

Definition at line 31 of file TestSamCoordOutput.cpp.

32{
33 SamRecordPool pool(3);
34
35 SamCoordOutput outputBuffer(pool);
36
37 SamFile inSam;
38 SamFile outSam;
39 SamFileHeader samHeader;
40 SamRecord* rec1 = NULL;
41 SamRecord* rec2 = NULL;
42 SamRecord* rec3 = NULL;
43
44 // Open input file and read the header.
45#ifdef __ZLIB_AVAILABLE__
46 assert(inSam.OpenForRead("testFiles/testBam.bam"));
47#else
48 assert(inSam.OpenForRead("testFiles/testSam.sam"));
49#endif
50 assert(inSam.ReadHeader(samHeader));
51 validateHeader(samHeader);
52
53 // Check failed to add empty record.
54 assert(!outputBuffer.add(rec1));
55
56 // Read the first 3 records from the input file.
57 rec1 = pool.getRecord();
58 assert(inSam.ReadRecord(samHeader, *rec1) == true);
59 validateRead1(*rec1);
60 rec2 = pool.getRecord();
61 assert(inSam.ReadRecord(samHeader, *rec2) == true);
62 validateRead2(*rec2);
63 rec3 = pool.getRecord();
64 assert(inSam.ReadRecord(samHeader, *rec3) == true);
65 validateRead3(*rec3);
66 assert(pool.getRecord() == NULL);
67
68 // Add the first 3 records to the output buffer.
69 // Sorted order is rec 3, 1, 2
70 assert(outputBuffer.add(rec1));
71 assert(outputBuffer.add(rec2));
72 assert(outputBuffer.add(rec3));
73
74 // Test writing to the output buffer without having set it.
75 // Should flush just rec3 out.
76 assert(!outputBuffer.flush(0, 100));
77
78 // Set the output buffer.
79 outputBuffer.setOutputFile(&outSam, &samHeader);
80
81 // Open output file and write the header.
82 assert(outSam.OpenForWrite("results/TestSamCoordOutput.sam"));
83 assert(outSam.WriteHeader(samHeader));
84
85 // Read another 1 record (reuse record pointers).
86 rec1 = pool.getRecord();
87 assert(inSam.ReadRecord(samHeader, *rec1) == true);
88 validateRead4(*rec1);
89 assert(outputBuffer.add(rec1));
90
91 rec1 = pool.getRecord();
92 assert(rec1 == NULL);
93
94
95 // Flush out just the reads before this position.
96 assert(outputBuffer.flush(0, 1011));
97
98 // Read 2 more records.
99 rec1 = pool.getRecord();
100 assert(inSam.ReadRecord(samHeader, *rec1) == true);
101 validateRead5(*rec1);
102 assert(outputBuffer.add(rec1));
103
104 rec1 = pool.getRecord();
105 assert(inSam.ReadRecord(samHeader, *rec1) == true);
106 validateRead6(*rec1);
107 assert(outputBuffer.add(rec1));
108
109 // Can get another record (tests to make sure flushes up to and
110 // including the specified position). If it did not
111 // flush the specified position, there would not be
112 // another record available.
113 rec1 = pool.getRecord();
114 assert(rec1 != NULL);
115
116 // Flush out just the reads before this position.
117 assert(outputBuffer.flush(0, 1012));
118
119 // Read another record.
120 assert(inSam.ReadRecord(samHeader, *rec1) == true);
121 validateRead7(*rec1);
122 assert(outputBuffer.add(rec1));
123 assert(pool.getRecord() == NULL);
124
125 // Flush out just the reads on chrom 1 (chrom id 0).
126 assert(outputBuffer.flush(0, -1));
127
128 // Read another record.
129 rec1 = pool.getRecord();
130 assert(inSam.ReadRecord(samHeader, *rec1) == true);
131 validateRead8(*rec1);
132 assert(outputBuffer.add(rec1));
133 assert(pool.getRecord() == NULL);
134
135 // Flush out the chrom 2 (chrom id 1) reads.
136 assert(outputBuffer.flush(2, 0));
137
138 // Read the rest of the records.
139 rec1 = pool.getRecord();
140 assert(inSam.ReadRecord(samHeader, *rec1) == true);
141 validateRead9(*rec1);
142 assert(outputBuffer.add(rec1));
143 rec1 = pool.getRecord();
144 assert(inSam.ReadRecord(samHeader, *rec1) == true);
145 validateRead10(*rec1);
146 assert(outputBuffer.add(rec1));
147 assert(pool.getRecord() == NULL);
148
149 // Flush the rest by passing in -1, -1
150 assert(outputBuffer.flush(-1, -1));
151}
Class for buffering up output reads to ensure that it is sorted.
This class allows a user to get/set the fields in a SAM/BAM Header.
Allows the user to easily read/write a SAM/BAM file.
Definition SamFile.h:36
bool ReadHeader(SamFileHeader &header)
Reads the header section from the file and stores it in the passed in header.
Definition SamFile.cpp:450
bool ReadRecord(SamFileHeader &header, SamRecord &record)
Reads the next record from the file & stores it in the passed in record.
Definition SamFile.cpp:514
bool OpenForRead(const char *filename, SamFileHeader *header=NULL)
Open a sam/bam file for reading with the specified filename, determing the type of file and SAM/BAM b...
Definition SamFile.cpp:93
bool OpenForWrite(const char *filename, SamFileHeader *header=NULL)
Open a sam/bam file for writing with the specified filename, determining SAM/BAM from the extension (...
Definition SamFile.cpp:223
bool WriteHeader(SamFileHeader &header)
Writes the specified header into the file.
Definition SamFile.cpp:480
Class providing an easy to use interface to get/set/operate on the fields in a SAM/BAM record.
Definition SamRecord.h:52

The documentation for this class was generated from the following files: