1use bio_types::genome::AbstractInterval;
9
10use crate::bam;
11use crate::bam::record::{Aux, CsString};
12use crate::bam::record::{
13 Cigar, CigarString,
14 CsValue::{self, *},
15};
16use crate::htslib;
17use std::collections::{BTreeMap, HashMap};
18
19use std::convert::TryInto;
20use std::ops::{Range, RangeBounds, RangeInclusive};
21use std::str::FromStr;
22#[derive(Debug, Clone, Copy)]
23pub struct MovingPos {
24 fakepos: i64,
25 isvalid: bool,
26}
27impl MovingPos {
28 fn new(pos: i64, isvalid: bool) -> Self {
29 MovingPos {
30 fakepos: pos,
31 isvalid,
32 }
33 }
34}
35#[derive(Debug, Clone)]
36pub struct CsData {
37 pub genome_pos: MovingPos,
39 pub read_pos: MovingPos,
41 pub state: CsValue,
43 pub sequence: SeqPos,
45}
46impl CsData {
47 pub fn getgenomepos(&self) -> Option<i64> {
49 match self.genome_pos.isvalid {
50 true => Some(self.genome_pos.fakepos),
51 false => None,
52 }
53 }
54 pub fn getgenomepos_zero(&self) -> i64 {
56 self.genome_pos.fakepos
57 }
58 pub fn getreadpos(&self) -> Option<i64> {
60 match self.read_pos.isvalid {
61 true => Some(self.read_pos.fakepos),
62 false => None,
63 }
64 }
65 pub fn getreadpos_zero(&self) -> i64 {
67 self.read_pos.fakepos
68 }
69 fn new(
70 genome_pos: (i64, bool),
71 read_pos: (i64, bool),
72 state: CsValue,
73 sequence: SeqPos,
74 ) -> Self {
75 CsData {
76 genome_pos: MovingPos::new(genome_pos.0, genome_pos.1),
77 read_pos: MovingPos::new(read_pos.0, read_pos.1),
78 state,
79 sequence,
80 }
81 }
82}
83#[derive(Debug, Clone)]
84pub struct SeqPos {
85 genome_seq: Option<String>,
87 read_seq: Option<String>,
89}
90impl SeqPos {
91 pub fn genomematch<T>(&self, genome_match: Option<T>) -> bool
93 where
94 T: AsRef<str>,
95 {
96 match (&self.genome_seq, genome_match) {
97 (Some(d), Some(q)) if d.to_lowercase() == q.as_ref().to_lowercase() => true,
98 (None, None) => true,
99 _ => false,
100 }
101 }
102 pub fn readmatch<T>(&self, read_match: Option<T>) -> bool
104 where
105 T: AsRef<str>,
106 {
107 match (&self.read_seq, read_match) {
108 (Some(d), Some(q)) if d.to_lowercase() == q.as_ref().to_lowercase() => true,
109 (None, None) => true,
110 _ => false,
111 }
112 }
113}
114pub struct CgAlignedBlockPairs {
116 pub contig: Vec<u8>,
118 pub genome_pos: i64,
120 pub genomelen: usize,
122 cs_index: usize,
123 csdata: Vec<CsData>,
124 pub cs: CsString,
126}
127impl CgAlignedBlockPairs {
128 pub fn getcontig(&self) -> &[u8] {
130 &self.contig
131 }
132 pub fn islongcs(&self) -> bool {
134 self.cs.islongcs()
135 }
136 pub fn getcs(&self) -> &CsString {
138 &self.cs
139 }
140 pub fn restrict<T>(&mut self, contig: &[u8], range: T)
142 where
143 T: RangeBounds<usize>,
144 {
145 let genomepos = match self.genome_pos.try_into() {
146 Ok(a) => a,
147 Err(_a) => {
148 return;
149 }
150 };
151 if self.contig != contig || !range.contains(&genomepos) {
152 self.csdata.clear();
153 return;
154 }
155 let new = self
156 .filter(|p| {
157 if let Ok(a) = p.getgenomepos_zero().try_into() {
158 range.contains(&a)
159 } else {
160 false
161 }
162 })
163 .collect();
164 self.csdata = new;
165 }
166}
167impl Iterator for CgAlignedBlockPairs {
168 type Item = CsData;
169
170 fn next(&mut self) -> Option<Self::Item> {
171 match self.csdata.get(self.cs_index) {
172 Some(value) => {
173 self.cs_index += 1;
174 Some(value.clone())
175 }
176 None => None,
177 }
178 }
179}
180impl Into<CsString> for CgAlignedBlockPairs {
181 fn into(self) -> CsString {
182 self.cs
183 }
184}
185impl CgAlignedBlockPairs {
186 fn increasecounting(mut genome_pos: i64, mut query_pos: i64, state: &CsValue) -> (i64, i64) {
187 match state {
188 CsValue::Same(_) | CsValue::Intron(_) => {
189 genome_pos += state.getlength() as i64;
190 query_pos += state.getlength() as i64;
191 (genome_pos, query_pos)
192 }
193 CsValue::Deletion(_) => {
194 genome_pos += state.getlength() as i64;
195 (genome_pos, query_pos)
196 }
197 CsValue::Insertion(_) => {
198 query_pos += state.getlength() as i64;
199 (genome_pos, query_pos)
200 }
201 CsValue::Substitution(_) => {
202 genome_pos += 1;
203 query_pos += 1;
204 (genome_pos, query_pos)
205 }
206 }
207 }
208 fn createfromcs<T, F>(
210 csstring: F,
211 seq: Option<T>,
212 contig: Vec<u8>,
213 old_genome_pos: i64,
214 ) -> Result<Self, crate::bam::Error>
215 where
216 T: Into<String>,
217 F: Into<CsString>,
218 {
219 let (mut genome_pos, mut query_pos): (i64, i64) = (old_genome_pos, 0);
220 let csstring = csstring.into();
221 let seq = seq.map(|p| p.into()).and_then(|f| {
222 if f.trim().is_empty() {
223 None
224 } else {
225 Some(f.trim().to_string())
226 }
227 });
228 let mut list = Vec::new();
229 for block in csstring.into_iter() {
230 let (seq, state) = match (seq.as_ref(), block) {
231 (Some(s), a) if a.issame() => {
233 let val: String = s
234 .char_indices()
235 .skip(query_pos.try_into().unwrap_or_default())
236 .take(a.getlength())
237 .into_iter()
238 .map(|(_a, b)| b)
239 .collect();
240 if val.trim().is_empty() {
241 return Err(crate::errors::Error::BamParseCS {
242 rec: format!("Invalid format for CS tag at value {}", a),
243 });
244 }
245 (Some(val), a)
246 }
247 (None, a) if a.issame() => {
248 return Err(crate::errors::Error::BamParseCS {
249 rec: format!("No seq provided to match for CS tag at value {}", a),
250 });
251 }
252 (_, s) if s.isintron() => (None, s),
253 (_, s) if let Some(a) = s.getseq() => (Some(a), s),
255 (_, b) => {
256 return Err(crate::errors::Error::BamParseCS {
257 rec: format!("Invalid format for CS tag at value {}", b),
258 });
259 }
260 };
261 let (seq1, seq2) = match state {
262 CsValue::Substitution((a, b)) => (Some(a.to_string()), Some(b.to_string())),
263 CsValue::Same(_) => match seq {
264 None => (None, None),
265 Some(d) => (Some(d.clone()), Some(d.clone())),
266 },
267 CsValue::Deletion(_) => {
268 let seq = seq
269 .as_ref()
270 .ok_or_else(|| crate::errors::Error::BamParseCS {
271 rec: "Invalid string CS".to_string(),
272 })?;
273 (None, Some(seq.clone()))
274 }
275 CsValue::Insertion(_) | CsValue::Intron(_) => {
276 let seq = seq
277 .as_ref()
278 .ok_or_else(|| crate::errors::Error::BamParseCS {
279 rec: "Invalid string CS".to_string(),
280 })?;
281 (Some(seq.clone()), None)
282 }
283 };
284 let seq = SeqPos {
285 genome_seq: seq1,
286 read_seq: seq2,
287 };
288 let genome_bool = !matches!(state, CsValue::Insertion(_));
289 let read_bool = !matches!(state, CsValue::Deletion(_));
290 let elem = CsData::new(
291 (genome_pos, genome_bool),
292 (query_pos, read_bool),
293 state.clone(),
294 seq,
295 );
296 (genome_pos, query_pos) = Self::increasecounting(genome_pos, query_pos, &state);
297 list.push(elem);
298 }
299 Ok(CgAlignedBlockPairs {
300 contig,
301 genome_pos: old_genome_pos,
302 genomelen: std::convert::TryInto::<usize>::try_into(genome_pos - old_genome_pos + 1)
303 .unwrap(),
304 cs_index: 0,
305 csdata: list,
306 cs: csstring,
307 })
308 }
309 fn createfrommdtag<T>(
342 md: T,
343 seq: T,
344 cigar: &[Cigar],
345 line: T,
346 long_cs: bool,
347 contig: Vec<u8>,
348 genome_pos: i64,
349 ) -> Result<Self, bam::Error>
350 where
351 T: AsRef<str>,
352 {
353 let md = md.as_ref().trim();
355 let seq = seq.as_ref().trim();
356 let line = line.as_ref().trim();
357
358 if md.is_empty() || seq.is_empty() || cigar.is_empty() {
359 return Err(bam::Error::BamParseMD {
360 rec: format!("at line {}: MD, SEQ, or CIGAR tag is empty", line),
361 });
362 }
363
364 if md.starts_with('^') || md.ends_with('^') {
365 return Err(bam::Error::BamParseMD {
366 rec: format!("at line {}: MD tag cannot start or end with '^'", line),
367 });
368 }
369
370 let re_md = regex::RegexBuilder::new(r"(\d+)|(\^)([a-z]+)|((?:[a-z]0?)+)")
376 .case_insensitive(true)
377 .build()
378 .map_err(|e| bam::Error::BamParseMD {
379 rec: format!("at line {}: Invalid MD tag regex: {}", line, e),
380 })?;
381
382 let mut cx = 0;
388 let mut cy = 0;
389 let mut mx = 0;
390 let mut my: usize = 0;
391 let mut k = 0; let mut rem_cl: usize = 0; let mut cs = String::new(); for cap in re_md.captures_iter(md) {
396 if let Some(deletion) = cap.get(3) {
398 let deletion_len = deletion.as_str().len();
399 cs.push('-');
402 cs.push_str(deletion.as_str());
403 mx += deletion_len;
404 cx += deletion_len;
405 if cigar.get(k) == Some(&Cigar::Del(deletion_len.try_into().unwrap_or_default())) {
406 k += 1;
407 }
408 rem_cl = 0;
409 continue;
410 }
411
412 let mut ml = if let Some(match_len) = cap.get(1) {
414 match_len
416 .as_str()
417 .parse::<usize>()
418 .map_err(|e| bam::Error::BamParseMD {
419 rec: format!("at line {}: Invalid match length in MD tag: {}", line, e),
420 })?
421 } else if let Some(b) = cap.get(4) {
422 b.as_str().replace("0", "").len()
424 } else {
425 return Err(bam::Error::BamParseMD {
426 rec: format!("at line {}: Invalid MD tag component: {}", line, md),
427 });
428 };
429
430 if ml == 0 {
431 continue; }
433
434 while let Some(elem) = cigar.get(k) {
436 match elem {
437 Cigar::Del(cl) => {
441 let cl: usize = (*cl).try_into().map_err(|_| bam::Error::BamParseMD {
442 rec: format!("at line {}: Invalid CIGAR deletion length", line),
443 })?;
444 cx += cl;
445 k += 1;
446 rem_cl = 0;
447 }
448
449 Cigar::Equal(cl) | Cigar::Diff(cl) | Cigar::Match(cl) => {
452 let cl: usize = (*cl).try_into().map_err(|_| bam::Error::BamParseMD {
453 rec: format!("at line {}: Invalid CIGAR match length", line),
454 })?;
455 if rem_cl == 0 {
456 rem_cl = cl;
457 }
458 let take = ml.min(rem_cl);
459
460 if let Some(mismatch_base) = cap.get(4) {
461 let mut raw = String::new();
464 for (index, charm) in
465 mismatch_base.as_str().replace("0", "").chars().enumerate()
466 {
467 raw.push('*');
468 raw.push_str(&charm.to_string());
469 let string: Vec<char> =
470 seq.chars().skip(my.saturating_add(index)).take(1).collect();
471 let string: String = string.into_iter().collect();
472 if string.trim().is_empty() {
473 return Err(bam::Error::BamParseMD {
474 rec: format!(
475 "at line {}: Read sequence too short for MD tag",
476 line
477 ),
478 });
479 }
480 raw.push_str(&string);
481 }
482 cs.push_str(&raw);
483 } else if long_cs {
484 cs.push('=');
485 let string: Vec<char> = seq.chars().skip(my).take(take).collect();
486 let string: String = string.into_iter().collect();
487 if string.trim().is_empty() {
488 return Err(bam::Error::BamParseMD {
489 rec: format!(
490 "at line {}: Read sequence too short for MD tag",
491 line
492 ),
493 });
494 }
495 cs.push_str(&string);
496 } else {
497 cs.push(':');
498 cs.push_str(&take.to_string()); }
500
501 mx += take;
502 my += take;
503 cx += take;
504 cy += take;
505 ml -= take;
506 rem_cl -= take;
507
508 if rem_cl == 0 {
509 k += 1; }
511 if ml == 0 {
512 break;
513 }
514 }
515
516 Cigar::Ins(cl) => {
519 let cl: usize = (*cl).try_into().map_err(|_| bam::Error::BamParseMD {
520 rec: format!("at line {}: Invalid CIGAR insertion length", line),
521 })?;
522 cs.push('+');
523 let string: Vec<char> = seq.chars().skip(cy).take(cl).collect();
524 let string: String = string.into_iter().collect();
525 if string.trim().is_empty() {
526 return Err(bam::Error::BamParseMD {
527 rec: format!(
528 "at line {}: Read sequence too short for MD tag insertion. Cy is {} and CL is {}",
529 line, cy, cl
530 ),
531 });
532 }
533 cs.push_str(&string);
534 cy += cl;
535 my += cl;
536 k += 1;
537 rem_cl = 0;
538 }
539
540 Cigar::SoftClip(cl) => {
543 let cl: usize = (*cl).try_into().map_err(|_| bam::Error::BamParseMD {
544 rec: format!("at line {}: Invalid CIGAR soft clip length", line),
545 })?;
546 cy += cl;
547 my += cl;
548 k += 1;
549 rem_cl = 0;
550 }
551
552 Cigar::RefSkip(cl) => {
555 let cl: usize = (*cl).try_into().map_err(|_| bam::Error::BamParseMD {
556 rec: format!("at line {}: Invalid CIGAR reference skip length", line),
557 })?;
558 cx += cl;
559 mx += cl;
560 k += 1;
561 rem_cl = 0;
562 }
563
564 Cigar::HardClip(_) | Cigar::Pad(_) => {
567 k += 1;
568 rem_cl = 0;
569 }
570 }
571 }
572
573 if ml != 0 {
575 return Err(bam::Error::BamParseMD {
576 rec: format!(
577 "at line {}: Inconsistent MD tag (ml={} remaining, cx={}, mx={}, cy={}, my={}, cigarpos={}, elem={:?}, md={:?})",
578 line,
579 ml,
580 cx,
581 mx,
582 cy,
583 my,
584 k,
585 cigar.get(k.saturating_sub(1)),
586 cap
587 ),
588 });
589 }
590 }
591
592 if cx != mx || cy != my {
594 return Err(bam::Error::BamParseMD {
595 rec: format!(
596 "at line {}: Inconsistent alignment (cx={}, mx={}, cy={}, my={})",
597 line, cx, mx, cy, my
598 ),
599 });
600 }
601
602 Ok(Self::createfromcs(
604 CsString::from_str(&cs)?,
605 Some(seq.to_string()),
606 contig,
607 genome_pos,
608 )?)
609 }
610}
611pub trait MatchIter {
612 fn ismatchonly(&self) -> bool;
614 fn setmatchstate(&mut self, matchs: bool);
616}
617pub struct IterAlignedBlockCigarMatchPairs {
618 genome_pos: i64,
619 read_pos: i64,
620 cigar_index: usize,
621 cigar: Vec<Cigar>,
622}
623impl Iterator for IterAlignedBlockCigarMatchPairs {
624 type Item = (Option<(Range<i64>, Range<i64>)>, Cigar);
625 fn next(&mut self) -> Option<Self::Item> {
626 while self.cigar_index < self.cigar.len() {
627 let entry = self.cigar[self.cigar_index];
628 self.cigar_index += 1;
629 match entry {
630 Cigar::Match(len) | Cigar::Equal(len) | Cigar::Diff(len) => {
631 let qstart = self.read_pos;
632 let qend = qstart + len as i64;
633 let rstart = self.genome_pos;
634 let rend = self.genome_pos + len as i64;
635 self.read_pos += len as i64;
636 self.genome_pos += len as i64;
637 if matches!(entry, Cigar::Equal(_)) {
638 return Some((Some((qstart..qend, rstart..rend)), entry));
639 }
640 }
641 Cigar::Ins(len) | Cigar::SoftClip(len) => {
642 self.read_pos += len as i64;
643 }
644 Cigar::Del(len) | Cigar::RefSkip(len) => {
645 self.genome_pos += len as i64;
646 }
647 Cigar::HardClip(_) => {} Cigar::Pad(_) => panic!("Padding (Cigar::Pad) is not supported."), }
650 return Some((None, entry));
651 }
652 None
653 }
654}
655pub struct IterAlignedBlockCigarPairs {
656 genome_pos: i64,
657 read_pos: i64,
658 cigar_index: usize,
659 cigar: Vec<Cigar>,
660}
661impl Iterator for IterAlignedBlockCigarPairs {
662 type Item = (Range<i64>, Range<i64>, Cigar);
663 fn next(&mut self) -> Option<Self::Item> {
664 while self.cigar_index < self.cigar.len() {
665 let entry = self.cigar[self.cigar_index];
666 self.cigar_index += 1;
667 match entry {
668 Cigar::Match(len) | Cigar::Equal(len) | Cigar::Diff(len) => {
669 let qstart = self.read_pos;
670 let qend = qstart + len as i64;
671 let rstart = self.genome_pos;
672 let rend = self.genome_pos + len as i64;
673 self.read_pos += len as i64;
674 self.genome_pos += len as i64;
675 return Some((qstart..qend, rstart..rend, entry));
676 }
677 Cigar::Ins(len) | Cigar::SoftClip(len) => {
678 let qstart = self.read_pos;
679 let qend = qstart + len as i64;
680 let rstart = self.genome_pos;
681 self.read_pos += len as i64;
682 return Some((qstart..qend, rstart..rstart, entry));
683 }
684 Cigar::Del(len) | Cigar::RefSkip(len) => {
685 let qstart = self.read_pos;
686 let rstart = self.genome_pos;
687 let rend = self.genome_pos + len as i64;
688 self.genome_pos += len as i64;
689 return Some((qstart..qstart, rstart..rend, entry));
690 }
691 Cigar::HardClip(_) => {
692 return Some((
693 self.read_pos..self.read_pos,
694 self.genome_pos..self.genome_pos,
695 entry,
696 ));
697 } Cigar::Pad(_) => panic!("Padding (Cigar::Pad) is not supported."), }
700 }
701 None
702 }
703}
704pub struct IterAlignedBlockPairs {
705 genome_pos: i64,
706 read_pos: i64,
707 cigar_index: usize,
708 cigar: Vec<Cigar>,
709 r#match: bool,
710}
711impl MatchIter for IterAlignedBlockPairs {
712 fn ismatchonly(&self) -> bool {
713 self.r#match
714 }
715
716 fn setmatchstate(&mut self, matchs: bool) {
717 self.r#match = matchs;
718 }
719}
720impl Iterator for IterAlignedBlockPairs {
721 type Item = ([i64; 2], [i64; 2]);
722 fn next(&mut self) -> Option<Self::Item> {
723 while self.cigar_index < self.cigar.len() {
724 let entry = self.cigar[self.cigar_index];
725 match entry {
726 Cigar::Match(len) | Cigar::Equal(len) | Cigar::Diff(len) => {
727 let qstart = self.read_pos;
728 let qend = qstart + len as i64;
729 let rstart = self.genome_pos;
730 let rend = self.genome_pos + len as i64;
731 self.read_pos += len as i64;
732 self.genome_pos += len as i64;
733 #[allow(clippy::nonminimal_bool)]
734 if (self.r#match && matches!(entry, Cigar::Equal(_))) || !self.r#match {
735 self.cigar_index += 1;
736 return Some(([qstart, qend], [rstart, rend]));
737 }
738 }
739 Cigar::Ins(len) | Cigar::SoftClip(len) => {
740 self.read_pos += len as i64;
741 }
742 Cigar::Del(len) | Cigar::RefSkip(len) => {
743 self.genome_pos += len as i64;
744 }
745 Cigar::HardClip(_) => {} Cigar::Pad(_) => panic!("Padding (Cigar::Pad) is not supported."), }
748 self.cigar_index += 1;
749 }
750 None
751 }
752}
753#[derive(Ord, PartialOrd, Eq, PartialEq, Debug, Copy, Clone)]
754pub struct RangePos {
755 pub start: i64,
756 pub end: i64,
757}
758impl RangePos {
759 pub fn getrange(&self) -> Range<i64> {
760 self.start..self.end
761 }
762 pub fn start(&self) -> i64 {
763 self.start
764 }
765 pub fn end(&self) -> i64 {
766 self.end
767 }
768 #[allow(unused)]
769 fn new(start: i64, end: i64) -> Self {
770 let (start, end) = match start.cmp(&end) {
771 std::cmp::Ordering::Greater => (end, start),
772 _ => (start, end),
773 };
774 RangePos { start, end }
775 }
776}
777pub struct MatchSequence {
786 pub hash: BTreeMap<RangePos, String>,
787}
788impl MatchSequence {
789 pub fn new(range: RangePos, text: String) -> Self {
790 let mut map = BTreeMap::new();
791 map.insert(range, text);
792 MatchSequence { hash: map }
793 }
794 pub fn gethash(&self) -> &BTreeMap<RangePos, String> {
796 &self.hash
797 }
798 pub fn isfullymatched(&self, range: RangeInclusive<i64>) -> Option<String> {
800 let mut vec = self.hash.iter();
801 vec.find_map(|(a, b)| {
802 if a.getrange().contains(range.start()) && a.getrange().contains(range.end()) {
803 Some(b.clone())
804 } else {
805 None
806 }
807 })
808 }
809}
810impl Default for MatchSequence {
811 fn default() -> Self {
812 let default = String::new();
813 let range = RangePos { start: 1, end: 1 };
814 Self::new(range, default)
815 }
816}
817pub struct IterAlignedBlocks {
818 pos: i64,
819 cigar_index: usize,
820 cigar: Vec<Cigar>,
821 r#match: bool,
822}
823impl MatchIter for IterAlignedBlocks {
824 fn ismatchonly(&self) -> bool {
825 self.r#match
826 }
827
828 fn setmatchstate(&mut self, matchs: bool) {
829 self.r#match = matchs;
830 }
831}
832impl Iterator for IterAlignedBlocks {
833 type Item = [i64; 2];
834 fn next(&mut self) -> Option<Self::Item> {
835 while self.cigar_index < self.cigar.len() {
836 let entry = self.cigar[self.cigar_index];
837 match entry {
838 Cigar::Match(len) | Cigar::Equal(len) | Cigar::Diff(len) => {
839 let out_pos = self.pos;
840 self.pos += len as i64;
842 #[allow(clippy::nonminimal_bool)]
843 if (self.r#match && matches!(entry, Cigar::Equal(_))) || !self.r#match {
844 self.cigar_index += 1;
845 return Some([out_pos, out_pos + len as i64]);
846 }
847 }
848 Cigar::Del(len) => self.pos += len as i64,
849 Cigar::RefSkip(len) => self.pos += len as i64,
850 _ => (),
851 }
852 self.cigar_index += 1;
853 }
854 None
855 }
856}
857
858pub struct IterIntrons {
859 pos: i64,
860 cigar_index: usize,
861 cigar: Vec<Cigar>,
862}
863
864impl Iterator for IterIntrons {
865 type Item = [i64; 2];
866 fn next(&mut self) -> Option<Self::Item> {
867 while self.cigar_index < self.cigar.len() {
868 let entry = self.cigar[self.cigar_index];
869 match entry {
870 Cigar::Match(len) | Cigar::Equal(len) | Cigar::Diff(len) | Cigar::Del(len) => {
871 self.pos += len as i64
872 }
873 Cigar::RefSkip(len) => {
874 let junc_start = self.pos;
875 self.pos += len as i64;
876 self.cigar_index += 1;
877 return Some([junc_start, self.pos]); }
879 _ => {}
880 }
881 self.cigar_index += 1;
882 }
883 None
884 }
885}
886
887pub struct IterAlignedPairs {
888 genome_pos: i64,
889 read_pos: i64,
890 cigar: Vec<Cigar>,
891 remaining_match_bp: u32,
892 cigar_index: usize,
893 r#match: bool,
894}
895impl MatchIter for IterAlignedPairs {
896 fn ismatchonly(&self) -> bool {
897 self.r#match
898 }
899
900 fn setmatchstate(&mut self, matchs: bool) {
901 self.r#match = matchs;
902 }
903}
904impl Iterator for IterAlignedPairs {
905 type Item = [i64; 2];
906 fn next(&mut self) -> Option<Self::Item> {
907 if self.remaining_match_bp > 0 {
908 self.remaining_match_bp -= 1;
909 self.genome_pos += 1;
910 self.read_pos += 1;
911 return Some([self.read_pos - 1, self.genome_pos - 1]);
912 }
913
914 while self.cigar_index < self.cigar.len() {
915 let entry = self.cigar[self.cigar_index];
916 match entry {
917 Cigar::Match(len) | Cigar::Equal(len) | Cigar::Diff(len) => {
918 self.genome_pos += 1;
919 self.read_pos += 1;
920 self.remaining_match_bp = len - 1;
921 #[allow(clippy::nonminimal_bool)]
922 if (self.r#match && matches!(entry, Cigar::Equal(_))) || !self.r#match {
923 self.cigar_index += 1;
924 return Some([self.read_pos - 1, self.genome_pos - 1]);
925 }
926 }
927 Cigar::Ins(len) | Cigar::SoftClip(len) => {
928 self.read_pos += len as i64;
929 }
930 Cigar::Del(len) | Cigar::RefSkip(len) => {
931 self.genome_pos += len as i64;
932 }
933 Cigar::HardClip(_) => {} Cigar::Pad(_) => panic!("Padding (Cigar::Pad) is not supported."), }
936 self.cigar_index += 1;
937 }
938 None
939 }
940}
941
942pub struct IterAlignedPairsFull {
943 genome_pos: i64,
944 read_pos: i64,
945 cigar: Vec<Cigar>,
946 remaining_match_bp: u32,
947 remaining_ins_bp: u32,
948 remaining_del_bp: u32,
949 cigar_index: usize,
950}
951pub(super) struct IterAlignedPairsFullCigar {
952 genome_pos: i64,
953 read_pos: i64,
954 cigar: Vec<Cigar>,
955 qual: Vec<u8>,
956 remaining_match_bp: u32,
957 remaining_ins_bp: u32,
958 remaining_del_bp: u32,
959 cigar_index: usize,
960}
961impl IterAlignedPairsFullCigar {
962 pub fn new(start: IterAlignedPairsFull, record: &bam::Record) -> Self {
963 Self {
964 genome_pos: start.genome_pos,
965 read_pos: start.read_pos,
966 cigar: start.cigar,
967 qual: record.qual().to_vec(),
968 remaining_match_bp: start.remaining_match_bp,
969 remaining_ins_bp: start.remaining_ins_bp,
970 remaining_del_bp: start.remaining_del_bp,
971 cigar_index: start.cigar_index,
972 }
973 }
974}
975impl Iterator for IterAlignedPairsFullCigar {
977 type Item = ([Option<i64>; 2], Cigar, u8);
978 fn next(&mut self) -> Option<Self::Item> {
979 if self.remaining_match_bp > 0 {
980 self.remaining_match_bp -= 1;
981 self.genome_pos += 1;
982 self.read_pos += 1;
983 return Some((
984 [Some(self.read_pos - 1), Some(self.genome_pos - 1)],
985 self.cigar[self.cigar_index.saturating_sub(1)],
986 self.qual
987 .get(
988 usize::try_from(self.read_pos)
989 .unwrap_or_default()
990 .saturating_sub(1),
991 )
992 .copied()
993 .unwrap_or(u8::MAX),
994 ));
995 }
996 if self.remaining_ins_bp > 0 {
997 self.remaining_ins_bp -= 1;
998 self.read_pos += 1;
999 return Some((
1000 [Some(self.read_pos - 1), None],
1001 self.cigar[self.cigar_index.saturating_sub(1)],
1002 self.qual
1003 .get(
1004 usize::try_from(self.read_pos)
1005 .unwrap_or_default()
1006 .saturating_sub(1),
1007 )
1008 .copied()
1009 .unwrap_or(u8::MAX),
1010 ));
1011 }
1012 if self.remaining_del_bp > 0 {
1013 self.remaining_del_bp -= 1;
1014 self.genome_pos += 1;
1015 return Some((
1016 [None, Some(self.genome_pos - 1)],
1017 self.cigar[self.cigar_index.saturating_sub(1)],
1018 self.qual
1019 .get(usize::try_from(self.read_pos).unwrap_or_default())
1020 .copied()
1021 .unwrap_or(u8::MAX),
1022 ));
1023 }
1024
1025 while self.cigar_index < self.cigar.len() {
1026 let entry = self.cigar[self.cigar_index];
1027 match entry {
1028 Cigar::Match(len) | Cigar::Equal(len) | Cigar::Diff(len) => {
1029 self.genome_pos += 1;
1030 self.read_pos += 1;
1031 self.remaining_match_bp = len - 1;
1032 self.cigar_index += 1;
1033 return Some((
1034 [Some(self.read_pos - 1), Some(self.genome_pos - 1)],
1035 entry,
1036 self.qual
1037 .get(
1038 usize::try_from(self.read_pos)
1039 .unwrap_or_default()
1040 .saturating_sub(1),
1041 )
1042 .copied()
1043 .unwrap_or(u8::MAX),
1044 ));
1045 }
1046 Cigar::Ins(len) | Cigar::SoftClip(len) => {
1047 self.read_pos += 1;
1048 self.remaining_ins_bp = len - 1;
1049 self.cigar_index += 1;
1050 return Some((
1051 [Some(self.read_pos - 1), None],
1052 entry,
1053 self.qual
1054 .get(
1055 usize::try_from(self.read_pos)
1056 .unwrap_or_default()
1057 .saturating_sub(1),
1058 )
1059 .copied()
1060 .unwrap_or(u8::MAX),
1061 ));
1062 }
1063 Cigar::Del(len) | Cigar::RefSkip(len) => {
1064 self.genome_pos += 1;
1065 self.remaining_del_bp = len - 1;
1066 self.cigar_index += 1;
1067 return Some((
1068 [None, Some(self.genome_pos - 1)],
1069 entry,
1070 self.qual
1071 .get(usize::try_from(self.read_pos).unwrap_or_default())
1072 .copied()
1073 .unwrap_or(u8::MAX),
1074 ));
1075 }
1076 Cigar::HardClip(_) => {
1077 }
1079 Cigar::Pad(_) => panic!("Padding (Cigar::Pad) is not supported."), }
1081 self.cigar_index += 1;
1082 }
1083 None
1084 }
1085}
1086
1087impl Iterator for IterAlignedPairsFull {
1088 type Item = [Option<i64>; 2];
1089 fn next(&mut self) -> Option<Self::Item> {
1090 if self.remaining_match_bp > 0 {
1091 self.remaining_match_bp -= 1;
1092 self.genome_pos += 1;
1093 self.read_pos += 1;
1094 return Some([Some(self.read_pos - 1), Some(self.genome_pos - 1)]);
1095 }
1096 if self.remaining_ins_bp > 0 {
1097 self.remaining_ins_bp -= 1;
1098 self.read_pos += 1;
1099 return Some([Some(self.read_pos - 1), None]);
1100 }
1101 if self.remaining_del_bp > 0 {
1102 self.remaining_del_bp -= 1;
1103 self.genome_pos += 1;
1104 return Some([None, Some(self.genome_pos - 1)]);
1105 }
1106
1107 while self.cigar_index < self.cigar.len() {
1108 let entry = self.cigar[self.cigar_index];
1109 match entry {
1110 Cigar::Match(len) | Cigar::Equal(len) | Cigar::Diff(len) => {
1111 self.genome_pos += 1;
1112 self.read_pos += 1;
1113 self.remaining_match_bp = len - 1;
1114 self.cigar_index += 1;
1115 return Some([Some(self.read_pos - 1), Some(self.genome_pos - 1)]);
1116 }
1117 Cigar::Ins(len) | Cigar::SoftClip(len) => {
1118 self.read_pos += 1;
1119 self.remaining_ins_bp = len - 1;
1120 self.cigar_index += 1;
1121 return Some([Some(self.read_pos - 1), None]);
1122 }
1123 Cigar::Del(len) | Cigar::RefSkip(len) => {
1124 self.genome_pos += 1;
1125 self.remaining_del_bp = len - 1;
1126 self.cigar_index += 1;
1127 return Some([None, Some(self.genome_pos - 1)]);
1128 }
1129 Cigar::HardClip(_) => {
1130 }
1132 Cigar::Pad(_) => panic!("Padding (Cigar::Pad) is not supported."), }
1134 self.cigar_index += 1;
1135 }
1136 None
1137 }
1138}
1139
1140pub trait BamRecordExtensions {
1144 fn matched_sequence(&self) -> Option<MatchSequence>;
1149 fn aligned_blocks(&self) -> IterAlignedBlocks;
1159 fn aligned_blocks_match(&self) -> Option<IterAlignedBlocks>;
1167 fn aligned_block_pairs(&self) -> IterAlignedBlockPairs;
1176 fn aligned_block_pairs_match(&self) -> Option<IterAlignedBlockPairs>;
1188 fn aligned_block_pairs_cigar(&self) -> IterAlignedBlockCigarPairs;
1198 fn aligned_block_pairs_cigar_match(&self) -> Option<IterAlignedBlockCigarMatchPairs>;
1211 fn introns(&self) -> IterIntrons;
1217 fn aligned_pairs_match(&self) -> Option<IterAlignedPairs>;
1230 fn aligned_pairs(&self) -> IterAlignedPairs;
1241
1242 fn aligned_pairs_full(&self) -> IterAlignedPairsFull;
1250
1251 fn cigar_stats_nucleotides(&self) -> HashMap<Cigar, i32>;
1257
1258 fn cigar_stats_blocks(&self) -> HashMap<Cigar, i32>;
1265
1266 fn reference_positions(&self) -> Box<dyn Iterator<Item = i64>>;
1273 fn reference_positions_match(&self) -> Option<Box<dyn Iterator<Item = i64>>>;
1280 fn reference_positions_full(&self) -> Box<dyn Iterator<Item = Option<i64>>>;
1287
1288 fn reference_start(&self) -> i64;
1290
1291 fn reference_end(&self) -> i64;
1293
1294 fn seq_len_from_cigar(&self, include_hard_clip: bool) -> usize;
1301 #[deprecated(since = "0.3.0", note = "use getorgeneratecsblock")]
1303 fn getcsaligned(&self) -> Option<CgAlignedBlockPairs>;
1304 fn getorgeneratecsblock(&self, long_cs: bool) -> crate::bam::Result<CgAlignedBlockPairs>;
1345 fn setcigarfromcs(&mut self, record: Option<&CgAlignedBlockPairs>) -> Option<()>;
1361 #[deprecated(since = "0.4.0", note = "Use setcigarfromcs")]
1362 fn setseqfromcs(&mut self, record: &CgAlignedBlockPairs) -> Option<()>;
1363 fn updateorsetcstag(&mut self, string: &CsString) -> bam::Result<()>;
1385}
1386impl BamRecordExtensions for bam::Record {
1387 fn matched_sequence(&self) -> Option<MatchSequence> {
1388 let aligned = self.aligned_block_pairs_match()?;
1389 let sequence = self.seq();
1390 if sequence.is_empty() {
1391 return None;
1392 }
1393 let mut hash = BTreeMap::new();
1394 for ([rstart, rend], [gstart, gend]) in aligned {
1395 let (rstart, rend) = (rstart.try_into().unwrap(), rend.try_into().unwrap());
1396 let sequence = sequence.rangeextract(rstart..rend).unwrap();
1397 hash.insert(
1398 RangePos {
1399 start: gstart,
1400 end: gend,
1401 },
1402 sequence.to_string(),
1403 );
1404 }
1405 Some(MatchSequence { hash })
1406 }
1407 fn aligned_blocks(&self) -> IterAlignedBlocks {
1408 IterAlignedBlocks {
1409 pos: self.pos(),
1410 cigar: self.cigar().take().0,
1411 cigar_index: 0,
1412 r#match: false,
1413 }
1414 }
1415 fn aligned_blocks_match(&self) -> Option<IterAlignedBlocks> {
1416 if !self.cigar().containsequal() {
1417 return None;
1418 };
1419 Some(IterAlignedBlocks {
1420 pos: self.pos(),
1421 cigar: self.cigar().take().0,
1422 cigar_index: 0,
1423 r#match: true,
1424 })
1425 }
1426 fn getcsaligned(&self) -> Option<CgAlignedBlockPairs> {
1427 self.getorgeneratecsblock(true).ok()
1428 }
1429 fn setseqfromcs(&mut self, record: &CgAlignedBlockPairs) -> Option<()> {
1430 let initialcigar = self.cigar();
1431 let mycigar = initialcigar.iter();
1432 let first: Vec<&Cigar> = mycigar
1433 .take_while(|p| matches!(p, &Cigar::SoftClip(_)) || matches!(p, &Cigar::HardClip(_)))
1434 .collect();
1435 let mycigar = initialcigar.iter().skip(first.len());
1436 let mut first = first.into_iter().map(|p| p.clone()).collect();
1437 let last: Vec<&Cigar> = mycigar
1438 .skip_while(|p| !matches!(p, &Cigar::SoftClip(_)) && !matches!(p, &Cigar::HardClip(_)))
1439 .take_while(|_| true)
1440 .collect();
1441 let mut last = last.into_iter().map(|p| p.clone()).collect();
1442 let mut length: Option<usize> = None;
1443 let mut vec: Vec<Cigar> = Vec::new();
1444 vec.append(&mut first);
1445 for elem in record.csdata.iter() {
1446 if elem.state.isubstitution() {
1447 if let Some(l) = length {
1448 length = Some(l.saturating_add(1));
1449 } else {
1450 length = Some(1);
1451 }
1452 continue;
1453 }
1454 let lengthraw = elem.state.getlength().try_into().ok()?;
1455 if let Some(a) = length {
1456 vec.push(Cigar::Diff(a.try_into().ok()?));
1457 length = None;
1458 }
1459 let val = match elem.state {
1460 Same(_) => Cigar::Equal(lengthraw),
1461 Insertion(_) => Cigar::Ins(lengthraw),
1462 Deletion(_) => Cigar::Del(lengthraw),
1463 Intron(_) => Cigar::RefSkip(lengthraw),
1464 Substitution(_) if let Some(a) = length => Cigar::Diff(a.try_into().ok()?),
1465 Substitution(_) => unreachable!("Length must be set"),
1466 };
1467 vec.push(val);
1468 }
1469 if let Some(a) = length {
1470 vec.push(Cigar::Diff(a.try_into().ok()?));
1471 }
1472 vec.append(&mut last);
1473 self.set_cigar(Some(&CigarString::from(vec)));
1474 Some(())
1475 }
1476 fn setcigarfromcs(&mut self, record: Option<&CgAlignedBlockPairs>) -> Option<()> {
1477 if self
1478 .cigar()
1479 .iter()
1480 .any(|p| matches!(p, Cigar::Equal(_)) || matches!(p, Cigar::Diff(_)))
1481 {
1482 return None; }
1484 let record = match record {
1485 Some(a) => a,
1486 None => &self.getorgeneratecsblock(true).ok()?,
1487 };
1488 let initialcigar = self.cigar();
1489 let mycigar = initialcigar.iter();
1490 let first: Vec<&Cigar> = mycigar
1491 .take_while(|p| matches!(p, &Cigar::SoftClip(_)) || matches!(p, &Cigar::HardClip(_)))
1492 .collect();
1493 let mycigar = initialcigar.iter().skip(first.len());
1494 let mut first = first.into_iter().map(|p| p.clone()).collect();
1495 let last: Vec<&Cigar> = mycigar
1496 .skip_while(|p| !matches!(p, &Cigar::SoftClip(_)) && !matches!(p, &Cigar::HardClip(_)))
1497 .take_while(|_| true)
1498 .collect();
1499 let mut last = last.into_iter().map(|p| p.clone()).collect();
1500 let mut length: Option<usize> = None;
1501 let mut vec: Vec<Cigar> = Vec::new();
1502 vec.append(&mut first);
1503 for elem in record.csdata.iter() {
1504 if elem.state.isubstitution() {
1505 if let Some(l) = length {
1506 length = Some(l.saturating_add(1));
1507 } else {
1508 length = Some(1);
1509 }
1510 continue;
1511 }
1512 let lengthraw = elem.state.getlength().try_into().ok()?;
1513 if let Some(a) = length {
1514 vec.push(Cigar::Diff(a.try_into().ok()?));
1515 length = None;
1516 }
1517 let val = match elem.state {
1518 Same(_) => Cigar::Equal(lengthraw),
1519 Insertion(_) => Cigar::Ins(lengthraw),
1520 Deletion(_) => Cigar::Del(lengthraw),
1521 Intron(_) => Cigar::RefSkip(lengthraw),
1522 Substitution(_) if let Some(a) = length => Cigar::Diff(a.try_into().ok()?),
1523 Substitution(_) => unreachable!("Length must be set"),
1524 };
1525 vec.push(val);
1526 }
1527 if let Some(a) = length {
1528 vec.push(Cigar::Diff(a.try_into().ok()?));
1529 }
1530 vec.append(&mut last);
1531 self.set_cigar(Some(&CigarString::from(vec)));
1532 Some(())
1533 }
1534 fn updateorsetcstag(&mut self, string: &CsString) -> bam::Result<()> {
1535 self.update_aux(b"cs", Aux::String(&string.to_string()))
1536 }
1537 fn getorgeneratecsblock(&self, long_cs: bool) -> crate::bam::Result<CgAlignedBlockPairs> {
1538 let csext = self.aux(b"cs");
1539 let mdext = self.aux(b"MD");
1540 match (
1541 csext
1542 .and_then(|ext| {
1543 if let bam::record::Aux::String(d) = ext {
1544 Ok(d)
1545 } else {
1546 Err(bam::Error::BamParseCS {
1547 rec: "Invalid CS tag found".to_string(),
1548 })
1549 }
1550 })
1551 .map_err(|_| bam::Error::BamParseCS {
1552 rec: "Absent CS tag.".to_string(),
1553 }),
1554 mdext
1555 .and_then(|ext| {
1556 if let bam::record::Aux::String(d) = ext {
1557 Ok(d)
1558 } else {
1559 Err(bam::Error::BamParseMD {
1560 rec: "Invalid MD tag found".to_string(),
1561 })
1562 }
1563 })
1564 .map_err(|_| bam::Error::BamParseCS {
1565 rec: "Absent MD tag.".to_string(),
1566 }),
1567 ) {
1568 (Ok(data), _) => CgAlignedBlockPairs::createfromcs(
1569 CsString::from_str(data)?,
1571 String::from_utf8(self.seq().as_bytes())
1572 .map(|a| a.to_string())
1573 .map_err(|_| crate::bam::Error::NoSequencesInReference)
1574 .ok(),
1575 self.contig().as_bytes().to_vec(),
1576 self.reference_start(),
1577 ),
1578 (Err(_), Ok(ext)) => {
1579 let line = String::from_utf8_lossy(self.qname());
1581 let cigar = &self.cigar().0;
1582 let seq = String::from_utf8(self.seq().as_bytes())
1583 .map_err(|_| crate::bam::Error::NoSequencesInReference)?;
1584 let a = CgAlignedBlockPairs::createfrommdtag(
1585 ext,
1586 &seq,
1587 cigar,
1588 &line,
1589 long_cs,
1590 self.contig().as_bytes().to_vec(),
1591 self.reference_start(),
1592 );
1593 a
1594 }
1595 (_, Err(b)) => return Err(b),
1596 }
1597 }
1598 fn introns(&self) -> IterIntrons {
1599 IterIntrons {
1600 pos: self.pos(),
1601 cigar: self.cigar().take().0,
1602 cigar_index: 0,
1603 }
1604 }
1605
1606 fn aligned_block_pairs(&self) -> IterAlignedBlockPairs {
1607 IterAlignedBlockPairs {
1608 genome_pos: self.pos(),
1609 read_pos: 0,
1610 cigar: self.cigar().take().0,
1611 cigar_index: 0,
1612 r#match: false,
1613 }
1614 }
1615 fn aligned_block_pairs_cigar_match(&self) -> Option<IterAlignedBlockCigarMatchPairs> {
1616 let cigar = self.cigar().take().0;
1617 if cigar.iter().any(|f| matches!(f, Cigar::Match(_))) {
1618 return None;
1619 }
1620 Some(IterAlignedBlockCigarMatchPairs {
1621 genome_pos: self.pos(),
1622 read_pos: 0,
1623 cigar: cigar,
1624 cigar_index: 0,
1625 })
1626 }
1627 fn aligned_block_pairs_cigar(&self) -> IterAlignedBlockCigarPairs {
1628 IterAlignedBlockCigarPairs {
1629 genome_pos: self.pos(),
1630 read_pos: 0,
1631 cigar: self.cigar().take().0,
1632 cigar_index: 0,
1633 }
1634 }
1635 fn aligned_block_pairs_match(&self) -> Option<IterAlignedBlockPairs> {
1636 if !self.cigar().containsequal() {
1637 return None;
1638 };
1639 Some(IterAlignedBlockPairs {
1640 genome_pos: self.pos(),
1641 read_pos: 0,
1642 cigar: self.cigar().take().0,
1643 cigar_index: 0,
1644 r#match: true,
1645 })
1646 }
1647 fn aligned_pairs_match(&self) -> Option<IterAlignedPairs> {
1648 if !self.cigar().containsequal() {
1649 return None;
1650 };
1651 Some(IterAlignedPairs {
1652 genome_pos: self.pos(),
1653 read_pos: 0,
1654 cigar: self.cigar().take().0,
1655 remaining_match_bp: 0,
1656 cigar_index: 0,
1657 r#match: true,
1658 })
1659 }
1660 fn aligned_pairs(&self) -> IterAlignedPairs {
1661 IterAlignedPairs {
1662 genome_pos: self.pos(),
1663 read_pos: 0,
1664 cigar: self.cigar().take().0,
1665 remaining_match_bp: 0,
1666 cigar_index: 0,
1667 r#match: false,
1668 }
1669 }
1670
1671 fn aligned_pairs_full(&self) -> IterAlignedPairsFull {
1672 IterAlignedPairsFull {
1673 genome_pos: self.pos(),
1674 read_pos: 0,
1675 cigar: self.cigar().take().0,
1676 remaining_match_bp: 0,
1677 remaining_ins_bp: 0,
1678 remaining_del_bp: 0,
1679 cigar_index: 0,
1680 }
1681 }
1682
1683 fn cigar_stats_nucleotides(&self) -> HashMap<Cigar, i32> {
1684 let mut result = HashMap::new();
1685 result.insert(Cigar::Match(0), 0); result.insert(Cigar::Ins(0), 0); result.insert(Cigar::Del(0), 0); result.insert(Cigar::RefSkip(0), 0); result.insert(Cigar::SoftClip(0), 0); result.insert(Cigar::HardClip(0), 0); result.insert(Cigar::Pad(0), 0); result.insert(Cigar::Equal(0), 0); result.insert(Cigar::Diff(0), 0); for entry in self.cigar().iter() {
1695 match entry {
1696 Cigar::Match(len) => *result.get_mut(&Cigar::Match(0)).unwrap() += *len as i32, Cigar::Ins(len) => *result.get_mut(&Cigar::Ins(0)).unwrap() += *len as i32, Cigar::Del(len) => *result.get_mut(&Cigar::Del(0)).unwrap() += *len as i32, Cigar::RefSkip(len) => *result.get_mut(&Cigar::RefSkip(0)).unwrap() += *len as i32, Cigar::SoftClip(len) => {
1701 *result.get_mut(&Cigar::SoftClip(0)).unwrap() += *len as i32
1702 } Cigar::HardClip(len) => {
1704 *result.get_mut(&Cigar::HardClip(0)).unwrap() += *len as i32
1705 } Cigar::Pad(len) => *result.get_mut(&Cigar::Pad(0)).unwrap() += *len as i32, Cigar::Equal(len) => *result.get_mut(&Cigar::Equal(0)).unwrap() += *len as i32, Cigar::Diff(len) => *result.get_mut(&Cigar::Diff(0)).unwrap() += *len as i32, }
1710 }
1711 result
1712 }
1713
1714 fn cigar_stats_blocks(&self) -> HashMap<Cigar, i32> {
1715 let mut result = HashMap::new();
1716 result.insert(Cigar::Match(0), 0); result.insert(Cigar::Ins(0), 0); result.insert(Cigar::Del(0), 0); result.insert(Cigar::RefSkip(0), 0); result.insert(Cigar::SoftClip(0), 0); result.insert(Cigar::HardClip(0), 0); result.insert(Cigar::Pad(0), 0); result.insert(Cigar::Equal(0), 0); result.insert(Cigar::Diff(0), 0); for entry in self.cigar().iter() {
1726 match entry {
1727 Cigar::Match(_) => *result.get_mut(&Cigar::Match(0)).unwrap() += 1, Cigar::Ins(_) => *result.get_mut(&Cigar::Ins(0)).unwrap() += 1, Cigar::Del(_) => *result.get_mut(&Cigar::Del(0)).unwrap() += 1, Cigar::RefSkip(_) => *result.get_mut(&Cigar::RefSkip(0)).unwrap() += 1, Cigar::SoftClip(_) => *result.get_mut(&Cigar::SoftClip(0)).unwrap() += 1, Cigar::HardClip(_) => *result.get_mut(&Cigar::HardClip(0)).unwrap() += 1, Cigar::Pad(_) => *result.get_mut(&Cigar::Pad(0)).unwrap() += 1, Cigar::Equal(_) => *result.get_mut(&Cigar::Equal(0)).unwrap() += 1, Cigar::Diff(_) => *result.get_mut(&Cigar::Diff(0)).unwrap() += 1, }
1737 }
1738 result
1739 }
1740
1741 fn reference_positions(&self) -> Box<dyn Iterator<Item = i64>> {
1742 Box::new(self.aligned_pairs().map(|x| x[1]))
1743 }
1744 fn reference_positions_match(&self) -> Option<Box<dyn Iterator<Item = i64>>> {
1745 match self.aligned_pairs_match() {
1746 Some(b) => Some(Box::new(b.map(|x| x[1]))),
1747 None => None,
1748 }
1749 }
1750 fn reference_positions_full(&self) -> Box<dyn Iterator<Item = Option<i64>>> {
1751 Box::new(
1752 self.aligned_pairs_full()
1753 .filter(|x| x.get(0).copied().flatten().is_some())
1754 .map(|x| x.get(1).copied().flatten()),
1755 )
1756 }
1757
1758 fn reference_start(&self) -> i64 {
1759 self.pos()
1760 }
1761
1762 fn reference_end(&self) -> i64 {
1765 unsafe { htslib::bam_endpos(self.inner_ptr()) }
1766 }
1767
1768 fn seq_len_from_cigar(&self, include_hard_clip: bool) -> usize {
1769 let mut result = 0;
1770 for entry in self.cigar().iter() {
1771 match entry {
1772 Cigar::Match(len)
1773 | Cigar::Ins(len)
1774 | Cigar::SoftClip(len)
1775 | Cigar::Equal(len)
1776 | Cigar::Diff(len) => {
1777 result += len;
1778 }
1779 Cigar::HardClip(len) => {
1780 if include_hard_clip {
1781 result += len;
1782 }
1783 }
1784 _ => {}
1785 }
1786 }
1787 result as usize
1788 }
1789}
1790
1791#[cfg(test)]
1792mod tests {
1793 use crate::bam;
1794 use crate::bam::Read;
1795 use crate::bam::Record;
1796 use crate::bam::ext::BamRecordExtensions;
1797 use crate::bam::ext::CgAlignedBlockPairs;
1798 use crate::bam::ext::CsValue;
1799 use crate::bam::ext::RangePos;
1800 use crate::bam::record::CsString;
1801 use crate::bam::record::{Cigar, CigarString};
1802 use bio_types::genome::AbstractInterval;
1803 use std::collections::HashMap;
1804 use std::str::FromStr;
1805 fn mergemdandcstest(element: &Record) {
1806 assert_eq!(element.qname(), b"SRR11292120.509914");
1807 assert_eq!(element.contig(), "chr14");
1808 let mut cs = element.getorgeneratecsblock(true).unwrap();
1809 let val = cs.next().unwrap();
1810 assert_eq!(val.getreadpos(), Some(0));
1811 assert_eq!(val.getgenomepos(), Some(99813318));
1812 let val = cs.nth(2).unwrap();
1813 assert_eq!(val.getreadpos(), None);
1814 assert_eq!(val.getgenomepos(), Some(99813465));
1815 assert_eq!(val.state, CsValue::Deletion("c".to_string()));
1816 assert!(val.sequence.genomematch(None::<&str>));
1817 assert!(val.sequence.readmatch(Some("c")));
1818 let val = cs.nth(2).unwrap();
1819 assert_eq!(val.getreadpos(), Some(292));
1820 assert_eq!(val.getgenomepos(), Some(99813609));
1821 if let CsValue::Same(a) = val.state {
1822 assert_eq!(a.getsize(), 203)
1823 } else {
1824 assert!(false)
1825 };
1826 }
1827 #[test]
1828 fn testcs() {
1829 let mut read = crate::bam::Reader::from_path("test/locus.bam").unwrap();
1830 let mut element = read.records().filter_map(Result::ok).skip(1).take(1);
1831 let element = element.next().unwrap();
1832 mergemdandcstest(&element);
1833 }
1834 #[test]
1835 fn testgeneratedcssame() {
1837 let mut csread = crate::bam::Reader::from_path("test/locus.bam").unwrap();
1838 let mut mdread = crate::bam::Reader::from_path("test/locusmd.bam").unwrap();
1839 let mdread = mdread
1840 .records()
1841 .filter_map(Result::ok)
1842 .filter(|a| a.is_primary())
1843 .map(|a| a.getorgeneratecsblock(false).unwrap());
1844 let csread = csread
1845 .records()
1846 .filter_map(Result::ok)
1847 .filter(|a| a.is_primary())
1848 .map(|a| a.getorgeneratecsblock(false).unwrap());
1849 for (mdread, csread) in mdread.zip(csread) {
1850 if mdread.islongcs() == csread.islongcs() {
1851 assert_eq!(mdread.cs, csread.cs)
1853 } else {
1854 panic!("Different format");
1855 }
1856 }
1857 }
1858 #[test]
1859 fn testmd() {
1860 let mut read = crate::bam::Reader::from_path("test/locusmd.bam").unwrap();
1861 let mut element = read.records().filter_map(Result::ok).skip(1).take(1);
1862 let element = element.next().unwrap();
1863 mergemdandcstest(&element);
1864 }
1865 #[test]
1866 fn testmd2() {
1867 let mut read = crate::bam::Reader::from_path("test/outlight.bam").unwrap();
1868 let mut rawelem = read.records().filter_map(Result::ok).into_iter();
1869 let element = rawelem
1870 .find(|p| p.qname() == "m84072_250402_125013_s1/241502339/ccs".as_bytes())
1871 .unwrap();
1872 let v = element.getorgeneratecsblock(false).unwrap();
1873 assert_eq!(
1874 v.cs.to_string(),
1875 ":113+t:43+t:16-a:92-g:103-g:81-g:66+a:91+t:47+g:396+a:312-a:21+t:49-tc:157-t:3-c:832*ca:103-c:294*tg:17-c:17-t:334+g:51-c:10-t:47-t:16+g:44-c:61-c:31+c:289+g:47-c:204-c:56+g:94+t:74-t:29-g:129-c:397-a:105-t:161+a:24+a:662-t:104-t:83-a:82-a:52-at:129*gt:5*at:71-c:38-g:217-t:26-g:65-a:245-t:42+c:151-t:49-ga:46-c:161*tc:19-a:27-a:12+g:378-g:518-c:547+g:170-t:160-g:669-t:351-g:147+t:74*ta:497-g:106+a:110-t:419-g:207-at:151-g:1224+a:110-a:153-a:490-t:314-g:356-t:2*ta:940-t:447-t:329-a:663*at:150+g:219-a:11-a:22-t:21-t:144+a:54+c:212-c:226*ct*tc:782-t:4+t:8-c:604+t:30-t:183-g:178-c:29+t:134+c:251+t:396-t:40-g:276-a:73-t:616-a:144-g:436+t:1014-t:446",
1876 "Cigar is invalid"
1877 );
1878 let element = rawelem
1879 .find(|p| p.qname() == "m84070_250402_111906_s3/138216250/ccs".as_bytes())
1880 .unwrap();
1881 let v = element.getorgeneratecsblock(false).unwrap();
1882 assert_eq!(v.cs,CsString::from_str(":394+C:25+A:1238+T:180-T:119+T:140+A:387+A:685-T:137+G:73+C:753+T:1625+A:736+G:223-T:363-T:3047-T:778+G:408-A:21-T:860+T:165-AT:1478-T:821-A:3*TA:5-A:309-T:1198+A:177-T:110-G:1023-A:1492+T:220+A:107+T:589+T:162-T:168+T:629+A:55-A:552-T:165+A:85-T:26-T:483+T:295+A:77-C:215+T:142-G:93-T:189-T:431+T:1031-A:415").unwrap(),"Not valid CS");
1883 }
1884 #[test]
1885 fn testcigar() {
1886 let mut read = crate::bam::Reader::from_path("test/locus.bam").unwrap();
1887 let elem = read
1888 .records()
1889 .filter_map(Result::ok)
1890 .take(1)
1891 .next()
1892 .unwrap();
1893 let mut cigar = elem.aligned_pairs_match().unwrap();
1894 let _ = cigar.next();
1895 let align = cigar.next();
1896 assert_eq!(align, Some([1, 99812480]));
1897 let align = cigar.nth(40);
1898 assert_eq!(align, Some([43, 99812521]));
1899 }
1900 #[test]
1901 fn testblock() {
1902 let mut read = crate::bam::Reader::from_path("test/locus.bam").unwrap();
1903 let elem = read.records().filter_map(Result::ok).nth(3).unwrap();
1904 assert_eq!(elem.qname(), b"SRR11292123.1482913");
1905 assert_eq!(elem.contig(), "chr14");
1906 let mut element = elem.aligned_blocks_match().unwrap();
1907 assert_eq!(element.next(), Some([99814926, 99816399]));
1908 assert_eq!(element.next(), Some([99816400, 99817131]));
1909 assert_eq!(element.next(), Some([99817132, 99830222]));
1910 assert!(element.next().is_none());
1911 }
1912 #[test]
1913 fn testseq() {
1914 let mut read = crate::bam::Reader::from_path("test/locus.bam").unwrap();
1915 let elem = read.records().filter_map(Result::ok).nth(7).unwrap();
1916 let val = elem.matched_sequence().unwrap();
1917 assert!(val.isfullymatched(99820271..=99826916).is_some());
1918 assert!(val.isfullymatched(99820271..=99826917).is_none());
1919 let mut elem = val.gethash().iter();
1920 let test = elem.next();
1921 let rangepos = RangePos::new(99820271, 99826917);
1922 assert_eq!(
1923 test,
1924 Some((
1925 &rangepos,
1926 &String::from(
1927 "AGAGGCAGGGATGACAGAGACAGACACAAAGCAGAGAGACGGAGGCAGAGGGAGACATGCAGAGTCGCGGAGACATCCGGGCTCAGGCCCCGACTCTCAGGGGCCACCCCCAGGGAGGACACGCAGTGCACCCCCACACCCACACCTCACACACACACTCACACCCACATACCCCCATCCACACACACCCAGAGACACACAGACACCCACAGCCACACACTCACACTCACGAACTTATCCAGTCACGTCCCACACACTCCCACCCAACCCATACACCACACACCTACACAACCCATACACCACACACACTCACAAACTATATACCACACACACACCAACCATACACCTATATACACTCACACACCCATATACCACACACTCACACACAACCCATACACCACACGCACACAACCCATACACCTATACACACTCACACCTACAAACTATATACTACACACTCACACACAACCCATACACCTATACACACACACCCATATACCACACACAACCCATACACCACACACACAAACCATATACCACACACTCACACAACCCATACACCTATACACACTCATACCCATATACCACATACAACCAATATACCACACACACACAACCCATACACCTATACACACACACCTATACACCACACACAGCCCATACACTACACAATCACACCACAAACTGTATACCACACACTCACACATAACCCATACACCTATACACACACACCCATATACCACACACACAACCTGTGCACCTACACACACACATACACCACACACACACAACTCCTACACCTACACACACCCACCACCCATACACACACAGCCTATACACCTACACACACTCATACACTCATATAGCACACACACAACCCATATACCACACACACAACCCACATACCTATACACACACGCCCATACACCACACACTCACACAACCCATGCACCACATACACCCACAAACTATATGCTACACGCTCACACACAACCCATACACCTATACACAATCCCACAACCCATACACACTTACACAACCTATACACCACACACACTCACAATCTGTATACCACACACACAACCCATACAGTTATACACACACACCCATATACCACACACACACAACCCATATACCACACACTCACACACAAACCATACATCTATACACATACCCATATGCCACACATACAACCCATACACCACACACTCACACACAACACATACACCACACACACAACCCATAGAACACAAACACAAGTCATAACCACACACACAGCCCATATACCTATACACATTCACACACACAACCCATACACTACACACACAACACATACACCTATACACACTCACACTCAATTCATACACCACACACACACAGCCCATACATCTATACACAAACTCACACACAATCCATATACCACAAACTCACACACAACGCATACACCTATACACACACACGCAACTCATACAGCACACACTCACACAACCCACAGACCATAAACACACACAAGCCATAACCACACACAAACCCATACACCTATACACACACTCATAAACAAGCCATACACCCCTACACAACCCATACACCACACACTCACAACCCATACACCTATATACACACACAACCATATACCACAAACTCACGCTCAACACATACACCTATACACACACACAACTCATACACCACACACTCATACACAACGCACAGACCACATACACAAGCCATAACCACACACACACAACCCGTACACATATATACACACTAATAAACAAGCCATACACCTACACATACAACCCATACACCACACATTCACACATAACCCATACACCTATACACACACACACACAACCCATATACCACAAACACACACAACCTATACACACATACAACCCATACACCACACACACAACACATACACACCACACACACACAGAATACTCATACACACACCCATACACCACCCCCACACAGAACCCATACACCACACACACACAACCTATACACCTATACACACACTCACACACACAACTCATATACCACAAACACACACAACACATACACCTATGCACACACACAACCCATACACCACACATTCACATACAACCCATACACCACACACACACAACACATACATGAAACATACATACAACCCACACACCACCCACTCATACACAACCTATACACCACACACACAACTCATACACCTATACACACACAACACATACACCTATCATACACTCACAACACATACACCTCCTATACACACACAACACACACACTTCCTATACACACAACCCACACGCCTATACACACATCCTCACTCACACTCACCCTCACATTCATATACTCACTAACACACTTCCACACTCACACCCTCACCCACACTTACACCCCCACCCACACTCAAACCCCGACGCTAAGTCACTGTCACATTTGTACCCATGCTCACACGCTCACACGCTCACACACTCACCCCCCACCAGCTCCAGGGCTCACTGGTGTGTGCCCACCAAACCCCCCTCGGGGGTCCCCTCGGTAAGCCGACAGTGCTCTGCTCATCGGTGGCCTGGGGAAACAGGGCCCACCCAAGGCCTGGCTCAGGAAAGGCTCCAAACACACATGGCCCAGGAGCAAATGGGCAGAGCTCAGCCTGCAGCTGGGAGCGGCCGAGCGGGTGCTGGGCCAGAGTCGGGGCCTGTCTGTGGGTGAGGGGCACGGCAGCACGGGCCCACCTGCACCTACAAGGCCTGGCCCCCGAGGTCACTGGGCCACCACCCAGCCCTCGCCCTGTTCCCCGTCTGTGCTGGCCGGGGCAGGACTCTGAGCCTCGGGGAAACCCACAGATACACACGGGACCCCGAACATCGGGCTGGGGAGGCTGGGGTGGGTAACAACATCCCAGAGGCAGGAGCAGGAGGTCCTGGGACCCTGCACACTGCGACCCCAGCCCTGGGGGCTGAAGCCCAGGACAGCCTCAGGTCTCCCAGGAGGGACTGGATAGTGGGGGATGGTCAGAGAACAGGACAGCCAGCAGGGTGCAGCCCGAGGACAGGGATGGATGCTGGGAGGTCAACAGGACAGGGGCAGGGGCAGGGGCTGTGGAGTGTGAGAAGGTCCTGGAGGGCCTGGAGAACCTGTGGGTCAGTGTCTGTGGGAAGGAGGCCAGGAGCAGCCCTGAGTGGCCAGGCTGGCAGGGGTGAGGAGGTGGGGGCAGTGAGGTGAGGGTGACCGAGACAGGCCTCTGGCCAGGGAGGGGACCTTGGCTGGGCTCTGACTGAACCCAGGGCTCCTGGAGAAGGGGCCCCAGGCGGGGATGAGGATGTGGGCATCTGACTCCATCAACAATGGGGCTTCCAACACGCACAGCCTGGGCCTCGGAGACCTGGGCCCTGACCCGCCTCCCCCTGGCACTGGGCCGGGTGCCGTGTGTGGTCCCCAGTCCCCGCAGCACCTCCCCCACACTGGTCACGTTCCAGGGCCCCTCTGAAGCACCTGCTGTGAGGGGATGTGAGGAGGGGACAGGGACTTGGGCCTGAGCTGCCGGGTCGGGGGGGAGTCGGGGACCCAGGCTCAGCGTGTGGCTGGGGACCAGACAGATGGGGATGGAGGAGGACACGCCCTGTACCCACTGCCTGCCAAGGGGCTGGACCCACGCCCAGTCTAGGCCATGTCCCCCGAGGCCTGTGAACCTTCACTCTGAGCCACTAAAACATTCAGGAGCTTTGAAAGCAGCCCCCGTCCTTGTCACTATGCGATGACTCTGAGCATCACGCTGTCCCTGCTGGATCCACCCTCCAGCCCCAGCGAGGGAGGCTGGGCCCCGGGCAGCAGGTGGTGAGGGCAGCGGGCACAGCCACCCTACAGCACACACAGGGTCTCAGGGACGCGTCCACCACAGCCCGTGCACAGGCTCCTCACGGCACTGAGTTCACCCGGGGCGCGGGCCGTTTGTCCTCAGGAGTCCCACTGTGCCCTCCGCCCCCAGCCCTGTCCTGCTGAGGCTGCAGCTGGGTCCCGGGGCACAGGGCGGCCCTGAGCACCTTGTCATGTTGGTCCCTGTCGGGTGGGCTGCTGGCTGTCTGTGGAGCTGGCAGAGCCGCGGTTCAGCCTTGGAGGCCGGTCCTGGGGCCCAGCAGCCGTGGGGAGCACTGCCCAGTCCCGTGCCCACAGGGAATCACCTGGGCTGAGGAAGGGCCCACACGCCGACGGGATCGGGGTCAGGCAGCGCACGCCTGGCACCGAGATCCCACGTCCCGAAGTGGGGACACGGCCCAGGGGCACTGTTCCGGGAGGGTCTCAAGATGGGGTCTCCTATTTCAATCTTCACTCCTTCTGCACCTGTTAGCTGGGAACCTTCTAGAAGGAGGGGTGTCCTCAATCATGGGGTGGTTGTGAGCTGAGCACAGATCATGCAGGAAGGTACATGGCTTCTCCTTCACCAGGAAAACAGTGCAGAGAGACAGAGACACAGAGACAGAGTAACAGAGAAAGACAGAGAGACAGAGACACAGAGACAGAGACAGAGTAACAGAGAAAGACAGAGAGACAGAGAGACACAGACAGAGACAGAGTAACAGAGAAAGGCAGAGAGACAGAGAGAGACAGAGACAGAGTAACAGAGAAAGACAGAGAGGCAGAGAGAGAGAGACAGAGACAGAGACAGAGTAACAGAGATAGACAGAGAGACACAGAGACAGAGACAGAGTAACAGAGATAGAGAGACAGAGAGAGACACAGAGACAGAGTAACAGACAGAGACAGAGACAGGCACAGAGATAAGAAAGATACACAGAAACAGAGAGAGACAGAGACAGAGATAGTCACTGTCACATTCATACCCACGCTCACCTGCTCACACACACACACCTCACACACACTCACACTCACACTCACCTCACACACACAGTCACACACACACTCACACACACTCACACACACACACTGAGCTTCCCTCAGGCCCTGTCACTTCCGATGGGGCCTACGGCCTGTCTAAGCCTCTGGGCCACCAGCCCCTGGCTCACCGGTGTGTGCCCACCACACCCCGCCTTGGGGGTCTCCTCTATGAGCTGGGCACATGCCCTCCGCTCTGTTCATGGCTGGCCTGGGGGAAACAGGGCCCACCCAAGGCCTGGCTCAGGGAAGGCCTCAAACACACATGGCCCAGGAGCAAAGGGGCAGAGCTCAGCCTGCAGCTGGGAGCGGGCAGGGGTAGTGGAGTGGGCGGAGGGCCTGGAGAACCTGCAGGGCTACGATGTCTCTGGGAAGGGGGCCCAGGAGCAGCTCAGCGTGGCTGGGCCGGCAGGGCCGAGGAGGTGGGGGCCGTGAGGGAGGGGTGACTCGGCTGTGTGGGGTGCCGGGGGACACGGGCTTTGCTCCGGCTGAGCCCAGGCAGTGGCGAATCCCTGAGCTGCCAGGAGGAGAGCAGGGCCGGGGTCAGGCAGAGGTGGGCCGCGGGGCCGAGGGCTGCGGCCGGTCGGGAGCAGTCGGTCGGTTGAGGGCACCATTACATGGAGGGCTGTGAGACGGGAGACCCCATTCCCTTCATTCCTTGTGCACGTGTTAGTGAGGAAGCTTCTAGAAGGAGGGCATTGCTCGTAGTGGGTGAGTGTGAGCACAGATCATGCAGGCTGGCGTGCTGCCGTGAAGTGCCTCTCTTTACTTTCCAGACCTCAGCATGGCAAGCCCGTCCTGCGCCCCAGGGTCTTTCTGGAGTACACGCCGCGCGGTCCTGGTGGGCACCATACCTGGCACCCACGCTTTGGCCGGGCCCGAACCTTGCGCCCTCCCAGCCCCCATGTGGCTCTCCCTTGGCCATACTGGCCTTTTGCCAGTCCTCCTACCTCACCCTAGGGTCTGCCTGGCCCTGCCCTCCCTTCCTAGCCCCCCAAGGAGGCTGGAGGGCACCCCTGCGTCCACCAGCAGCAGCTCCTCATGGGCGAGTCTCCTTGGGCCAGTGACACATAGTGTGCCCCGATGGTGCCACGGCAGCCTGGGCCCTCCGCCTTCCTGCTTGGCAGGCACCCCCGCTCCCTGCACCCTCACCGGGGCACCTGTGAGCCCTGAGGGCCAGTGGGGGTCTCACTGCTGCTCCCTCCCACAGCCTAGCCTCGGGCCTCAGGGCTCTGCATCCAAGCGGCCCAGGGCTCCCTGAGGTCTCAGCCCGAGTGGGCCTTTGAGCCTTCGCGTTCTCTGCAGGGTGGGACCTGCCCAAGGGCTGCTGAGGGCTTCCCAGGGGTCCTGTGGGTCCCACCTAGGGGCAAGCTGGTGAGGAAAGTGGGTCCTGCCATGGCGGCCGGGTGGGCTGAGTTTTCGGCATCTCTGGGCCCAACAGCAGGTCCCTGGAGCGGCGCCCACCCCTCCCCCAGGCAGGTGTGAGGGCTCTGATCTGTTTCTCCTTGAGTGACTCATTCTGGGCAGACTTGGCCCTCAGGGCACATGCAAATGGTTGTTTGTTCCACACCGAAAACATGTTTCTTGCCCTCTGAGGCTGTTTCCAGAAATAGCTTGCACGATTCTCCACCTGCAGCTGCAGCCGCCACCCACCCAGTGTGGCCAGGCTGGCCCAGGCCTCCAGATTCGGGGACACCCCCCGCCCCCTCCCCCAGCGTGGCCAGGCTGGCTCAGGCCTCCAGATTCGGGGACA"
1928 )
1929 ))
1930 );
1931 let test = elem.next();
1932 let rangepos = RangePos::new(99826917, 99827017);
1933 assert_eq!(
1934 test,
1935 Some((
1936 &rangepos,
1937 &String::from(
1938 "CCCCCCCCCCCCAACAGCGTGGCCAGGCTGGCTCAGGCCTCCAGATTCGGGGACACCCCCCCACCACAGCGTGGCCAGGCTGGCTCAGGCCTCCAGATTC"
1939 )
1940 ))
1941 );
1942 let test = elem.next();
1943 let rangepos = RangePos::new(99827017, 99829102);
1944 assert_eq!(
1945 test,
1946 Some((
1947 &rangepos,
1948 &String::from(
1949 "GGGGACACCCGCCCCCTCCCCCAGGACAGGCCCACTTGGGTTACTGACACTGGGACCACCCTGCAAACGTCAACTTTATTGAATTCAGTGGTTCTGAACTTGTTGCCATCTTTGGGACCAGGACCCAGGGGCAGCCCCCAGGTTGGCAGGAAGGGCAGGGGAGCCAACGCTGGCAGGGCCCCCAGCCAACCCCCACCCCAGAAGCCCCAAGGAGGCTGAGCGGAGGTGGCCCTGGTGGCCTGGGCACAGGCAGCCCGATTGGTACAGGGCCTGTCTGGTGCAGGCCCGCACCTCCCCCACCCTCATGGCCTGGTGGTCCCCACTGTACAGAGAGAACACTGAGGCTCAGCAGGGCCAGGGACATGGCCTGAGGTTACATGGTGATGGGGGCTGGGTCTCCGGGCCTGGGGGCCGTGGTGGGTGCAGCACCCGGACTGCGTGGGCTGTGGCCTCCCTGCTCCCAGCTCTGTCACACCCGTCTCCATCTGAGCCTCCAGCTCCATCTTTCCCGCTGTCCCTGTCTCTGGCCACCCTTCTGTCTCCCTGTCTCTCTGCCTCTCTGAAGGTATCTCCCTGCCCGAATCTCTGTCTCTGTCCCATTGTCGGTGTCTCTGACTCATCTCTGTCAAGCCCGTCTGCTGGGCTTTGTCCCGCCATCTTGCCTGTCTTGGCCTCTCTCTCTTTCTGTGTGTCTCCGTCGGTGCCTCCTTTCTCCATCCATCTCTCCCCCGTGTCTGTCTCTATCCCTCCGTCTCTCTTCCCGTCTATCCCTCCCTCTGTGCCTGTCCCTTTGCTGTGTCCCTTTCTTTGCCTCTGTCTCTCTGTCTGTCTCTTCGTGTCCCTGTGTGTGTCTCTCTCTTCTCTCTGCTTCTCTTTCTGTATCTCTGTCTATATCTCAGCCTCTTTGTGTCCCTGTGTGTGTGTCTCTCTCTTCTCTGTCTTTCCATGTCTCTGTCTATATCTCTGTCTCTCTGCCTCTGTATCTCTGTCTGTCTGTTCGTGTCCCTGTGTATGTCTCTCTCTGTCTCTTTCTGTATCTCTGTCTATATCTGTCTCTCTCATCTGTCTCTTCCTGTGTGTGTCTCTCTGTCTCTCTGCCTCTGTCTCTGTCTCTCTGTCTCTTCATCTCTGTCTGTCTCTGCCTGTCTGTGTCATTTGGTGTCTCTGTTTTTGTATGTCTCTCTGTTTGTCTGTGTCTCTTCCTCTCTGTAGCTCTGCCTCTCTCTATCTCTCCTTATATCTGTCTTTCTCTCTCCCTGTTTCTTTCTCTGTCTCTTTTTGTCTTTCTGAGTCTGTCTCTGTCTCTGTCTCTTCCTCTCTGTATATACCTCTCTGTCTTTCTGTTGCTGTCTGTCTCTGTTTCTCTTCTCCTCTCTCTATCTCTCTTTGTCTGTCTTTCTCTGCCTTTCTAACTCTGTCTTTCTCTGTCTCTCTGTCTCTATCTCAGTCTCTCTTCTTATCTCTCTCTCTGTCTCTCTCACTCTCTGTATCTCTTTGTCTCTGTCTTTCTCTTATCTCTATCGCTCTGTCTCTATCTCTCTTTCTGTCTCTCTGTATCTCTATCTCTGTCTCTCTCATGTCTATCTCTCTGTCTTTCTCTGTCTCTCTGTATCTCTGTCTTTCATCTCTATCTCTATCTCTGTCTTTCTGTCTCTATCTCTGTCTCTCTATCTCTTTCTCTGTCTGTATCTCTCTGTCTCTATCTCTCTCTGTCTTTCTCTGTGTCTCTGTATCTCTGTCTCTATCTCTGTCTCTCTATCTCTCTCTGTCTCTCCCTGTCTCTCTCTATCTCTGTCTCTCCATCCCATGTGGGTCTGTGGGTTTCCCCGAGGCTCAGAGCCCTGCCCCGGTCAGCACAGACAGGGAACAGGGCGAGGGCTGGGTGGTGGCCCAGTGACCTTGGGGGCCAGGCCTTGGGGGTGCAGGTGGGCCCGTGCTGCCGTGCCCCCCACCCACAGACAGGCCCCGGCTCTGGCCCAGCACCCGCTCCGCCGCTCCCAGCTGCAGGCTGAGCTCTGCCCGTTTGCTGCTGGGCCATGTGTGTTTGGGGCCTTTCCTGAGCCAGGCCTTGGGTGGGCCCTGTTT"
1950 )
1951 ))
1952 );
1953 let test = elem.next();
1954 let rangepos = RangePos::new(99829102, 99835825);
1955 assert_eq!(
1956 test,
1957 Some((
1958 &rangepos,
1959 &String::from(
1960 "CCCCAGACCACCCATGAGCAGAGTGTAGGGCACGTGCCCAGCTCACAGAGGGGACCTCTGAGGCGGGGTGTGGTGGGCACACAGCAGTGAGCCATGAGGCTGGTGGCCCAGAGGCTTGGACATGCCGTGGGCCCCATAGGAAGTGACAGGGCTTGAGGGAAGCTCAGTGTGAGTGTGTGAGCGTGGGTATGAATGTGACAGTGACTCTCTATCTGTCTCTTTGTATCTCTGTCTCTCTGTGTGTATCTTTCTATCTCTGTCTCTCTATATGTCTCTCTATCTCTGTCTCTCTGTATCTCTATCTCTCTGTGTGTATCTTTCTATCTCTGTCTCTCTTTCTTGATCTCTCTCTATCTCTGTCTCTGTAACTCTCTTTATCTCTTACTGCTTCTGTTTCTCTCACTCTGTCTCTGTCTCTCTTTATCTCTGTCTTGCTCTCTCTCTCTGTAACTTTATCTCTGTCTCTCTGTTTCTATCTCTGTTTTTCTCTGTCTCTGTCTGTATCTCTGTCTCTCTTTATCTGTCTCTCTGTCTCTGTGTATCTCTGTCTCTCTGTAACTTTATCTCTGTCTTTTTCTGTCTCTGTGTGTGTCTGTCTCTGTGTCTTTGTTTTTCTCTCTGTCTCTGTCAATGTCTCTTTCTGTATCTGTTTCTTTCTCTCTGTCTCTGTCTCTCTATCTCTGTCTCTATCTCTCTGTCTCTCTGTAACTCCTCATCTCTGTCTCTGTGTCTGCATGTCTCTTTCTGTGTCTCTGTTTCTCTCTCTGTCTCTGTCTCTCTGTGACTCTGTCTCTGTCTCTGTCTCTGTCTTTCTCTGTTACTCTGTCTCTCTCTCTGTCTCTCTGTGACTCTATCTGTTACTCTGTCTCTGTCTCTGTCTCTCTCTGTCTCTCTTTCTCTGTTACTCTGTCTGTGTCTCTGTGTCTCTCTCTCGTCTGTCTTTCTCTGTTACTCTGTCTCTGTCTCTGTGTCTCTGTCTCTCTGCACTGTTTTCCTGGTGAAGGAGAAGCCATGTACCTTCCTGCATGATCTGTGCTCAGCTCACAACCACCCCATGATTGAGGACACCCCTCCTTCTAGAAGGTTCCCAGCTAACAGGTGCAGAAGGAGTGAAGATTGAAATAGGAGACCCCATCTTGAGACCCTCCCGGAACAGTGCCCCTGGGCCGTGTCCCCACTTCGGGACGTGGGATCTCGGTGCCAGGCGTGCGCTGCCTGACCCCGATCCCGTCGGCGTGTGGGCCCTTCCTCAGCCCAGGTGATTCCCTGTGGGCACGGGACTGGGCAGTGCTCCCCACGGCTGCTGGGCCCCAGGACCGGCCTCCAAGGCTGAACCGCGGCTCTGCCAGCTCCACAGACAGCCAGCAGCCCACCCGACAGGGACCAACATGACAAGGTGCTCAGGGCCGCCCTGTGCCCCGGGACCCAGCTGCAGCCTCAGCAGGACAGGGCTGGGGGTGGAGGGCACAGCCGGACTCCTGAGGACAAACGGCCCGCGCCCCGGGTGAACTCAGTGCCGTGGGGAGCCTGTGCACGGGCTGTGGTGGACGCGTCCCTGAGACCCTGTGTGTGCTGTAGGGTGGCTGTGCCCGCTGCCCTCACCACCTGCTGCCCGGGGCCCAGCCTCCCTCGCTGGGGCTGGAGGGTGGATCCAGCAGGGACAGCGTGATGCTCAGAGTCATCGCATAGTGACAAGGACGGGGGCTGCTTTCAAAGCTCCTGAATGTTTTAGTGGCTCAGAGTGAAGGTTCACAGGCCTCGGGGGACATGGCCTAGACTGGGCGTGGGTCCAGCCCCTTGGCAAGCAGTGGGTACATGGCGTGTCCTCCTCCATCCCCATCTGTCTGGTCCCCAGCCACACGCTGAGCCTGGGTCCCCGACTCCCCCCCGACCCGGCAGCTCAGGCCCAAGTCCCTGTCCCCTCCCCACATCCCCTCACAGCAGGTGCTTCAGAGGGGCCCTGGAACGTGACCAGTGTGGGGGAGGTGCTGCGGGGACTGGGGACCACACACGGCACCCGGCCCAGTGCCAGGGGGAGGCGGGTCAGGGCCCAGGTCTCCGAGGCCCAGGCTGTGCGTGTTGGAAGCCCCATTGTTGATGGAGTCAGATGCCCACATCCTCATCCCCGCCTGGGGCCCCTTCTTCAGGAGCCCTGGGTTCAGTCAGAGCCCAGCCAAGGTCCCCTCCCTGGCCAGAGGCCTCACTGTCTCGGTCACCCTCACCTCACTGCCCCCACCTCCTCACCCCTGCCAGCCTGGCCACTCTGGGCTGCTCCTGGCCTCCTTCCCACAAACACGGACCCACAGGTTCTCTAGGCCCTCCAGGACCTTCGCCCACTCCACGGCCCCTGCCCCTGTCCTGTTGACCTCCCAGCGTCCATCCCTGTCCTCGGGCTGCACCCTGCTGGCTATCCTGTTCTCTGACCATCCCCCACTGTCCAGTCCCTCCTGGGAGACCTGAGGCCGTCCTGGGCTTCAGCCCCCAGGGCTGGGGTCGCAGTGCGCAGGGTCCTGGGACCTCCTGCTCCCGCCTCTCCCATGTTGTTACCCACCCCAGCCCGATGTTCGGGGTCCTGTGTGGATCTGTAGGTTTCCCCGAGGCTCAGAGTCCTGCCCCGTCCAGCACAGACGGGGAACAGGGCGAGGGCTGGGTGGTGGCCCAGTGACCTCGGGGGCCAGGCCTTGTAGGTGCAGGTGGGCCCGTGCTGCCGTGCCCCCCACCCACAGACAGGCCCCGACTCTGGCCCAGCGCCCGCTCGGCCGCTCCCAGCTGCAGGCTGAGGTCTCCCCATTTGCTCCTGGGCCATGTGTGTTTGGGTGTGAGTGTGGGTATGGATGTGACAGTGACTTAGTGTGTGGCTGTGAGCGTGGGTATGTTTCTGTGTGTTTGTGTGTGAATGTTGTATAATAGTCGTGGTGTGTGTTTGTGAGAGTGACTGTGTGAGAGGGGCTTGCAGCTGAGTTCCTGGGCCCATCTTGCTGCCTCTTTCTCTCCCTGTGTGTTCTCTGCCTCTGTTGTGTTCTCTCTGCATGTCTGTCTCCATGTCTCTTTTTCCCTGTTCCCATCTCCTCCCTTTTTCTCCCATCTCTGTCTCTGTTTCTTATCTATCTCATCTCATCTCTCTCTTTCTGTCTCTTGTGTCTCTGTCCCTCCCCATCCCTGTCTCTTATCTCTCTCCATCCCCATCTCTCTCTCTGTGTCTGTCTTTGTCTCTGTCTCTATGTCTCTTGTCTCTCCCCATCCCTGTCTCTCTCTATGTCTCTGTGTCTCTTATCTCTCCCCATCCCTGTCTCTCTATGTCTCTGTGTCTCTTATCTCTCCTTGTCCTTGTCTTTCTCTGTCTACGTCTCTGTGTCTCTCTCCATCCCTGTCTCTCTCTATGTCTCTGTGTCTCTTATCTCTCCCTATCCCTGTCTCTCTATGTCTCTTGTCTCTCCCCATCCCTGTCTCTCTCTCTCTATGTCTCTGTGTCTCTTATCTCTCCCCATCCCTGTCTCTCTCTATGTCTCTTCATCTCTTATCTCTCTCCCCATCCCTGTCTCTATGTCTCTGTGTCTCTTATCTCTCCCCATCCTTGTCTCTGTCTATGTCTCTGTGTCTCTTGTCTCTCCCTGTCCCTGTCTCTCTCTATGTCTCTGTGTCTCTCTGGGCCCCTGGTCCAATGTCCCCTTCCCAGAACCCCTGTTTCCCTGGTGTGGGGTGCAGGTCCTTCTGTGGCCCTGTGGGCCGTGCTTGTGCTGGGCACAGCCTGCCAGGGCAGCCACTCAAGCCCCAGGGCTGGGCACTGCGTCCTGGCTCTGGCCAAGGGCCCTGGGGAGAGCTGAGGGAGGTGCATGCAGGGTGTGAGGCCCACCACAGTCACTGCCAGATGCTCAGTGCTGGTGCTTCCCTGGGTCTGCTGTGTGGTGGGCACAGCCCTCGTGAGGGCTGCCCATGGAGGAGGCCTGCCGCCTAGAGAGCCCGGACAGGGGGACAATGGCCTGTGCTGACCCTGGCGGAACCCTGGCTGGCCCCAGATGACCCCAGATGGCCCTGGCTGACCCTGGCGGAACCCAGATGACCCTGGCTGACCCTGGCTGGCCCTGGCTGACCCCAGATGACCCTGGCTGACCCTGGCTGATCCTGGCTGACCCTGGCTGACCTCTGCCTAACCCTGGACCTGGAAAGCCCTAGCTGACCCCGGGCTGGTTGGGGCTGGGCCTCCCTGTGGCTGCAGCCCCTCGCTCAGGCCCCAGGCACACCTGGCCAGGTCTCGGTTTTGGGGCATGTTTCTCAGAACAGCAGTTCTCTGGCTGGAACACCTGGCCTGGGCTGTGTTCACAATGACTCAGCCGCCCCACAGGGCTATTTTGGATATTTCTGCAGGTGATGGGGTACAAGAGGCTTCAGGAGAGAGAGAAAAGCAAGAGAATACAAACAGCATGGCCTCCCCCGACCTTCCTGTCCCCACTCCTGTACTGTACCCCCTCCCCAGTGCTAAGTCGAGACCTGGCGACCCCTTAGGGGCTGGGGCTGGGTGTAGCTCACAGGGCCTGGGCTGGTCCTCTCCCCACCAAGTCCTCCTGGGGCCTACACACCCCTCTGAGCCTGGAAAAATGGAGCAAGCCATTGGGGTCATTTCTTCATCTACCAGTGAGTACATGCACTGAGAGGGTCTCGGCTCCCCTGGAGGCCTCCCTCCACCACTGCAGGTCACTTACTCATGAGGGCCAAGGCTCAGAAATCAGACAGGACTCAGTGTCTAGTCAGACTGATACATGCTCAGAAAAGGAATCAGATTTCAAAATGAATATGTATAAGAAAAGAACCGGGGATCAGTGATCAGGAACAGGGATCCATGATCTGGTCCAGGGCTCAGCGGTCAGGAACAGGGCCCAGCGATCAGGACCAGGGCTCAGTAATCAGGACCAGGGCCCAGTGATCAGGACCAGGGCCCAGCGATTGGGTCCAGGGCTCAGTGATCAGGAACAGGGCTCAGTGATCAGGACCAGGGCCCAGTGATCAGGAACAGGGGCCAGTGACTGGGTCCAGGGCTCAGTAATCAGGACCAGGGCTCAGTGATCAGGACCAGGGCTCAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGACCAGCATTCAGTGATCAGGACCAGGGCTCAGTGATCAGGAACAGGGCTCAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGACCAGCACTCAGTGATCAGGACCAGGGCCCAGTGATCAGGAACAGGGGCCAGTGACTGGGTCCAGGGCTCAGTAATCAGGACCAGGGCTCAGTGATCAGGACCAGGGCTCAGTGATCAGGAATAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGACCAGGGCTCAGTGATCAGGAACAGGGCTCAGTGATCAGGAACAGTGGTCAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCGGGACCAGGGCTCAGTGATCAGGACCAGGGCCCAGTGATTGTGTCCAGGGCTCAGTGATCAGGACCAGGGCTCAGTGATCAGGAACAGGGCTCAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGACCAGCACTCAGTGATCAGGACCAGGGCCCAGTGATCAGGACCAGGGCCCAGCGATTGGGTCCAGGGCTCAGTAATCAGGACCAGGGCCCAGTGATCAGGAACAGGGCTCAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGAACAGGGCTCAGAGATCAGGACCAGGGCCCAGCGATTGGGTCCAGAGCTCAGTGATCAGGAACAGGGCCCAGCGATCAGGACCAGGGCTCAGTAATCAGGACCAGGGCTCAGTGATCAGGACCAGGGCCCAGTGATCAGGAACAGGGGCCAGTGACTGGGTCCAGGGCTCAGTAATCAGGACCAGGGCTCAGTGATCAGGAACAGCGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGACCAGCGCTCAGTGATCAGGAGCAGGGCTCAGTAATCAGGACCAGGGCCCAGTGATCAGGAACAGGGCTCAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGACCAGGGCCCAGCGATTGGGTCCAGAGCTCAGTGATCAGGAACAGGGCCCAGCGATCAGGACCAGGGCTCAGTAATCAGGACCAGGGCTCAGTGATCAGTACCAGGGCCCAGCGATTGGGTCCAGGGCTCAGTGATCAGGACCAGGGCCCAGCGATTGGGTCCAGGGCTCAGTGATCAGGAACAGGGCCCAGCGATCAGGACCAGGGCTCAGTAATCAGGACCAGGGCTCAGTGATCAGGACCAGGGCCCAGCGATTGGGTCCAGGGCTCAGTGATCAGGAACAGGGCCCAGCGATTGGGTCCAGGGCTCAGTGATCAGGAACAGGGCCCAGCGATCAGGACCAGGGCTCAGTAATCAGGACCAGGGCTCAGTGATCAGGACCAGGGCCCAGCGATTGGGTCCAGGGCTCAGTGATCAGGACCAGGGCCCAGCGATTGGGTCCAGGGCTCAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGACCAGGGCCCAGTGATT"
1961 )
1962 ))
1963 );
1964 assert!(elem.next().is_none());
1965 }
1966 #[test]
1967 fn testseqreverse() {
1968 let mut read = crate::bam::Reader::from_path("test/locus.bam").unwrap();
1969 let elem = read.records().filter_map(Result::ok).nth(8).unwrap();
1970 let val = elem.matched_sequence().unwrap();
1971 assert!(val.isfullymatched(99820441..=99821296).is_some());
1972 assert!(val.isfullymatched(99821296..=99821298).is_none());
1973 let mut elem = val.gethash().iter();
1974 let test = elem.next();
1975 let rangepos = RangePos::new(99820441, 99821297);
1976 assert_eq!(
1977 test,
1978 Some((
1979 &rangepos,
1980 &String::from(
1981 "ACCCCCATCCACACACACCCAGAGACACACAGACACCCACAGCCACACACTCACACTCACGAACTTATCCAGTCACGTCCCACACACTCCCACCCAACCCATACACCACACACCTACACAACCCATACACCACACACACTCACAAACTATATACCACACACACACCAACCATACACCTATATACACTCACACACCCATATACCACACACTCACACACAACCCATACACCACACGCACACAACCCATACACCTATACACACTCACACCTACAAACTATATACTACACACTCACACACAACCCATACACCTATACACACACACCCATATACCACACACAACCCATACACCACACACACAAACCATATACCACACACTCACACAACCCATACACCTATACACACTCATACCCATATACCACATACAACCAATATACCACACACACACAACCCATACACCTATACACACACACCTATACACCACACACAGCCCATACACTACACAATCACACCACAAACTGTATACCACACACTCACACATAACCCATACACCTATACACACACACCCATATACCACACACACAACCTGTGCACCTACACACACACATACACCACACACACACAACTCCTACACCTACACACACCCACCACCCATACACACACAGCCTATACACCTACACACACTCATACACTCATATAGCACACACACAACCCATATACCACACACACAACCCACATACCTATACACACACGCCCATACACCACACACTCACACAACCCATGCACCACATACACCCACAAACTATATGCTACACGCTCACACACAACCCATACACCTATACACAATCCCACAACCCATA"
1982 )
1983 ))
1984 );
1985 let test = elem.next();
1986 let rangepos = RangePos::new(99821297, 99822851);
1987 assert_eq!(
1988 test,
1989 Some((
1990 &rangepos,
1991 &String::from(
1992 "CACACTTACACAACCTATACACCACACACACTCACAATCTGTATACCACACACACAACCCATACAGTTATACACACACACCCATATACCACACACACACAACCCATATACCACACACTCACACACAAACCATACATCTATACACATACCCATATGCCACACATACAACCCATACACCACACACTCACACACAACACATACACCACACACACAACCCATAGAACACAAACACAAGTCATAACCACACACACAGCCCATATACCTATACACATTCACACACACAACCCATACACTACACACACAACACATACACCTATACACACTCACACTCAATTCATACACCACACACACACAGCCCATACATCTATACACAAACTCACACACAATCCATATACCACAAACTCACACACAACGCATACACCTATACACACACACGCAACTCATACAGCACACACTCACACAACCCACAGACCATAAACACACACAAGCCATAACCACACACAAACCCATACACCTATACACACACTCATAAACAAGCCATACACCCCTACACAACCCATACACCACACACTCACAACCCATACACCTATATACACACACAACCATATACCACAAACTCACGCTCAACACATACACCTATACACACACACAACTCATACACCACACACTCATACACAACGCACAGACCACATACACAAGCCATAACCACACACACACAACCCGTACACATATATACACACTAATAAACAAGCCATACACCTACACATACAACCCATACACCACACATTCACACATAACCCATACACCTATACACACACACACACAACCCATATACCACAAACACACACAACCTATACACACATACAACCCATACACCACACACACAACACATACACACCACACACACACAGAATACTCATACACACACCCATACACCACCCCCACACAGAACCCATACACCACACACACACAACCTATACACCTATACACACACTCACACACACAACTCATATACCACAAACACACACAACACATACACCTATGCACACACACAACCCATACACCACACATTCACATACAACCCATACACCACACACACACAACACATACATGAAACATACATACAACCCACACACCACCCACTCATACACAACCTATACACCACACACACAACTCATACACCTATACACACACAACACATACACCTATCATACACTCACAACACATACACCTCCTATACACACACAACACACACACTTCCTATACACACAACCCACACGCCTATACACACATCCTCACTCACACTCACCCTCACATTCATATACTCACTAACACACTTCCACACTCACACCCTCACCCACACTTACACCCCCACCCACACTCAAACCCCGACGCTAAGTCACTGTCACATTTGTACCCATGCTCACACGCTCACACGCTCACACACTCACCCCCCACCAGCTCCAGGGCTCACTGGTGTGTGCCCACCAAACCCCCCTCGGGGGTCCCCTCGGTAAGCCGACAGTGCTCTGCTCATCGGTGGCCTGGGGAAACA"
1993 )
1994 ))
1995 );
1996 }
1997 #[test]
1998 fn spliced_reads() {
1999 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
2000 let mut it = bam.records();
2001 let blocks: Vec<_> = it.next().expect("iter").unwrap().aligned_blocks().collect();
2002 assert!(blocks[0] == [16050676, 16050721]);
2004
2005 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2006 assert!(blocks[0] == [16096878, 16096885]);
2008 assert!(blocks[1] == [16096887, 16096931]);
2010
2011 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2012 assert!(blocks[0] == [16097145, 16097174]);
2014 assert!(blocks[1] == [16097176, 16097198]);
2016
2017 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2018 assert!(blocks[0] == [16117350, 16117401]);
2020
2021 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2022 assert!(blocks[0] == [16118483, 16118534]);
2024
2025 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2026 assert!(blocks[0] == [16118499, 16118550]);
2028
2029 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2030 assert!(blocks[0] == [16118499, 16118550]);
2032
2033 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2034 assert!(blocks[0] == [16118499, 16118550]);
2036
2037 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2038 assert!(blocks[0] == [16123411, 16123462]);
2040
2041 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2042 assert!(blocks[0] == [16123417, 16123462]);
2044
2045 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2046 assert!(blocks[0] == [16165860, 16165901]);
2048
2049 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2050 assert!(blocks[0] == [16180871, 16180922]);
2052
2053 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2054 assert!(blocks[0] == [16189705, 16189756]);
2056
2057 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2058 assert!(blocks[0] == [16231271, 16231322]);
2060
2061 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2062 assert!(blocks[0] == [16237657, 16237708]);
2064
2065 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2066 assert!(blocks[0] == [16255012, 16255054]);
2068
2069 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2070 assert!(blocks[0] == [16255391, 16255442]);
2072
2073 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2074 assert!(blocks[0] == [16255392, 16255442]);
2076
2077 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2078 assert!(blocks[0] == [16256084, 16256129]);
2080
2081 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2082 assert!(blocks[0] == [16256224, 16256272]);
2084
2085 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2086 assert!(blocks[0] == [16325199, 16325241]);
2088
2089 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2090 assert!(blocks[0] == [16352865, 16352903]);
2092
2093 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2094 assert!(blocks[0] == [16352968, 16353012]);
2096
2097 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2098 assert!(blocks[0] == [16414998, 16415044]);
2100
2101 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2102 assert!(blocks[0] == [17031591, 17031614]);
2104 assert!(blocks[1] == [17031614, 17031638]);
2106
2107 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2108 assert!(blocks[0] == [17057382, 17057400]);
2110 assert!(blocks[1] == [17057400, 17057432]);
2112
2113 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2114 assert!(blocks[0] == [17092766, 17092783]);
2116 assert!(blocks[1] == [17094966, 17095000]);
2118
2119 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2120 assert!(blocks[0] == [17092782, 17092783]);
2122 assert!(blocks[1] == [17094966, 17095016]);
2124
2125 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2126 assert!(blocks[0] == [17092782, 17092783]);
2128 assert!(blocks[1] == [17094966, 17095016]);
2130
2131 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2132 assert!(blocks[0] == [17137287, 17137320]);
2134
2135 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2136 assert!(blocks[0] == [17306238, 17306286]);
2138
2139 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2140 assert!(blocks[0] == [17561868, 17561913]);
2142
2143 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2144 assert!(blocks[0] == [17566078, 17566119]);
2146 assert!(blocks[1] == [17577951, 17577961]);
2148
2149 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2150 assert!(blocks[0] == [17566108, 17566119]);
2152 assert!(blocks[1] == [17577951, 17577976]);
2154 assert!(blocks[2] == [17578686, 17578701]);
2156
2157 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2158 assert!(blocks[0] == [17566111, 17566119]);
2160 assert!(blocks[1] == [17577951, 17577976]);
2162 assert!(blocks[2] == [17578686, 17578704]);
2164
2165 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2166 assert!(blocks[0] == [17566111, 17566119]);
2168 assert!(blocks[1] == [17577951, 17577976]);
2170 assert!(blocks[2] == [17578686, 17578704]);
2172
2173 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2174 assert!(blocks[0] == [17566111, 17566119]);
2176 assert!(blocks[1] == [17577951, 17577976]);
2178 assert!(blocks[2] == [17578686, 17578704]);
2180
2181 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2182 assert!(blocks[0] == [17566111, 17566119]);
2184 assert!(blocks[1] == [17577951, 17577976]);
2186 assert!(blocks[2] == [17578686, 17578704]);
2188
2189 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2190 assert!(blocks[0] == [17566112, 17566119]);
2192 assert!(blocks[1] == [17577951, 17577976]);
2194 assert!(blocks[2] == [17578686, 17578705]);
2196
2197 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2198 assert!(blocks[0] == [17566113, 17566119]);
2200 assert!(blocks[1] == [17577951, 17577976]);
2202 assert!(blocks[2] == [17578686, 17578706]);
2204
2205 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2206 assert!(blocks[0] == [17566113, 17566119]);
2208 assert!(blocks[1] == [17577951, 17577976]);
2210 assert!(blocks[2] == [17578686, 17578706]);
2212
2213 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2214 assert!(blocks[0] == [17579733, 17579777]);
2216 assert!(blocks[1] == [17581244, 17581250]);
2218
2219 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2220 assert!(blocks[0] == [17581369, 17581371]);
2222 assert!(blocks[1] == [17582885, 17582933]);
2224 assert!(blocks[2] == [17583028, 17583029]);
2226
2227 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2228 assert!(blocks[0] == [17581370, 17581371]);
2230 assert!(blocks[1] == [17582885, 17582933]);
2232 assert!(blocks[2] == [17583028, 17583030]);
2234
2235 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2236 assert!(blocks[0] == [17581370, 17581371]);
2238 assert!(blocks[1] == [17582885, 17582933]);
2240 assert!(blocks[2] == [17583028, 17583030]);
2242
2243 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2244 assert!(blocks[0] == [17582911, 17582933]);
2246 assert!(blocks[1] == [17583028, 17583056]);
2248
2249 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2250 assert!(blocks[0] == [17588621, 17588658]);
2252 assert!(blocks[1] == [17589196, 17589209]);
2254
2255 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2256 assert!(blocks[0] == [17588621, 17588658]);
2258 assert!(blocks[1] == [17589196, 17589209]);
2260
2261 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2262 assert!(blocks[0] == [17588621, 17588658]);
2264 assert!(blocks[1] == [17589196, 17589209]);
2266
2267 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2268 assert!(blocks[0] == [17591770, 17591795]);
2270 assert!(blocks[1] == [17591796, 17591821]);
2272
2273 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2274 assert!(blocks[0] == [17593855, 17593879]);
2276 assert!(blocks[1] == [17593880, 17593904]);
2278
2279 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2280 assert!(blocks[0] == [17593863, 17593879]);
2282 assert!(blocks[1] == [17593880, 17593908]);
2284
2285 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2286 assert!(blocks[0] == [17596476, 17596483]);
2288 assert!(blocks[1] == [17596483, 17596515]);
2290
2291 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2292 assert!(blocks[0] == [17624012, 17624021]);
2294 assert!(blocks[1] == [17625913, 17625950]);
2296
2297 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2298 assert!(blocks[0] == [17624012, 17624021]);
2300 assert!(blocks[1] == [17625913, 17625953]);
2302
2303 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2304 assert!(blocks[0] == [31796700, 31796707]);
2306 assert!(blocks[1] == [31796710, 31796729]);
2308 assert!(blocks[2] == [31799014, 31799038]);
2310
2311 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2312 assert!(blocks[0] == [36722692, 36722706]);
2314 assert!(blocks[1] == [36723505, 36723533]);
2316 assert!(blocks[2] == [36737414, 36737421]);
2318
2319 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2320 assert!(blocks[0] == [44587963, 44587984]);
2322 assert!(blocks[1] == [44589680, 44589703]);
2324 assert!(blocks[2] == [44592034, 44592037]);
2326 }
2327
2328 #[test]
2329 fn test_introns() {
2330 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
2331 let mut it = bam.records();
2332
2333 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2335 assert_eq!(introns.len(), 0);
2336 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2338 assert_eq!(introns.len(), 0);
2339 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2341 assert_eq!(introns.len(), 0);
2342 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2344 assert_eq!(introns.len(), 0);
2345 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2347 assert_eq!(introns.len(), 0);
2348 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2350 assert_eq!(introns.len(), 0);
2351 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2353 assert_eq!(introns.len(), 0);
2354 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2356 assert_eq!(introns.len(), 0);
2357 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2359 assert_eq!(introns.len(), 0);
2360 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2362 assert_eq!(introns.len(), 0);
2363 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2365 assert_eq!(introns.len(), 0);
2366 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2368 assert_eq!(introns.len(), 0);
2369 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2371 assert_eq!(introns.len(), 0);
2372 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2374 assert_eq!(introns.len(), 0);
2375 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2377 assert_eq!(introns.len(), 0);
2378 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2380 assert_eq!(introns.len(), 0);
2381 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2383 assert_eq!(introns.len(), 0);
2384 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2386 assert_eq!(introns.len(), 0);
2387 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2389 assert_eq!(introns.len(), 0);
2390 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2392 assert_eq!(introns.len(), 0);
2393 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2395 assert_eq!(introns.len(), 0);
2396 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2398 assert_eq!(introns.len(), 0);
2399 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2401 assert_eq!(introns.len(), 0);
2402 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2404 assert_eq!(introns.len(), 0);
2405 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2407 assert_eq!(introns.len(), 0);
2408 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2410 assert_eq!(introns.len(), 0);
2411 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2413 assert_eq!(introns.len(), 1);
2414 assert_eq!(introns[0], [17092783, 17094966]);
2415 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2417 assert_eq!(introns.len(), 1);
2418 assert_eq!(introns[0], [17092783, 17094966]);
2419 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2421 assert_eq!(introns.len(), 1);
2422 assert_eq!(introns[0], [17092783, 17094966]);
2423 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2425 assert_eq!(introns.len(), 0);
2426 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2428 assert_eq!(introns.len(), 0);
2429 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2431 assert_eq!(introns.len(), 0);
2432 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2434 assert_eq!(introns.len(), 1);
2435 assert_eq!(introns[0], [17566119, 17577951]);
2436 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2438 assert_eq!(introns.len(), 2);
2439 assert_eq!(introns[0], [17566119, 17577951]);
2440 assert_eq!(introns[1], [17577976, 17578686]);
2441 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2443 assert_eq!(introns.len(), 2);
2444 assert_eq!(introns[0], [17566119, 17577951]);
2445 assert_eq!(introns[1], [17577976, 17578686]);
2446 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2448 assert_eq!(introns.len(), 2);
2449 assert_eq!(introns[0], [17566119, 17577951]);
2450 assert_eq!(introns[1], [17577976, 17578686]);
2451 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2453 assert_eq!(introns.len(), 2);
2454 assert_eq!(introns[0], [17566119, 17577951]);
2455 assert_eq!(introns[1], [17577976, 17578686]);
2456 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2458 assert_eq!(introns.len(), 2);
2459 assert_eq!(introns[0], [17566119, 17577951]);
2460 assert_eq!(introns[1], [17577976, 17578686]);
2461 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2463 assert_eq!(introns.len(), 2);
2464 assert_eq!(introns[0], [17566119, 17577951]);
2465 assert_eq!(introns[1], [17577976, 17578686]);
2466 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2468 assert_eq!(introns.len(), 2);
2469 assert_eq!(introns[0], [17566119, 17577951]);
2470 assert_eq!(introns[1], [17577976, 17578686]);
2471 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2473 assert_eq!(introns.len(), 2);
2474 assert_eq!(introns[0], [17566119, 17577951]);
2475 assert_eq!(introns[1], [17577976, 17578686]);
2476 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2478 assert_eq!(introns.len(), 1);
2479 assert_eq!(introns[0], [17579777, 17581244]);
2480 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2482 assert_eq!(introns.len(), 2);
2483 assert_eq!(introns[0], [17581371, 17582885]);
2484 assert_eq!(introns[1], [17582933, 17583028]);
2485 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2487 assert_eq!(introns.len(), 2);
2488 assert_eq!(introns[0], [17581371, 17582885]);
2489 assert_eq!(introns[1], [17582933, 17583028]);
2490 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2492 assert_eq!(introns.len(), 2);
2493 assert_eq!(introns[0], [17581371, 17582885]);
2494 assert_eq!(introns[1], [17582933, 17583028]);
2495 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2497 assert_eq!(introns.len(), 1);
2498 assert_eq!(introns[0], [17582933, 17583028]);
2499 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2501 assert_eq!(introns.len(), 1);
2502 assert_eq!(introns[0], [17588658, 17589196]);
2503 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2505 assert_eq!(introns.len(), 1);
2506 assert_eq!(introns[0], [17588658, 17589196]);
2507 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2509 assert_eq!(introns.len(), 1);
2510 assert_eq!(introns[0], [17588658, 17589196]);
2511 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2513 assert_eq!(introns.len(), 0);
2514 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2516 assert_eq!(introns.len(), 0);
2517 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2519 assert_eq!(introns.len(), 0);
2520 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2522 assert_eq!(introns.len(), 0);
2523 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2525 assert_eq!(introns.len(), 1);
2526 assert_eq!(introns[0], [17624021, 17625913]);
2527 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2529 assert_eq!(introns.len(), 1);
2530 assert_eq!(introns[0], [17624021, 17625913]);
2531 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2533 assert_eq!(introns.len(), 1);
2534 assert_eq!(introns[0], [31796729, 31799014]);
2535 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2537 assert_eq!(introns.len(), 2);
2538 assert_eq!(introns[0], [36722706, 36723505]);
2539 assert_eq!(introns[1], [36723533, 36737414]);
2540 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2542 assert_eq!(introns.len(), 2);
2543 assert_eq!(introns[0], [44587984, 44589680]);
2544 assert_eq!(introns[1], [44589703, 44592034]);
2545 }
2546
2547 #[test]
2548 fn test_aligned_pairs() {
2549 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
2550 let mut it = bam.records();
2551
2552 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
2553 assert_eq!(
2554 pairs,
2555 vec![
2556 [6, 16050676],
2557 [7, 16050677],
2558 [8, 16050678],
2559 [9, 16050679],
2560 [10, 16050680],
2561 [11, 16050681],
2562 [12, 16050682],
2563 [13, 16050683],
2564 [14, 16050684],
2565 [15, 16050685],
2566 [16, 16050686],
2567 [17, 16050687],
2568 [18, 16050688],
2569 [19, 16050689],
2570 [20, 16050690],
2571 [21, 16050691],
2572 [22, 16050692],
2573 [23, 16050693],
2574 [24, 16050694],
2575 [25, 16050695],
2576 [26, 16050696],
2577 [27, 16050697],
2578 [28, 16050698],
2579 [29, 16050699],
2580 [30, 16050700],
2581 [31, 16050701],
2582 [32, 16050702],
2583 [33, 16050703],
2584 [34, 16050704],
2585 [35, 16050705],
2586 [36, 16050706],
2587 [37, 16050707],
2588 [38, 16050708],
2589 [39, 16050709],
2590 [40, 16050710],
2591 [41, 16050711],
2592 [42, 16050712],
2593 [43, 16050713],
2594 [44, 16050714],
2595 [45, 16050715],
2596 [46, 16050716],
2597 [47, 16050717],
2598 [48, 16050718],
2599 [49, 16050719],
2600 [50, 16050720]
2601 ]
2602 );
2603 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
2604 assert_eq!(
2605 pairs,
2606 vec![
2607 [0, 16096878],
2608 [1, 16096879],
2609 [2, 16096880],
2610 [3, 16096881],
2611 [4, 16096882],
2612 [5, 16096883],
2613 [6, 16096884],
2614 [7, 16096887],
2615 [8, 16096888],
2616 [9, 16096889],
2617 [10, 16096890],
2618 [11, 16096891],
2619 [12, 16096892],
2620 [13, 16096893],
2621 [14, 16096894],
2622 [15, 16096895],
2623 [16, 16096896],
2624 [17, 16096897],
2625 [18, 16096898],
2626 [19, 16096899],
2627 [20, 16096900],
2628 [21, 16096901],
2629 [22, 16096902],
2630 [23, 16096903],
2631 [24, 16096904],
2632 [25, 16096905],
2633 [26, 16096906],
2634 [27, 16096907],
2635 [28, 16096908],
2636 [29, 16096909],
2637 [30, 16096910],
2638 [31, 16096911],
2639 [32, 16096912],
2640 [33, 16096913],
2641 [34, 16096914],
2642 [35, 16096915],
2643 [36, 16096916],
2644 [37, 16096917],
2645 [38, 16096918],
2646 [39, 16096919],
2647 [40, 16096920],
2648 [41, 16096921],
2649 [42, 16096922],
2650 [43, 16096923],
2651 [44, 16096924],
2652 [45, 16096925],
2653 [46, 16096926],
2654 [47, 16096927],
2655 [48, 16096928],
2656 [49, 16096929],
2657 [50, 16096930]
2658 ]
2659 );
2660 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
2661 assert_eq!(
2662 pairs,
2663 vec![
2664 [0, 16097145],
2665 [1, 16097146],
2666 [2, 16097147],
2667 [3, 16097148],
2668 [4, 16097149],
2669 [5, 16097150],
2670 [6, 16097151],
2671 [7, 16097152],
2672 [8, 16097153],
2673 [9, 16097154],
2674 [10, 16097155],
2675 [11, 16097156],
2676 [12, 16097157],
2677 [13, 16097158],
2678 [14, 16097159],
2679 [15, 16097160],
2680 [16, 16097161],
2681 [17, 16097162],
2682 [18, 16097163],
2683 [19, 16097164],
2684 [20, 16097165],
2685 [21, 16097166],
2686 [22, 16097167],
2687 [23, 16097168],
2688 [24, 16097169],
2689 [25, 16097170],
2690 [26, 16097171],
2691 [27, 16097172],
2692 [28, 16097173],
2693 [29, 16097176],
2694 [30, 16097177],
2695 [31, 16097178],
2696 [32, 16097179],
2697 [33, 16097180],
2698 [34, 16097181],
2699 [35, 16097182],
2700 [36, 16097183],
2701 [37, 16097184],
2702 [38, 16097185],
2703 [39, 16097186],
2704 [40, 16097187],
2705 [41, 16097188],
2706 [42, 16097189],
2707 [43, 16097190],
2708 [44, 16097191],
2709 [45, 16097192],
2710 [46, 16097193],
2711 [47, 16097194],
2712 [48, 16097195],
2713 [49, 16097196],
2714 [50, 16097197]
2715 ]
2716 );
2717 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
2718 assert_eq!(
2719 pairs,
2720 vec![
2721 [0, 16117350],
2722 [1, 16117351],
2723 [2, 16117352],
2724 [3, 16117353],
2725 [4, 16117354],
2726 [5, 16117355],
2727 [6, 16117356],
2728 [7, 16117357],
2729 [8, 16117358],
2730 [9, 16117359],
2731 [10, 16117360],
2732 [11, 16117361],
2733 [12, 16117362],
2734 [13, 16117363],
2735 [14, 16117364],
2736 [15, 16117365],
2737 [16, 16117366],
2738 [17, 16117367],
2739 [18, 16117368],
2740 [19, 16117369],
2741 [20, 16117370],
2742 [21, 16117371],
2743 [22, 16117372],
2744 [23, 16117373],
2745 [24, 16117374],
2746 [25, 16117375],
2747 [26, 16117376],
2748 [27, 16117377],
2749 [28, 16117378],
2750 [29, 16117379],
2751 [30, 16117380],
2752 [31, 16117381],
2753 [32, 16117382],
2754 [33, 16117383],
2755 [34, 16117384],
2756 [35, 16117385],
2757 [36, 16117386],
2758 [37, 16117387],
2759 [38, 16117388],
2760 [39, 16117389],
2761 [40, 16117390],
2762 [41, 16117391],
2763 [42, 16117392],
2764 [43, 16117393],
2765 [44, 16117394],
2766 [45, 16117395],
2767 [46, 16117396],
2768 [47, 16117397],
2769 [48, 16117398],
2770 [49, 16117399],
2771 [50, 16117400]
2772 ]
2773 );
2774 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
2775 assert_eq!(
2776 pairs,
2777 vec![
2778 [0, 16118483],
2779 [1, 16118484],
2780 [2, 16118485],
2781 [3, 16118486],
2782 [4, 16118487],
2783 [5, 16118488],
2784 [6, 16118489],
2785 [7, 16118490],
2786 [8, 16118491],
2787 [9, 16118492],
2788 [10, 16118493],
2789 [11, 16118494],
2790 [12, 16118495],
2791 [13, 16118496],
2792 [14, 16118497],
2793 [15, 16118498],
2794 [16, 16118499],
2795 [17, 16118500],
2796 [18, 16118501],
2797 [19, 16118502],
2798 [20, 16118503],
2799 [21, 16118504],
2800 [22, 16118505],
2801 [23, 16118506],
2802 [24, 16118507],
2803 [25, 16118508],
2804 [26, 16118509],
2805 [27, 16118510],
2806 [28, 16118511],
2807 [29, 16118512],
2808 [30, 16118513],
2809 [31, 16118514],
2810 [32, 16118515],
2811 [33, 16118516],
2812 [34, 16118517],
2813 [35, 16118518],
2814 [36, 16118519],
2815 [37, 16118520],
2816 [38, 16118521],
2817 [39, 16118522],
2818 [40, 16118523],
2819 [41, 16118524],
2820 [42, 16118525],
2821 [43, 16118526],
2822 [44, 16118527],
2823 [45, 16118528],
2824 [46, 16118529],
2825 [47, 16118530],
2826 [48, 16118531],
2827 [49, 16118532],
2828 [50, 16118533]
2829 ]
2830 );
2831 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
2832 assert_eq!(
2833 pairs,
2834 vec![
2835 [0, 16118499],
2836 [1, 16118500],
2837 [2, 16118501],
2838 [3, 16118502],
2839 [4, 16118503],
2840 [5, 16118504],
2841 [6, 16118505],
2842 [7, 16118506],
2843 [8, 16118507],
2844 [9, 16118508],
2845 [10, 16118509],
2846 [11, 16118510],
2847 [12, 16118511],
2848 [13, 16118512],
2849 [14, 16118513],
2850 [15, 16118514],
2851 [16, 16118515],
2852 [17, 16118516],
2853 [18, 16118517],
2854 [19, 16118518],
2855 [20, 16118519],
2856 [21, 16118520],
2857 [22, 16118521],
2858 [23, 16118522],
2859 [24, 16118523],
2860 [25, 16118524],
2861 [26, 16118525],
2862 [27, 16118526],
2863 [28, 16118527],
2864 [29, 16118528],
2865 [30, 16118529],
2866 [31, 16118530],
2867 [32, 16118531],
2868 [33, 16118532],
2869 [34, 16118533],
2870 [35, 16118534],
2871 [36, 16118535],
2872 [37, 16118536],
2873 [38, 16118537],
2874 [39, 16118538],
2875 [40, 16118539],
2876 [41, 16118540],
2877 [42, 16118541],
2878 [43, 16118542],
2879 [44, 16118543],
2880 [45, 16118544],
2881 [46, 16118545],
2882 [47, 16118546],
2883 [48, 16118547],
2884 [49, 16118548],
2885 [50, 16118549]
2886 ]
2887 );
2888 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
2889 assert_eq!(
2890 pairs,
2891 vec![
2892 [0, 16118499],
2893 [1, 16118500],
2894 [2, 16118501],
2895 [3, 16118502],
2896 [4, 16118503],
2897 [5, 16118504],
2898 [6, 16118505],
2899 [7, 16118506],
2900 [8, 16118507],
2901 [9, 16118508],
2902 [10, 16118509],
2903 [11, 16118510],
2904 [12, 16118511],
2905 [13, 16118512],
2906 [14, 16118513],
2907 [15, 16118514],
2908 [16, 16118515],
2909 [17, 16118516],
2910 [18, 16118517],
2911 [19, 16118518],
2912 [20, 16118519],
2913 [21, 16118520],
2914 [22, 16118521],
2915 [23, 16118522],
2916 [24, 16118523],
2917 [25, 16118524],
2918 [26, 16118525],
2919 [27, 16118526],
2920 [28, 16118527],
2921 [29, 16118528],
2922 [30, 16118529],
2923 [31, 16118530],
2924 [32, 16118531],
2925 [33, 16118532],
2926 [34, 16118533],
2927 [35, 16118534],
2928 [36, 16118535],
2929 [37, 16118536],
2930 [38, 16118537],
2931 [39, 16118538],
2932 [40, 16118539],
2933 [41, 16118540],
2934 [42, 16118541],
2935 [43, 16118542],
2936 [44, 16118543],
2937 [45, 16118544],
2938 [46, 16118545],
2939 [47, 16118546],
2940 [48, 16118547],
2941 [49, 16118548],
2942 [50, 16118549]
2943 ]
2944 );
2945 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
2946 assert_eq!(
2947 pairs,
2948 vec![
2949 [0, 16118499],
2950 [1, 16118500],
2951 [2, 16118501],
2952 [3, 16118502],
2953 [4, 16118503],
2954 [5, 16118504],
2955 [6, 16118505],
2956 [7, 16118506],
2957 [8, 16118507],
2958 [9, 16118508],
2959 [10, 16118509],
2960 [11, 16118510],
2961 [12, 16118511],
2962 [13, 16118512],
2963 [14, 16118513],
2964 [15, 16118514],
2965 [16, 16118515],
2966 [17, 16118516],
2967 [18, 16118517],
2968 [19, 16118518],
2969 [20, 16118519],
2970 [21, 16118520],
2971 [22, 16118521],
2972 [23, 16118522],
2973 [24, 16118523],
2974 [25, 16118524],
2975 [26, 16118525],
2976 [27, 16118526],
2977 [28, 16118527],
2978 [29, 16118528],
2979 [30, 16118529],
2980 [31, 16118530],
2981 [32, 16118531],
2982 [33, 16118532],
2983 [34, 16118533],
2984 [35, 16118534],
2985 [36, 16118535],
2986 [37, 16118536],
2987 [38, 16118537],
2988 [39, 16118538],
2989 [40, 16118539],
2990 [41, 16118540],
2991 [42, 16118541],
2992 [43, 16118542],
2993 [44, 16118543],
2994 [45, 16118544],
2995 [46, 16118545],
2996 [47, 16118546],
2997 [48, 16118547],
2998 [49, 16118548],
2999 [50, 16118549]
3000 ]
3001 );
3002 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3003 assert_eq!(
3004 pairs,
3005 vec![
3006 [0, 16123411],
3007 [1, 16123412],
3008 [2, 16123413],
3009 [3, 16123414],
3010 [4, 16123415],
3011 [5, 16123416],
3012 [6, 16123417],
3013 [7, 16123418],
3014 [8, 16123419],
3015 [9, 16123420],
3016 [10, 16123421],
3017 [11, 16123422],
3018 [12, 16123423],
3019 [13, 16123424],
3020 [14, 16123425],
3021 [15, 16123426],
3022 [16, 16123427],
3023 [17, 16123428],
3024 [18, 16123429],
3025 [19, 16123430],
3026 [20, 16123431],
3027 [21, 16123432],
3028 [22, 16123433],
3029 [23, 16123434],
3030 [24, 16123435],
3031 [25, 16123436],
3032 [26, 16123437],
3033 [27, 16123438],
3034 [28, 16123439],
3035 [29, 16123440],
3036 [30, 16123441],
3037 [31, 16123442],
3038 [32, 16123443],
3039 [33, 16123444],
3040 [34, 16123445],
3041 [35, 16123446],
3042 [36, 16123447],
3043 [37, 16123448],
3044 [38, 16123449],
3045 [39, 16123450],
3046 [40, 16123451],
3047 [41, 16123452],
3048 [42, 16123453],
3049 [43, 16123454],
3050 [44, 16123455],
3051 [45, 16123456],
3052 [46, 16123457],
3053 [47, 16123458],
3054 [48, 16123459],
3055 [49, 16123460],
3056 [50, 16123461]
3057 ]
3058 );
3059 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3060 assert_eq!(
3061 pairs,
3062 vec![
3063 [6, 16123417],
3064 [7, 16123418],
3065 [8, 16123419],
3066 [9, 16123420],
3067 [10, 16123421],
3068 [11, 16123422],
3069 [12, 16123423],
3070 [13, 16123424],
3071 [14, 16123425],
3072 [15, 16123426],
3073 [16, 16123427],
3074 [17, 16123428],
3075 [18, 16123429],
3076 [19, 16123430],
3077 [20, 16123431],
3078 [21, 16123432],
3079 [22, 16123433],
3080 [23, 16123434],
3081 [24, 16123435],
3082 [25, 16123436],
3083 [26, 16123437],
3084 [27, 16123438],
3085 [28, 16123439],
3086 [29, 16123440],
3087 [30, 16123441],
3088 [31, 16123442],
3089 [32, 16123443],
3090 [33, 16123444],
3091 [34, 16123445],
3092 [35, 16123446],
3093 [36, 16123447],
3094 [37, 16123448],
3095 [38, 16123449],
3096 [39, 16123450],
3097 [40, 16123451],
3098 [41, 16123452],
3099 [42, 16123453],
3100 [43, 16123454],
3101 [44, 16123455],
3102 [45, 16123456],
3103 [46, 16123457],
3104 [47, 16123458],
3105 [48, 16123459],
3106 [49, 16123460],
3107 [50, 16123461]
3108 ]
3109 );
3110 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3111 assert_eq!(
3112 pairs,
3113 vec![
3114 [0, 16165860],
3115 [1, 16165861],
3116 [2, 16165862],
3117 [3, 16165863],
3118 [4, 16165864],
3119 [5, 16165865],
3120 [6, 16165866],
3121 [7, 16165867],
3122 [8, 16165868],
3123 [9, 16165869],
3124 [10, 16165870],
3125 [11, 16165871],
3126 [12, 16165872],
3127 [13, 16165873],
3128 [14, 16165874],
3129 [15, 16165875],
3130 [16, 16165876],
3131 [17, 16165877],
3132 [18, 16165878],
3133 [19, 16165879],
3134 [20, 16165880],
3135 [21, 16165881],
3136 [22, 16165882],
3137 [23, 16165883],
3138 [24, 16165884],
3139 [25, 16165885],
3140 [26, 16165886],
3141 [27, 16165887],
3142 [28, 16165888],
3143 [29, 16165889],
3144 [30, 16165890],
3145 [31, 16165891],
3146 [32, 16165892],
3147 [33, 16165893],
3148 [34, 16165894],
3149 [35, 16165895],
3150 [36, 16165896],
3151 [37, 16165897],
3152 [38, 16165898],
3153 [39, 16165899],
3154 [40, 16165900]
3155 ]
3156 );
3157 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3158 assert_eq!(
3159 pairs,
3160 vec![
3161 [0, 16180871],
3162 [1, 16180872],
3163 [2, 16180873],
3164 [3, 16180874],
3165 [4, 16180875],
3166 [5, 16180876],
3167 [6, 16180877],
3168 [7, 16180878],
3169 [8, 16180879],
3170 [9, 16180880],
3171 [10, 16180881],
3172 [11, 16180882],
3173 [12, 16180883],
3174 [13, 16180884],
3175 [14, 16180885],
3176 [15, 16180886],
3177 [16, 16180887],
3178 [17, 16180888],
3179 [18, 16180889],
3180 [19, 16180890],
3181 [20, 16180891],
3182 [21, 16180892],
3183 [22, 16180893],
3184 [23, 16180894],
3185 [24, 16180895],
3186 [25, 16180896],
3187 [26, 16180897],
3188 [27, 16180898],
3189 [28, 16180899],
3190 [29, 16180900],
3191 [30, 16180901],
3192 [31, 16180902],
3193 [32, 16180903],
3194 [33, 16180904],
3195 [34, 16180905],
3196 [35, 16180906],
3197 [36, 16180907],
3198 [37, 16180908],
3199 [38, 16180909],
3200 [39, 16180910],
3201 [40, 16180911],
3202 [41, 16180912],
3203 [42, 16180913],
3204 [43, 16180914],
3205 [44, 16180915],
3206 [45, 16180916],
3207 [46, 16180917],
3208 [47, 16180918],
3209 [48, 16180919],
3210 [49, 16180920],
3211 [50, 16180921]
3212 ]
3213 );
3214 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3215 assert_eq!(
3216 pairs,
3217 vec![
3218 [0, 16189705],
3219 [1, 16189706],
3220 [2, 16189707],
3221 [3, 16189708],
3222 [4, 16189709],
3223 [5, 16189710],
3224 [6, 16189711],
3225 [7, 16189712],
3226 [8, 16189713],
3227 [9, 16189714],
3228 [10, 16189715],
3229 [11, 16189716],
3230 [12, 16189717],
3231 [13, 16189718],
3232 [14, 16189719],
3233 [15, 16189720],
3234 [16, 16189721],
3235 [17, 16189722],
3236 [18, 16189723],
3237 [19, 16189724],
3238 [20, 16189725],
3239 [21, 16189726],
3240 [22, 16189727],
3241 [23, 16189728],
3242 [24, 16189729],
3243 [25, 16189730],
3244 [26, 16189731],
3245 [27, 16189732],
3246 [28, 16189733],
3247 [29, 16189734],
3248 [30, 16189735],
3249 [31, 16189736],
3250 [32, 16189737],
3251 [33, 16189738],
3252 [34, 16189739],
3253 [35, 16189740],
3254 [36, 16189741],
3255 [37, 16189742],
3256 [38, 16189743],
3257 [39, 16189744],
3258 [40, 16189745],
3259 [41, 16189746],
3260 [42, 16189747],
3261 [43, 16189748],
3262 [44, 16189749],
3263 [45, 16189750],
3264 [46, 16189751],
3265 [47, 16189752],
3266 [48, 16189753],
3267 [49, 16189754],
3268 [50, 16189755]
3269 ]
3270 );
3271 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3272 assert_eq!(
3273 pairs,
3274 vec![
3275 [0, 16231271],
3276 [1, 16231272],
3277 [2, 16231273],
3278 [3, 16231274],
3279 [4, 16231275],
3280 [5, 16231276],
3281 [6, 16231277],
3282 [7, 16231278],
3283 [8, 16231279],
3284 [9, 16231280],
3285 [10, 16231281],
3286 [11, 16231282],
3287 [12, 16231283],
3288 [13, 16231284],
3289 [14, 16231285],
3290 [15, 16231286],
3291 [16, 16231287],
3292 [17, 16231288],
3293 [18, 16231289],
3294 [19, 16231290],
3295 [20, 16231291],
3296 [21, 16231292],
3297 [22, 16231293],
3298 [23, 16231294],
3299 [24, 16231295],
3300 [25, 16231296],
3301 [26, 16231297],
3302 [27, 16231298],
3303 [28, 16231299],
3304 [29, 16231300],
3305 [30, 16231301],
3306 [31, 16231302],
3307 [32, 16231303],
3308 [33, 16231304],
3309 [34, 16231305],
3310 [35, 16231306],
3311 [36, 16231307],
3312 [37, 16231308],
3313 [38, 16231309],
3314 [39, 16231310],
3315 [40, 16231311],
3316 [41, 16231312],
3317 [42, 16231313],
3318 [43, 16231314],
3319 [44, 16231315],
3320 [45, 16231316],
3321 [46, 16231317],
3322 [47, 16231318],
3323 [48, 16231319],
3324 [49, 16231320],
3325 [50, 16231321]
3326 ]
3327 );
3328 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3329 assert_eq!(
3330 pairs,
3331 vec![
3332 [0, 16237657],
3333 [1, 16237658],
3334 [2, 16237659],
3335 [3, 16237660],
3336 [4, 16237661],
3337 [5, 16237662],
3338 [6, 16237663],
3339 [7, 16237664],
3340 [8, 16237665],
3341 [9, 16237666],
3342 [10, 16237667],
3343 [11, 16237668],
3344 [12, 16237669],
3345 [13, 16237670],
3346 [14, 16237671],
3347 [15, 16237672],
3348 [16, 16237673],
3349 [17, 16237674],
3350 [18, 16237675],
3351 [19, 16237676],
3352 [20, 16237677],
3353 [21, 16237678],
3354 [22, 16237679],
3355 [23, 16237680],
3356 [24, 16237681],
3357 [25, 16237682],
3358 [26, 16237683],
3359 [27, 16237684],
3360 [28, 16237685],
3361 [29, 16237686],
3362 [30, 16237687],
3363 [31, 16237688],
3364 [32, 16237689],
3365 [33, 16237690],
3366 [34, 16237691],
3367 [35, 16237692],
3368 [36, 16237693],
3369 [37, 16237694],
3370 [38, 16237695],
3371 [39, 16237696],
3372 [40, 16237697],
3373 [41, 16237698],
3374 [42, 16237699],
3375 [43, 16237700],
3376 [44, 16237701],
3377 [45, 16237702],
3378 [46, 16237703],
3379 [47, 16237704],
3380 [48, 16237705],
3381 [49, 16237706],
3382 [50, 16237707]
3383 ]
3384 );
3385 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3386 assert_eq!(
3387 pairs,
3388 vec![
3389 [9, 16255012],
3390 [10, 16255013],
3391 [11, 16255014],
3392 [12, 16255015],
3393 [13, 16255016],
3394 [14, 16255017],
3395 [15, 16255018],
3396 [16, 16255019],
3397 [17, 16255020],
3398 [18, 16255021],
3399 [19, 16255022],
3400 [20, 16255023],
3401 [21, 16255024],
3402 [22, 16255025],
3403 [23, 16255026],
3404 [24, 16255027],
3405 [25, 16255028],
3406 [26, 16255029],
3407 [27, 16255030],
3408 [28, 16255031],
3409 [29, 16255032],
3410 [30, 16255033],
3411 [31, 16255034],
3412 [32, 16255035],
3413 [33, 16255036],
3414 [34, 16255037],
3415 [35, 16255038],
3416 [36, 16255039],
3417 [37, 16255040],
3418 [38, 16255041],
3419 [39, 16255042],
3420 [40, 16255043],
3421 [41, 16255044],
3422 [42, 16255045],
3423 [43, 16255046],
3424 [44, 16255047],
3425 [45, 16255048],
3426 [46, 16255049],
3427 [47, 16255050],
3428 [48, 16255051],
3429 [49, 16255052],
3430 [50, 16255053]
3431 ]
3432 );
3433 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3434 assert_eq!(
3435 pairs,
3436 vec![
3437 [0, 16255391],
3438 [1, 16255392],
3439 [2, 16255393],
3440 [3, 16255394],
3441 [4, 16255395],
3442 [5, 16255396],
3443 [6, 16255397],
3444 [7, 16255398],
3445 [8, 16255399],
3446 [9, 16255400],
3447 [10, 16255401],
3448 [11, 16255402],
3449 [12, 16255403],
3450 [13, 16255404],
3451 [14, 16255405],
3452 [15, 16255406],
3453 [16, 16255407],
3454 [17, 16255408],
3455 [18, 16255409],
3456 [19, 16255410],
3457 [20, 16255411],
3458 [21, 16255412],
3459 [22, 16255413],
3460 [23, 16255414],
3461 [24, 16255415],
3462 [25, 16255416],
3463 [26, 16255417],
3464 [27, 16255418],
3465 [28, 16255419],
3466 [29, 16255420],
3467 [30, 16255421],
3468 [31, 16255422],
3469 [32, 16255423],
3470 [33, 16255424],
3471 [34, 16255425],
3472 [35, 16255426],
3473 [36, 16255427],
3474 [37, 16255428],
3475 [38, 16255429],
3476 [39, 16255430],
3477 [40, 16255431],
3478 [41, 16255432],
3479 [42, 16255433],
3480 [43, 16255434],
3481 [44, 16255435],
3482 [45, 16255436],
3483 [46, 16255437],
3484 [47, 16255438],
3485 [48, 16255439],
3486 [49, 16255440],
3487 [50, 16255441]
3488 ]
3489 );
3490 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3491 assert_eq!(
3492 pairs,
3493 vec![
3494 [0, 16255392],
3495 [1, 16255393],
3496 [2, 16255394],
3497 [3, 16255395],
3498 [4, 16255396],
3499 [5, 16255397],
3500 [6, 16255398],
3501 [7, 16255399],
3502 [8, 16255400],
3503 [9, 16255401],
3504 [10, 16255402],
3505 [11, 16255403],
3506 [12, 16255404],
3507 [13, 16255405],
3508 [14, 16255406],
3509 [15, 16255407],
3510 [16, 16255408],
3511 [17, 16255409],
3512 [18, 16255410],
3513 [19, 16255411],
3514 [20, 16255412],
3515 [21, 16255413],
3516 [22, 16255414],
3517 [23, 16255415],
3518 [24, 16255416],
3519 [25, 16255417],
3520 [26, 16255418],
3521 [27, 16255419],
3522 [28, 16255420],
3523 [29, 16255421],
3524 [30, 16255422],
3525 [31, 16255423],
3526 [32, 16255424],
3527 [33, 16255425],
3528 [34, 16255426],
3529 [35, 16255427],
3530 [36, 16255428],
3531 [37, 16255429],
3532 [38, 16255430],
3533 [39, 16255431],
3534 [40, 16255432],
3535 [41, 16255433],
3536 [42, 16255434],
3537 [43, 16255435],
3538 [44, 16255436],
3539 [45, 16255437],
3540 [46, 16255438],
3541 [47, 16255439],
3542 [48, 16255440],
3543 [49, 16255441]
3544 ]
3545 );
3546 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3547 assert_eq!(
3548 pairs,
3549 vec![
3550 [0, 16256084],
3551 [1, 16256085],
3552 [2, 16256086],
3553 [3, 16256087],
3554 [4, 16256088],
3555 [5, 16256089],
3556 [6, 16256090],
3557 [7, 16256091],
3558 [8, 16256092],
3559 [9, 16256093],
3560 [10, 16256094],
3561 [11, 16256095],
3562 [12, 16256096],
3563 [13, 16256097],
3564 [14, 16256098],
3565 [15, 16256099],
3566 [16, 16256100],
3567 [17, 16256101],
3568 [18, 16256102],
3569 [19, 16256103],
3570 [20, 16256104],
3571 [21, 16256105],
3572 [22, 16256106],
3573 [23, 16256107],
3574 [24, 16256108],
3575 [25, 16256109],
3576 [26, 16256110],
3577 [27, 16256111],
3578 [28, 16256112],
3579 [29, 16256113],
3580 [30, 16256114],
3581 [31, 16256115],
3582 [32, 16256116],
3583 [33, 16256117],
3584 [34, 16256118],
3585 [35, 16256119],
3586 [36, 16256120],
3587 [37, 16256121],
3588 [38, 16256122],
3589 [39, 16256123],
3590 [40, 16256124],
3591 [41, 16256125],
3592 [42, 16256126],
3593 [43, 16256127],
3594 [44, 16256128]
3595 ]
3596 );
3597 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3598 assert_eq!(
3599 pairs,
3600 vec![
3601 [3, 16256224],
3602 [4, 16256225],
3603 [5, 16256226],
3604 [6, 16256227],
3605 [7, 16256228],
3606 [8, 16256229],
3607 [9, 16256230],
3608 [10, 16256231],
3609 [11, 16256232],
3610 [12, 16256233],
3611 [13, 16256234],
3612 [14, 16256235],
3613 [15, 16256236],
3614 [16, 16256237],
3615 [17, 16256238],
3616 [18, 16256239],
3617 [19, 16256240],
3618 [20, 16256241],
3619 [21, 16256242],
3620 [22, 16256243],
3621 [23, 16256244],
3622 [24, 16256245],
3623 [25, 16256246],
3624 [26, 16256247],
3625 [27, 16256248],
3626 [28, 16256249],
3627 [29, 16256250],
3628 [30, 16256251],
3629 [31, 16256252],
3630 [32, 16256253],
3631 [33, 16256254],
3632 [34, 16256255],
3633 [35, 16256256],
3634 [36, 16256257],
3635 [37, 16256258],
3636 [38, 16256259],
3637 [39, 16256260],
3638 [40, 16256261],
3639 [41, 16256262],
3640 [42, 16256263],
3641 [43, 16256264],
3642 [44, 16256265],
3643 [45, 16256266],
3644 [46, 16256267],
3645 [47, 16256268],
3646 [48, 16256269],
3647 [49, 16256270],
3648 [50, 16256271]
3649 ]
3650 );
3651 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3652 assert_eq!(
3653 pairs,
3654 vec![
3655 [0, 16325199],
3656 [1, 16325200],
3657 [2, 16325201],
3658 [3, 16325202],
3659 [4, 16325203],
3660 [5, 16325204],
3661 [6, 16325205],
3662 [7, 16325206],
3663 [8, 16325207],
3664 [9, 16325208],
3665 [10, 16325209],
3666 [11, 16325210],
3667 [12, 16325211],
3668 [13, 16325212],
3669 [14, 16325213],
3670 [15, 16325214],
3671 [16, 16325215],
3672 [17, 16325216],
3673 [18, 16325217],
3674 [19, 16325218],
3675 [20, 16325219],
3676 [21, 16325220],
3677 [22, 16325221],
3678 [23, 16325222],
3679 [24, 16325223],
3680 [25, 16325224],
3681 [26, 16325225],
3682 [27, 16325226],
3683 [28, 16325227],
3684 [29, 16325228],
3685 [30, 16325229],
3686 [31, 16325230],
3687 [32, 16325231],
3688 [33, 16325232],
3689 [34, 16325233],
3690 [35, 16325234],
3691 [36, 16325235],
3692 [37, 16325236],
3693 [38, 16325237],
3694 [39, 16325238],
3695 [40, 16325239],
3696 [41, 16325240]
3697 ]
3698 );
3699 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3700 assert_eq!(
3701 pairs,
3702 vec![
3703 [13, 16352865],
3704 [14, 16352866],
3705 [15, 16352867],
3706 [16, 16352868],
3707 [17, 16352869],
3708 [18, 16352870],
3709 [19, 16352871],
3710 [20, 16352872],
3711 [21, 16352873],
3712 [22, 16352874],
3713 [23, 16352875],
3714 [24, 16352876],
3715 [25, 16352877],
3716 [26, 16352878],
3717 [27, 16352879],
3718 [28, 16352880],
3719 [29, 16352881],
3720 [30, 16352882],
3721 [31, 16352883],
3722 [32, 16352884],
3723 [33, 16352885],
3724 [34, 16352886],
3725 [35, 16352887],
3726 [36, 16352888],
3727 [37, 16352889],
3728 [38, 16352890],
3729 [39, 16352891],
3730 [40, 16352892],
3731 [41, 16352893],
3732 [42, 16352894],
3733 [43, 16352895],
3734 [44, 16352896],
3735 [45, 16352897],
3736 [46, 16352898],
3737 [47, 16352899],
3738 [48, 16352900],
3739 [49, 16352901],
3740 [50, 16352902]
3741 ]
3742 );
3743 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3744 assert_eq!(
3745 pairs,
3746 vec![
3747 [0, 16352968],
3748 [1, 16352969],
3749 [2, 16352970],
3750 [3, 16352971],
3751 [4, 16352972],
3752 [5, 16352973],
3753 [6, 16352974],
3754 [7, 16352975],
3755 [8, 16352976],
3756 [9, 16352977],
3757 [10, 16352978],
3758 [11, 16352979],
3759 [12, 16352980],
3760 [13, 16352981],
3761 [14, 16352982],
3762 [15, 16352983],
3763 [16, 16352984],
3764 [17, 16352985],
3765 [18, 16352986],
3766 [19, 16352987],
3767 [20, 16352988],
3768 [21, 16352989],
3769 [22, 16352990],
3770 [23, 16352991],
3771 [24, 16352992],
3772 [25, 16352993],
3773 [26, 16352994],
3774 [27, 16352995],
3775 [28, 16352996],
3776 [29, 16352997],
3777 [30, 16352998],
3778 [31, 16352999],
3779 [32, 16353000],
3780 [33, 16353001],
3781 [34, 16353002],
3782 [35, 16353003],
3783 [36, 16353004],
3784 [37, 16353005],
3785 [38, 16353006],
3786 [39, 16353007],
3787 [40, 16353008],
3788 [41, 16353009],
3789 [42, 16353010],
3790 [43, 16353011]
3791 ]
3792 );
3793 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3794 assert_eq!(
3795 pairs,
3796 vec![
3797 [5, 16414998],
3798 [6, 16414999],
3799 [7, 16415000],
3800 [8, 16415001],
3801 [9, 16415002],
3802 [10, 16415003],
3803 [11, 16415004],
3804 [12, 16415005],
3805 [13, 16415006],
3806 [14, 16415007],
3807 [15, 16415008],
3808 [16, 16415009],
3809 [17, 16415010],
3810 [18, 16415011],
3811 [19, 16415012],
3812 [20, 16415013],
3813 [21, 16415014],
3814 [22, 16415015],
3815 [23, 16415016],
3816 [24, 16415017],
3817 [25, 16415018],
3818 [26, 16415019],
3819 [27, 16415020],
3820 [28, 16415021],
3821 [29, 16415022],
3822 [30, 16415023],
3823 [31, 16415024],
3824 [32, 16415025],
3825 [33, 16415026],
3826 [34, 16415027],
3827 [35, 16415028],
3828 [36, 16415029],
3829 [37, 16415030],
3830 [38, 16415031],
3831 [39, 16415032],
3832 [40, 16415033],
3833 [41, 16415034],
3834 [42, 16415035],
3835 [43, 16415036],
3836 [44, 16415037],
3837 [45, 16415038],
3838 [46, 16415039],
3839 [47, 16415040],
3840 [48, 16415041],
3841 [49, 16415042],
3842 [50, 16415043]
3843 ]
3844 );
3845 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3846 assert_eq!(
3847 pairs,
3848 vec![
3849 [0, 17031591],
3850 [1, 17031592],
3851 [2, 17031593],
3852 [3, 17031594],
3853 [4, 17031595],
3854 [5, 17031596],
3855 [6, 17031597],
3856 [7, 17031598],
3857 [8, 17031599],
3858 [9, 17031600],
3859 [10, 17031601],
3860 [11, 17031602],
3861 [12, 17031603],
3862 [13, 17031604],
3863 [14, 17031605],
3864 [15, 17031606],
3865 [16, 17031607],
3866 [17, 17031608],
3867 [18, 17031609],
3868 [19, 17031610],
3869 [20, 17031611],
3870 [21, 17031612],
3871 [22, 17031613],
3872 [27, 17031614],
3873 [28, 17031615],
3874 [29, 17031616],
3875 [30, 17031617],
3876 [31, 17031618],
3877 [32, 17031619],
3878 [33, 17031620],
3879 [34, 17031621],
3880 [35, 17031622],
3881 [36, 17031623],
3882 [37, 17031624],
3883 [38, 17031625],
3884 [39, 17031626],
3885 [40, 17031627],
3886 [41, 17031628],
3887 [42, 17031629],
3888 [43, 17031630],
3889 [44, 17031631],
3890 [45, 17031632],
3891 [46, 17031633],
3892 [47, 17031634],
3893 [48, 17031635],
3894 [49, 17031636],
3895 [50, 17031637]
3896 ]
3897 );
3898 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3899 assert_eq!(
3900 pairs,
3901 vec![
3902 [0, 17057382],
3903 [1, 17057383],
3904 [2, 17057384],
3905 [3, 17057385],
3906 [4, 17057386],
3907 [5, 17057387],
3908 [6, 17057388],
3909 [7, 17057389],
3910 [8, 17057390],
3911 [9, 17057391],
3912 [10, 17057392],
3913 [11, 17057393],
3914 [12, 17057394],
3915 [13, 17057395],
3916 [14, 17057396],
3917 [15, 17057397],
3918 [16, 17057398],
3919 [17, 17057399],
3920 [19, 17057400],
3921 [20, 17057401],
3922 [21, 17057402],
3923 [22, 17057403],
3924 [23, 17057404],
3925 [24, 17057405],
3926 [25, 17057406],
3927 [26, 17057407],
3928 [27, 17057408],
3929 [28, 17057409],
3930 [29, 17057410],
3931 [30, 17057411],
3932 [31, 17057412],
3933 [32, 17057413],
3934 [33, 17057414],
3935 [34, 17057415],
3936 [35, 17057416],
3937 [36, 17057417],
3938 [37, 17057418],
3939 [38, 17057419],
3940 [39, 17057420],
3941 [40, 17057421],
3942 [41, 17057422],
3943 [42, 17057423],
3944 [43, 17057424],
3945 [44, 17057425],
3946 [45, 17057426],
3947 [46, 17057427],
3948 [47, 17057428],
3949 [48, 17057429],
3950 [49, 17057430],
3951 [50, 17057431]
3952 ]
3953 );
3954 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3955 assert_eq!(
3956 pairs,
3957 vec![
3958 [0, 17092766],
3959 [1, 17092767],
3960 [2, 17092768],
3961 [3, 17092769],
3962 [4, 17092770],
3963 [5, 17092771],
3964 [6, 17092772],
3965 [7, 17092773],
3966 [8, 17092774],
3967 [9, 17092775],
3968 [10, 17092776],
3969 [11, 17092777],
3970 [12, 17092778],
3971 [13, 17092779],
3972 [14, 17092780],
3973 [15, 17092781],
3974 [16, 17092782],
3975 [17, 17094966],
3976 [18, 17094967],
3977 [19, 17094968],
3978 [20, 17094969],
3979 [21, 17094970],
3980 [22, 17094971],
3981 [23, 17094972],
3982 [24, 17094973],
3983 [25, 17094974],
3984 [26, 17094975],
3985 [27, 17094976],
3986 [28, 17094977],
3987 [29, 17094978],
3988 [30, 17094979],
3989 [31, 17094980],
3990 [32, 17094981],
3991 [33, 17094982],
3992 [34, 17094983],
3993 [35, 17094984],
3994 [36, 17094985],
3995 [37, 17094986],
3996 [38, 17094987],
3997 [39, 17094988],
3998 [40, 17094989],
3999 [41, 17094990],
4000 [42, 17094991],
4001 [43, 17094992],
4002 [44, 17094993],
4003 [45, 17094994],
4004 [46, 17094995],
4005 [47, 17094996],
4006 [48, 17094997],
4007 [49, 17094998],
4008 [50, 17094999]
4009 ]
4010 );
4011 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4012 assert_eq!(
4013 pairs,
4014 vec![
4015 [0, 17092782],
4016 [1, 17094966],
4017 [2, 17094967],
4018 [3, 17094968],
4019 [4, 17094969],
4020 [5, 17094970],
4021 [6, 17094971],
4022 [7, 17094972],
4023 [8, 17094973],
4024 [9, 17094974],
4025 [10, 17094975],
4026 [11, 17094976],
4027 [12, 17094977],
4028 [13, 17094978],
4029 [14, 17094979],
4030 [15, 17094980],
4031 [16, 17094981],
4032 [17, 17094982],
4033 [18, 17094983],
4034 [19, 17094984],
4035 [20, 17094985],
4036 [21, 17094986],
4037 [22, 17094987],
4038 [23, 17094988],
4039 [24, 17094989],
4040 [25, 17094990],
4041 [26, 17094991],
4042 [27, 17094992],
4043 [28, 17094993],
4044 [29, 17094994],
4045 [30, 17094995],
4046 [31, 17094996],
4047 [32, 17094997],
4048 [33, 17094998],
4049 [34, 17094999],
4050 [35, 17095000],
4051 [36, 17095001],
4052 [37, 17095002],
4053 [38, 17095003],
4054 [39, 17095004],
4055 [40, 17095005],
4056 [41, 17095006],
4057 [42, 17095007],
4058 [43, 17095008],
4059 [44, 17095009],
4060 [45, 17095010],
4061 [46, 17095011],
4062 [47, 17095012],
4063 [48, 17095013],
4064 [49, 17095014],
4065 [50, 17095015]
4066 ]
4067 );
4068 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4069 assert_eq!(
4070 pairs,
4071 vec![
4072 [0, 17092782],
4073 [1, 17094966],
4074 [2, 17094967],
4075 [3, 17094968],
4076 [4, 17094969],
4077 [5, 17094970],
4078 [6, 17094971],
4079 [7, 17094972],
4080 [8, 17094973],
4081 [9, 17094974],
4082 [10, 17094975],
4083 [11, 17094976],
4084 [12, 17094977],
4085 [13, 17094978],
4086 [14, 17094979],
4087 [15, 17094980],
4088 [16, 17094981],
4089 [17, 17094982],
4090 [18, 17094983],
4091 [19, 17094984],
4092 [20, 17094985],
4093 [21, 17094986],
4094 [22, 17094987],
4095 [23, 17094988],
4096 [24, 17094989],
4097 [25, 17094990],
4098 [26, 17094991],
4099 [27, 17094992],
4100 [28, 17094993],
4101 [29, 17094994],
4102 [30, 17094995],
4103 [31, 17094996],
4104 [32, 17094997],
4105 [33, 17094998],
4106 [34, 17094999],
4107 [35, 17095000],
4108 [36, 17095001],
4109 [37, 17095002],
4110 [38, 17095003],
4111 [39, 17095004],
4112 [40, 17095005],
4113 [41, 17095006],
4114 [42, 17095007],
4115 [43, 17095008],
4116 [44, 17095009],
4117 [45, 17095010],
4118 [46, 17095011],
4119 [47, 17095012],
4120 [48, 17095013],
4121 [49, 17095014],
4122 [50, 17095015]
4123 ]
4124 );
4125 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4126 assert_eq!(
4127 pairs,
4128 vec![
4129 [9, 17137287],
4130 [10, 17137288],
4131 [11, 17137289],
4132 [12, 17137290],
4133 [13, 17137291],
4134 [14, 17137292],
4135 [15, 17137293],
4136 [16, 17137294],
4137 [17, 17137295],
4138 [18, 17137296],
4139 [19, 17137297],
4140 [20, 17137298],
4141 [21, 17137299],
4142 [22, 17137300],
4143 [23, 17137301],
4144 [24, 17137302],
4145 [25, 17137303],
4146 [26, 17137304],
4147 [27, 17137305],
4148 [28, 17137306],
4149 [29, 17137307],
4150 [30, 17137308],
4151 [31, 17137309],
4152 [32, 17137310],
4153 [33, 17137311],
4154 [34, 17137312],
4155 [35, 17137313],
4156 [36, 17137314],
4157 [37, 17137315],
4158 [38, 17137316],
4159 [39, 17137317],
4160 [40, 17137318],
4161 [41, 17137319]
4162 ]
4163 );
4164 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4165 assert_eq!(
4166 pairs,
4167 vec![
4168 [2, 17306238],
4169 [3, 17306239],
4170 [4, 17306240],
4171 [5, 17306241],
4172 [6, 17306242],
4173 [7, 17306243],
4174 [8, 17306244],
4175 [9, 17306245],
4176 [10, 17306246],
4177 [11, 17306247],
4178 [12, 17306248],
4179 [13, 17306249],
4180 [14, 17306250],
4181 [15, 17306251],
4182 [16, 17306252],
4183 [17, 17306253],
4184 [18, 17306254],
4185 [19, 17306255],
4186 [20, 17306256],
4187 [21, 17306257],
4188 [22, 17306258],
4189 [23, 17306259],
4190 [24, 17306260],
4191 [25, 17306261],
4192 [26, 17306262],
4193 [27, 17306263],
4194 [28, 17306264],
4195 [29, 17306265],
4196 [30, 17306266],
4197 [31, 17306267],
4198 [32, 17306268],
4199 [33, 17306269],
4200 [34, 17306270],
4201 [35, 17306271],
4202 [36, 17306272],
4203 [37, 17306273],
4204 [38, 17306274],
4205 [39, 17306275],
4206 [40, 17306276],
4207 [41, 17306277],
4208 [42, 17306278],
4209 [43, 17306279],
4210 [44, 17306280],
4211 [45, 17306281],
4212 [46, 17306282],
4213 [47, 17306283],
4214 [48, 17306284],
4215 [49, 17306285]
4216 ]
4217 );
4218 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4219 assert_eq!(
4220 pairs,
4221 vec![
4222 [4, 17561868],
4223 [5, 17561869],
4224 [6, 17561870],
4225 [7, 17561871],
4226 [8, 17561872],
4227 [9, 17561873],
4228 [10, 17561874],
4229 [11, 17561875],
4230 [12, 17561876],
4231 [13, 17561877],
4232 [14, 17561878],
4233 [15, 17561879],
4234 [16, 17561880],
4235 [17, 17561881],
4236 [18, 17561882],
4237 [19, 17561883],
4238 [20, 17561884],
4239 [21, 17561885],
4240 [22, 17561886],
4241 [23, 17561887],
4242 [24, 17561888],
4243 [25, 17561889],
4244 [26, 17561890],
4245 [27, 17561891],
4246 [28, 17561892],
4247 [29, 17561893],
4248 [30, 17561894],
4249 [31, 17561895],
4250 [32, 17561896],
4251 [33, 17561897],
4252 [34, 17561898],
4253 [35, 17561899],
4254 [36, 17561900],
4255 [37, 17561901],
4256 [38, 17561902],
4257 [39, 17561903],
4258 [40, 17561904],
4259 [41, 17561905],
4260 [42, 17561906],
4261 [43, 17561907],
4262 [44, 17561908],
4263 [45, 17561909],
4264 [46, 17561910],
4265 [47, 17561911],
4266 [48, 17561912]
4267 ]
4268 );
4269 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4270 assert_eq!(
4271 pairs,
4272 vec![
4273 [0, 17566078],
4274 [1, 17566079],
4275 [2, 17566080],
4276 [3, 17566081],
4277 [4, 17566082],
4278 [5, 17566083],
4279 [6, 17566084],
4280 [7, 17566085],
4281 [8, 17566086],
4282 [9, 17566087],
4283 [10, 17566088],
4284 [11, 17566089],
4285 [12, 17566090],
4286 [13, 17566091],
4287 [14, 17566092],
4288 [15, 17566093],
4289 [16, 17566094],
4290 [17, 17566095],
4291 [18, 17566096],
4292 [19, 17566097],
4293 [20, 17566098],
4294 [21, 17566099],
4295 [22, 17566100],
4296 [23, 17566101],
4297 [24, 17566102],
4298 [25, 17566103],
4299 [26, 17566104],
4300 [27, 17566105],
4301 [28, 17566106],
4302 [29, 17566107],
4303 [30, 17566108],
4304 [31, 17566109],
4305 [32, 17566110],
4306 [33, 17566111],
4307 [34, 17566112],
4308 [35, 17566113],
4309 [36, 17566114],
4310 [37, 17566115],
4311 [38, 17566116],
4312 [39, 17566117],
4313 [40, 17566118],
4314 [41, 17577951],
4315 [42, 17577952],
4316 [43, 17577953],
4317 [44, 17577954],
4318 [45, 17577955],
4319 [46, 17577956],
4320 [47, 17577957],
4321 [48, 17577958],
4322 [49, 17577959],
4323 [50, 17577960]
4324 ]
4325 );
4326 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4327 assert_eq!(
4328 pairs,
4329 vec![
4330 [0, 17566108],
4331 [1, 17566109],
4332 [2, 17566110],
4333 [3, 17566111],
4334 [4, 17566112],
4335 [5, 17566113],
4336 [6, 17566114],
4337 [7, 17566115],
4338 [8, 17566116],
4339 [9, 17566117],
4340 [10, 17566118],
4341 [11, 17577951],
4342 [12, 17577952],
4343 [13, 17577953],
4344 [14, 17577954],
4345 [15, 17577955],
4346 [16, 17577956],
4347 [17, 17577957],
4348 [18, 17577958],
4349 [19, 17577959],
4350 [20, 17577960],
4351 [21, 17577961],
4352 [22, 17577962],
4353 [23, 17577963],
4354 [24, 17577964],
4355 [25, 17577965],
4356 [26, 17577966],
4357 [27, 17577967],
4358 [28, 17577968],
4359 [29, 17577969],
4360 [30, 17577970],
4361 [31, 17577971],
4362 [32, 17577972],
4363 [33, 17577973],
4364 [34, 17577974],
4365 [35, 17577975],
4366 [36, 17578686],
4367 [37, 17578687],
4368 [38, 17578688],
4369 [39, 17578689],
4370 [40, 17578690],
4371 [41, 17578691],
4372 [42, 17578692],
4373 [43, 17578693],
4374 [44, 17578694],
4375 [45, 17578695],
4376 [46, 17578696],
4377 [47, 17578697],
4378 [48, 17578698],
4379 [49, 17578699],
4380 [50, 17578700]
4381 ]
4382 );
4383 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4384 assert_eq!(
4385 pairs,
4386 vec![
4387 [0, 17566111],
4388 [1, 17566112],
4389 [2, 17566113],
4390 [3, 17566114],
4391 [4, 17566115],
4392 [5, 17566116],
4393 [6, 17566117],
4394 [7, 17566118],
4395 [8, 17577951],
4396 [9, 17577952],
4397 [10, 17577953],
4398 [11, 17577954],
4399 [12, 17577955],
4400 [13, 17577956],
4401 [14, 17577957],
4402 [15, 17577958],
4403 [16, 17577959],
4404 [17, 17577960],
4405 [18, 17577961],
4406 [19, 17577962],
4407 [20, 17577963],
4408 [21, 17577964],
4409 [22, 17577965],
4410 [23, 17577966],
4411 [24, 17577967],
4412 [25, 17577968],
4413 [26, 17577969],
4414 [27, 17577970],
4415 [28, 17577971],
4416 [29, 17577972],
4417 [30, 17577973],
4418 [31, 17577974],
4419 [32, 17577975],
4420 [33, 17578686],
4421 [34, 17578687],
4422 [35, 17578688],
4423 [36, 17578689],
4424 [37, 17578690],
4425 [38, 17578691],
4426 [39, 17578692],
4427 [40, 17578693],
4428 [41, 17578694],
4429 [42, 17578695],
4430 [43, 17578696],
4431 [44, 17578697],
4432 [45, 17578698],
4433 [46, 17578699],
4434 [47, 17578700],
4435 [48, 17578701],
4436 [49, 17578702],
4437 [50, 17578703]
4438 ]
4439 );
4440 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4441 assert_eq!(
4442 pairs,
4443 vec![
4444 [0, 17566111],
4445 [1, 17566112],
4446 [2, 17566113],
4447 [3, 17566114],
4448 [4, 17566115],
4449 [5, 17566116],
4450 [6, 17566117],
4451 [7, 17566118],
4452 [8, 17577951],
4453 [9, 17577952],
4454 [10, 17577953],
4455 [11, 17577954],
4456 [12, 17577955],
4457 [13, 17577956],
4458 [14, 17577957],
4459 [15, 17577958],
4460 [16, 17577959],
4461 [17, 17577960],
4462 [18, 17577961],
4463 [19, 17577962],
4464 [20, 17577963],
4465 [21, 17577964],
4466 [22, 17577965],
4467 [23, 17577966],
4468 [24, 17577967],
4469 [25, 17577968],
4470 [26, 17577969],
4471 [27, 17577970],
4472 [28, 17577971],
4473 [29, 17577972],
4474 [30, 17577973],
4475 [31, 17577974],
4476 [32, 17577975],
4477 [33, 17578686],
4478 [34, 17578687],
4479 [35, 17578688],
4480 [36, 17578689],
4481 [37, 17578690],
4482 [38, 17578691],
4483 [39, 17578692],
4484 [40, 17578693],
4485 [41, 17578694],
4486 [42, 17578695],
4487 [43, 17578696],
4488 [44, 17578697],
4489 [45, 17578698],
4490 [46, 17578699],
4491 [47, 17578700],
4492 [48, 17578701],
4493 [49, 17578702],
4494 [50, 17578703]
4495 ]
4496 );
4497 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4498 assert_eq!(
4499 pairs,
4500 vec![
4501 [0, 17566111],
4502 [1, 17566112],
4503 [2, 17566113],
4504 [3, 17566114],
4505 [4, 17566115],
4506 [5, 17566116],
4507 [6, 17566117],
4508 [7, 17566118],
4509 [8, 17577951],
4510 [9, 17577952],
4511 [10, 17577953],
4512 [11, 17577954],
4513 [12, 17577955],
4514 [13, 17577956],
4515 [14, 17577957],
4516 [15, 17577958],
4517 [16, 17577959],
4518 [17, 17577960],
4519 [18, 17577961],
4520 [19, 17577962],
4521 [20, 17577963],
4522 [21, 17577964],
4523 [22, 17577965],
4524 [23, 17577966],
4525 [24, 17577967],
4526 [25, 17577968],
4527 [26, 17577969],
4528 [27, 17577970],
4529 [28, 17577971],
4530 [29, 17577972],
4531 [30, 17577973],
4532 [31, 17577974],
4533 [32, 17577975],
4534 [33, 17578686],
4535 [34, 17578687],
4536 [35, 17578688],
4537 [36, 17578689],
4538 [37, 17578690],
4539 [38, 17578691],
4540 [39, 17578692],
4541 [40, 17578693],
4542 [41, 17578694],
4543 [42, 17578695],
4544 [43, 17578696],
4545 [44, 17578697],
4546 [45, 17578698],
4547 [46, 17578699],
4548 [47, 17578700],
4549 [48, 17578701],
4550 [49, 17578702],
4551 [50, 17578703]
4552 ]
4553 );
4554 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4555 assert_eq!(
4556 pairs,
4557 vec![
4558 [0, 17566111],
4559 [1, 17566112],
4560 [2, 17566113],
4561 [3, 17566114],
4562 [4, 17566115],
4563 [5, 17566116],
4564 [6, 17566117],
4565 [7, 17566118],
4566 [8, 17577951],
4567 [9, 17577952],
4568 [10, 17577953],
4569 [11, 17577954],
4570 [12, 17577955],
4571 [13, 17577956],
4572 [14, 17577957],
4573 [15, 17577958],
4574 [16, 17577959],
4575 [17, 17577960],
4576 [18, 17577961],
4577 [19, 17577962],
4578 [20, 17577963],
4579 [21, 17577964],
4580 [22, 17577965],
4581 [23, 17577966],
4582 [24, 17577967],
4583 [25, 17577968],
4584 [26, 17577969],
4585 [27, 17577970],
4586 [28, 17577971],
4587 [29, 17577972],
4588 [30, 17577973],
4589 [31, 17577974],
4590 [32, 17577975],
4591 [33, 17578686],
4592 [34, 17578687],
4593 [35, 17578688],
4594 [36, 17578689],
4595 [37, 17578690],
4596 [38, 17578691],
4597 [39, 17578692],
4598 [40, 17578693],
4599 [41, 17578694],
4600 [42, 17578695],
4601 [43, 17578696],
4602 [44, 17578697],
4603 [45, 17578698],
4604 [46, 17578699],
4605 [47, 17578700],
4606 [48, 17578701],
4607 [49, 17578702],
4608 [50, 17578703]
4609 ]
4610 );
4611 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4612 assert_eq!(
4613 pairs,
4614 vec![
4615 [0, 17566112],
4616 [1, 17566113],
4617 [2, 17566114],
4618 [3, 17566115],
4619 [4, 17566116],
4620 [5, 17566117],
4621 [6, 17566118],
4622 [7, 17577951],
4623 [8, 17577952],
4624 [9, 17577953],
4625 [10, 17577954],
4626 [11, 17577955],
4627 [12, 17577956],
4628 [13, 17577957],
4629 [14, 17577958],
4630 [15, 17577959],
4631 [16, 17577960],
4632 [17, 17577961],
4633 [18, 17577962],
4634 [19, 17577963],
4635 [20, 17577964],
4636 [21, 17577965],
4637 [22, 17577966],
4638 [23, 17577967],
4639 [24, 17577968],
4640 [25, 17577969],
4641 [26, 17577970],
4642 [27, 17577971],
4643 [28, 17577972],
4644 [29, 17577973],
4645 [30, 17577974],
4646 [31, 17577975],
4647 [32, 17578686],
4648 [33, 17578687],
4649 [34, 17578688],
4650 [35, 17578689],
4651 [36, 17578690],
4652 [37, 17578691],
4653 [38, 17578692],
4654 [39, 17578693],
4655 [40, 17578694],
4656 [41, 17578695],
4657 [42, 17578696],
4658 [43, 17578697],
4659 [44, 17578698],
4660 [45, 17578699],
4661 [46, 17578700],
4662 [47, 17578701],
4663 [48, 17578702],
4664 [49, 17578703],
4665 [50, 17578704]
4666 ]
4667 );
4668 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4669 assert_eq!(
4670 pairs,
4671 vec![
4672 [0, 17566113],
4673 [1, 17566114],
4674 [2, 17566115],
4675 [3, 17566116],
4676 [4, 17566117],
4677 [5, 17566118],
4678 [6, 17577951],
4679 [7, 17577952],
4680 [8, 17577953],
4681 [9, 17577954],
4682 [10, 17577955],
4683 [11, 17577956],
4684 [12, 17577957],
4685 [13, 17577958],
4686 [14, 17577959],
4687 [15, 17577960],
4688 [16, 17577961],
4689 [17, 17577962],
4690 [18, 17577963],
4691 [19, 17577964],
4692 [20, 17577965],
4693 [21, 17577966],
4694 [22, 17577967],
4695 [23, 17577968],
4696 [24, 17577969],
4697 [25, 17577970],
4698 [26, 17577971],
4699 [27, 17577972],
4700 [28, 17577973],
4701 [29, 17577974],
4702 [30, 17577975],
4703 [31, 17578686],
4704 [32, 17578687],
4705 [33, 17578688],
4706 [34, 17578689],
4707 [35, 17578690],
4708 [36, 17578691],
4709 [37, 17578692],
4710 [38, 17578693],
4711 [39, 17578694],
4712 [40, 17578695],
4713 [41, 17578696],
4714 [42, 17578697],
4715 [43, 17578698],
4716 [44, 17578699],
4717 [45, 17578700],
4718 [46, 17578701],
4719 [47, 17578702],
4720 [48, 17578703],
4721 [49, 17578704],
4722 [50, 17578705]
4723 ]
4724 );
4725 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4726 assert_eq!(
4727 pairs,
4728 vec![
4729 [0, 17566113],
4730 [1, 17566114],
4731 [2, 17566115],
4732 [3, 17566116],
4733 [4, 17566117],
4734 [5, 17566118],
4735 [6, 17577951],
4736 [7, 17577952],
4737 [8, 17577953],
4738 [9, 17577954],
4739 [10, 17577955],
4740 [11, 17577956],
4741 [12, 17577957],
4742 [13, 17577958],
4743 [14, 17577959],
4744 [15, 17577960],
4745 [16, 17577961],
4746 [17, 17577962],
4747 [18, 17577963],
4748 [19, 17577964],
4749 [20, 17577965],
4750 [21, 17577966],
4751 [22, 17577967],
4752 [23, 17577968],
4753 [24, 17577969],
4754 [25, 17577970],
4755 [26, 17577971],
4756 [27, 17577972],
4757 [28, 17577973],
4758 [29, 17577974],
4759 [30, 17577975],
4760 [31, 17578686],
4761 [32, 17578687],
4762 [33, 17578688],
4763 [34, 17578689],
4764 [35, 17578690],
4765 [36, 17578691],
4766 [37, 17578692],
4767 [38, 17578693],
4768 [39, 17578694],
4769 [40, 17578695],
4770 [41, 17578696],
4771 [42, 17578697],
4772 [43, 17578698],
4773 [44, 17578699],
4774 [45, 17578700],
4775 [46, 17578701],
4776 [47, 17578702],
4777 [48, 17578703],
4778 [49, 17578704],
4779 [50, 17578705]
4780 ]
4781 );
4782 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4783 assert_eq!(
4784 pairs,
4785 vec![
4786 [1, 17579733],
4787 [2, 17579734],
4788 [3, 17579735],
4789 [4, 17579736],
4790 [5, 17579737],
4791 [6, 17579738],
4792 [7, 17579739],
4793 [8, 17579740],
4794 [9, 17579741],
4795 [10, 17579742],
4796 [11, 17579743],
4797 [12, 17579744],
4798 [13, 17579745],
4799 [14, 17579746],
4800 [15, 17579747],
4801 [16, 17579748],
4802 [17, 17579749],
4803 [18, 17579750],
4804 [19, 17579751],
4805 [20, 17579752],
4806 [21, 17579753],
4807 [22, 17579754],
4808 [23, 17579755],
4809 [24, 17579756],
4810 [25, 17579757],
4811 [26, 17579758],
4812 [27, 17579759],
4813 [28, 17579760],
4814 [29, 17579761],
4815 [30, 17579762],
4816 [31, 17579763],
4817 [32, 17579764],
4818 [33, 17579765],
4819 [34, 17579766],
4820 [35, 17579767],
4821 [36, 17579768],
4822 [37, 17579769],
4823 [38, 17579770],
4824 [39, 17579771],
4825 [40, 17579772],
4826 [41, 17579773],
4827 [42, 17579774],
4828 [43, 17579775],
4829 [44, 17579776],
4830 [45, 17581244],
4831 [46, 17581245],
4832 [47, 17581246],
4833 [48, 17581247],
4834 [49, 17581248],
4835 [50, 17581249]
4836 ]
4837 );
4838 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4839 assert_eq!(
4840 pairs,
4841 vec![
4842 [0, 17581369],
4843 [1, 17581370],
4844 [2, 17582885],
4845 [3, 17582886],
4846 [4, 17582887],
4847 [5, 17582888],
4848 [6, 17582889],
4849 [7, 17582890],
4850 [8, 17582891],
4851 [9, 17582892],
4852 [10, 17582893],
4853 [11, 17582894],
4854 [12, 17582895],
4855 [13, 17582896],
4856 [14, 17582897],
4857 [15, 17582898],
4858 [16, 17582899],
4859 [17, 17582900],
4860 [18, 17582901],
4861 [19, 17582902],
4862 [20, 17582903],
4863 [21, 17582904],
4864 [22, 17582905],
4865 [23, 17582906],
4866 [24, 17582907],
4867 [25, 17582908],
4868 [26, 17582909],
4869 [27, 17582910],
4870 [28, 17582911],
4871 [29, 17582912],
4872 [30, 17582913],
4873 [31, 17582914],
4874 [32, 17582915],
4875 [33, 17582916],
4876 [34, 17582917],
4877 [35, 17582918],
4878 [36, 17582919],
4879 [37, 17582920],
4880 [38, 17582921],
4881 [39, 17582922],
4882 [40, 17582923],
4883 [41, 17582924],
4884 [42, 17582925],
4885 [43, 17582926],
4886 [44, 17582927],
4887 [45, 17582928],
4888 [46, 17582929],
4889 [47, 17582930],
4890 [48, 17582931],
4891 [49, 17582932],
4892 [50, 17583028]
4893 ]
4894 );
4895 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4896 assert_eq!(
4897 pairs,
4898 vec![
4899 [0, 17581370],
4900 [1, 17582885],
4901 [2, 17582886],
4902 [3, 17582887],
4903 [4, 17582888],
4904 [5, 17582889],
4905 [6, 17582890],
4906 [7, 17582891],
4907 [8, 17582892],
4908 [9, 17582893],
4909 [10, 17582894],
4910 [11, 17582895],
4911 [12, 17582896],
4912 [13, 17582897],
4913 [14, 17582898],
4914 [15, 17582899],
4915 [16, 17582900],
4916 [17, 17582901],
4917 [18, 17582902],
4918 [19, 17582903],
4919 [20, 17582904],
4920 [21, 17582905],
4921 [22, 17582906],
4922 [23, 17582907],
4923 [24, 17582908],
4924 [25, 17582909],
4925 [26, 17582910],
4926 [27, 17582911],
4927 [28, 17582912],
4928 [29, 17582913],
4929 [30, 17582914],
4930 [31, 17582915],
4931 [32, 17582916],
4932 [33, 17582917],
4933 [34, 17582918],
4934 [35, 17582919],
4935 [36, 17582920],
4936 [37, 17582921],
4937 [38, 17582922],
4938 [39, 17582923],
4939 [40, 17582924],
4940 [41, 17582925],
4941 [42, 17582926],
4942 [43, 17582927],
4943 [44, 17582928],
4944 [45, 17582929],
4945 [46, 17582930],
4946 [47, 17582931],
4947 [48, 17582932],
4948 [49, 17583028],
4949 [50, 17583029]
4950 ]
4951 );
4952 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4953 assert_eq!(
4954 pairs,
4955 vec![
4956 [0, 17581370],
4957 [1, 17582885],
4958 [2, 17582886],
4959 [3, 17582887],
4960 [4, 17582888],
4961 [5, 17582889],
4962 [6, 17582890],
4963 [7, 17582891],
4964 [8, 17582892],
4965 [9, 17582893],
4966 [10, 17582894],
4967 [11, 17582895],
4968 [12, 17582896],
4969 [13, 17582897],
4970 [14, 17582898],
4971 [15, 17582899],
4972 [16, 17582900],
4973 [17, 17582901],
4974 [18, 17582902],
4975 [19, 17582903],
4976 [20, 17582904],
4977 [21, 17582905],
4978 [22, 17582906],
4979 [23, 17582907],
4980 [24, 17582908],
4981 [25, 17582909],
4982 [26, 17582910],
4983 [27, 17582911],
4984 [28, 17582912],
4985 [29, 17582913],
4986 [30, 17582914],
4987 [31, 17582915],
4988 [32, 17582916],
4989 [33, 17582917],
4990 [34, 17582918],
4991 [35, 17582919],
4992 [36, 17582920],
4993 [37, 17582921],
4994 [38, 17582922],
4995 [39, 17582923],
4996 [40, 17582924],
4997 [41, 17582925],
4998 [42, 17582926],
4999 [43, 17582927],
5000 [44, 17582928],
5001 [45, 17582929],
5002 [46, 17582930],
5003 [47, 17582931],
5004 [48, 17582932],
5005 [49, 17583028],
5006 [50, 17583029]
5007 ]
5008 );
5009 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5010 assert_eq!(
5011 pairs,
5012 vec![
5013 [1, 17582911],
5014 [2, 17582912],
5015 [3, 17582913],
5016 [4, 17582914],
5017 [5, 17582915],
5018 [6, 17582916],
5019 [7, 17582917],
5020 [8, 17582918],
5021 [9, 17582919],
5022 [10, 17582920],
5023 [11, 17582921],
5024 [12, 17582922],
5025 [13, 17582923],
5026 [14, 17582924],
5027 [15, 17582925],
5028 [16, 17582926],
5029 [17, 17582927],
5030 [18, 17582928],
5031 [19, 17582929],
5032 [20, 17582930],
5033 [21, 17582931],
5034 [22, 17582932],
5035 [23, 17583028],
5036 [24, 17583029],
5037 [25, 17583030],
5038 [26, 17583031],
5039 [27, 17583032],
5040 [28, 17583033],
5041 [29, 17583034],
5042 [30, 17583035],
5043 [31, 17583036],
5044 [32, 17583037],
5045 [33, 17583038],
5046 [34, 17583039],
5047 [35, 17583040],
5048 [36, 17583041],
5049 [37, 17583042],
5050 [38, 17583043],
5051 [39, 17583044],
5052 [40, 17583045],
5053 [41, 17583046],
5054 [42, 17583047],
5055 [43, 17583048],
5056 [44, 17583049],
5057 [45, 17583050],
5058 [46, 17583051],
5059 [47, 17583052],
5060 [48, 17583053],
5061 [49, 17583054],
5062 [50, 17583055]
5063 ]
5064 );
5065 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5066 assert_eq!(
5067 pairs,
5068 vec![
5069 [0, 17588621],
5070 [1, 17588622],
5071 [2, 17588623],
5072 [3, 17588624],
5073 [4, 17588625],
5074 [5, 17588626],
5075 [6, 17588627],
5076 [7, 17588628],
5077 [8, 17588629],
5078 [9, 17588630],
5079 [10, 17588631],
5080 [11, 17588632],
5081 [12, 17588633],
5082 [13, 17588634],
5083 [14, 17588635],
5084 [15, 17588636],
5085 [16, 17588637],
5086 [17, 17588638],
5087 [18, 17588639],
5088 [19, 17588640],
5089 [20, 17588641],
5090 [21, 17588642],
5091 [22, 17588643],
5092 [23, 17588644],
5093 [24, 17588645],
5094 [25, 17588646],
5095 [26, 17588647],
5096 [27, 17588648],
5097 [28, 17588649],
5098 [29, 17588650],
5099 [30, 17588651],
5100 [31, 17588652],
5101 [32, 17588653],
5102 [33, 17588654],
5103 [34, 17588655],
5104 [35, 17588656],
5105 [36, 17588657],
5106 [37, 17589196],
5107 [38, 17589197],
5108 [39, 17589198],
5109 [40, 17589199],
5110 [41, 17589200],
5111 [42, 17589201],
5112 [43, 17589202],
5113 [44, 17589203],
5114 [45, 17589204],
5115 [46, 17589205],
5116 [47, 17589206],
5117 [48, 17589207],
5118 [49, 17589208]
5119 ]
5120 );
5121 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5122 assert_eq!(
5123 pairs,
5124 vec![
5125 [0, 17588621],
5126 [1, 17588622],
5127 [2, 17588623],
5128 [3, 17588624],
5129 [4, 17588625],
5130 [5, 17588626],
5131 [6, 17588627],
5132 [7, 17588628],
5133 [8, 17588629],
5134 [9, 17588630],
5135 [10, 17588631],
5136 [11, 17588632],
5137 [12, 17588633],
5138 [13, 17588634],
5139 [14, 17588635],
5140 [15, 17588636],
5141 [16, 17588637],
5142 [17, 17588638],
5143 [18, 17588639],
5144 [19, 17588640],
5145 [20, 17588641],
5146 [21, 17588642],
5147 [22, 17588643],
5148 [23, 17588644],
5149 [24, 17588645],
5150 [25, 17588646],
5151 [26, 17588647],
5152 [27, 17588648],
5153 [28, 17588649],
5154 [29, 17588650],
5155 [30, 17588651],
5156 [31, 17588652],
5157 [32, 17588653],
5158 [33, 17588654],
5159 [34, 17588655],
5160 [35, 17588656],
5161 [36, 17588657],
5162 [37, 17589196],
5163 [38, 17589197],
5164 [39, 17589198],
5165 [40, 17589199],
5166 [41, 17589200],
5167 [42, 17589201],
5168 [43, 17589202],
5169 [44, 17589203],
5170 [45, 17589204],
5171 [46, 17589205],
5172 [47, 17589206],
5173 [48, 17589207],
5174 [49, 17589208]
5175 ]
5176 );
5177 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5178 assert_eq!(
5179 pairs,
5180 vec![
5181 [0, 17588621],
5182 [1, 17588622],
5183 [2, 17588623],
5184 [3, 17588624],
5185 [4, 17588625],
5186 [5, 17588626],
5187 [6, 17588627],
5188 [7, 17588628],
5189 [8, 17588629],
5190 [9, 17588630],
5191 [10, 17588631],
5192 [11, 17588632],
5193 [12, 17588633],
5194 [13, 17588634],
5195 [14, 17588635],
5196 [15, 17588636],
5197 [16, 17588637],
5198 [17, 17588638],
5199 [18, 17588639],
5200 [19, 17588640],
5201 [20, 17588641],
5202 [21, 17588642],
5203 [22, 17588643],
5204 [23, 17588644],
5205 [24, 17588645],
5206 [25, 17588646],
5207 [26, 17588647],
5208 [27, 17588648],
5209 [28, 17588649],
5210 [29, 17588650],
5211 [30, 17588651],
5212 [31, 17588652],
5213 [32, 17588653],
5214 [33, 17588654],
5215 [34, 17588655],
5216 [35, 17588656],
5217 [36, 17588657],
5218 [37, 17589196],
5219 [38, 17589197],
5220 [39, 17589198],
5221 [40, 17589199],
5222 [41, 17589200],
5223 [42, 17589201],
5224 [43, 17589202],
5225 [44, 17589203],
5226 [45, 17589204],
5227 [46, 17589205],
5228 [47, 17589206],
5229 [48, 17589207],
5230 [49, 17589208]
5231 ]
5232 );
5233 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5234 assert_eq!(
5235 pairs,
5236 vec![
5237 [1, 17591770],
5238 [2, 17591771],
5239 [3, 17591772],
5240 [4, 17591773],
5241 [5, 17591774],
5242 [6, 17591775],
5243 [7, 17591776],
5244 [8, 17591777],
5245 [9, 17591778],
5246 [10, 17591779],
5247 [11, 17591780],
5248 [12, 17591781],
5249 [13, 17591782],
5250 [14, 17591783],
5251 [15, 17591784],
5252 [16, 17591785],
5253 [17, 17591786],
5254 [18, 17591787],
5255 [19, 17591788],
5256 [20, 17591789],
5257 [21, 17591790],
5258 [22, 17591791],
5259 [23, 17591792],
5260 [24, 17591793],
5261 [25, 17591794],
5262 [26, 17591796],
5263 [27, 17591797],
5264 [28, 17591798],
5265 [29, 17591799],
5266 [30, 17591800],
5267 [31, 17591801],
5268 [32, 17591802],
5269 [33, 17591803],
5270 [34, 17591804],
5271 [35, 17591805],
5272 [36, 17591806],
5273 [37, 17591807],
5274 [38, 17591808],
5275 [39, 17591809],
5276 [40, 17591810],
5277 [41, 17591811],
5278 [42, 17591812],
5279 [43, 17591813],
5280 [44, 17591814],
5281 [45, 17591815],
5282 [46, 17591816],
5283 [47, 17591817],
5284 [48, 17591818],
5285 [49, 17591819],
5286 [50, 17591820]
5287 ]
5288 );
5289 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5290 assert_eq!(
5291 pairs,
5292 vec![
5293 [0, 17593855],
5294 [1, 17593856],
5295 [2, 17593857],
5296 [3, 17593858],
5297 [4, 17593859],
5298 [5, 17593860],
5299 [6, 17593861],
5300 [7, 17593862],
5301 [8, 17593863],
5302 [9, 17593864],
5303 [10, 17593865],
5304 [11, 17593866],
5305 [12, 17593867],
5306 [13, 17593868],
5307 [14, 17593869],
5308 [15, 17593870],
5309 [16, 17593871],
5310 [17, 17593872],
5311 [18, 17593873],
5312 [19, 17593874],
5313 [20, 17593875],
5314 [21, 17593876],
5315 [22, 17593877],
5316 [23, 17593878],
5317 [24, 17593880],
5318 [25, 17593881],
5319 [26, 17593882],
5320 [27, 17593883],
5321 [28, 17593884],
5322 [29, 17593885],
5323 [30, 17593886],
5324 [31, 17593887],
5325 [32, 17593888],
5326 [33, 17593889],
5327 [34, 17593890],
5328 [35, 17593891],
5329 [36, 17593892],
5330 [37, 17593893],
5331 [38, 17593894],
5332 [39, 17593895],
5333 [40, 17593896],
5334 [41, 17593897],
5335 [42, 17593898],
5336 [43, 17593899],
5337 [44, 17593900],
5338 [45, 17593901],
5339 [46, 17593902],
5340 [47, 17593903]
5341 ]
5342 );
5343 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5344 assert_eq!(
5345 pairs,
5346 vec![
5347 [0, 17593863],
5348 [1, 17593864],
5349 [2, 17593865],
5350 [3, 17593866],
5351 [4, 17593867],
5352 [5, 17593868],
5353 [6, 17593869],
5354 [7, 17593870],
5355 [8, 17593871],
5356 [9, 17593872],
5357 [10, 17593873],
5358 [11, 17593874],
5359 [12, 17593875],
5360 [13, 17593876],
5361 [14, 17593877],
5362 [15, 17593878],
5363 [16, 17593880],
5364 [17, 17593881],
5365 [18, 17593882],
5366 [19, 17593883],
5367 [20, 17593884],
5368 [21, 17593885],
5369 [22, 17593886],
5370 [23, 17593887],
5371 [24, 17593888],
5372 [25, 17593889],
5373 [26, 17593890],
5374 [27, 17593891],
5375 [28, 17593892],
5376 [29, 17593893],
5377 [30, 17593894],
5378 [31, 17593895],
5379 [32, 17593896],
5380 [33, 17593897],
5381 [34, 17593898],
5382 [35, 17593899],
5383 [36, 17593900],
5384 [37, 17593901],
5385 [38, 17593902],
5386 [39, 17593903],
5387 [40, 17593904],
5388 [41, 17593905],
5389 [42, 17593906],
5390 [43, 17593907]
5391 ]
5392 );
5393 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5394 assert_eq!(
5395 pairs,
5396 vec![
5397 [11, 17596476],
5398 [12, 17596477],
5399 [13, 17596478],
5400 [14, 17596479],
5401 [15, 17596480],
5402 [16, 17596481],
5403 [17, 17596482],
5404 [19, 17596483],
5405 [20, 17596484],
5406 [21, 17596485],
5407 [22, 17596486],
5408 [23, 17596487],
5409 [24, 17596488],
5410 [25, 17596489],
5411 [26, 17596490],
5412 [27, 17596491],
5413 [28, 17596492],
5414 [29, 17596493],
5415 [30, 17596494],
5416 [31, 17596495],
5417 [32, 17596496],
5418 [33, 17596497],
5419 [34, 17596498],
5420 [35, 17596499],
5421 [36, 17596500],
5422 [37, 17596501],
5423 [38, 17596502],
5424 [39, 17596503],
5425 [40, 17596504],
5426 [41, 17596505],
5427 [42, 17596506],
5428 [43, 17596507],
5429 [44, 17596508],
5430 [45, 17596509],
5431 [46, 17596510],
5432 [47, 17596511],
5433 [48, 17596512],
5434 [49, 17596513],
5435 [50, 17596514]
5436 ]
5437 );
5438 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5439 assert_eq!(
5440 pairs,
5441 vec![
5442 [5, 17624012],
5443 [6, 17624013],
5444 [7, 17624014],
5445 [8, 17624015],
5446 [9, 17624016],
5447 [10, 17624017],
5448 [11, 17624018],
5449 [12, 17624019],
5450 [13, 17624020],
5451 [14, 17625913],
5452 [15, 17625914],
5453 [16, 17625915],
5454 [17, 17625916],
5455 [18, 17625917],
5456 [19, 17625918],
5457 [20, 17625919],
5458 [21, 17625920],
5459 [22, 17625921],
5460 [23, 17625922],
5461 [24, 17625923],
5462 [25, 17625924],
5463 [26, 17625925],
5464 [27, 17625926],
5465 [28, 17625927],
5466 [29, 17625928],
5467 [30, 17625929],
5468 [31, 17625930],
5469 [32, 17625931],
5470 [33, 17625932],
5471 [34, 17625933],
5472 [35, 17625934],
5473 [36, 17625935],
5474 [37, 17625936],
5475 [38, 17625937],
5476 [39, 17625938],
5477 [40, 17625939],
5478 [41, 17625940],
5479 [42, 17625941],
5480 [43, 17625942],
5481 [44, 17625943],
5482 [45, 17625944],
5483 [46, 17625945],
5484 [47, 17625946],
5485 [48, 17625947],
5486 [49, 17625948],
5487 [50, 17625949]
5488 ]
5489 );
5490 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5491 assert_eq!(
5492 pairs,
5493 vec![
5494 [2, 17624012],
5495 [3, 17624013],
5496 [4, 17624014],
5497 [5, 17624015],
5498 [6, 17624016],
5499 [7, 17624017],
5500 [8, 17624018],
5501 [9, 17624019],
5502 [10, 17624020],
5503 [11, 17625913],
5504 [12, 17625914],
5505 [13, 17625915],
5506 [14, 17625916],
5507 [15, 17625917],
5508 [16, 17625918],
5509 [17, 17625919],
5510 [18, 17625920],
5511 [19, 17625921],
5512 [20, 17625922],
5513 [21, 17625923],
5514 [22, 17625924],
5515 [23, 17625925],
5516 [24, 17625926],
5517 [25, 17625927],
5518 [26, 17625928],
5519 [27, 17625929],
5520 [28, 17625930],
5521 [29, 17625931],
5522 [30, 17625932],
5523 [31, 17625933],
5524 [32, 17625934],
5525 [33, 17625935],
5526 [34, 17625936],
5527 [35, 17625937],
5528 [36, 17625938],
5529 [37, 17625939],
5530 [38, 17625940],
5531 [39, 17625941],
5532 [40, 17625942],
5533 [41, 17625943],
5534 [42, 17625944],
5535 [43, 17625945],
5536 [44, 17625946],
5537 [45, 17625947],
5538 [46, 17625948],
5539 [47, 17625949],
5540 [48, 17625950],
5541 [49, 17625951],
5542 [50, 17625952]
5543 ]
5544 );
5545 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5546 assert_eq!(
5547 pairs,
5548 vec![
5549 [1, 31796700],
5550 [2, 31796701],
5551 [3, 31796702],
5552 [4, 31796703],
5553 [5, 31796704],
5554 [6, 31796705],
5555 [7, 31796706],
5556 [8, 31796710],
5557 [9, 31796711],
5558 [10, 31796712],
5559 [11, 31796713],
5560 [12, 31796714],
5561 [13, 31796715],
5562 [14, 31796716],
5563 [15, 31796717],
5564 [16, 31796718],
5565 [17, 31796719],
5566 [18, 31796720],
5567 [19, 31796721],
5568 [20, 31796722],
5569 [21, 31796723],
5570 [22, 31796724],
5571 [23, 31796725],
5572 [24, 31796726],
5573 [25, 31796727],
5574 [26, 31796728],
5575 [27, 31799014],
5576 [28, 31799015],
5577 [29, 31799016],
5578 [30, 31799017],
5579 [31, 31799018],
5580 [32, 31799019],
5581 [33, 31799020],
5582 [34, 31799021],
5583 [35, 31799022],
5584 [36, 31799023],
5585 [37, 31799024],
5586 [38, 31799025],
5587 [39, 31799026],
5588 [40, 31799027],
5589 [41, 31799028],
5590 [42, 31799029],
5591 [43, 31799030],
5592 [44, 31799031],
5593 [45, 31799032],
5594 [46, 31799033],
5595 [47, 31799034],
5596 [48, 31799035],
5597 [49, 31799036],
5598 [50, 31799037]
5599 ]
5600 );
5601 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5602 assert_eq!(
5603 pairs,
5604 vec![
5605 [0, 36722692],
5606 [1, 36722693],
5607 [2, 36722694],
5608 [3, 36722695],
5609 [4, 36722696],
5610 [5, 36722697],
5611 [6, 36722698],
5612 [7, 36722699],
5613 [8, 36722700],
5614 [9, 36722701],
5615 [10, 36722702],
5616 [11, 36722703],
5617 [12, 36722704],
5618 [13, 36722705],
5619 [14, 36723505],
5620 [15, 36723506],
5621 [16, 36723507],
5622 [17, 36723508],
5623 [18, 36723509],
5624 [19, 36723510],
5625 [20, 36723511],
5626 [21, 36723512],
5627 [22, 36723513],
5628 [23, 36723514],
5629 [24, 36723515],
5630 [25, 36723516],
5631 [26, 36723517],
5632 [27, 36723518],
5633 [28, 36723519],
5634 [29, 36723520],
5635 [30, 36723521],
5636 [31, 36723522],
5637 [32, 36723523],
5638 [33, 36723524],
5639 [34, 36723525],
5640 [35, 36723526],
5641 [36, 36723527],
5642 [37, 36723528],
5643 [38, 36723529],
5644 [39, 36723530],
5645 [40, 36723531],
5646 [41, 36723532],
5647 [42, 36737414],
5648 [43, 36737415],
5649 [44, 36737416],
5650 [45, 36737417],
5651 [46, 36737418],
5652 [47, 36737419],
5653 [48, 36737420]
5654 ]
5655 );
5656 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5657 assert_eq!(
5658 pairs,
5659 vec![
5660 [4, 44587963],
5661 [5, 44587964],
5662 [6, 44587965],
5663 [7, 44587966],
5664 [8, 44587967],
5665 [9, 44587968],
5666 [10, 44587969],
5667 [11, 44587970],
5668 [12, 44587971],
5669 [13, 44587972],
5670 [14, 44587973],
5671 [15, 44587974],
5672 [16, 44587975],
5673 [17, 44587976],
5674 [18, 44587977],
5675 [19, 44587978],
5676 [20, 44587979],
5677 [21, 44587980],
5678 [22, 44587981],
5679 [23, 44587982],
5680 [24, 44587983],
5681 [25, 44589680],
5682 [26, 44589681],
5683 [27, 44589682],
5684 [28, 44589683],
5685 [29, 44589684],
5686 [30, 44589685],
5687 [31, 44589686],
5688 [32, 44589687],
5689 [33, 44589688],
5690 [34, 44589689],
5691 [35, 44589690],
5692 [36, 44589691],
5693 [37, 44589692],
5694 [38, 44589693],
5695 [39, 44589694],
5696 [40, 44589695],
5697 [41, 44589696],
5698 [42, 44589697],
5699 [43, 44589698],
5700 [44, 44589699],
5701 [45, 44589700],
5702 [46, 44589701],
5703 [47, 44589702],
5704 [48, 44592034],
5705 [49, 44592035],
5706 [50, 44592036]
5707 ]
5708 );
5709 }
5710 #[test]
5711 fn test_cigar_full() {
5712 let mut bam = bam::Reader::from_path("./test/locusmd.bam").unwrap();
5713 let mut it = bam.records();
5714 let test = it.next().unwrap().unwrap();
5715 let pairs: Vec<_> = test.aligned_block_pairs_cigar().collect();
5716 assert_eq!(
5717 pairs,
5718 vec![
5719 (0..15, 99812479..99812494, Cigar::Equal(15)),
5720 (15..16, 99812494..99812494, Cigar::Ins(1)),
5721 (16..83, 99812494..99812561, Cigar::Equal(67)),
5722 (83..84, 99812561..99812561, Cigar::Ins(1)),
5723 (84..413, 99812561..99812890, Cigar::Equal(329)),
5724 (413..413, 99812890..99812891, Cigar::Del(1)),
5725 (413..538, 99812891..99813016, Cigar::Equal(125)),
5726 (538..539, 99813016..99813016, Cigar::Ins(1)),
5727 (539..597, 99813016..99813074, Cigar::Equal(58)),
5728 (597..597, 99813074..99813075, Cigar::Del(1)),
5729 (597..1498, 99813075..99813976, Cigar::Equal(901)),
5730 (1498..1499, 99813976..99813976, Cigar::Ins(1)),
5731 (1499..1779, 99813976..99814256, Cigar::Equal(280)),
5732 (1779..1779, 99814256..99814257, Cigar::Del(1)),
5733 (1779..1939, 99814257..99814417, Cigar::Equal(160)),
5734 (1939..1939, 99814417..99814418, Cigar::Del(1)),
5735 (1939..1962, 99814418..99814441, Cigar::Equal(23)),
5736 (1962..1962, 99814441..99814442, Cigar::Del(1)),
5737 (1962..1994, 99814442..99814474, Cigar::Equal(32)),
5738 (1994..1994, 99814474..99814475, Cigar::Del(1)),
5739 (1994..2067, 99814475..99814548, Cigar::Equal(73)),
5740 (2067..2068, 99814548..99814548, Cigar::Ins(1)),
5741 (2068..2368, 99814548..99814848, Cigar::Equal(300)),
5742 (2368..2368, 99814848..99814850, Cigar::Del(2)),
5743 (2368..2384, 99814850..99814866, Cigar::Equal(16)),
5744 (2384..2384, 99814866..99814867, Cigar::Del(1)),
5745 (2384..2785, 99814867..99815268, Cigar::Equal(401)),
5746 (2785..2785, 99815268..99815269, Cigar::Del(1)),
5747 (2785..2790, 99815269..99815274, Cigar::Equal(5)),
5748 (2790..2791, 99815274..99815275, Cigar::Diff(1)),
5749 (2791..2867, 99815275..99815351, Cigar::Equal(76)),
5750 (2867..2867, 99815351..99815352, Cigar::Del(1)),
5751 (2867..3126, 99815352..99815611, Cigar::Equal(259)),
5752 (3126..3127, 99815611..99815612, Cigar::Diff(1)),
5753 (3127..3314, 99815612..99815799, Cigar::Equal(187)),
5754 (3314..3314, 99815799..99815800, Cigar::Del(1)),
5755 (3314..3331, 99815800..99815817, Cigar::Equal(17)),
5756 (3331..3331, 99815817..99815818, Cigar::Del(1)),
5757 (3331..3367, 99815818..99815854, Cigar::Equal(36)),
5758 (3367..3367, 99815854..99815855, Cigar::Del(1)),
5759 (3367..3430, 99815855..99815918, Cigar::Equal(63)),
5760 (3430..3430, 99815918..99815919, Cigar::Del(1)),
5761 (3430..3469, 99815919..99815958, Cigar::Equal(39)),
5762 (3469..3469, 99815958..99815959, Cigar::Del(1)),
5763 (3469..3508, 99815959..99815998, Cigar::Equal(39)),
5764 (3508..3508, 99815998..99815999, Cigar::Del(1)),
5765 (3508..3701, 99815999..99816192, Cigar::Equal(193)),
5766 (3701..3701, 99816192..99816193, Cigar::Del(1)),
5767 (3701..3829, 99816193..99816321, Cigar::Equal(128)),
5768 (3829..3830, 99816321..99816321, Cigar::Ins(1)),
5769 (3830..4519, 99816321..99817010, Cigar::Equal(689)),
5770 (4519..4520, 99817010..99817010, Cigar::Ins(1)),
5771 (4520..4569, 99817010..99817059, Cigar::Equal(49)),
5772 (4569..4569, 99817059..99817060, Cigar::Del(1)),
5773 (4569..4702, 99817060..99817193, Cigar::Equal(133)),
5774 (4702..4702, 99817193..99817194, Cigar::Del(1)),
5775 (4702..4888, 99817194..99817380, Cigar::Equal(186)),
5776 (4888..4889, 99817380..99817380, Cigar::Ins(1)),
5777 (4889..4981, 99817380..99817472, Cigar::Equal(92)),
5778 (4981..4982, 99817472..99817472, Cigar::Ins(1)),
5779 (4982..5089, 99817472..99817579, Cigar::Equal(107)),
5780 (5089..5090, 99817579..99817579, Cigar::Ins(1)),
5781 (5090..5132, 99817579..99817621, Cigar::Equal(42)),
5782 (5132..5133, 99817621..99817621, Cigar::Ins(1)),
5783 (5133..5383, 99817621..99817871, Cigar::Equal(250)),
5784 (5383..5383, 99817871..99817872, Cigar::Del(1)),
5785 (5383..5451, 99817872..99817940, Cigar::Equal(68)),
5786 (5451..5451, 99817940..99817941, Cigar::Del(1)),
5787 (5451..5457, 99817941..99817947, Cigar::Equal(6)),
5788 (5457..5457, 99817947..99817948, Cigar::Del(1)),
5789 (5457..5593, 99817948..99818084, Cigar::Equal(136)),
5790 (5593..5594, 99818084..99818084, Cigar::Ins(1)),
5791 (5594..5900, 99818084..99818390, Cigar::Equal(306)),
5792 (5900..5901, 99818390..99818390, Cigar::Ins(1)),
5793 (5901..5932, 99818390..99818421, Cigar::Equal(31)),
5794 (5932..5933, 99818421..99818421, Cigar::Ins(1)),
5795 (5933..6100, 99818421..99818588, Cigar::Equal(167)),
5796 (6100..6100, 99818588..99818589, Cigar::Del(1)),
5797 (6100..6256, 99818589..99818745, Cigar::Equal(156)),
5798 (6256..6257, 99818745..99818746, Cigar::Diff(1)),
5799 (6257..7576, 99818746..99820065, Cigar::Equal(1319)),
5800 (7576..7576, 99820065..99820066, Cigar::Del(1)),
5801 (7576..7884, 99820066..99820374, Cigar::Equal(308)),
5802 (7884..7884, 99820374..99820375, Cigar::Del(1)),
5803 (7884..7951, 99820375..99820442, Cigar::Equal(67)),
5804 (7951..7951, 99820442..99820443, Cigar::Del(1)),
5805 (7951..8159, 99820443..99820651, Cigar::Equal(208)),
5806 (8159..8159, 99820651..99820653, Cigar::Del(2)),
5807 (8159..8225, 99820653..99820719, Cigar::Equal(66)),
5808 (8225..8226, 99820719..99820719, Cigar::Ins(1)),
5809 (8226..8229, 99820719..99820722, Cigar::Equal(3)),
5810 (8229..8229, 99820722..99820723, Cigar::Del(1)),
5811 (8229..8245, 99820723..99820739, Cigar::Equal(16)),
5812 (8245..8245, 99820739..99820740, Cigar::Del(1)),
5813 (8245..8283, 99820740..99820778, Cigar::Equal(38)),
5814 (8283..8283, 99820778..99820780, Cigar::Del(2)),
5815 (8283..8285, 99820780..99820782, Cigar::Equal(2)),
5816 (8285..8286, 99820782..99820783, Cigar::Diff(1)),
5817 (8286..8326, 99820783..99820823, Cigar::Equal(40)),
5818 (8326..8326, 99820823..99820824, Cigar::Del(1)),
5819 (8326..8454, 99820824..99820952, Cigar::Equal(128)),
5820 (8454..8454, 99820952..99820953, Cigar::Del(1)),
5821 (8454..8508, 99820953..99821007, Cigar::Equal(54)),
5822 (8508..8509, 99821007..99821007, Cigar::Ins(1)),
5823 (8509..8560, 99821007..99821058, Cigar::Equal(51)),
5824 (8560..8560, 99821058..99821059, Cigar::Del(1)),
5825 (8560..8833, 99821059..99821332, Cigar::Equal(273)),
5826 (8833..8833, 99821332..99821333, Cigar::Del(1)),
5827 (8833..8836, 99821333..99821336, Cigar::Equal(3)),
5828 (8836..8836, 99821336..99821337, Cigar::Del(1)),
5829 (8836..9061, 99821337..99821562, Cigar::Equal(225)),
5830 (9061..9061, 99821562..99821563, Cigar::Del(1)),
5831 (9061..9065, 99821563..99821567, Cigar::Equal(4)),
5832 (9065..9065, 99821567..99821568, Cigar::Del(1)),
5833 (9065..9110, 99821568..99821613, Cigar::Equal(45)),
5834 (9110..9110, 99821613..99821615, Cigar::Del(2)),
5835 (9110..9163, 99821615..99821668, Cigar::Equal(53)),
5836 (9163..9163, 99821668..99821669, Cigar::Del(1)),
5837 (9163..9390, 99821669..99821896, Cigar::Equal(227)),
5838 (9390..9390, 99821896..99821897, Cigar::Del(1)),
5839 (9390..9427, 99821897..99821934, Cigar::Equal(37)),
5840 (9427..9430, 99821934..99821937, Cigar::Diff(3)),
5841 (9430..9461, 99821937..99821968, Cigar::Equal(31)),
5842 (9461..9461, 99821968..99821970, Cigar::Del(2)),
5843 (9461..9493, 99821970..99822002, Cigar::Equal(32)),
5844 (9493..9493, 99822002..99822004, Cigar::Del(2)),
5845 (9493..9692, 99822004..99822203, Cigar::Equal(199)),
5846 (9692..9693, 99822203..99822204, Cigar::Diff(1)),
5847 (9693..9829, 99822204..99822340, Cigar::Equal(136)),
5848 (9829..9829, 99822340..99822342, Cigar::Del(2)),
5849 (9829..9870, 99822342..99822383, Cigar::Equal(41)),
5850 (9870..9870, 99822383..99822386, Cigar::Del(3)),
5851 (9870..9915, 99822386..99822431, Cigar::Equal(45)),
5852 (9915..9915, 99822431..99822432, Cigar::Del(1)),
5853 (9915..10285, 99822432..99822802, Cigar::Equal(370)),
5854 (10285..10285, 99822802..99822803, Cigar::Del(1)),
5855 (10285..10480, 99822803..99822998, Cigar::Equal(195)),
5856 (10480..10480, 99822998..99822999, Cigar::Del(1)),
5857 (10480..10721, 99822999..99823240, Cigar::Equal(241)),
5858 (10721..10722, 99823240..99823240, Cigar::Ins(1)),
5859 (10722..11122, 99823240..99823640, Cigar::Equal(400)),
5860 (11122..11122, 99823640..99823641, Cigar::Del(1)),
5861 (11122..11230, 99823641..99823749, Cigar::Equal(108)),
5862 (11230..11230, 99823749..99823750, Cigar::Del(1)),
5863 (11230..11911, 99823750..99824431, Cigar::Equal(681)),
5864 (11911..11912, 99824431..99824431, Cigar::Ins(1)),
5865 (11912..12102, 99824431..99824621, Cigar::Equal(190)),
5866 (12102..12102, 99824621..99824622, Cigar::Del(1)),
5867 (12102..12870, 99824622..99825390, Cigar::Equal(768)),
5868 (12870..12870, 99825390..99825391, Cigar::Del(1)),
5869 (12870..12978, 99825391..99825499, Cigar::Equal(108)),
5870 (12978..12978, 99825499..99825500, Cigar::Del(1)),
5871 (12978..13419, 99825500..99825941, Cigar::Equal(441)),
5872 (13419..13419, 99825941..99825942, Cigar::Del(1)),
5873 (13419..13617, 99825942..99826140, Cigar::Equal(198)),
5874 (13617..13617, 99826140..99826141, Cigar::Del(1)),
5875 (13617..13697, 99826141..99826221, Cigar::Equal(80)),
5876 (13697..13698, 99826221..99826221, Cigar::Ins(1)),
5877 (13698..13811, 99826221..99826334, Cigar::Equal(113)),
5878 (13811..13812, 99826334..99826334, Cigar::Ins(1)),
5879 (13812..14020, 99826334..99826542, Cigar::Equal(208)),
5880 (14020..14020, 99826542..99826543, Cigar::Del(1)),
5881 (14020..14524, 99826543..99827047, Cigar::Equal(504)),
5882 (14524..14524, 99827047..99827048, Cigar::Del(1)),
5883 (14524..14533, 99827048..99827057, Cigar::Equal(9)),
5884 (14533..14534, 99827057..99827057, Cigar::Ins(1)),
5885 (14534..14787, 99827057..99827310, Cigar::Equal(253)),
5886 (14787..14788, 99827310..99827310, Cigar::Ins(1)),
5887 (14788..14901, 99827310..99827423, Cigar::Equal(113)),
5888 (14901..14901, 99827423..99827424, Cigar::Del(1)),
5889 (14901..15001, 99827424..99827524, Cigar::Equal(100)),
5890 (15001..15002, 99827524..99827524, Cigar::Ins(1)),
5891 (15002..15166, 99827524..99827688, Cigar::Equal(164)),
5892 (15166..15166, 99827688..99827689, Cigar::Del(1)),
5893 (15166..15805, 99827689..99828328, Cigar::Equal(639)),
5894 (15805..15805, 99828328..99828329, Cigar::Del(1)),
5895 (15805..16195, 99828329..99828719, Cigar::Equal(390)),
5896 (16195..16195, 99828719..99828721, Cigar::Del(2)),
5897 (16195..16576, 99828721..99829102, Cigar::Equal(381)),
5898 (16576..16577, 99829102..99829102, Cigar::Ins(1)),
5899 (16577..16912, 99829102..99829437, Cigar::Equal(335)),
5900 (16912..16912, 99829437..99829438, Cigar::Del(1)),
5901 (16912..17896, 99829438..99830422, Cigar::Equal(984)),
5902 (17896..17897, 99830422..99830422, Cigar::Ins(1)),
5903 (17897..18370, 99830422..99830895, Cigar::Equal(473)),
5904 (18370..18370, 99830895..99830896, Cigar::Del(1)),
5905 (18370..18410, 99830896..99830936, Cigar::Equal(40)),
5906 (18410..18410, 99830936..99830937, Cigar::Del(1)),
5907 (18410..18449, 99830937..99830976, Cigar::Equal(39)),
5908 (18449..18450, 99830976..99830976, Cigar::Ins(1)),
5909 (18450..18675, 99830976..99831201, Cigar::Equal(225)),
5910 (18675..18675, 99831201..99831202, Cigar::Del(1)),
5911 (18675..18729, 99831202..99831256, Cigar::Equal(54)),
5912 (18729..18729, 99831256..99831257, Cigar::Del(1)),
5913 (18729..18812, 99831257..99831340, Cigar::Equal(83)),
5914 (18812..18813, 99831340..99831340, Cigar::Ins(1)),
5915 (18813..18895, 99831340..99831422, Cigar::Equal(82)),
5916 (18895..18895, 99831422..99831423, Cigar::Del(1)),
5917 (18895..19239, 99831423..99831767, Cigar::Equal(344)),
5918 (19239..19240, 99831767..99831767, Cigar::Ins(1)),
5919 (19240..19244, 99831767..99831771, Cigar::Equal(4)),
5920 (19244..19245, 99831771..99831771, Cigar::Ins(1)),
5921 (19245..19387, 99831771..99831913, Cigar::Equal(142)),
5922 (19387..19387, 99831913..99831914, Cigar::Del(1)),
5923 (19387..19883, 99831914..99832410, Cigar::Equal(496)),
5924 ]
5925 );
5926 assert_eq!(
5927 test.aligned_block_pairs_cigar_match()
5928 .unwrap()
5929 .into_iter()
5930 .filter_map(|a| match a {
5931 (Some((a, b)), _) => Some(((a.start, a.end), (b.start, b.end))),
5932 (None, _) => None,
5933 })
5934 .collect::<Vec<_>>(),
5935 test.aligned_block_pairs_match()
5937 .unwrap()
5938 .into_iter()
5939 .map(|(a, b)| ((a[0], a[1]), (b[0], b[1])))
5940 .collect::<Vec<_>>(),
5941 "Invalid alignment of pairs and cigar"
5942 );
5943 let pairs: Vec<_> = test.aligned_block_pairs_cigar_match().unwrap().collect();
5944 assert_eq!(
5945 pairs,
5946 vec![
5947 (Some((0..15, 99812479..99812494)), Cigar::Equal(15)),
5948 (None, Cigar::Ins(1)),
5949 (Some((16..83, 99812494..99812561)), Cigar::Equal(67)),
5950 (None, Cigar::Ins(1)),
5951 (Some((84..413, 99812561..99812890)), Cigar::Equal(329)),
5952 (None, Cigar::Del(1)),
5953 (Some((413..538, 99812891..99813016)), Cigar::Equal(125)),
5954 (None, Cigar::Ins(1)),
5955 (Some((539..597, 99813016..99813074)), Cigar::Equal(58)),
5956 (None, Cigar::Del(1)),
5957 (Some((597..1498, 99813075..99813976)), Cigar::Equal(901)),
5958 (None, Cigar::Ins(1)),
5959 (Some((1499..1779, 99813976..99814256)), Cigar::Equal(280)),
5960 (None, Cigar::Del(1)),
5961 (Some((1779..1939, 99814257..99814417)), Cigar::Equal(160)),
5962 (None, Cigar::Del(1)),
5963 (Some((1939..1962, 99814418..99814441)), Cigar::Equal(23)),
5964 (None, Cigar::Del(1)),
5965 (Some((1962..1994, 99814442..99814474)), Cigar::Equal(32)),
5966 (None, Cigar::Del(1)),
5967 (Some((1994..2067, 99814475..99814548)), Cigar::Equal(73)),
5968 (None, Cigar::Ins(1)),
5969 (Some((2068..2368, 99814548..99814848)), Cigar::Equal(300)),
5970 (None, Cigar::Del(2)),
5971 (Some((2368..2384, 99814850..99814866)), Cigar::Equal(16)),
5972 (None, Cigar::Del(1)),
5973 (Some((2384..2785, 99814867..99815268)), Cigar::Equal(401)),
5974 (None, Cigar::Del(1)),
5975 (Some((2785..2790, 99815269..99815274)), Cigar::Equal(5)),
5976 (None, Cigar::Diff(1)),
5977 (Some((2791..2867, 99815275..99815351)), Cigar::Equal(76)),
5978 (None, Cigar::Del(1)),
5979 (Some((2867..3126, 99815352..99815611)), Cigar::Equal(259)),
5980 (None, Cigar::Diff(1)),
5981 (Some((3127..3314, 99815612..99815799)), Cigar::Equal(187)),
5982 (None, Cigar::Del(1)),
5983 (Some((3314..3331, 99815800..99815817)), Cigar::Equal(17)),
5984 (None, Cigar::Del(1)),
5985 (Some((3331..3367, 99815818..99815854)), Cigar::Equal(36)),
5986 (None, Cigar::Del(1)),
5987 (Some((3367..3430, 99815855..99815918)), Cigar::Equal(63)),
5988 (None, Cigar::Del(1)),
5989 (Some((3430..3469, 99815919..99815958)), Cigar::Equal(39)),
5990 (None, Cigar::Del(1)),
5991 (Some((3469..3508, 99815959..99815998)), Cigar::Equal(39)),
5992 (None, Cigar::Del(1)),
5993 (Some((3508..3701, 99815999..99816192)), Cigar::Equal(193)),
5994 (None, Cigar::Del(1)),
5995 (Some((3701..3829, 99816193..99816321)), Cigar::Equal(128)),
5996 (None, Cigar::Ins(1)),
5997 (Some((3830..4519, 99816321..99817010)), Cigar::Equal(689)),
5998 (None, Cigar::Ins(1)),
5999 (Some((4520..4569, 99817010..99817059)), Cigar::Equal(49)),
6000 (None, Cigar::Del(1)),
6001 (Some((4569..4702, 99817060..99817193)), Cigar::Equal(133)),
6002 (None, Cigar::Del(1)),
6003 (Some((4702..4888, 99817194..99817380)), Cigar::Equal(186)),
6004 (None, Cigar::Ins(1)),
6005 (Some((4889..4981, 99817380..99817472)), Cigar::Equal(92)),
6006 (None, Cigar::Ins(1)),
6007 (Some((4982..5089, 99817472..99817579)), Cigar::Equal(107)),
6008 (None, Cigar::Ins(1)),
6009 (Some((5090..5132, 99817579..99817621)), Cigar::Equal(42)),
6010 (None, Cigar::Ins(1)),
6011 (Some((5133..5383, 99817621..99817871)), Cigar::Equal(250)),
6012 (None, Cigar::Del(1)),
6013 (Some((5383..5451, 99817872..99817940)), Cigar::Equal(68)),
6014 (None, Cigar::Del(1)),
6015 (Some((5451..5457, 99817941..99817947)), Cigar::Equal(6)),
6016 (None, Cigar::Del(1)),
6017 (Some((5457..5593, 99817948..99818084)), Cigar::Equal(136)),
6018 (None, Cigar::Ins(1)),
6019 (Some((5594..5900, 99818084..99818390)), Cigar::Equal(306)),
6020 (None, Cigar::Ins(1)),
6021 (Some((5901..5932, 99818390..99818421)), Cigar::Equal(31)),
6022 (None, Cigar::Ins(1)),
6023 (Some((5933..6100, 99818421..99818588)), Cigar::Equal(167)),
6024 (None, Cigar::Del(1)),
6025 (Some((6100..6256, 99818589..99818745)), Cigar::Equal(156)),
6026 (None, Cigar::Diff(1)),
6027 (Some((6257..7576, 99818746..99820065)), Cigar::Equal(1319)),
6028 (None, Cigar::Del(1)),
6029 (Some((7576..7884, 99820066..99820374)), Cigar::Equal(308)),
6030 (None, Cigar::Del(1)),
6031 (Some((7884..7951, 99820375..99820442)), Cigar::Equal(67)),
6032 (None, Cigar::Del(1)),
6033 (Some((7951..8159, 99820443..99820651)), Cigar::Equal(208)),
6034 (None, Cigar::Del(2)),
6035 (Some((8159..8225, 99820653..99820719)), Cigar::Equal(66)),
6036 (None, Cigar::Ins(1)),
6037 (Some((8226..8229, 99820719..99820722)), Cigar::Equal(3)),
6038 (None, Cigar::Del(1)),
6039 (Some((8229..8245, 99820723..99820739)), Cigar::Equal(16)),
6040 (None, Cigar::Del(1)),
6041 (Some((8245..8283, 99820740..99820778)), Cigar::Equal(38)),
6042 (None, Cigar::Del(2)),
6043 (Some((8283..8285, 99820780..99820782)), Cigar::Equal(2)),
6044 (None, Cigar::Diff(1)),
6045 (Some((8286..8326, 99820783..99820823)), Cigar::Equal(40)),
6046 (None, Cigar::Del(1)),
6047 (Some((8326..8454, 99820824..99820952)), Cigar::Equal(128)),
6048 (None, Cigar::Del(1)),
6049 (Some((8454..8508, 99820953..99821007)), Cigar::Equal(54)),
6050 (None, Cigar::Ins(1)),
6051 (Some((8509..8560, 99821007..99821058)), Cigar::Equal(51)),
6052 (None, Cigar::Del(1)),
6053 (Some((8560..8833, 99821059..99821332)), Cigar::Equal(273)),
6054 (None, Cigar::Del(1)),
6055 (Some((8833..8836, 99821333..99821336)), Cigar::Equal(3)),
6056 (None, Cigar::Del(1)),
6057 (Some((8836..9061, 99821337..99821562)), Cigar::Equal(225)),
6058 (None, Cigar::Del(1)),
6059 (Some((9061..9065, 99821563..99821567)), Cigar::Equal(4)),
6060 (None, Cigar::Del(1)),
6061 (Some((9065..9110, 99821568..99821613)), Cigar::Equal(45)),
6062 (None, Cigar::Del(2)),
6063 (Some((9110..9163, 99821615..99821668)), Cigar::Equal(53)),
6064 (None, Cigar::Del(1)),
6065 (Some((9163..9390, 99821669..99821896)), Cigar::Equal(227)),
6066 (None, Cigar::Del(1)),
6067 (Some((9390..9427, 99821897..99821934)), Cigar::Equal(37)),
6068 (None, Cigar::Diff(3)),
6069 (Some((9430..9461, 99821937..99821968)), Cigar::Equal(31)),
6070 (None, Cigar::Del(2)),
6071 (Some((9461..9493, 99821970..99822002)), Cigar::Equal(32)),
6072 (None, Cigar::Del(2)),
6073 (Some((9493..9692, 99822004..99822203)), Cigar::Equal(199)),
6074 (None, Cigar::Diff(1)),
6075 (Some((9693..9829, 99822204..99822340)), Cigar::Equal(136)),
6076 (None, Cigar::Del(2)),
6077 (Some((9829..9870, 99822342..99822383)), Cigar::Equal(41)),
6078 (None, Cigar::Del(3)),
6079 (Some((9870..9915, 99822386..99822431)), Cigar::Equal(45)),
6080 (None, Cigar::Del(1)),
6081 (Some((9915..10285, 99822432..99822802)), Cigar::Equal(370)),
6082 (None, Cigar::Del(1)),
6083 (Some((10285..10480, 99822803..99822998)), Cigar::Equal(195)),
6084 (None, Cigar::Del(1)),
6085 (Some((10480..10721, 99822999..99823240)), Cigar::Equal(241)),
6086 (None, Cigar::Ins(1)),
6087 (Some((10722..11122, 99823240..99823640)), Cigar::Equal(400)),
6088 (None, Cigar::Del(1)),
6089 (Some((11122..11230, 99823641..99823749)), Cigar::Equal(108)),
6090 (None, Cigar::Del(1)),
6091 (Some((11230..11911, 99823750..99824431)), Cigar::Equal(681)),
6092 (None, Cigar::Ins(1)),
6093 (Some((11912..12102, 99824431..99824621)), Cigar::Equal(190)),
6094 (None, Cigar::Del(1)),
6095 (Some((12102..12870, 99824622..99825390)), Cigar::Equal(768)),
6096 (None, Cigar::Del(1)),
6097 (Some((12870..12978, 99825391..99825499)), Cigar::Equal(108)),
6098 (None, Cigar::Del(1)),
6099 (Some((12978..13419, 99825500..99825941)), Cigar::Equal(441)),
6100 (None, Cigar::Del(1)),
6101 (Some((13419..13617, 99825942..99826140)), Cigar::Equal(198)),
6102 (None, Cigar::Del(1)),
6103 (Some((13617..13697, 99826141..99826221)), Cigar::Equal(80)),
6104 (None, Cigar::Ins(1)),
6105 (Some((13698..13811, 99826221..99826334)), Cigar::Equal(113)),
6106 (None, Cigar::Ins(1)),
6107 (Some((13812..14020, 99826334..99826542)), Cigar::Equal(208)),
6108 (None, Cigar::Del(1)),
6109 (Some((14020..14524, 99826543..99827047)), Cigar::Equal(504)),
6110 (None, Cigar::Del(1)),
6111 (Some((14524..14533, 99827048..99827057)), Cigar::Equal(9)),
6112 (None, Cigar::Ins(1)),
6113 (Some((14534..14787, 99827057..99827310)), Cigar::Equal(253)),
6114 (None, Cigar::Ins(1)),
6115 (Some((14788..14901, 99827310..99827423)), Cigar::Equal(113)),
6116 (None, Cigar::Del(1)),
6117 (Some((14901..15001, 99827424..99827524)), Cigar::Equal(100)),
6118 (None, Cigar::Ins(1)),
6119 (Some((15002..15166, 99827524..99827688)), Cigar::Equal(164)),
6120 (None, Cigar::Del(1)),
6121 (Some((15166..15805, 99827689..99828328)), Cigar::Equal(639)),
6122 (None, Cigar::Del(1)),
6123 (Some((15805..16195, 99828329..99828719)), Cigar::Equal(390)),
6124 (None, Cigar::Del(2)),
6125 (Some((16195..16576, 99828721..99829102)), Cigar::Equal(381)),
6126 (None, Cigar::Ins(1)),
6127 (Some((16577..16912, 99829102..99829437)), Cigar::Equal(335)),
6128 (None, Cigar::Del(1)),
6129 (Some((16912..17896, 99829438..99830422)), Cigar::Equal(984)),
6130 (None, Cigar::Ins(1)),
6131 (Some((17897..18370, 99830422..99830895)), Cigar::Equal(473)),
6132 (None, Cigar::Del(1)),
6133 (Some((18370..18410, 99830896..99830936)), Cigar::Equal(40)),
6134 (None, Cigar::Del(1)),
6135 (Some((18410..18449, 99830937..99830976)), Cigar::Equal(39)),
6136 (None, Cigar::Ins(1)),
6137 (Some((18450..18675, 99830976..99831201)), Cigar::Equal(225)),
6138 (None, Cigar::Del(1)),
6139 (Some((18675..18729, 99831202..99831256)), Cigar::Equal(54)),
6140 (None, Cigar::Del(1)),
6141 (Some((18729..18812, 99831257..99831340)), Cigar::Equal(83)),
6142 (None, Cigar::Ins(1)),
6143 (Some((18813..18895, 99831340..99831422)), Cigar::Equal(82)),
6144 (None, Cigar::Del(1)),
6145 (Some((18895..19239, 99831423..99831767)), Cigar::Equal(344)),
6146 (None, Cigar::Ins(1)),
6147 (Some((19240..19244, 99831767..99831771)), Cigar::Equal(4)),
6148 (None, Cigar::Ins(1)),
6149 (Some((19245..19387, 99831771..99831913)), Cigar::Equal(142)),
6150 (None, Cigar::Del(1)),
6151 (Some((19387..19883, 99831914..99832410)), Cigar::Equal(496))
6152 ]
6153 );
6154 let mut bam = bam::Reader::from_path("./test/setcigar.sam").unwrap();
6155 let mut it = bam.rc_records();
6156 let hit = it
6157 .next()
6158 .unwrap()
6159 .unwrap()
6160 .aligned_block_pairs_cigar_match();
6161 assert!(hit.is_none())
6162 }
6163 #[test]
6164 fn test_aligned_pairs_full() {
6165 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
6166 let mut it = bam.records();
6167 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6168 assert_eq!(
6169 pairs.clone().into_iter().take(12).collect::<Vec<_>>(),
6170 vec![
6171 [Some(0), None],
6172 [Some(1), None],
6173 [Some(2), None],
6174 [Some(3), None],
6175 [Some(4), None],
6176 [Some(5), None],
6177 [Some(6), Some(16050676)],
6178 [Some(7), Some(16050677)],
6179 [Some(8), Some(16050678)],
6180 [Some(9), Some(16050679)],
6181 [Some(10), Some(16050680)],
6182 [Some(11), Some(16050681)],
6183 ]
6184 );
6185 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6186 assert_eq!(
6187 pairs,
6188 vec![
6189 [Some(0), Some(16096878)],
6190 [Some(1), Some(16096879)],
6191 [Some(2), Some(16096880)],
6192 [Some(3), Some(16096881)],
6193 [Some(4), Some(16096882)],
6194 [Some(5), Some(16096883)],
6195 [Some(6), Some(16096884)],
6196 [None, Some(16096885)],
6197 [None, Some(16096886)],
6198 [Some(7), Some(16096887)],
6199 [Some(8), Some(16096888)],
6200 [Some(9), Some(16096889)],
6201 [Some(10), Some(16096890)],
6202 [Some(11), Some(16096891)],
6203 [Some(12), Some(16096892)],
6204 [Some(13), Some(16096893)],
6205 [Some(14), Some(16096894)],
6206 [Some(15), Some(16096895)],
6207 [Some(16), Some(16096896)],
6208 [Some(17), Some(16096897)],
6209 [Some(18), Some(16096898)],
6210 [Some(19), Some(16096899)],
6211 [Some(20), Some(16096900)],
6212 [Some(21), Some(16096901)],
6213 [Some(22), Some(16096902)],
6214 [Some(23), Some(16096903)],
6215 [Some(24), Some(16096904)],
6216 [Some(25), Some(16096905)],
6217 [Some(26), Some(16096906)],
6218 [Some(27), Some(16096907)],
6219 [Some(28), Some(16096908)],
6220 [Some(29), Some(16096909)],
6221 [Some(30), Some(16096910)],
6222 [Some(31), Some(16096911)],
6223 [Some(32), Some(16096912)],
6224 [Some(33), Some(16096913)],
6225 [Some(34), Some(16096914)],
6226 [Some(35), Some(16096915)],
6227 [Some(36), Some(16096916)],
6228 [Some(37), Some(16096917)],
6229 [Some(38), Some(16096918)],
6230 [Some(39), Some(16096919)],
6231 [Some(40), Some(16096920)],
6232 [Some(41), Some(16096921)],
6233 [Some(42), Some(16096922)],
6234 [Some(43), Some(16096923)],
6235 [Some(44), Some(16096924)],
6236 [Some(45), Some(16096925)],
6237 [Some(46), Some(16096926)],
6238 [Some(47), Some(16096927)],
6239 [Some(48), Some(16096928)],
6240 [Some(49), Some(16096929)],
6241 [Some(50), Some(16096930)]
6242 ]
6243 );
6244 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6245 assert_eq!(
6246 pairs,
6247 vec![
6248 [Some(0), Some(16097145)],
6249 [Some(1), Some(16097146)],
6250 [Some(2), Some(16097147)],
6251 [Some(3), Some(16097148)],
6252 [Some(4), Some(16097149)],
6253 [Some(5), Some(16097150)],
6254 [Some(6), Some(16097151)],
6255 [Some(7), Some(16097152)],
6256 [Some(8), Some(16097153)],
6257 [Some(9), Some(16097154)],
6258 [Some(10), Some(16097155)],
6259 [Some(11), Some(16097156)],
6260 [Some(12), Some(16097157)],
6261 [Some(13), Some(16097158)],
6262 [Some(14), Some(16097159)],
6263 [Some(15), Some(16097160)],
6264 [Some(16), Some(16097161)],
6265 [Some(17), Some(16097162)],
6266 [Some(18), Some(16097163)],
6267 [Some(19), Some(16097164)],
6268 [Some(20), Some(16097165)],
6269 [Some(21), Some(16097166)],
6270 [Some(22), Some(16097167)],
6271 [Some(23), Some(16097168)],
6272 [Some(24), Some(16097169)],
6273 [Some(25), Some(16097170)],
6274 [Some(26), Some(16097171)],
6275 [Some(27), Some(16097172)],
6276 [Some(28), Some(16097173)],
6277 [None, Some(16097174)],
6278 [None, Some(16097175)],
6279 [Some(29), Some(16097176)],
6280 [Some(30), Some(16097177)],
6281 [Some(31), Some(16097178)],
6282 [Some(32), Some(16097179)],
6283 [Some(33), Some(16097180)],
6284 [Some(34), Some(16097181)],
6285 [Some(35), Some(16097182)],
6286 [Some(36), Some(16097183)],
6287 [Some(37), Some(16097184)],
6288 [Some(38), Some(16097185)],
6289 [Some(39), Some(16097186)],
6290 [Some(40), Some(16097187)],
6291 [Some(41), Some(16097188)],
6292 [Some(42), Some(16097189)],
6293 [Some(43), Some(16097190)],
6294 [Some(44), Some(16097191)],
6295 [Some(45), Some(16097192)],
6296 [Some(46), Some(16097193)],
6297 [Some(47), Some(16097194)],
6298 [Some(48), Some(16097195)],
6299 [Some(49), Some(16097196)],
6300 [Some(50), Some(16097197)]
6301 ]
6302 );
6303 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6304 assert_eq!(
6305 pairs,
6306 vec![
6307 [Some(0), Some(16117350)],
6308 [Some(1), Some(16117351)],
6309 [Some(2), Some(16117352)],
6310 [Some(3), Some(16117353)],
6311 [Some(4), Some(16117354)],
6312 [Some(5), Some(16117355)],
6313 [Some(6), Some(16117356)],
6314 [Some(7), Some(16117357)],
6315 [Some(8), Some(16117358)],
6316 [Some(9), Some(16117359)],
6317 [Some(10), Some(16117360)],
6318 [Some(11), Some(16117361)],
6319 [Some(12), Some(16117362)],
6320 [Some(13), Some(16117363)],
6321 [Some(14), Some(16117364)],
6322 [Some(15), Some(16117365)],
6323 [Some(16), Some(16117366)],
6324 [Some(17), Some(16117367)],
6325 [Some(18), Some(16117368)],
6326 [Some(19), Some(16117369)],
6327 [Some(20), Some(16117370)],
6328 [Some(21), Some(16117371)],
6329 [Some(22), Some(16117372)],
6330 [Some(23), Some(16117373)],
6331 [Some(24), Some(16117374)],
6332 [Some(25), Some(16117375)],
6333 [Some(26), Some(16117376)],
6334 [Some(27), Some(16117377)],
6335 [Some(28), Some(16117378)],
6336 [Some(29), Some(16117379)],
6337 [Some(30), Some(16117380)],
6338 [Some(31), Some(16117381)],
6339 [Some(32), Some(16117382)],
6340 [Some(33), Some(16117383)],
6341 [Some(34), Some(16117384)],
6342 [Some(35), Some(16117385)],
6343 [Some(36), Some(16117386)],
6344 [Some(37), Some(16117387)],
6345 [Some(38), Some(16117388)],
6346 [Some(39), Some(16117389)],
6347 [Some(40), Some(16117390)],
6348 [Some(41), Some(16117391)],
6349 [Some(42), Some(16117392)],
6350 [Some(43), Some(16117393)],
6351 [Some(44), Some(16117394)],
6352 [Some(45), Some(16117395)],
6353 [Some(46), Some(16117396)],
6354 [Some(47), Some(16117397)],
6355 [Some(48), Some(16117398)],
6356 [Some(49), Some(16117399)],
6357 [Some(50), Some(16117400)]
6358 ]
6359 );
6360 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6361 assert_eq!(
6362 pairs,
6363 vec![
6364 [Some(0), Some(16118483)],
6365 [Some(1), Some(16118484)],
6366 [Some(2), Some(16118485)],
6367 [Some(3), Some(16118486)],
6368 [Some(4), Some(16118487)],
6369 [Some(5), Some(16118488)],
6370 [Some(6), Some(16118489)],
6371 [Some(7), Some(16118490)],
6372 [Some(8), Some(16118491)],
6373 [Some(9), Some(16118492)],
6374 [Some(10), Some(16118493)],
6375 [Some(11), Some(16118494)],
6376 [Some(12), Some(16118495)],
6377 [Some(13), Some(16118496)],
6378 [Some(14), Some(16118497)],
6379 [Some(15), Some(16118498)],
6380 [Some(16), Some(16118499)],
6381 [Some(17), Some(16118500)],
6382 [Some(18), Some(16118501)],
6383 [Some(19), Some(16118502)],
6384 [Some(20), Some(16118503)],
6385 [Some(21), Some(16118504)],
6386 [Some(22), Some(16118505)],
6387 [Some(23), Some(16118506)],
6388 [Some(24), Some(16118507)],
6389 [Some(25), Some(16118508)],
6390 [Some(26), Some(16118509)],
6391 [Some(27), Some(16118510)],
6392 [Some(28), Some(16118511)],
6393 [Some(29), Some(16118512)],
6394 [Some(30), Some(16118513)],
6395 [Some(31), Some(16118514)],
6396 [Some(32), Some(16118515)],
6397 [Some(33), Some(16118516)],
6398 [Some(34), Some(16118517)],
6399 [Some(35), Some(16118518)],
6400 [Some(36), Some(16118519)],
6401 [Some(37), Some(16118520)],
6402 [Some(38), Some(16118521)],
6403 [Some(39), Some(16118522)],
6404 [Some(40), Some(16118523)],
6405 [Some(41), Some(16118524)],
6406 [Some(42), Some(16118525)],
6407 [Some(43), Some(16118526)],
6408 [Some(44), Some(16118527)],
6409 [Some(45), Some(16118528)],
6410 [Some(46), Some(16118529)],
6411 [Some(47), Some(16118530)],
6412 [Some(48), Some(16118531)],
6413 [Some(49), Some(16118532)],
6414 [Some(50), Some(16118533)]
6415 ]
6416 );
6417
6418 fn some_count(pairs: &[[Option<i64>; 2]], pos: usize) -> i64 {
6421 pairs.iter().filter(|x| x[pos].is_some()).count() as i64
6422 }
6423 fn none_count(pairs: &[[Option<i64>; 2]], pos: usize) -> i64 {
6424 pairs.iter().filter(|x| x[pos].is_none()).count() as i64
6425 }
6426
6427 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6428 assert_eq!(some_count(&pairs, 0), 51);
6429 assert_eq!(none_count(&pairs, 0), 0);
6430 assert_eq!(some_count(&pairs, 1), 51);
6431 assert_eq!(none_count(&pairs, 1), 0);
6432 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6433 assert_eq!(some_count(&pairs, 0), 51);
6434 assert_eq!(none_count(&pairs, 0), 0);
6435 assert_eq!(some_count(&pairs, 1), 51);
6436 assert_eq!(none_count(&pairs, 1), 0);
6437 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6438 assert_eq!(some_count(&pairs, 0), 51);
6439 assert_eq!(none_count(&pairs, 0), 0);
6440 assert_eq!(some_count(&pairs, 1), 51);
6441 assert_eq!(none_count(&pairs, 1), 0);
6442 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6443 assert_eq!(some_count(&pairs, 0), 51);
6444 assert_eq!(none_count(&pairs, 0), 0);
6445 assert_eq!(some_count(&pairs, 1), 51);
6446 assert_eq!(none_count(&pairs, 1), 0);
6447 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6448 assert_eq!(some_count(&pairs, 0), 51);
6449 assert_eq!(none_count(&pairs, 0), 0);
6450 assert_eq!(some_count(&pairs, 1), 45);
6451 assert_eq!(none_count(&pairs, 1), 6);
6452 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6453 assert_eq!(some_count(&pairs, 0), 51);
6454 assert_eq!(none_count(&pairs, 0), 0);
6455 assert_eq!(some_count(&pairs, 1), 41);
6456 assert_eq!(none_count(&pairs, 1), 10);
6457 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6458 assert_eq!(some_count(&pairs, 0), 51);
6459 assert_eq!(none_count(&pairs, 0), 0);
6460 assert_eq!(some_count(&pairs, 1), 51);
6461 assert_eq!(none_count(&pairs, 1), 0);
6462 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6463 assert_eq!(some_count(&pairs, 0), 51);
6464 assert_eq!(none_count(&pairs, 0), 0);
6465 assert_eq!(some_count(&pairs, 1), 51);
6466 assert_eq!(none_count(&pairs, 1), 0);
6467 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6468 assert_eq!(some_count(&pairs, 0), 51);
6469 assert_eq!(none_count(&pairs, 0), 0);
6470 assert_eq!(some_count(&pairs, 1), 51);
6471 assert_eq!(none_count(&pairs, 1), 0);
6472 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6473 assert_eq!(some_count(&pairs, 0), 51);
6474 assert_eq!(none_count(&pairs, 0), 0);
6475 assert_eq!(some_count(&pairs, 1), 51);
6476 assert_eq!(none_count(&pairs, 1), 0);
6477 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6478 assert_eq!(some_count(&pairs, 0), 51);
6479 assert_eq!(none_count(&pairs, 0), 0);
6480 assert_eq!(some_count(&pairs, 1), 42);
6481 assert_eq!(none_count(&pairs, 1), 9);
6482 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6483 assert_eq!(some_count(&pairs, 0), 51);
6484 assert_eq!(none_count(&pairs, 0), 0);
6485 assert_eq!(some_count(&pairs, 1), 51);
6486 assert_eq!(none_count(&pairs, 1), 0);
6487 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6488 assert_eq!(some_count(&pairs, 0), 51);
6489 assert_eq!(none_count(&pairs, 0), 0);
6490 assert_eq!(some_count(&pairs, 1), 50);
6491 assert_eq!(none_count(&pairs, 1), 1);
6492 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6493 assert_eq!(some_count(&pairs, 0), 51);
6494 assert_eq!(none_count(&pairs, 0), 0);
6495 assert_eq!(some_count(&pairs, 1), 45);
6496 assert_eq!(none_count(&pairs, 1), 6);
6497 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6498 assert_eq!(some_count(&pairs, 0), 51);
6499 assert_eq!(none_count(&pairs, 0), 0);
6500 assert_eq!(some_count(&pairs, 1), 48);
6501 assert_eq!(none_count(&pairs, 1), 3);
6502 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6503 assert_eq!(some_count(&pairs, 0), 51);
6504 assert_eq!(none_count(&pairs, 0), 0);
6505 assert_eq!(some_count(&pairs, 1), 42);
6506 assert_eq!(none_count(&pairs, 1), 9);
6507 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6508 assert_eq!(some_count(&pairs, 0), 51);
6509 assert_eq!(none_count(&pairs, 0), 0);
6510 assert_eq!(some_count(&pairs, 1), 38);
6511 assert_eq!(none_count(&pairs, 1), 13);
6512 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6513 assert_eq!(some_count(&pairs, 0), 51);
6514 assert_eq!(none_count(&pairs, 0), 0);
6515 assert_eq!(some_count(&pairs, 1), 44);
6516 assert_eq!(none_count(&pairs, 1), 7);
6517 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6518 assert_eq!(some_count(&pairs, 0), 51);
6519 assert_eq!(none_count(&pairs, 0), 0);
6520 assert_eq!(some_count(&pairs, 1), 46);
6521 assert_eq!(none_count(&pairs, 1), 5);
6522 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6523 assert_eq!(some_count(&pairs, 0), 51);
6524 assert_eq!(none_count(&pairs, 0), 0);
6525 assert_eq!(some_count(&pairs, 1), 47);
6526 assert_eq!(none_count(&pairs, 1), 4);
6527 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6528 assert_eq!(some_count(&pairs, 0), 51);
6529 assert_eq!(none_count(&pairs, 0), 0);
6530 assert_eq!(some_count(&pairs, 1), 50);
6531 assert_eq!(none_count(&pairs, 1), 1);
6532 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6533 assert_eq!(some_count(&pairs, 0), 51);
6534 assert_eq!(none_count(&pairs, 0), 2183);
6535 assert_eq!(some_count(&pairs, 1), 2234);
6536 assert_eq!(none_count(&pairs, 1), 0);
6537 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6538 assert_eq!(some_count(&pairs, 0), 51);
6539 assert_eq!(none_count(&pairs, 0), 2183);
6540 assert_eq!(some_count(&pairs, 1), 2234);
6541 assert_eq!(none_count(&pairs, 1), 0);
6542 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6543 assert_eq!(some_count(&pairs, 0), 51);
6544 assert_eq!(none_count(&pairs, 0), 2183);
6545 assert_eq!(some_count(&pairs, 1), 2234);
6546 assert_eq!(none_count(&pairs, 1), 0);
6547 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6548 assert_eq!(some_count(&pairs, 0), 51);
6549 assert_eq!(none_count(&pairs, 0), 0);
6550 assert_eq!(some_count(&pairs, 1), 33);
6551 assert_eq!(none_count(&pairs, 1), 18);
6552 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6553 assert_eq!(some_count(&pairs, 0), 51);
6554 assert_eq!(none_count(&pairs, 0), 0);
6555 assert_eq!(some_count(&pairs, 1), 48);
6556 assert_eq!(none_count(&pairs, 1), 3);
6557 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6558 assert_eq!(some_count(&pairs, 0), 51);
6559 assert_eq!(none_count(&pairs, 0), 0);
6560 assert_eq!(some_count(&pairs, 1), 45);
6561 assert_eq!(none_count(&pairs, 1), 6);
6562 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6563 assert_eq!(some_count(&pairs, 0), 51);
6564 assert_eq!(none_count(&pairs, 0), 11832);
6565 assert_eq!(some_count(&pairs, 1), 11883);
6566 assert_eq!(none_count(&pairs, 1), 0);
6567 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6568 assert_eq!(some_count(&pairs, 0), 51);
6569 assert_eq!(none_count(&pairs, 0), 12542);
6570 assert_eq!(some_count(&pairs, 1), 12593);
6571 assert_eq!(none_count(&pairs, 1), 0);
6572 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6573 assert_eq!(some_count(&pairs, 0), 51);
6574 assert_eq!(none_count(&pairs, 0), 12542);
6575 assert_eq!(some_count(&pairs, 1), 12593);
6576 assert_eq!(none_count(&pairs, 1), 0);
6577 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6578 assert_eq!(some_count(&pairs, 0), 51);
6579 assert_eq!(none_count(&pairs, 0), 12542);
6580 assert_eq!(some_count(&pairs, 1), 12593);
6581 assert_eq!(none_count(&pairs, 1), 0);
6582 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6583 assert_eq!(some_count(&pairs, 0), 51);
6584 assert_eq!(none_count(&pairs, 0), 12542);
6585 assert_eq!(some_count(&pairs, 1), 12593);
6586 assert_eq!(none_count(&pairs, 1), 0);
6587 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6588 assert_eq!(some_count(&pairs, 0), 51);
6589 assert_eq!(none_count(&pairs, 0), 12542);
6590 assert_eq!(some_count(&pairs, 1), 12593);
6591 assert_eq!(none_count(&pairs, 1), 0);
6592 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6593 assert_eq!(some_count(&pairs, 0), 51);
6594 assert_eq!(none_count(&pairs, 0), 12542);
6595 assert_eq!(some_count(&pairs, 1), 12593);
6596 assert_eq!(none_count(&pairs, 1), 0);
6597 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6598 assert_eq!(some_count(&pairs, 0), 51);
6599 assert_eq!(none_count(&pairs, 0), 12542);
6600 assert_eq!(some_count(&pairs, 1), 12593);
6601 assert_eq!(none_count(&pairs, 1), 0);
6602 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6603 assert_eq!(some_count(&pairs, 0), 51);
6604 assert_eq!(none_count(&pairs, 0), 12542);
6605 assert_eq!(some_count(&pairs, 1), 12593);
6606 assert_eq!(none_count(&pairs, 1), 0);
6607 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6608 assert_eq!(some_count(&pairs, 0), 51);
6609 assert_eq!(none_count(&pairs, 0), 1467);
6610 assert_eq!(some_count(&pairs, 1), 1517);
6611 assert_eq!(none_count(&pairs, 1), 1);
6612 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6613 assert_eq!(some_count(&pairs, 0), 51);
6614 assert_eq!(none_count(&pairs, 0), 1609);
6615 assert_eq!(some_count(&pairs, 1), 1660);
6616 assert_eq!(none_count(&pairs, 1), 0);
6617 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6618 assert_eq!(some_count(&pairs, 0), 51);
6619 assert_eq!(none_count(&pairs, 0), 1609);
6620 assert_eq!(some_count(&pairs, 1), 1660);
6621 assert_eq!(none_count(&pairs, 1), 0);
6622 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6623 assert_eq!(some_count(&pairs, 0), 51);
6624 assert_eq!(none_count(&pairs, 0), 1609);
6625 assert_eq!(some_count(&pairs, 1), 1660);
6626 assert_eq!(none_count(&pairs, 1), 0);
6627 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6628 assert_eq!(some_count(&pairs, 0), 51);
6629 assert_eq!(none_count(&pairs, 0), 95);
6630 assert_eq!(some_count(&pairs, 1), 145);
6631 assert_eq!(none_count(&pairs, 1), 1);
6632 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6633 assert_eq!(some_count(&pairs, 0), 51);
6634 assert_eq!(none_count(&pairs, 0), 538);
6635 assert_eq!(some_count(&pairs, 1), 588);
6636 assert_eq!(none_count(&pairs, 1), 1);
6637 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6638 assert_eq!(some_count(&pairs, 0), 51);
6639 assert_eq!(none_count(&pairs, 0), 538);
6640 assert_eq!(some_count(&pairs, 1), 588);
6641 assert_eq!(none_count(&pairs, 1), 1);
6642 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6643 assert_eq!(some_count(&pairs, 0), 51);
6644 assert_eq!(none_count(&pairs, 0), 538);
6645 assert_eq!(some_count(&pairs, 1), 588);
6646 assert_eq!(none_count(&pairs, 1), 1);
6647 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6648 assert_eq!(some_count(&pairs, 0), 51);
6649 assert_eq!(none_count(&pairs, 0), 1);
6650 assert_eq!(some_count(&pairs, 1), 51);
6651 assert_eq!(none_count(&pairs, 1), 1);
6652 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6653 assert_eq!(some_count(&pairs, 0), 51);
6654 assert_eq!(none_count(&pairs, 0), 1);
6655 assert_eq!(some_count(&pairs, 1), 49);
6656 assert_eq!(none_count(&pairs, 1), 3);
6657 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6658 assert_eq!(some_count(&pairs, 0), 51);
6659 assert_eq!(none_count(&pairs, 0), 1);
6660 assert_eq!(some_count(&pairs, 1), 45);
6661 assert_eq!(none_count(&pairs, 1), 7);
6662 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6663 assert_eq!(some_count(&pairs, 0), 51);
6664 assert_eq!(none_count(&pairs, 0), 0);
6665 assert_eq!(some_count(&pairs, 1), 39);
6666 assert_eq!(none_count(&pairs, 1), 12);
6667 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6668 assert_eq!(some_count(&pairs, 0), 51);
6669 assert_eq!(none_count(&pairs, 0), 1892);
6670 assert_eq!(some_count(&pairs, 1), 1938);
6671 assert_eq!(none_count(&pairs, 1), 5);
6672 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6673 assert_eq!(some_count(&pairs, 0), 51);
6674 assert_eq!(none_count(&pairs, 0), 1892);
6675 assert_eq!(some_count(&pairs, 1), 1941);
6676 assert_eq!(none_count(&pairs, 1), 2);
6677 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6678 assert_eq!(some_count(&pairs, 0), 51);
6679 assert_eq!(none_count(&pairs, 0), 2288);
6680 assert_eq!(some_count(&pairs, 1), 2338);
6681 assert_eq!(none_count(&pairs, 1), 1);
6682 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6683 assert_eq!(some_count(&pairs, 0), 51);
6684 assert_eq!(none_count(&pairs, 0), 14680);
6685 assert_eq!(some_count(&pairs, 1), 14729);
6686 assert_eq!(none_count(&pairs, 1), 2);
6687 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6688 assert_eq!(some_count(&pairs, 0), 51);
6689 assert_eq!(none_count(&pairs, 0), 4027);
6690 assert_eq!(some_count(&pairs, 1), 4074);
6691 assert_eq!(none_count(&pairs, 1), 4);
6692 }
6693
6694 #[test]
6695 fn test_aligned_block_pairs() {
6696 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
6697 let mut it = bam.records();
6698
6699 let read = it.next().unwrap().unwrap();
6700 let pairs: Vec<_> = read.aligned_pairs().collect();
6701 let block_pairs: Vec<_> = read.aligned_block_pairs().collect();
6702
6703 assert_eq!(pairs[0][0], block_pairs[0].0[0]); assert_eq!(pairs[0][1], block_pairs[0].1[0]); assert_eq!(
6709 pairs[pairs.len() - 1][0],
6710 block_pairs[block_pairs.len() - 1].0[1] - 1
6711 );
6712 assert_eq!(
6713 pairs[pairs.len() - 1][1],
6714 block_pairs[block_pairs.len() - 1].1[1] - 1
6715 );
6716
6717 for read in it {
6719 let read = read.unwrap();
6720 let pairs: Vec<_> = read.aligned_pairs().collect();
6721 let block_pairs: Vec<_> = read.aligned_block_pairs().collect();
6722 let mut ii = 0;
6723 for ([read_start, read_stop], [genome_start, genome_stop]) in block_pairs {
6724 assert_eq!(read_stop - read_start, genome_stop - genome_start);
6725 for (read_pos, genome_pos) in (read_start..read_stop).zip(genome_start..genome_stop)
6726 {
6727 assert_eq!(pairs[ii][0], read_pos);
6728 assert_eq!(pairs[ii][1], genome_pos);
6729 ii += 1;
6730 }
6731 }
6732 }
6733 }
6734
6735 #[test]
6736 fn test_get_cigar_stats() {
6737 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
6738 let mut it = bam.records();
6739
6740 fn to_arr(hm: HashMap<Cigar, i32>) -> [i32; 9] {
6741 [
6742 *hm.get(&Cigar::Match(0)).unwrap(),
6743 *hm.get(&Cigar::Ins(0)).unwrap(),
6744 *hm.get(&Cigar::Del(0)).unwrap(),
6745 *hm.get(&Cigar::RefSkip(0)).unwrap(),
6746 *hm.get(&Cigar::SoftClip(0)).unwrap(),
6747 *hm.get(&Cigar::HardClip(0)).unwrap(),
6748 *hm.get(&Cigar::Pad(0)).unwrap(),
6749 *hm.get(&Cigar::Equal(0)).unwrap(),
6750 *hm.get(&Cigar::Diff(0)).unwrap(),
6751 ]
6752 }
6753
6754 let read = it.next().unwrap().unwrap();
6755 let cigar_nucleotides = read.cigar_stats_nucleotides();
6756 assert_eq!(to_arr(cigar_nucleotides), [45, 0, 0, 0, 6, 0, 0, 0, 0]);
6757 let cigar_blocks = read.cigar_stats_blocks();
6758 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6759 let read = it.next().unwrap().unwrap();
6760 let cigar_nucleotides = read.cigar_stats_nucleotides();
6761 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 2, 0, 0, 0, 0, 0, 0]);
6762 let cigar_blocks = read.cigar_stats_blocks();
6763 assert_eq!(to_arr(cigar_blocks), [2, 0, 1, 0, 0, 0, 0, 0, 0]);
6764 let read = it.next().unwrap().unwrap();
6765 let cigar_nucleotides = read.cigar_stats_nucleotides();
6766 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 2, 0, 0, 0, 0, 0, 0]);
6767 let cigar_blocks = read.cigar_stats_blocks();
6768 assert_eq!(to_arr(cigar_blocks), [2, 0, 1, 0, 0, 0, 0, 0, 0]);
6769 let read = it.next().unwrap().unwrap();
6770 let cigar_nucleotides = read.cigar_stats_nucleotides();
6771 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6772 let cigar_blocks = read.cigar_stats_blocks();
6773 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6774 let read = it.next().unwrap().unwrap();
6775 let cigar_nucleotides = read.cigar_stats_nucleotides();
6776 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6777 let cigar_blocks = read.cigar_stats_blocks();
6778 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6779 let read = it.next().unwrap().unwrap();
6780 let cigar_nucleotides = read.cigar_stats_nucleotides();
6781 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6782 let cigar_blocks = read.cigar_stats_blocks();
6783 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6784 let read = it.next().unwrap().unwrap();
6785 let cigar_nucleotides = read.cigar_stats_nucleotides();
6786 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6787 let cigar_blocks = read.cigar_stats_blocks();
6788 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6789 let read = it.next().unwrap().unwrap();
6790 let cigar_nucleotides = read.cigar_stats_nucleotides();
6791 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6792 let cigar_blocks = read.cigar_stats_blocks();
6793 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6794 let read = it.next().unwrap().unwrap();
6795 let cigar_nucleotides = read.cigar_stats_nucleotides();
6796 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6797 let cigar_blocks = read.cigar_stats_blocks();
6798 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6799 let read = it.next().unwrap().unwrap();
6800 let cigar_nucleotides = read.cigar_stats_nucleotides();
6801 assert_eq!(to_arr(cigar_nucleotides), [45, 0, 0, 0, 6, 0, 0, 0, 0]);
6802 let cigar_blocks = read.cigar_stats_blocks();
6803 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6804 let read = it.next().unwrap().unwrap();
6805 let cigar_nucleotides = read.cigar_stats_nucleotides();
6806 assert_eq!(to_arr(cigar_nucleotides), [41, 0, 0, 0, 10, 0, 0, 0, 0]);
6807 let cigar_blocks = read.cigar_stats_blocks();
6808 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6809 let read = it.next().unwrap().unwrap();
6810 let cigar_nucleotides = read.cigar_stats_nucleotides();
6811 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6812 let cigar_blocks = read.cigar_stats_blocks();
6813 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6814 let read = it.next().unwrap().unwrap();
6815 let cigar_nucleotides = read.cigar_stats_nucleotides();
6816 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6817 let cigar_blocks = read.cigar_stats_blocks();
6818 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6819 let read = it.next().unwrap().unwrap();
6820 let cigar_nucleotides = read.cigar_stats_nucleotides();
6821 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6822 let cigar_blocks = read.cigar_stats_blocks();
6823 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6824 let read = it.next().unwrap().unwrap();
6825 let cigar_nucleotides = read.cigar_stats_nucleotides();
6826 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6827 let cigar_blocks = read.cigar_stats_blocks();
6828 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6829 let read = it.next().unwrap().unwrap();
6830 let cigar_nucleotides = read.cigar_stats_nucleotides();
6831 assert_eq!(to_arr(cigar_nucleotides), [42, 0, 0, 0, 9, 0, 0, 0, 0]);
6832 let cigar_blocks = read.cigar_stats_blocks();
6833 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6834 let read = it.next().unwrap().unwrap();
6835 let cigar_nucleotides = read.cigar_stats_nucleotides();
6836 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6837 let cigar_blocks = read.cigar_stats_blocks();
6838 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6839 let read = it.next().unwrap().unwrap();
6840 let cigar_nucleotides = read.cigar_stats_nucleotides();
6841 assert_eq!(to_arr(cigar_nucleotides), [50, 0, 0, 0, 1, 0, 0, 0, 0]);
6842 let cigar_blocks = read.cigar_stats_blocks();
6843 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6844 let read = it.next().unwrap().unwrap();
6845 let cigar_nucleotides = read.cigar_stats_nucleotides();
6846 assert_eq!(to_arr(cigar_nucleotides), [45, 0, 0, 0, 6, 0, 0, 0, 0]);
6847 let cigar_blocks = read.cigar_stats_blocks();
6848 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6849 let read = it.next().unwrap().unwrap();
6850 let cigar_nucleotides = read.cigar_stats_nucleotides();
6851 assert_eq!(to_arr(cigar_nucleotides), [48, 0, 0, 0, 3, 0, 0, 0, 0]);
6852 let cigar_blocks = read.cigar_stats_blocks();
6853 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6854 let read = it.next().unwrap().unwrap();
6855 let cigar_nucleotides = read.cigar_stats_nucleotides();
6856 assert_eq!(to_arr(cigar_nucleotides), [42, 0, 0, 0, 9, 0, 0, 0, 0]);
6857 let cigar_blocks = read.cigar_stats_blocks();
6858 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6859 let read = it.next().unwrap().unwrap();
6860 let cigar_nucleotides = read.cigar_stats_nucleotides();
6861 assert_eq!(to_arr(cigar_nucleotides), [38, 0, 0, 0, 13, 0, 0, 0, 0]);
6862 let cigar_blocks = read.cigar_stats_blocks();
6863 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6864 let read = it.next().unwrap().unwrap();
6865 let cigar_nucleotides = read.cigar_stats_nucleotides();
6866 assert_eq!(to_arr(cigar_nucleotides), [44, 0, 0, 0, 7, 0, 0, 0, 0]);
6867 let cigar_blocks = read.cigar_stats_blocks();
6868 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6869 let read = it.next().unwrap().unwrap();
6870 let cigar_nucleotides = read.cigar_stats_nucleotides();
6871 assert_eq!(to_arr(cigar_nucleotides), [46, 0, 0, 0, 5, 0, 0, 0, 0]);
6872 let cigar_blocks = read.cigar_stats_blocks();
6873 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6874 let read = it.next().unwrap().unwrap();
6875 let cigar_nucleotides = read.cigar_stats_nucleotides();
6876 assert_eq!(to_arr(cigar_nucleotides), [47, 4, 0, 0, 0, 0, 0, 0, 0]);
6877 let cigar_blocks = read.cigar_stats_blocks();
6878 assert_eq!(to_arr(cigar_blocks), [2, 1, 0, 0, 0, 0, 0, 0, 0]);
6879 let read = it.next().unwrap().unwrap();
6880 let cigar_nucleotides = read.cigar_stats_nucleotides();
6881 assert_eq!(to_arr(cigar_nucleotides), [50, 1, 0, 0, 0, 0, 0, 0, 0]);
6882 let cigar_blocks = read.cigar_stats_blocks();
6883 assert_eq!(to_arr(cigar_blocks), [2, 1, 0, 0, 0, 0, 0, 0, 0]);
6884 let read = it.next().unwrap().unwrap();
6885 let cigar_nucleotides = read.cigar_stats_nucleotides();
6886 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 2183, 0, 0, 0, 0, 0]);
6887 let cigar_blocks = read.cigar_stats_blocks();
6888 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 0, 0, 0, 0, 0]);
6889 let read = it.next().unwrap().unwrap();
6890 let cigar_nucleotides = read.cigar_stats_nucleotides();
6891 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 2183, 0, 0, 0, 0, 0]);
6892 let cigar_blocks = read.cigar_stats_blocks();
6893 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 0, 0, 0, 0, 0]);
6894 let read = it.next().unwrap().unwrap();
6895 let cigar_nucleotides = read.cigar_stats_nucleotides();
6896 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 2183, 0, 0, 0, 0, 0]);
6897 let cigar_blocks = read.cigar_stats_blocks();
6898 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 0, 0, 0, 0, 0]);
6899 let read = it.next().unwrap().unwrap();
6900 let cigar_nucleotides = read.cigar_stats_nucleotides();
6901 assert_eq!(to_arr(cigar_nucleotides), [33, 0, 0, 0, 18, 0, 0, 0, 0]);
6902 let cigar_blocks = read.cigar_stats_blocks();
6903 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 2, 0, 0, 0, 0]);
6904 let read = it.next().unwrap().unwrap();
6905 let cigar_nucleotides = read.cigar_stats_nucleotides();
6906 assert_eq!(to_arr(cigar_nucleotides), [48, 0, 0, 0, 3, 0, 0, 0, 0]);
6907 let cigar_blocks = read.cigar_stats_blocks();
6908 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 2, 0, 0, 0, 0]);
6909 let read = it.next().unwrap().unwrap();
6910 let cigar_nucleotides = read.cigar_stats_nucleotides();
6911 assert_eq!(to_arr(cigar_nucleotides), [45, 0, 0, 0, 6, 0, 0, 0, 0]);
6912 let cigar_blocks = read.cigar_stats_blocks();
6913 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 2, 0, 0, 0, 0]);
6914 let read = it.next().unwrap().unwrap();
6915 let cigar_nucleotides = read.cigar_stats_nucleotides();
6916 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 11832, 0, 0, 0, 0, 0]);
6917 let cigar_blocks = read.cigar_stats_blocks();
6918 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 0, 0, 0, 0, 0]);
6919 let read = it.next().unwrap().unwrap();
6920 let cigar_nucleotides = read.cigar_stats_nucleotides();
6921 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 12542, 0, 0, 0, 0, 0],);
6922 let cigar_blocks = read.cigar_stats_blocks();
6923 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
6924 let read = it.next().unwrap().unwrap();
6925 let cigar_nucleotides = read.cigar_stats_nucleotides();
6926 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 12542, 0, 0, 0, 0, 0],);
6927 let cigar_blocks = read.cigar_stats_blocks();
6928 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
6929 let read = it.next().unwrap().unwrap();
6930 let cigar_nucleotides = read.cigar_stats_nucleotides();
6931 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 12542, 0, 0, 0, 0, 0],);
6932 let cigar_blocks = read.cigar_stats_blocks();
6933 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
6934 let read = it.next().unwrap().unwrap();
6935 let cigar_nucleotides = read.cigar_stats_nucleotides();
6936 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 12542, 0, 0, 0, 0, 0],);
6937 let cigar_blocks = read.cigar_stats_blocks();
6938 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
6939 let read = it.next().unwrap().unwrap();
6940 let cigar_nucleotides = read.cigar_stats_nucleotides();
6941 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 12542, 0, 0, 0, 0, 0],);
6942 let cigar_blocks = read.cigar_stats_blocks();
6943 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
6944 let read = it.next().unwrap().unwrap();
6945 let cigar_nucleotides = read.cigar_stats_nucleotides();
6946 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 12542, 0, 0, 0, 0, 0],);
6947 let cigar_blocks = read.cigar_stats_blocks();
6948 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
6949 let read = it.next().unwrap().unwrap();
6950 let cigar_nucleotides = read.cigar_stats_nucleotides();
6951 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 12542, 0, 0, 0, 0, 0],);
6952 let cigar_blocks = read.cigar_stats_blocks();
6953 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
6954 let read = it.next().unwrap().unwrap();
6955 let cigar_nucleotides = read.cigar_stats_nucleotides();
6956 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 12542, 0, 0, 0, 0, 0],);
6957 let cigar_blocks = read.cigar_stats_blocks();
6958 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
6959 let read = it.next().unwrap().unwrap();
6960 let cigar_nucleotides = read.cigar_stats_nucleotides();
6961 assert_eq!(to_arr(cigar_nucleotides), [50, 0, 0, 1467, 1, 0, 0, 0, 0]);
6962 let cigar_blocks = read.cigar_stats_blocks();
6963 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 1, 0, 0, 0, 0]);
6964 let read = it.next().unwrap().unwrap();
6965 let cigar_nucleotides = read.cigar_stats_nucleotides();
6966 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 1609, 0, 0, 0, 0, 0]);
6967 let cigar_blocks = read.cigar_stats_blocks();
6968 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
6969 let read = it.next().unwrap().unwrap();
6970 let cigar_nucleotides = read.cigar_stats_nucleotides();
6971 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 1609, 0, 0, 0, 0, 0]);
6972 let cigar_blocks = read.cigar_stats_blocks();
6973 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
6974 let read = it.next().unwrap().unwrap();
6975 let cigar_nucleotides = read.cigar_stats_nucleotides();
6976 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 1609, 0, 0, 0, 0, 0]);
6977 let cigar_blocks = read.cigar_stats_blocks();
6978 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
6979 let read = it.next().unwrap().unwrap();
6980 let cigar_nucleotides = read.cigar_stats_nucleotides();
6981 assert_eq!(to_arr(cigar_nucleotides), [50, 0, 0, 95, 1, 0, 0, 0, 0]);
6982 let cigar_blocks = read.cigar_stats_blocks();
6983 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 1, 0, 0, 0, 0]);
6984 let read = it.next().unwrap().unwrap();
6985 let cigar_nucleotides = read.cigar_stats_nucleotides();
6986 assert_eq!(to_arr(cigar_nucleotides), [50, 0, 0, 538, 1, 0, 0, 0, 0]);
6987 let cigar_blocks = read.cigar_stats_blocks();
6988 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 1, 0, 0, 0, 0]);
6989 let read = it.next().unwrap().unwrap();
6990 let cigar_nucleotides = read.cigar_stats_nucleotides();
6991 assert_eq!(to_arr(cigar_nucleotides), [50, 0, 0, 538, 1, 0, 0, 0, 0]);
6992 let cigar_blocks = read.cigar_stats_blocks();
6993 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 1, 0, 0, 0, 0]);
6994 let read = it.next().unwrap().unwrap();
6995 let cigar_nucleotides = read.cigar_stats_nucleotides();
6996 assert_eq!(to_arr(cigar_nucleotides), [50, 0, 0, 538, 1, 0, 0, 0, 0]);
6997 let cigar_blocks = read.cigar_stats_blocks();
6998 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 1, 0, 0, 0, 0]);
6999 let read = it.next().unwrap().unwrap();
7000 let cigar_nucleotides = read.cigar_stats_nucleotides();
7001 assert_eq!(to_arr(cigar_nucleotides), [50, 0, 1, 0, 1, 0, 0, 0, 0]);
7002 let cigar_blocks = read.cigar_stats_blocks();
7003 assert_eq!(to_arr(cigar_blocks), [2, 0, 1, 0, 1, 0, 0, 0, 0]);
7004 let read = it.next().unwrap().unwrap();
7005 let cigar_nucleotides = read.cigar_stats_nucleotides();
7006 assert_eq!(to_arr(cigar_nucleotides), [48, 0, 1, 0, 3, 0, 0, 0, 0]);
7007 let cigar_blocks = read.cigar_stats_blocks();
7008 assert_eq!(to_arr(cigar_blocks), [2, 0, 1, 0, 1, 0, 0, 0, 0]);
7009 let read = it.next().unwrap().unwrap();
7010 let cigar_nucleotides = read.cigar_stats_nucleotides();
7011 assert_eq!(to_arr(cigar_nucleotides), [44, 0, 1, 0, 7, 0, 0, 0, 0]);
7012 let cigar_blocks = read.cigar_stats_blocks();
7013 assert_eq!(to_arr(cigar_blocks), [2, 0, 1, 0, 1, 0, 0, 0, 0]);
7014 let read = it.next().unwrap().unwrap();
7015 let cigar_nucleotides = read.cigar_stats_nucleotides();
7016 assert_eq!(to_arr(cigar_nucleotides), [39, 1, 0, 0, 11, 0, 0, 0, 0]);
7017 let cigar_blocks = read.cigar_stats_blocks();
7018 assert_eq!(to_arr(cigar_blocks), [2, 1, 0, 0, 1, 0, 0, 0, 0]);
7019 let read = it.next().unwrap().unwrap();
7020 let cigar_nucleotides = read.cigar_stats_nucleotides();
7021 assert_eq!(to_arr(cigar_nucleotides), [46, 0, 0, 1892, 5, 0, 0, 0, 0]);
7022 let cigar_blocks = read.cigar_stats_blocks();
7023 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 1, 0, 0, 0, 0]);
7024 let read = it.next().unwrap().unwrap();
7025 let cigar_nucleotides = read.cigar_stats_nucleotides();
7026 assert_eq!(to_arr(cigar_nucleotides), [49, 0, 0, 1892, 2, 0, 0, 0, 0]);
7027 let cigar_blocks = read.cigar_stats_blocks();
7028 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 1, 0, 0, 0, 0]);
7029 let read = it.next().unwrap().unwrap();
7030 let cigar_nucleotides = read.cigar_stats_nucleotides();
7031 assert_eq!(to_arr(cigar_nucleotides), [50, 0, 3, 2285, 1, 0, 0, 0, 0]);
7032 let cigar_blocks = read.cigar_stats_blocks();
7033 assert_eq!(to_arr(cigar_blocks), [3, 0, 1, 1, 1, 0, 0, 0, 0]);
7034 let read = it.next().unwrap().unwrap();
7035 let cigar_nucleotides = read.cigar_stats_nucleotides();
7036 assert_eq!(to_arr(cigar_nucleotides), [49, 0, 0, 14680, 2, 0, 0, 0, 0],);
7037 let cigar_blocks = read.cigar_stats_blocks();
7038 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 1, 0, 0, 0, 0]);
7039 let read = it.next().unwrap().unwrap();
7040 let cigar_nucleotides = read.cigar_stats_nucleotides();
7041 assert_eq!(to_arr(cigar_nucleotides), [47, 0, 0, 4027, 4, 0, 0, 0, 0]);
7042 let cigar_blocks = read.cigar_stats_blocks();
7043 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 1, 0, 0, 0, 0]);
7044 }
7045
7046 #[test]
7047 fn test_reference_positions() {
7048 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
7049 let mut it = bam.records();
7050
7051 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7052 assert_eq!(
7053 rp,
7054 vec![
7055 16050676, 16050677, 16050678, 16050679, 16050680, 16050681, 16050682, 16050683,
7056 16050684, 16050685, 16050686, 16050687, 16050688, 16050689, 16050690, 16050691,
7057 16050692, 16050693, 16050694, 16050695, 16050696, 16050697, 16050698, 16050699,
7058 16050700, 16050701, 16050702, 16050703, 16050704, 16050705, 16050706, 16050707,
7059 16050708, 16050709, 16050710, 16050711, 16050712, 16050713, 16050714, 16050715,
7060 16050716, 16050717, 16050718, 16050719, 16050720
7061 ]
7062 );
7063 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7064 assert_eq!(
7065 rp,
7066 vec![
7067 16096878, 16096879, 16096880, 16096881, 16096882, 16096883, 16096884, 16096887,
7068 16096888, 16096889, 16096890, 16096891, 16096892, 16096893, 16096894, 16096895,
7069 16096896, 16096897, 16096898, 16096899, 16096900, 16096901, 16096902, 16096903,
7070 16096904, 16096905, 16096906, 16096907, 16096908, 16096909, 16096910, 16096911,
7071 16096912, 16096913, 16096914, 16096915, 16096916, 16096917, 16096918, 16096919,
7072 16096920, 16096921, 16096922, 16096923, 16096924, 16096925, 16096926, 16096927,
7073 16096928, 16096929, 16096930
7074 ]
7075 );
7076 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7077 assert_eq!(
7078 rp,
7079 vec![
7080 16097145, 16097146, 16097147, 16097148, 16097149, 16097150, 16097151, 16097152,
7081 16097153, 16097154, 16097155, 16097156, 16097157, 16097158, 16097159, 16097160,
7082 16097161, 16097162, 16097163, 16097164, 16097165, 16097166, 16097167, 16097168,
7083 16097169, 16097170, 16097171, 16097172, 16097173, 16097176, 16097177, 16097178,
7084 16097179, 16097180, 16097181, 16097182, 16097183, 16097184, 16097185, 16097186,
7085 16097187, 16097188, 16097189, 16097190, 16097191, 16097192, 16097193, 16097194,
7086 16097195, 16097196, 16097197
7087 ]
7088 );
7089 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7090 assert_eq!(
7091 rp,
7092 vec![
7093 16117350, 16117351, 16117352, 16117353, 16117354, 16117355, 16117356, 16117357,
7094 16117358, 16117359, 16117360, 16117361, 16117362, 16117363, 16117364, 16117365,
7095 16117366, 16117367, 16117368, 16117369, 16117370, 16117371, 16117372, 16117373,
7096 16117374, 16117375, 16117376, 16117377, 16117378, 16117379, 16117380, 16117381,
7097 16117382, 16117383, 16117384, 16117385, 16117386, 16117387, 16117388, 16117389,
7098 16117390, 16117391, 16117392, 16117393, 16117394, 16117395, 16117396, 16117397,
7099 16117398, 16117399, 16117400
7100 ]
7101 );
7102 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7103 assert_eq!(
7104 rp,
7105 vec![
7106 16118483, 16118484, 16118485, 16118486, 16118487, 16118488, 16118489, 16118490,
7107 16118491, 16118492, 16118493, 16118494, 16118495, 16118496, 16118497, 16118498,
7108 16118499, 16118500, 16118501, 16118502, 16118503, 16118504, 16118505, 16118506,
7109 16118507, 16118508, 16118509, 16118510, 16118511, 16118512, 16118513, 16118514,
7110 16118515, 16118516, 16118517, 16118518, 16118519, 16118520, 16118521, 16118522,
7111 16118523, 16118524, 16118525, 16118526, 16118527, 16118528, 16118529, 16118530,
7112 16118531, 16118532, 16118533
7113 ]
7114 );
7115 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7116 assert_eq!(
7117 rp,
7118 vec![
7119 16118499, 16118500, 16118501, 16118502, 16118503, 16118504, 16118505, 16118506,
7120 16118507, 16118508, 16118509, 16118510, 16118511, 16118512, 16118513, 16118514,
7121 16118515, 16118516, 16118517, 16118518, 16118519, 16118520, 16118521, 16118522,
7122 16118523, 16118524, 16118525, 16118526, 16118527, 16118528, 16118529, 16118530,
7123 16118531, 16118532, 16118533, 16118534, 16118535, 16118536, 16118537, 16118538,
7124 16118539, 16118540, 16118541, 16118542, 16118543, 16118544, 16118545, 16118546,
7125 16118547, 16118548, 16118549
7126 ]
7127 );
7128 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7129 assert_eq!(
7130 rp,
7131 vec![
7132 16118499, 16118500, 16118501, 16118502, 16118503, 16118504, 16118505, 16118506,
7133 16118507, 16118508, 16118509, 16118510, 16118511, 16118512, 16118513, 16118514,
7134 16118515, 16118516, 16118517, 16118518, 16118519, 16118520, 16118521, 16118522,
7135 16118523, 16118524, 16118525, 16118526, 16118527, 16118528, 16118529, 16118530,
7136 16118531, 16118532, 16118533, 16118534, 16118535, 16118536, 16118537, 16118538,
7137 16118539, 16118540, 16118541, 16118542, 16118543, 16118544, 16118545, 16118546,
7138 16118547, 16118548, 16118549
7139 ]
7140 );
7141 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7142 assert_eq!(
7143 rp,
7144 vec![
7145 16118499, 16118500, 16118501, 16118502, 16118503, 16118504, 16118505, 16118506,
7146 16118507, 16118508, 16118509, 16118510, 16118511, 16118512, 16118513, 16118514,
7147 16118515, 16118516, 16118517, 16118518, 16118519, 16118520, 16118521, 16118522,
7148 16118523, 16118524, 16118525, 16118526, 16118527, 16118528, 16118529, 16118530,
7149 16118531, 16118532, 16118533, 16118534, 16118535, 16118536, 16118537, 16118538,
7150 16118539, 16118540, 16118541, 16118542, 16118543, 16118544, 16118545, 16118546,
7151 16118547, 16118548, 16118549
7152 ]
7153 );
7154 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7155 assert_eq!(
7156 rp,
7157 vec![
7158 16123411, 16123412, 16123413, 16123414, 16123415, 16123416, 16123417, 16123418,
7159 16123419, 16123420, 16123421, 16123422, 16123423, 16123424, 16123425, 16123426,
7160 16123427, 16123428, 16123429, 16123430, 16123431, 16123432, 16123433, 16123434,
7161 16123435, 16123436, 16123437, 16123438, 16123439, 16123440, 16123441, 16123442,
7162 16123443, 16123444, 16123445, 16123446, 16123447, 16123448, 16123449, 16123450,
7163 16123451, 16123452, 16123453, 16123454, 16123455, 16123456, 16123457, 16123458,
7164 16123459, 16123460, 16123461
7165 ]
7166 );
7167 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7168 assert_eq!(
7169 rp,
7170 vec![
7171 16123417, 16123418, 16123419, 16123420, 16123421, 16123422, 16123423, 16123424,
7172 16123425, 16123426, 16123427, 16123428, 16123429, 16123430, 16123431, 16123432,
7173 16123433, 16123434, 16123435, 16123436, 16123437, 16123438, 16123439, 16123440,
7174 16123441, 16123442, 16123443, 16123444, 16123445, 16123446, 16123447, 16123448,
7175 16123449, 16123450, 16123451, 16123452, 16123453, 16123454, 16123455, 16123456,
7176 16123457, 16123458, 16123459, 16123460, 16123461
7177 ]
7178 );
7179 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7180 assert_eq!(
7181 rp,
7182 vec![
7183 16165860, 16165861, 16165862, 16165863, 16165864, 16165865, 16165866, 16165867,
7184 16165868, 16165869, 16165870, 16165871, 16165872, 16165873, 16165874, 16165875,
7185 16165876, 16165877, 16165878, 16165879, 16165880, 16165881, 16165882, 16165883,
7186 16165884, 16165885, 16165886, 16165887, 16165888, 16165889, 16165890, 16165891,
7187 16165892, 16165893, 16165894, 16165895, 16165896, 16165897, 16165898, 16165899,
7188 16165900
7189 ]
7190 );
7191 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7192 assert_eq!(
7193 rp,
7194 vec![
7195 16180871, 16180872, 16180873, 16180874, 16180875, 16180876, 16180877, 16180878,
7196 16180879, 16180880, 16180881, 16180882, 16180883, 16180884, 16180885, 16180886,
7197 16180887, 16180888, 16180889, 16180890, 16180891, 16180892, 16180893, 16180894,
7198 16180895, 16180896, 16180897, 16180898, 16180899, 16180900, 16180901, 16180902,
7199 16180903, 16180904, 16180905, 16180906, 16180907, 16180908, 16180909, 16180910,
7200 16180911, 16180912, 16180913, 16180914, 16180915, 16180916, 16180917, 16180918,
7201 16180919, 16180920, 16180921
7202 ]
7203 );
7204 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7205 assert_eq!(
7206 rp,
7207 vec![
7208 16189705, 16189706, 16189707, 16189708, 16189709, 16189710, 16189711, 16189712,
7209 16189713, 16189714, 16189715, 16189716, 16189717, 16189718, 16189719, 16189720,
7210 16189721, 16189722, 16189723, 16189724, 16189725, 16189726, 16189727, 16189728,
7211 16189729, 16189730, 16189731, 16189732, 16189733, 16189734, 16189735, 16189736,
7212 16189737, 16189738, 16189739, 16189740, 16189741, 16189742, 16189743, 16189744,
7213 16189745, 16189746, 16189747, 16189748, 16189749, 16189750, 16189751, 16189752,
7214 16189753, 16189754, 16189755
7215 ]
7216 );
7217 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7218 assert_eq!(
7219 rp,
7220 vec![
7221 16231271, 16231272, 16231273, 16231274, 16231275, 16231276, 16231277, 16231278,
7222 16231279, 16231280, 16231281, 16231282, 16231283, 16231284, 16231285, 16231286,
7223 16231287, 16231288, 16231289, 16231290, 16231291, 16231292, 16231293, 16231294,
7224 16231295, 16231296, 16231297, 16231298, 16231299, 16231300, 16231301, 16231302,
7225 16231303, 16231304, 16231305, 16231306, 16231307, 16231308, 16231309, 16231310,
7226 16231311, 16231312, 16231313, 16231314, 16231315, 16231316, 16231317, 16231318,
7227 16231319, 16231320, 16231321
7228 ]
7229 );
7230 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7231 assert_eq!(
7232 rp,
7233 vec![
7234 16237657, 16237658, 16237659, 16237660, 16237661, 16237662, 16237663, 16237664,
7235 16237665, 16237666, 16237667, 16237668, 16237669, 16237670, 16237671, 16237672,
7236 16237673, 16237674, 16237675, 16237676, 16237677, 16237678, 16237679, 16237680,
7237 16237681, 16237682, 16237683, 16237684, 16237685, 16237686, 16237687, 16237688,
7238 16237689, 16237690, 16237691, 16237692, 16237693, 16237694, 16237695, 16237696,
7239 16237697, 16237698, 16237699, 16237700, 16237701, 16237702, 16237703, 16237704,
7240 16237705, 16237706, 16237707
7241 ]
7242 );
7243 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7244 assert_eq!(
7245 rp,
7246 vec![
7247 16255012, 16255013, 16255014, 16255015, 16255016, 16255017, 16255018, 16255019,
7248 16255020, 16255021, 16255022, 16255023, 16255024, 16255025, 16255026, 16255027,
7249 16255028, 16255029, 16255030, 16255031, 16255032, 16255033, 16255034, 16255035,
7250 16255036, 16255037, 16255038, 16255039, 16255040, 16255041, 16255042, 16255043,
7251 16255044, 16255045, 16255046, 16255047, 16255048, 16255049, 16255050, 16255051,
7252 16255052, 16255053
7253 ]
7254 );
7255 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7256 assert_eq!(
7257 rp,
7258 vec![
7259 16255391, 16255392, 16255393, 16255394, 16255395, 16255396, 16255397, 16255398,
7260 16255399, 16255400, 16255401, 16255402, 16255403, 16255404, 16255405, 16255406,
7261 16255407, 16255408, 16255409, 16255410, 16255411, 16255412, 16255413, 16255414,
7262 16255415, 16255416, 16255417, 16255418, 16255419, 16255420, 16255421, 16255422,
7263 16255423, 16255424, 16255425, 16255426, 16255427, 16255428, 16255429, 16255430,
7264 16255431, 16255432, 16255433, 16255434, 16255435, 16255436, 16255437, 16255438,
7265 16255439, 16255440, 16255441
7266 ]
7267 );
7268 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7269 assert_eq!(
7270 rp,
7271 vec![
7272 16255392, 16255393, 16255394, 16255395, 16255396, 16255397, 16255398, 16255399,
7273 16255400, 16255401, 16255402, 16255403, 16255404, 16255405, 16255406, 16255407,
7274 16255408, 16255409, 16255410, 16255411, 16255412, 16255413, 16255414, 16255415,
7275 16255416, 16255417, 16255418, 16255419, 16255420, 16255421, 16255422, 16255423,
7276 16255424, 16255425, 16255426, 16255427, 16255428, 16255429, 16255430, 16255431,
7277 16255432, 16255433, 16255434, 16255435, 16255436, 16255437, 16255438, 16255439,
7278 16255440, 16255441
7279 ]
7280 );
7281 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7282 assert_eq!(
7283 rp,
7284 vec![
7285 16256084, 16256085, 16256086, 16256087, 16256088, 16256089, 16256090, 16256091,
7286 16256092, 16256093, 16256094, 16256095, 16256096, 16256097, 16256098, 16256099,
7287 16256100, 16256101, 16256102, 16256103, 16256104, 16256105, 16256106, 16256107,
7288 16256108, 16256109, 16256110, 16256111, 16256112, 16256113, 16256114, 16256115,
7289 16256116, 16256117, 16256118, 16256119, 16256120, 16256121, 16256122, 16256123,
7290 16256124, 16256125, 16256126, 16256127, 16256128
7291 ]
7292 );
7293 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7294 assert_eq!(
7295 rp,
7296 vec![
7297 16256224, 16256225, 16256226, 16256227, 16256228, 16256229, 16256230, 16256231,
7298 16256232, 16256233, 16256234, 16256235, 16256236, 16256237, 16256238, 16256239,
7299 16256240, 16256241, 16256242, 16256243, 16256244, 16256245, 16256246, 16256247,
7300 16256248, 16256249, 16256250, 16256251, 16256252, 16256253, 16256254, 16256255,
7301 16256256, 16256257, 16256258, 16256259, 16256260, 16256261, 16256262, 16256263,
7302 16256264, 16256265, 16256266, 16256267, 16256268, 16256269, 16256270, 16256271
7303 ]
7304 );
7305 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7306 assert_eq!(
7307 rp,
7308 vec![
7309 16325199, 16325200, 16325201, 16325202, 16325203, 16325204, 16325205, 16325206,
7310 16325207, 16325208, 16325209, 16325210, 16325211, 16325212, 16325213, 16325214,
7311 16325215, 16325216, 16325217, 16325218, 16325219, 16325220, 16325221, 16325222,
7312 16325223, 16325224, 16325225, 16325226, 16325227, 16325228, 16325229, 16325230,
7313 16325231, 16325232, 16325233, 16325234, 16325235, 16325236, 16325237, 16325238,
7314 16325239, 16325240
7315 ]
7316 );
7317 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7318 assert_eq!(
7319 rp,
7320 vec![
7321 16352865, 16352866, 16352867, 16352868, 16352869, 16352870, 16352871, 16352872,
7322 16352873, 16352874, 16352875, 16352876, 16352877, 16352878, 16352879, 16352880,
7323 16352881, 16352882, 16352883, 16352884, 16352885, 16352886, 16352887, 16352888,
7324 16352889, 16352890, 16352891, 16352892, 16352893, 16352894, 16352895, 16352896,
7325 16352897, 16352898, 16352899, 16352900, 16352901, 16352902
7326 ]
7327 );
7328 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7329 assert_eq!(
7330 rp,
7331 vec![
7332 16352968, 16352969, 16352970, 16352971, 16352972, 16352973, 16352974, 16352975,
7333 16352976, 16352977, 16352978, 16352979, 16352980, 16352981, 16352982, 16352983,
7334 16352984, 16352985, 16352986, 16352987, 16352988, 16352989, 16352990, 16352991,
7335 16352992, 16352993, 16352994, 16352995, 16352996, 16352997, 16352998, 16352999,
7336 16353000, 16353001, 16353002, 16353003, 16353004, 16353005, 16353006, 16353007,
7337 16353008, 16353009, 16353010, 16353011
7338 ]
7339 );
7340 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7341 assert_eq!(
7342 rp,
7343 vec![
7344 16414998, 16414999, 16415000, 16415001, 16415002, 16415003, 16415004, 16415005,
7345 16415006, 16415007, 16415008, 16415009, 16415010, 16415011, 16415012, 16415013,
7346 16415014, 16415015, 16415016, 16415017, 16415018, 16415019, 16415020, 16415021,
7347 16415022, 16415023, 16415024, 16415025, 16415026, 16415027, 16415028, 16415029,
7348 16415030, 16415031, 16415032, 16415033, 16415034, 16415035, 16415036, 16415037,
7349 16415038, 16415039, 16415040, 16415041, 16415042, 16415043
7350 ]
7351 );
7352 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7353 assert_eq!(
7354 rp,
7355 vec![
7356 17031591, 17031592, 17031593, 17031594, 17031595, 17031596, 17031597, 17031598,
7357 17031599, 17031600, 17031601, 17031602, 17031603, 17031604, 17031605, 17031606,
7358 17031607, 17031608, 17031609, 17031610, 17031611, 17031612, 17031613, 17031614,
7359 17031615, 17031616, 17031617, 17031618, 17031619, 17031620, 17031621, 17031622,
7360 17031623, 17031624, 17031625, 17031626, 17031627, 17031628, 17031629, 17031630,
7361 17031631, 17031632, 17031633, 17031634, 17031635, 17031636, 17031637
7362 ]
7363 );
7364 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7365 assert_eq!(
7366 rp,
7367 vec![
7368 17057382, 17057383, 17057384, 17057385, 17057386, 17057387, 17057388, 17057389,
7369 17057390, 17057391, 17057392, 17057393, 17057394, 17057395, 17057396, 17057397,
7370 17057398, 17057399, 17057400, 17057401, 17057402, 17057403, 17057404, 17057405,
7371 17057406, 17057407, 17057408, 17057409, 17057410, 17057411, 17057412, 17057413,
7372 17057414, 17057415, 17057416, 17057417, 17057418, 17057419, 17057420, 17057421,
7373 17057422, 17057423, 17057424, 17057425, 17057426, 17057427, 17057428, 17057429,
7374 17057430, 17057431
7375 ]
7376 );
7377 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7378 assert_eq!(
7379 rp,
7380 vec![
7381 17092766, 17092767, 17092768, 17092769, 17092770, 17092771, 17092772, 17092773,
7382 17092774, 17092775, 17092776, 17092777, 17092778, 17092779, 17092780, 17092781,
7383 17092782, 17094966, 17094967, 17094968, 17094969, 17094970, 17094971, 17094972,
7384 17094973, 17094974, 17094975, 17094976, 17094977, 17094978, 17094979, 17094980,
7385 17094981, 17094982, 17094983, 17094984, 17094985, 17094986, 17094987, 17094988,
7386 17094989, 17094990, 17094991, 17094992, 17094993, 17094994, 17094995, 17094996,
7387 17094997, 17094998, 17094999
7388 ]
7389 );
7390 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7391 assert_eq!(
7392 rp,
7393 vec![
7394 17092782, 17094966, 17094967, 17094968, 17094969, 17094970, 17094971, 17094972,
7395 17094973, 17094974, 17094975, 17094976, 17094977, 17094978, 17094979, 17094980,
7396 17094981, 17094982, 17094983, 17094984, 17094985, 17094986, 17094987, 17094988,
7397 17094989, 17094990, 17094991, 17094992, 17094993, 17094994, 17094995, 17094996,
7398 17094997, 17094998, 17094999, 17095000, 17095001, 17095002, 17095003, 17095004,
7399 17095005, 17095006, 17095007, 17095008, 17095009, 17095010, 17095011, 17095012,
7400 17095013, 17095014, 17095015
7401 ]
7402 );
7403 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7404 assert_eq!(
7405 rp,
7406 vec![
7407 17092782, 17094966, 17094967, 17094968, 17094969, 17094970, 17094971, 17094972,
7408 17094973, 17094974, 17094975, 17094976, 17094977, 17094978, 17094979, 17094980,
7409 17094981, 17094982, 17094983, 17094984, 17094985, 17094986, 17094987, 17094988,
7410 17094989, 17094990, 17094991, 17094992, 17094993, 17094994, 17094995, 17094996,
7411 17094997, 17094998, 17094999, 17095000, 17095001, 17095002, 17095003, 17095004,
7412 17095005, 17095006, 17095007, 17095008, 17095009, 17095010, 17095011, 17095012,
7413 17095013, 17095014, 17095015
7414 ]
7415 );
7416 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7417 assert_eq!(
7418 rp,
7419 vec![
7420 17137287, 17137288, 17137289, 17137290, 17137291, 17137292, 17137293, 17137294,
7421 17137295, 17137296, 17137297, 17137298, 17137299, 17137300, 17137301, 17137302,
7422 17137303, 17137304, 17137305, 17137306, 17137307, 17137308, 17137309, 17137310,
7423 17137311, 17137312, 17137313, 17137314, 17137315, 17137316, 17137317, 17137318,
7424 17137319
7425 ]
7426 );
7427 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7428 assert_eq!(
7429 rp,
7430 vec![
7431 17306238, 17306239, 17306240, 17306241, 17306242, 17306243, 17306244, 17306245,
7432 17306246, 17306247, 17306248, 17306249, 17306250, 17306251, 17306252, 17306253,
7433 17306254, 17306255, 17306256, 17306257, 17306258, 17306259, 17306260, 17306261,
7434 17306262, 17306263, 17306264, 17306265, 17306266, 17306267, 17306268, 17306269,
7435 17306270, 17306271, 17306272, 17306273, 17306274, 17306275, 17306276, 17306277,
7436 17306278, 17306279, 17306280, 17306281, 17306282, 17306283, 17306284, 17306285
7437 ]
7438 );
7439 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7440 assert_eq!(
7441 rp,
7442 vec![
7443 17561868, 17561869, 17561870, 17561871, 17561872, 17561873, 17561874, 17561875,
7444 17561876, 17561877, 17561878, 17561879, 17561880, 17561881, 17561882, 17561883,
7445 17561884, 17561885, 17561886, 17561887, 17561888, 17561889, 17561890, 17561891,
7446 17561892, 17561893, 17561894, 17561895, 17561896, 17561897, 17561898, 17561899,
7447 17561900, 17561901, 17561902, 17561903, 17561904, 17561905, 17561906, 17561907,
7448 17561908, 17561909, 17561910, 17561911, 17561912
7449 ]
7450 );
7451 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7452 assert_eq!(
7453 rp,
7454 vec![
7455 17566078, 17566079, 17566080, 17566081, 17566082, 17566083, 17566084, 17566085,
7456 17566086, 17566087, 17566088, 17566089, 17566090, 17566091, 17566092, 17566093,
7457 17566094, 17566095, 17566096, 17566097, 17566098, 17566099, 17566100, 17566101,
7458 17566102, 17566103, 17566104, 17566105, 17566106, 17566107, 17566108, 17566109,
7459 17566110, 17566111, 17566112, 17566113, 17566114, 17566115, 17566116, 17566117,
7460 17566118, 17577951, 17577952, 17577953, 17577954, 17577955, 17577956, 17577957,
7461 17577958, 17577959, 17577960
7462 ]
7463 );
7464 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7465 assert_eq!(
7466 rp,
7467 vec![
7468 17566108, 17566109, 17566110, 17566111, 17566112, 17566113, 17566114, 17566115,
7469 17566116, 17566117, 17566118, 17577951, 17577952, 17577953, 17577954, 17577955,
7470 17577956, 17577957, 17577958, 17577959, 17577960, 17577961, 17577962, 17577963,
7471 17577964, 17577965, 17577966, 17577967, 17577968, 17577969, 17577970, 17577971,
7472 17577972, 17577973, 17577974, 17577975, 17578686, 17578687, 17578688, 17578689,
7473 17578690, 17578691, 17578692, 17578693, 17578694, 17578695, 17578696, 17578697,
7474 17578698, 17578699, 17578700
7475 ]
7476 );
7477 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7478 assert_eq!(
7479 rp,
7480 vec![
7481 17566111, 17566112, 17566113, 17566114, 17566115, 17566116, 17566117, 17566118,
7482 17577951, 17577952, 17577953, 17577954, 17577955, 17577956, 17577957, 17577958,
7483 17577959, 17577960, 17577961, 17577962, 17577963, 17577964, 17577965, 17577966,
7484 17577967, 17577968, 17577969, 17577970, 17577971, 17577972, 17577973, 17577974,
7485 17577975, 17578686, 17578687, 17578688, 17578689, 17578690, 17578691, 17578692,
7486 17578693, 17578694, 17578695, 17578696, 17578697, 17578698, 17578699, 17578700,
7487 17578701, 17578702, 17578703
7488 ]
7489 );
7490 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7491 assert_eq!(
7492 rp,
7493 vec![
7494 17566111, 17566112, 17566113, 17566114, 17566115, 17566116, 17566117, 17566118,
7495 17577951, 17577952, 17577953, 17577954, 17577955, 17577956, 17577957, 17577958,
7496 17577959, 17577960, 17577961, 17577962, 17577963, 17577964, 17577965, 17577966,
7497 17577967, 17577968, 17577969, 17577970, 17577971, 17577972, 17577973, 17577974,
7498 17577975, 17578686, 17578687, 17578688, 17578689, 17578690, 17578691, 17578692,
7499 17578693, 17578694, 17578695, 17578696, 17578697, 17578698, 17578699, 17578700,
7500 17578701, 17578702, 17578703
7501 ]
7502 );
7503 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7504 assert_eq!(
7505 rp,
7506 vec![
7507 17566111, 17566112, 17566113, 17566114, 17566115, 17566116, 17566117, 17566118,
7508 17577951, 17577952, 17577953, 17577954, 17577955, 17577956, 17577957, 17577958,
7509 17577959, 17577960, 17577961, 17577962, 17577963, 17577964, 17577965, 17577966,
7510 17577967, 17577968, 17577969, 17577970, 17577971, 17577972, 17577973, 17577974,
7511 17577975, 17578686, 17578687, 17578688, 17578689, 17578690, 17578691, 17578692,
7512 17578693, 17578694, 17578695, 17578696, 17578697, 17578698, 17578699, 17578700,
7513 17578701, 17578702, 17578703
7514 ]
7515 );
7516 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7517 assert_eq!(
7518 rp,
7519 vec![
7520 17566111, 17566112, 17566113, 17566114, 17566115, 17566116, 17566117, 17566118,
7521 17577951, 17577952, 17577953, 17577954, 17577955, 17577956, 17577957, 17577958,
7522 17577959, 17577960, 17577961, 17577962, 17577963, 17577964, 17577965, 17577966,
7523 17577967, 17577968, 17577969, 17577970, 17577971, 17577972, 17577973, 17577974,
7524 17577975, 17578686, 17578687, 17578688, 17578689, 17578690, 17578691, 17578692,
7525 17578693, 17578694, 17578695, 17578696, 17578697, 17578698, 17578699, 17578700,
7526 17578701, 17578702, 17578703
7527 ]
7528 );
7529 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7530 assert_eq!(
7531 rp,
7532 vec![
7533 17566112, 17566113, 17566114, 17566115, 17566116, 17566117, 17566118, 17577951,
7534 17577952, 17577953, 17577954, 17577955, 17577956, 17577957, 17577958, 17577959,
7535 17577960, 17577961, 17577962, 17577963, 17577964, 17577965, 17577966, 17577967,
7536 17577968, 17577969, 17577970, 17577971, 17577972, 17577973, 17577974, 17577975,
7537 17578686, 17578687, 17578688, 17578689, 17578690, 17578691, 17578692, 17578693,
7538 17578694, 17578695, 17578696, 17578697, 17578698, 17578699, 17578700, 17578701,
7539 17578702, 17578703, 17578704
7540 ]
7541 );
7542 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7543 assert_eq!(
7544 rp,
7545 vec![
7546 17566113, 17566114, 17566115, 17566116, 17566117, 17566118, 17577951, 17577952,
7547 17577953, 17577954, 17577955, 17577956, 17577957, 17577958, 17577959, 17577960,
7548 17577961, 17577962, 17577963, 17577964, 17577965, 17577966, 17577967, 17577968,
7549 17577969, 17577970, 17577971, 17577972, 17577973, 17577974, 17577975, 17578686,
7550 17578687, 17578688, 17578689, 17578690, 17578691, 17578692, 17578693, 17578694,
7551 17578695, 17578696, 17578697, 17578698, 17578699, 17578700, 17578701, 17578702,
7552 17578703, 17578704, 17578705
7553 ]
7554 );
7555 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7556 assert_eq!(
7557 rp,
7558 vec![
7559 17566113, 17566114, 17566115, 17566116, 17566117, 17566118, 17577951, 17577952,
7560 17577953, 17577954, 17577955, 17577956, 17577957, 17577958, 17577959, 17577960,
7561 17577961, 17577962, 17577963, 17577964, 17577965, 17577966, 17577967, 17577968,
7562 17577969, 17577970, 17577971, 17577972, 17577973, 17577974, 17577975, 17578686,
7563 17578687, 17578688, 17578689, 17578690, 17578691, 17578692, 17578693, 17578694,
7564 17578695, 17578696, 17578697, 17578698, 17578699, 17578700, 17578701, 17578702,
7565 17578703, 17578704, 17578705
7566 ]
7567 );
7568 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7569 assert_eq!(
7570 rp,
7571 vec![
7572 17579733, 17579734, 17579735, 17579736, 17579737, 17579738, 17579739, 17579740,
7573 17579741, 17579742, 17579743, 17579744, 17579745, 17579746, 17579747, 17579748,
7574 17579749, 17579750, 17579751, 17579752, 17579753, 17579754, 17579755, 17579756,
7575 17579757, 17579758, 17579759, 17579760, 17579761, 17579762, 17579763, 17579764,
7576 17579765, 17579766, 17579767, 17579768, 17579769, 17579770, 17579771, 17579772,
7577 17579773, 17579774, 17579775, 17579776, 17581244, 17581245, 17581246, 17581247,
7578 17581248, 17581249
7579 ]
7580 );
7581 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7582 assert_eq!(
7583 rp,
7584 vec![
7585 17581369, 17581370, 17582885, 17582886, 17582887, 17582888, 17582889, 17582890,
7586 17582891, 17582892, 17582893, 17582894, 17582895, 17582896, 17582897, 17582898,
7587 17582899, 17582900, 17582901, 17582902, 17582903, 17582904, 17582905, 17582906,
7588 17582907, 17582908, 17582909, 17582910, 17582911, 17582912, 17582913, 17582914,
7589 17582915, 17582916, 17582917, 17582918, 17582919, 17582920, 17582921, 17582922,
7590 17582923, 17582924, 17582925, 17582926, 17582927, 17582928, 17582929, 17582930,
7591 17582931, 17582932, 17583028
7592 ]
7593 );
7594 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7595 assert_eq!(
7596 rp,
7597 vec![
7598 17581370, 17582885, 17582886, 17582887, 17582888, 17582889, 17582890, 17582891,
7599 17582892, 17582893, 17582894, 17582895, 17582896, 17582897, 17582898, 17582899,
7600 17582900, 17582901, 17582902, 17582903, 17582904, 17582905, 17582906, 17582907,
7601 17582908, 17582909, 17582910, 17582911, 17582912, 17582913, 17582914, 17582915,
7602 17582916, 17582917, 17582918, 17582919, 17582920, 17582921, 17582922, 17582923,
7603 17582924, 17582925, 17582926, 17582927, 17582928, 17582929, 17582930, 17582931,
7604 17582932, 17583028, 17583029
7605 ]
7606 );
7607 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7608 assert_eq!(
7609 rp,
7610 vec![
7611 17581370, 17582885, 17582886, 17582887, 17582888, 17582889, 17582890, 17582891,
7612 17582892, 17582893, 17582894, 17582895, 17582896, 17582897, 17582898, 17582899,
7613 17582900, 17582901, 17582902, 17582903, 17582904, 17582905, 17582906, 17582907,
7614 17582908, 17582909, 17582910, 17582911, 17582912, 17582913, 17582914, 17582915,
7615 17582916, 17582917, 17582918, 17582919, 17582920, 17582921, 17582922, 17582923,
7616 17582924, 17582925, 17582926, 17582927, 17582928, 17582929, 17582930, 17582931,
7617 17582932, 17583028, 17583029
7618 ]
7619 );
7620 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7621 assert_eq!(
7622 rp,
7623 vec![
7624 17582911, 17582912, 17582913, 17582914, 17582915, 17582916, 17582917, 17582918,
7625 17582919, 17582920, 17582921, 17582922, 17582923, 17582924, 17582925, 17582926,
7626 17582927, 17582928, 17582929, 17582930, 17582931, 17582932, 17583028, 17583029,
7627 17583030, 17583031, 17583032, 17583033, 17583034, 17583035, 17583036, 17583037,
7628 17583038, 17583039, 17583040, 17583041, 17583042, 17583043, 17583044, 17583045,
7629 17583046, 17583047, 17583048, 17583049, 17583050, 17583051, 17583052, 17583053,
7630 17583054, 17583055
7631 ]
7632 );
7633 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7634 assert_eq!(
7635 rp,
7636 vec![
7637 17588621, 17588622, 17588623, 17588624, 17588625, 17588626, 17588627, 17588628,
7638 17588629, 17588630, 17588631, 17588632, 17588633, 17588634, 17588635, 17588636,
7639 17588637, 17588638, 17588639, 17588640, 17588641, 17588642, 17588643, 17588644,
7640 17588645, 17588646, 17588647, 17588648, 17588649, 17588650, 17588651, 17588652,
7641 17588653, 17588654, 17588655, 17588656, 17588657, 17589196, 17589197, 17589198,
7642 17589199, 17589200, 17589201, 17589202, 17589203, 17589204, 17589205, 17589206,
7643 17589207, 17589208
7644 ]
7645 );
7646 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7647 assert_eq!(
7648 rp,
7649 vec![
7650 17588621, 17588622, 17588623, 17588624, 17588625, 17588626, 17588627, 17588628,
7651 17588629, 17588630, 17588631, 17588632, 17588633, 17588634, 17588635, 17588636,
7652 17588637, 17588638, 17588639, 17588640, 17588641, 17588642, 17588643, 17588644,
7653 17588645, 17588646, 17588647, 17588648, 17588649, 17588650, 17588651, 17588652,
7654 17588653, 17588654, 17588655, 17588656, 17588657, 17589196, 17589197, 17589198,
7655 17589199, 17589200, 17589201, 17589202, 17589203, 17589204, 17589205, 17589206,
7656 17589207, 17589208
7657 ]
7658 );
7659 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7660 assert_eq!(
7661 rp,
7662 vec![
7663 17588621, 17588622, 17588623, 17588624, 17588625, 17588626, 17588627, 17588628,
7664 17588629, 17588630, 17588631, 17588632, 17588633, 17588634, 17588635, 17588636,
7665 17588637, 17588638, 17588639, 17588640, 17588641, 17588642, 17588643, 17588644,
7666 17588645, 17588646, 17588647, 17588648, 17588649, 17588650, 17588651, 17588652,
7667 17588653, 17588654, 17588655, 17588656, 17588657, 17589196, 17589197, 17589198,
7668 17589199, 17589200, 17589201, 17589202, 17589203, 17589204, 17589205, 17589206,
7669 17589207, 17589208
7670 ]
7671 );
7672 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7673 assert_eq!(
7674 rp,
7675 vec![
7676 17591770, 17591771, 17591772, 17591773, 17591774, 17591775, 17591776, 17591777,
7677 17591778, 17591779, 17591780, 17591781, 17591782, 17591783, 17591784, 17591785,
7678 17591786, 17591787, 17591788, 17591789, 17591790, 17591791, 17591792, 17591793,
7679 17591794, 17591796, 17591797, 17591798, 17591799, 17591800, 17591801, 17591802,
7680 17591803, 17591804, 17591805, 17591806, 17591807, 17591808, 17591809, 17591810,
7681 17591811, 17591812, 17591813, 17591814, 17591815, 17591816, 17591817, 17591818,
7682 17591819, 17591820
7683 ]
7684 );
7685 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7686 assert_eq!(
7687 rp,
7688 vec![
7689 17593855, 17593856, 17593857, 17593858, 17593859, 17593860, 17593861, 17593862,
7690 17593863, 17593864, 17593865, 17593866, 17593867, 17593868, 17593869, 17593870,
7691 17593871, 17593872, 17593873, 17593874, 17593875, 17593876, 17593877, 17593878,
7692 17593880, 17593881, 17593882, 17593883, 17593884, 17593885, 17593886, 17593887,
7693 17593888, 17593889, 17593890, 17593891, 17593892, 17593893, 17593894, 17593895,
7694 17593896, 17593897, 17593898, 17593899, 17593900, 17593901, 17593902, 17593903
7695 ]
7696 );
7697 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7698 assert_eq!(
7699 rp,
7700 vec![
7701 17593863, 17593864, 17593865, 17593866, 17593867, 17593868, 17593869, 17593870,
7702 17593871, 17593872, 17593873, 17593874, 17593875, 17593876, 17593877, 17593878,
7703 17593880, 17593881, 17593882, 17593883, 17593884, 17593885, 17593886, 17593887,
7704 17593888, 17593889, 17593890, 17593891, 17593892, 17593893, 17593894, 17593895,
7705 17593896, 17593897, 17593898, 17593899, 17593900, 17593901, 17593902, 17593903,
7706 17593904, 17593905, 17593906, 17593907
7707 ]
7708 );
7709 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7710 assert_eq!(
7711 rp,
7712 vec![
7713 17596476, 17596477, 17596478, 17596479, 17596480, 17596481, 17596482, 17596483,
7714 17596484, 17596485, 17596486, 17596487, 17596488, 17596489, 17596490, 17596491,
7715 17596492, 17596493, 17596494, 17596495, 17596496, 17596497, 17596498, 17596499,
7716 17596500, 17596501, 17596502, 17596503, 17596504, 17596505, 17596506, 17596507,
7717 17596508, 17596509, 17596510, 17596511, 17596512, 17596513, 17596514
7718 ]
7719 );
7720 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7721 assert_eq!(
7722 rp,
7723 vec![
7724 17624012, 17624013, 17624014, 17624015, 17624016, 17624017, 17624018, 17624019,
7725 17624020, 17625913, 17625914, 17625915, 17625916, 17625917, 17625918, 17625919,
7726 17625920, 17625921, 17625922, 17625923, 17625924, 17625925, 17625926, 17625927,
7727 17625928, 17625929, 17625930, 17625931, 17625932, 17625933, 17625934, 17625935,
7728 17625936, 17625937, 17625938, 17625939, 17625940, 17625941, 17625942, 17625943,
7729 17625944, 17625945, 17625946, 17625947, 17625948, 17625949
7730 ]
7731 );
7732 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7733 assert_eq!(
7734 rp,
7735 vec![
7736 17624012, 17624013, 17624014, 17624015, 17624016, 17624017, 17624018, 17624019,
7737 17624020, 17625913, 17625914, 17625915, 17625916, 17625917, 17625918, 17625919,
7738 17625920, 17625921, 17625922, 17625923, 17625924, 17625925, 17625926, 17625927,
7739 17625928, 17625929, 17625930, 17625931, 17625932, 17625933, 17625934, 17625935,
7740 17625936, 17625937, 17625938, 17625939, 17625940, 17625941, 17625942, 17625943,
7741 17625944, 17625945, 17625946, 17625947, 17625948, 17625949, 17625950, 17625951,
7742 17625952
7743 ]
7744 );
7745 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7746 assert_eq!(
7747 rp,
7748 vec![
7749 31796700, 31796701, 31796702, 31796703, 31796704, 31796705, 31796706, 31796710,
7750 31796711, 31796712, 31796713, 31796714, 31796715, 31796716, 31796717, 31796718,
7751 31796719, 31796720, 31796721, 31796722, 31796723, 31796724, 31796725, 31796726,
7752 31796727, 31796728, 31799014, 31799015, 31799016, 31799017, 31799018, 31799019,
7753 31799020, 31799021, 31799022, 31799023, 31799024, 31799025, 31799026, 31799027,
7754 31799028, 31799029, 31799030, 31799031, 31799032, 31799033, 31799034, 31799035,
7755 31799036, 31799037
7756 ]
7757 );
7758 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7759 assert_eq!(
7760 rp,
7761 vec![
7762 36722692, 36722693, 36722694, 36722695, 36722696, 36722697, 36722698, 36722699,
7763 36722700, 36722701, 36722702, 36722703, 36722704, 36722705, 36723505, 36723506,
7764 36723507, 36723508, 36723509, 36723510, 36723511, 36723512, 36723513, 36723514,
7765 36723515, 36723516, 36723517, 36723518, 36723519, 36723520, 36723521, 36723522,
7766 36723523, 36723524, 36723525, 36723526, 36723527, 36723528, 36723529, 36723530,
7767 36723531, 36723532, 36737414, 36737415, 36737416, 36737417, 36737418, 36737419,
7768 36737420
7769 ]
7770 );
7771 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7772 assert_eq!(
7773 rp,
7774 vec![
7775 44587963, 44587964, 44587965, 44587966, 44587967, 44587968, 44587969, 44587970,
7776 44587971, 44587972, 44587973, 44587974, 44587975, 44587976, 44587977, 44587978,
7777 44587979, 44587980, 44587981, 44587982, 44587983, 44589680, 44589681, 44589682,
7778 44589683, 44589684, 44589685, 44589686, 44589687, 44589688, 44589689, 44589690,
7779 44589691, 44589692, 44589693, 44589694, 44589695, 44589696, 44589697, 44589698,
7780 44589699, 44589700, 44589701, 44589702, 44592034, 44592035, 44592036
7781 ]
7782 );
7783 }
7784
7785 #[test]
7786 fn test_reference_positions_full() {
7787 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
7788 let mut it = bam.records();
7789
7790 let rp: Vec<_> = it
7791 .next()
7792 .unwrap()
7793 .unwrap()
7794 .reference_positions_full()
7795 .collect();
7796 assert_eq!(
7797 rp,
7798 vec![
7799 None,
7800 None,
7801 None,
7802 None,
7803 None,
7804 None,
7805 Some(16050676),
7806 Some(16050677),
7807 Some(16050678),
7808 Some(16050679),
7809 Some(16050680),
7810 Some(16050681),
7811 Some(16050682),
7812 Some(16050683),
7813 Some(16050684),
7814 Some(16050685),
7815 Some(16050686),
7816 Some(16050687),
7817 Some(16050688),
7818 Some(16050689),
7819 Some(16050690),
7820 Some(16050691),
7821 Some(16050692),
7822 Some(16050693),
7823 Some(16050694),
7824 Some(16050695),
7825 Some(16050696),
7826 Some(16050697),
7827 Some(16050698),
7828 Some(16050699),
7829 Some(16050700),
7830 Some(16050701),
7831 Some(16050702),
7832 Some(16050703),
7833 Some(16050704),
7834 Some(16050705),
7835 Some(16050706),
7836 Some(16050707),
7837 Some(16050708),
7838 Some(16050709),
7839 Some(16050710),
7840 Some(16050711),
7841 Some(16050712),
7842 Some(16050713),
7843 Some(16050714),
7844 Some(16050715),
7845 Some(16050716),
7846 Some(16050717),
7847 Some(16050718),
7848 Some(16050719),
7849 Some(16050720)
7850 ]
7851 );
7852 let rp: Vec<_> = it
7853 .next()
7854 .unwrap()
7855 .unwrap()
7856 .reference_positions_full()
7857 .collect();
7858 assert_eq!(
7859 rp,
7860 vec![
7861 Some(16096878),
7862 Some(16096879),
7863 Some(16096880),
7864 Some(16096881),
7865 Some(16096882),
7866 Some(16096883),
7867 Some(16096884),
7868 Some(16096887),
7869 Some(16096888),
7870 Some(16096889),
7871 Some(16096890),
7872 Some(16096891),
7873 Some(16096892),
7874 Some(16096893),
7875 Some(16096894),
7876 Some(16096895),
7877 Some(16096896),
7878 Some(16096897),
7879 Some(16096898),
7880 Some(16096899),
7881 Some(16096900),
7882 Some(16096901),
7883 Some(16096902),
7884 Some(16096903),
7885 Some(16096904),
7886 Some(16096905),
7887 Some(16096906),
7888 Some(16096907),
7889 Some(16096908),
7890 Some(16096909),
7891 Some(16096910),
7892 Some(16096911),
7893 Some(16096912),
7894 Some(16096913),
7895 Some(16096914),
7896 Some(16096915),
7897 Some(16096916),
7898 Some(16096917),
7899 Some(16096918),
7900 Some(16096919),
7901 Some(16096920),
7902 Some(16096921),
7903 Some(16096922),
7904 Some(16096923),
7905 Some(16096924),
7906 Some(16096925),
7907 Some(16096926),
7908 Some(16096927),
7909 Some(16096928),
7910 Some(16096929),
7911 Some(16096930)
7912 ]
7913 );
7914 let rp: Vec<_> = it
7915 .next()
7916 .unwrap()
7917 .unwrap()
7918 .reference_positions_full()
7919 .collect();
7920 assert_eq!(
7921 rp,
7922 vec![
7923 Some(16097145),
7924 Some(16097146),
7925 Some(16097147),
7926 Some(16097148),
7927 Some(16097149),
7928 Some(16097150),
7929 Some(16097151),
7930 Some(16097152),
7931 Some(16097153),
7932 Some(16097154),
7933 Some(16097155),
7934 Some(16097156),
7935 Some(16097157),
7936 Some(16097158),
7937 Some(16097159),
7938 Some(16097160),
7939 Some(16097161),
7940 Some(16097162),
7941 Some(16097163),
7942 Some(16097164),
7943 Some(16097165),
7944 Some(16097166),
7945 Some(16097167),
7946 Some(16097168),
7947 Some(16097169),
7948 Some(16097170),
7949 Some(16097171),
7950 Some(16097172),
7951 Some(16097173),
7952 Some(16097176),
7953 Some(16097177),
7954 Some(16097178),
7955 Some(16097179),
7956 Some(16097180),
7957 Some(16097181),
7958 Some(16097182),
7959 Some(16097183),
7960 Some(16097184),
7961 Some(16097185),
7962 Some(16097186),
7963 Some(16097187),
7964 Some(16097188),
7965 Some(16097189),
7966 Some(16097190),
7967 Some(16097191),
7968 Some(16097192),
7969 Some(16097193),
7970 Some(16097194),
7971 Some(16097195),
7972 Some(16097196),
7973 Some(16097197)
7974 ]
7975 );
7976 let rp: Vec<_> = it
7977 .next()
7978 .unwrap()
7979 .unwrap()
7980 .reference_positions_full()
7981 .collect();
7982 assert_eq!(
7983 rp,
7984 vec![
7985 Some(16117350),
7986 Some(16117351),
7987 Some(16117352),
7988 Some(16117353),
7989 Some(16117354),
7990 Some(16117355),
7991 Some(16117356),
7992 Some(16117357),
7993 Some(16117358),
7994 Some(16117359),
7995 Some(16117360),
7996 Some(16117361),
7997 Some(16117362),
7998 Some(16117363),
7999 Some(16117364),
8000 Some(16117365),
8001 Some(16117366),
8002 Some(16117367),
8003 Some(16117368),
8004 Some(16117369),
8005 Some(16117370),
8006 Some(16117371),
8007 Some(16117372),
8008 Some(16117373),
8009 Some(16117374),
8010 Some(16117375),
8011 Some(16117376),
8012 Some(16117377),
8013 Some(16117378),
8014 Some(16117379),
8015 Some(16117380),
8016 Some(16117381),
8017 Some(16117382),
8018 Some(16117383),
8019 Some(16117384),
8020 Some(16117385),
8021 Some(16117386),
8022 Some(16117387),
8023 Some(16117388),
8024 Some(16117389),
8025 Some(16117390),
8026 Some(16117391),
8027 Some(16117392),
8028 Some(16117393),
8029 Some(16117394),
8030 Some(16117395),
8031 Some(16117396),
8032 Some(16117397),
8033 Some(16117398),
8034 Some(16117399),
8035 Some(16117400)
8036 ]
8037 );
8038 let rp: Vec<_> = it
8039 .next()
8040 .unwrap()
8041 .unwrap()
8042 .reference_positions_full()
8043 .collect();
8044 assert_eq!(
8045 rp,
8046 vec![
8047 Some(16118483),
8048 Some(16118484),
8049 Some(16118485),
8050 Some(16118486),
8051 Some(16118487),
8052 Some(16118488),
8053 Some(16118489),
8054 Some(16118490),
8055 Some(16118491),
8056 Some(16118492),
8057 Some(16118493),
8058 Some(16118494),
8059 Some(16118495),
8060 Some(16118496),
8061 Some(16118497),
8062 Some(16118498),
8063 Some(16118499),
8064 Some(16118500),
8065 Some(16118501),
8066 Some(16118502),
8067 Some(16118503),
8068 Some(16118504),
8069 Some(16118505),
8070 Some(16118506),
8071 Some(16118507),
8072 Some(16118508),
8073 Some(16118509),
8074 Some(16118510),
8075 Some(16118511),
8076 Some(16118512),
8077 Some(16118513),
8078 Some(16118514),
8079 Some(16118515),
8080 Some(16118516),
8081 Some(16118517),
8082 Some(16118518),
8083 Some(16118519),
8084 Some(16118520),
8085 Some(16118521),
8086 Some(16118522),
8087 Some(16118523),
8088 Some(16118524),
8089 Some(16118525),
8090 Some(16118526),
8091 Some(16118527),
8092 Some(16118528),
8093 Some(16118529),
8094 Some(16118530),
8095 Some(16118531),
8096 Some(16118532),
8097 Some(16118533)
8098 ]
8099 );
8100 let rp: Vec<_> = it
8101 .next()
8102 .unwrap()
8103 .unwrap()
8104 .reference_positions_full()
8105 .collect();
8106 assert_eq!(
8107 rp,
8108 vec![
8109 Some(16118499),
8110 Some(16118500),
8111 Some(16118501),
8112 Some(16118502),
8113 Some(16118503),
8114 Some(16118504),
8115 Some(16118505),
8116 Some(16118506),
8117 Some(16118507),
8118 Some(16118508),
8119 Some(16118509),
8120 Some(16118510),
8121 Some(16118511),
8122 Some(16118512),
8123 Some(16118513),
8124 Some(16118514),
8125 Some(16118515),
8126 Some(16118516),
8127 Some(16118517),
8128 Some(16118518),
8129 Some(16118519),
8130 Some(16118520),
8131 Some(16118521),
8132 Some(16118522),
8133 Some(16118523),
8134 Some(16118524),
8135 Some(16118525),
8136 Some(16118526),
8137 Some(16118527),
8138 Some(16118528),
8139 Some(16118529),
8140 Some(16118530),
8141 Some(16118531),
8142 Some(16118532),
8143 Some(16118533),
8144 Some(16118534),
8145 Some(16118535),
8146 Some(16118536),
8147 Some(16118537),
8148 Some(16118538),
8149 Some(16118539),
8150 Some(16118540),
8151 Some(16118541),
8152 Some(16118542),
8153 Some(16118543),
8154 Some(16118544),
8155 Some(16118545),
8156 Some(16118546),
8157 Some(16118547),
8158 Some(16118548),
8159 Some(16118549)
8160 ]
8161 );
8162 let rp: Vec<_> = it
8163 .next()
8164 .unwrap()
8165 .unwrap()
8166 .reference_positions_full()
8167 .collect();
8168 assert_eq!(
8169 rp,
8170 vec![
8171 Some(16118499),
8172 Some(16118500),
8173 Some(16118501),
8174 Some(16118502),
8175 Some(16118503),
8176 Some(16118504),
8177 Some(16118505),
8178 Some(16118506),
8179 Some(16118507),
8180 Some(16118508),
8181 Some(16118509),
8182 Some(16118510),
8183 Some(16118511),
8184 Some(16118512),
8185 Some(16118513),
8186 Some(16118514),
8187 Some(16118515),
8188 Some(16118516),
8189 Some(16118517),
8190 Some(16118518),
8191 Some(16118519),
8192 Some(16118520),
8193 Some(16118521),
8194 Some(16118522),
8195 Some(16118523),
8196 Some(16118524),
8197 Some(16118525),
8198 Some(16118526),
8199 Some(16118527),
8200 Some(16118528),
8201 Some(16118529),
8202 Some(16118530),
8203 Some(16118531),
8204 Some(16118532),
8205 Some(16118533),
8206 Some(16118534),
8207 Some(16118535),
8208 Some(16118536),
8209 Some(16118537),
8210 Some(16118538),
8211 Some(16118539),
8212 Some(16118540),
8213 Some(16118541),
8214 Some(16118542),
8215 Some(16118543),
8216 Some(16118544),
8217 Some(16118545),
8218 Some(16118546),
8219 Some(16118547),
8220 Some(16118548),
8221 Some(16118549)
8222 ]
8223 );
8224 let rp: Vec<_> = it
8225 .next()
8226 .unwrap()
8227 .unwrap()
8228 .reference_positions_full()
8229 .collect();
8230 assert_eq!(
8231 rp,
8232 vec![
8233 Some(16118499),
8234 Some(16118500),
8235 Some(16118501),
8236 Some(16118502),
8237 Some(16118503),
8238 Some(16118504),
8239 Some(16118505),
8240 Some(16118506),
8241 Some(16118507),
8242 Some(16118508),
8243 Some(16118509),
8244 Some(16118510),
8245 Some(16118511),
8246 Some(16118512),
8247 Some(16118513),
8248 Some(16118514),
8249 Some(16118515),
8250 Some(16118516),
8251 Some(16118517),
8252 Some(16118518),
8253 Some(16118519),
8254 Some(16118520),
8255 Some(16118521),
8256 Some(16118522),
8257 Some(16118523),
8258 Some(16118524),
8259 Some(16118525),
8260 Some(16118526),
8261 Some(16118527),
8262 Some(16118528),
8263 Some(16118529),
8264 Some(16118530),
8265 Some(16118531),
8266 Some(16118532),
8267 Some(16118533),
8268 Some(16118534),
8269 Some(16118535),
8270 Some(16118536),
8271 Some(16118537),
8272 Some(16118538),
8273 Some(16118539),
8274 Some(16118540),
8275 Some(16118541),
8276 Some(16118542),
8277 Some(16118543),
8278 Some(16118544),
8279 Some(16118545),
8280 Some(16118546),
8281 Some(16118547),
8282 Some(16118548),
8283 Some(16118549)
8284 ]
8285 );
8286 let rp: Vec<_> = it
8287 .next()
8288 .unwrap()
8289 .unwrap()
8290 .reference_positions_full()
8291 .collect();
8292 assert_eq!(
8293 rp,
8294 vec![
8295 Some(16123411),
8296 Some(16123412),
8297 Some(16123413),
8298 Some(16123414),
8299 Some(16123415),
8300 Some(16123416),
8301 Some(16123417),
8302 Some(16123418),
8303 Some(16123419),
8304 Some(16123420),
8305 Some(16123421),
8306 Some(16123422),
8307 Some(16123423),
8308 Some(16123424),
8309 Some(16123425),
8310 Some(16123426),
8311 Some(16123427),
8312 Some(16123428),
8313 Some(16123429),
8314 Some(16123430),
8315 Some(16123431),
8316 Some(16123432),
8317 Some(16123433),
8318 Some(16123434),
8319 Some(16123435),
8320 Some(16123436),
8321 Some(16123437),
8322 Some(16123438),
8323 Some(16123439),
8324 Some(16123440),
8325 Some(16123441),
8326 Some(16123442),
8327 Some(16123443),
8328 Some(16123444),
8329 Some(16123445),
8330 Some(16123446),
8331 Some(16123447),
8332 Some(16123448),
8333 Some(16123449),
8334 Some(16123450),
8335 Some(16123451),
8336 Some(16123452),
8337 Some(16123453),
8338 Some(16123454),
8339 Some(16123455),
8340 Some(16123456),
8341 Some(16123457),
8342 Some(16123458),
8343 Some(16123459),
8344 Some(16123460),
8345 Some(16123461)
8346 ]
8347 );
8348 let rp: Vec<_> = it
8349 .next()
8350 .unwrap()
8351 .unwrap()
8352 .reference_positions_full()
8353 .collect();
8354 assert_eq!(
8355 rp,
8356 vec![
8357 None,
8358 None,
8359 None,
8360 None,
8361 None,
8362 None,
8363 Some(16123417),
8364 Some(16123418),
8365 Some(16123419),
8366 Some(16123420),
8367 Some(16123421),
8368 Some(16123422),
8369 Some(16123423),
8370 Some(16123424),
8371 Some(16123425),
8372 Some(16123426),
8373 Some(16123427),
8374 Some(16123428),
8375 Some(16123429),
8376 Some(16123430),
8377 Some(16123431),
8378 Some(16123432),
8379 Some(16123433),
8380 Some(16123434),
8381 Some(16123435),
8382 Some(16123436),
8383 Some(16123437),
8384 Some(16123438),
8385 Some(16123439),
8386 Some(16123440),
8387 Some(16123441),
8388 Some(16123442),
8389 Some(16123443),
8390 Some(16123444),
8391 Some(16123445),
8392 Some(16123446),
8393 Some(16123447),
8394 Some(16123448),
8395 Some(16123449),
8396 Some(16123450),
8397 Some(16123451),
8398 Some(16123452),
8399 Some(16123453),
8400 Some(16123454),
8401 Some(16123455),
8402 Some(16123456),
8403 Some(16123457),
8404 Some(16123458),
8405 Some(16123459),
8406 Some(16123460),
8407 Some(16123461)
8408 ]
8409 );
8410 let rp: Vec<_> = it
8411 .next()
8412 .unwrap()
8413 .unwrap()
8414 .reference_positions_full()
8415 .collect();
8416 assert_eq!(
8417 rp,
8418 vec![
8419 Some(16165860),
8420 Some(16165861),
8421 Some(16165862),
8422 Some(16165863),
8423 Some(16165864),
8424 Some(16165865),
8425 Some(16165866),
8426 Some(16165867),
8427 Some(16165868),
8428 Some(16165869),
8429 Some(16165870),
8430 Some(16165871),
8431 Some(16165872),
8432 Some(16165873),
8433 Some(16165874),
8434 Some(16165875),
8435 Some(16165876),
8436 Some(16165877),
8437 Some(16165878),
8438 Some(16165879),
8439 Some(16165880),
8440 Some(16165881),
8441 Some(16165882),
8442 Some(16165883),
8443 Some(16165884),
8444 Some(16165885),
8445 Some(16165886),
8446 Some(16165887),
8447 Some(16165888),
8448 Some(16165889),
8449 Some(16165890),
8450 Some(16165891),
8451 Some(16165892),
8452 Some(16165893),
8453 Some(16165894),
8454 Some(16165895),
8455 Some(16165896),
8456 Some(16165897),
8457 Some(16165898),
8458 Some(16165899),
8459 Some(16165900),
8460 None,
8461 None,
8462 None,
8463 None,
8464 None,
8465 None,
8466 None,
8467 None,
8468 None,
8469 None
8470 ]
8471 );
8472 let rp: Vec<_> = it
8473 .next()
8474 .unwrap()
8475 .unwrap()
8476 .reference_positions_full()
8477 .collect();
8478 assert_eq!(
8479 rp,
8480 vec![
8481 Some(16180871),
8482 Some(16180872),
8483 Some(16180873),
8484 Some(16180874),
8485 Some(16180875),
8486 Some(16180876),
8487 Some(16180877),
8488 Some(16180878),
8489 Some(16180879),
8490 Some(16180880),
8491 Some(16180881),
8492 Some(16180882),
8493 Some(16180883),
8494 Some(16180884),
8495 Some(16180885),
8496 Some(16180886),
8497 Some(16180887),
8498 Some(16180888),
8499 Some(16180889),
8500 Some(16180890),
8501 Some(16180891),
8502 Some(16180892),
8503 Some(16180893),
8504 Some(16180894),
8505 Some(16180895),
8506 Some(16180896),
8507 Some(16180897),
8508 Some(16180898),
8509 Some(16180899),
8510 Some(16180900),
8511 Some(16180901),
8512 Some(16180902),
8513 Some(16180903),
8514 Some(16180904),
8515 Some(16180905),
8516 Some(16180906),
8517 Some(16180907),
8518 Some(16180908),
8519 Some(16180909),
8520 Some(16180910),
8521 Some(16180911),
8522 Some(16180912),
8523 Some(16180913),
8524 Some(16180914),
8525 Some(16180915),
8526 Some(16180916),
8527 Some(16180917),
8528 Some(16180918),
8529 Some(16180919),
8530 Some(16180920),
8531 Some(16180921)
8532 ]
8533 );
8534 let rp: Vec<_> = it
8535 .next()
8536 .unwrap()
8537 .unwrap()
8538 .reference_positions_full()
8539 .collect();
8540 assert_eq!(
8541 rp,
8542 vec![
8543 Some(16189705),
8544 Some(16189706),
8545 Some(16189707),
8546 Some(16189708),
8547 Some(16189709),
8548 Some(16189710),
8549 Some(16189711),
8550 Some(16189712),
8551 Some(16189713),
8552 Some(16189714),
8553 Some(16189715),
8554 Some(16189716),
8555 Some(16189717),
8556 Some(16189718),
8557 Some(16189719),
8558 Some(16189720),
8559 Some(16189721),
8560 Some(16189722),
8561 Some(16189723),
8562 Some(16189724),
8563 Some(16189725),
8564 Some(16189726),
8565 Some(16189727),
8566 Some(16189728),
8567 Some(16189729),
8568 Some(16189730),
8569 Some(16189731),
8570 Some(16189732),
8571 Some(16189733),
8572 Some(16189734),
8573 Some(16189735),
8574 Some(16189736),
8575 Some(16189737),
8576 Some(16189738),
8577 Some(16189739),
8578 Some(16189740),
8579 Some(16189741),
8580 Some(16189742),
8581 Some(16189743),
8582 Some(16189744),
8583 Some(16189745),
8584 Some(16189746),
8585 Some(16189747),
8586 Some(16189748),
8587 Some(16189749),
8588 Some(16189750),
8589 Some(16189751),
8590 Some(16189752),
8591 Some(16189753),
8592 Some(16189754),
8593 Some(16189755)
8594 ]
8595 );
8596 let rp: Vec<_> = it
8597 .next()
8598 .unwrap()
8599 .unwrap()
8600 .reference_positions_full()
8601 .collect();
8602 assert_eq!(
8603 rp,
8604 vec![
8605 Some(16231271),
8606 Some(16231272),
8607 Some(16231273),
8608 Some(16231274),
8609 Some(16231275),
8610 Some(16231276),
8611 Some(16231277),
8612 Some(16231278),
8613 Some(16231279),
8614 Some(16231280),
8615 Some(16231281),
8616 Some(16231282),
8617 Some(16231283),
8618 Some(16231284),
8619 Some(16231285),
8620 Some(16231286),
8621 Some(16231287),
8622 Some(16231288),
8623 Some(16231289),
8624 Some(16231290),
8625 Some(16231291),
8626 Some(16231292),
8627 Some(16231293),
8628 Some(16231294),
8629 Some(16231295),
8630 Some(16231296),
8631 Some(16231297),
8632 Some(16231298),
8633 Some(16231299),
8634 Some(16231300),
8635 Some(16231301),
8636 Some(16231302),
8637 Some(16231303),
8638 Some(16231304),
8639 Some(16231305),
8640 Some(16231306),
8641 Some(16231307),
8642 Some(16231308),
8643 Some(16231309),
8644 Some(16231310),
8645 Some(16231311),
8646 Some(16231312),
8647 Some(16231313),
8648 Some(16231314),
8649 Some(16231315),
8650 Some(16231316),
8651 Some(16231317),
8652 Some(16231318),
8653 Some(16231319),
8654 Some(16231320),
8655 Some(16231321)
8656 ]
8657 );
8658 let rp: Vec<_> = it
8659 .next()
8660 .unwrap()
8661 .unwrap()
8662 .reference_positions_full()
8663 .collect();
8664 assert_eq!(
8665 rp,
8666 vec![
8667 Some(16237657),
8668 Some(16237658),
8669 Some(16237659),
8670 Some(16237660),
8671 Some(16237661),
8672 Some(16237662),
8673 Some(16237663),
8674 Some(16237664),
8675 Some(16237665),
8676 Some(16237666),
8677 Some(16237667),
8678 Some(16237668),
8679 Some(16237669),
8680 Some(16237670),
8681 Some(16237671),
8682 Some(16237672),
8683 Some(16237673),
8684 Some(16237674),
8685 Some(16237675),
8686 Some(16237676),
8687 Some(16237677),
8688 Some(16237678),
8689 Some(16237679),
8690 Some(16237680),
8691 Some(16237681),
8692 Some(16237682),
8693 Some(16237683),
8694 Some(16237684),
8695 Some(16237685),
8696 Some(16237686),
8697 Some(16237687),
8698 Some(16237688),
8699 Some(16237689),
8700 Some(16237690),
8701 Some(16237691),
8702 Some(16237692),
8703 Some(16237693),
8704 Some(16237694),
8705 Some(16237695),
8706 Some(16237696),
8707 Some(16237697),
8708 Some(16237698),
8709 Some(16237699),
8710 Some(16237700),
8711 Some(16237701),
8712 Some(16237702),
8713 Some(16237703),
8714 Some(16237704),
8715 Some(16237705),
8716 Some(16237706),
8717 Some(16237707)
8718 ]
8719 );
8720 let rp: Vec<_> = it
8721 .next()
8722 .unwrap()
8723 .unwrap()
8724 .reference_positions_full()
8725 .collect();
8726 assert_eq!(
8727 rp,
8728 vec![
8729 None,
8730 None,
8731 None,
8732 None,
8733 None,
8734 None,
8735 None,
8736 None,
8737 None,
8738 Some(16255012),
8739 Some(16255013),
8740 Some(16255014),
8741 Some(16255015),
8742 Some(16255016),
8743 Some(16255017),
8744 Some(16255018),
8745 Some(16255019),
8746 Some(16255020),
8747 Some(16255021),
8748 Some(16255022),
8749 Some(16255023),
8750 Some(16255024),
8751 Some(16255025),
8752 Some(16255026),
8753 Some(16255027),
8754 Some(16255028),
8755 Some(16255029),
8756 Some(16255030),
8757 Some(16255031),
8758 Some(16255032),
8759 Some(16255033),
8760 Some(16255034),
8761 Some(16255035),
8762 Some(16255036),
8763 Some(16255037),
8764 Some(16255038),
8765 Some(16255039),
8766 Some(16255040),
8767 Some(16255041),
8768 Some(16255042),
8769 Some(16255043),
8770 Some(16255044),
8771 Some(16255045),
8772 Some(16255046),
8773 Some(16255047),
8774 Some(16255048),
8775 Some(16255049),
8776 Some(16255050),
8777 Some(16255051),
8778 Some(16255052),
8779 Some(16255053)
8780 ]
8781 );
8782 let rp: Vec<_> = it
8783 .next()
8784 .unwrap()
8785 .unwrap()
8786 .reference_positions_full()
8787 .collect();
8788 assert_eq!(
8789 rp,
8790 vec![
8791 Some(16255391),
8792 Some(16255392),
8793 Some(16255393),
8794 Some(16255394),
8795 Some(16255395),
8796 Some(16255396),
8797 Some(16255397),
8798 Some(16255398),
8799 Some(16255399),
8800 Some(16255400),
8801 Some(16255401),
8802 Some(16255402),
8803 Some(16255403),
8804 Some(16255404),
8805 Some(16255405),
8806 Some(16255406),
8807 Some(16255407),
8808 Some(16255408),
8809 Some(16255409),
8810 Some(16255410),
8811 Some(16255411),
8812 Some(16255412),
8813 Some(16255413),
8814 Some(16255414),
8815 Some(16255415),
8816 Some(16255416),
8817 Some(16255417),
8818 Some(16255418),
8819 Some(16255419),
8820 Some(16255420),
8821 Some(16255421),
8822 Some(16255422),
8823 Some(16255423),
8824 Some(16255424),
8825 Some(16255425),
8826 Some(16255426),
8827 Some(16255427),
8828 Some(16255428),
8829 Some(16255429),
8830 Some(16255430),
8831 Some(16255431),
8832 Some(16255432),
8833 Some(16255433),
8834 Some(16255434),
8835 Some(16255435),
8836 Some(16255436),
8837 Some(16255437),
8838 Some(16255438),
8839 Some(16255439),
8840 Some(16255440),
8841 Some(16255441)
8842 ]
8843 );
8844 let rp: Vec<_> = it
8845 .next()
8846 .unwrap()
8847 .unwrap()
8848 .reference_positions_full()
8849 .collect();
8850 assert_eq!(
8851 rp,
8852 vec![
8853 Some(16255392),
8854 Some(16255393),
8855 Some(16255394),
8856 Some(16255395),
8857 Some(16255396),
8858 Some(16255397),
8859 Some(16255398),
8860 Some(16255399),
8861 Some(16255400),
8862 Some(16255401),
8863 Some(16255402),
8864 Some(16255403),
8865 Some(16255404),
8866 Some(16255405),
8867 Some(16255406),
8868 Some(16255407),
8869 Some(16255408),
8870 Some(16255409),
8871 Some(16255410),
8872 Some(16255411),
8873 Some(16255412),
8874 Some(16255413),
8875 Some(16255414),
8876 Some(16255415),
8877 Some(16255416),
8878 Some(16255417),
8879 Some(16255418),
8880 Some(16255419),
8881 Some(16255420),
8882 Some(16255421),
8883 Some(16255422),
8884 Some(16255423),
8885 Some(16255424),
8886 Some(16255425),
8887 Some(16255426),
8888 Some(16255427),
8889 Some(16255428),
8890 Some(16255429),
8891 Some(16255430),
8892 Some(16255431),
8893 Some(16255432),
8894 Some(16255433),
8895 Some(16255434),
8896 Some(16255435),
8897 Some(16255436),
8898 Some(16255437),
8899 Some(16255438),
8900 Some(16255439),
8901 Some(16255440),
8902 Some(16255441),
8903 None
8904 ]
8905 );
8906 let rp: Vec<_> = it
8907 .next()
8908 .unwrap()
8909 .unwrap()
8910 .reference_positions_full()
8911 .collect();
8912 assert_eq!(
8913 rp,
8914 vec![
8915 Some(16256084),
8916 Some(16256085),
8917 Some(16256086),
8918 Some(16256087),
8919 Some(16256088),
8920 Some(16256089),
8921 Some(16256090),
8922 Some(16256091),
8923 Some(16256092),
8924 Some(16256093),
8925 Some(16256094),
8926 Some(16256095),
8927 Some(16256096),
8928 Some(16256097),
8929 Some(16256098),
8930 Some(16256099),
8931 Some(16256100),
8932 Some(16256101),
8933 Some(16256102),
8934 Some(16256103),
8935 Some(16256104),
8936 Some(16256105),
8937 Some(16256106),
8938 Some(16256107),
8939 Some(16256108),
8940 Some(16256109),
8941 Some(16256110),
8942 Some(16256111),
8943 Some(16256112),
8944 Some(16256113),
8945 Some(16256114),
8946 Some(16256115),
8947 Some(16256116),
8948 Some(16256117),
8949 Some(16256118),
8950 Some(16256119),
8951 Some(16256120),
8952 Some(16256121),
8953 Some(16256122),
8954 Some(16256123),
8955 Some(16256124),
8956 Some(16256125),
8957 Some(16256126),
8958 Some(16256127),
8959 Some(16256128),
8960 None,
8961 None,
8962 None,
8963 None,
8964 None,
8965 None
8966 ]
8967 );
8968 let rp: Vec<_> = it
8969 .next()
8970 .unwrap()
8971 .unwrap()
8972 .reference_positions_full()
8973 .collect();
8974 assert_eq!(
8975 rp,
8976 vec![
8977 None,
8978 None,
8979 None,
8980 Some(16256224),
8981 Some(16256225),
8982 Some(16256226),
8983 Some(16256227),
8984 Some(16256228),
8985 Some(16256229),
8986 Some(16256230),
8987 Some(16256231),
8988 Some(16256232),
8989 Some(16256233),
8990 Some(16256234),
8991 Some(16256235),
8992 Some(16256236),
8993 Some(16256237),
8994 Some(16256238),
8995 Some(16256239),
8996 Some(16256240),
8997 Some(16256241),
8998 Some(16256242),
8999 Some(16256243),
9000 Some(16256244),
9001 Some(16256245),
9002 Some(16256246),
9003 Some(16256247),
9004 Some(16256248),
9005 Some(16256249),
9006 Some(16256250),
9007 Some(16256251),
9008 Some(16256252),
9009 Some(16256253),
9010 Some(16256254),
9011 Some(16256255),
9012 Some(16256256),
9013 Some(16256257),
9014 Some(16256258),
9015 Some(16256259),
9016 Some(16256260),
9017 Some(16256261),
9018 Some(16256262),
9019 Some(16256263),
9020 Some(16256264),
9021 Some(16256265),
9022 Some(16256266),
9023 Some(16256267),
9024 Some(16256268),
9025 Some(16256269),
9026 Some(16256270),
9027 Some(16256271)
9028 ]
9029 );
9030 let rp: Vec<_> = it
9031 .next()
9032 .unwrap()
9033 .unwrap()
9034 .reference_positions_full()
9035 .collect();
9036 assert_eq!(
9037 rp,
9038 vec![
9039 Some(16325199),
9040 Some(16325200),
9041 Some(16325201),
9042 Some(16325202),
9043 Some(16325203),
9044 Some(16325204),
9045 Some(16325205),
9046 Some(16325206),
9047 Some(16325207),
9048 Some(16325208),
9049 Some(16325209),
9050 Some(16325210),
9051 Some(16325211),
9052 Some(16325212),
9053 Some(16325213),
9054 Some(16325214),
9055 Some(16325215),
9056 Some(16325216),
9057 Some(16325217),
9058 Some(16325218),
9059 Some(16325219),
9060 Some(16325220),
9061 Some(16325221),
9062 Some(16325222),
9063 Some(16325223),
9064 Some(16325224),
9065 Some(16325225),
9066 Some(16325226),
9067 Some(16325227),
9068 Some(16325228),
9069 Some(16325229),
9070 Some(16325230),
9071 Some(16325231),
9072 Some(16325232),
9073 Some(16325233),
9074 Some(16325234),
9075 Some(16325235),
9076 Some(16325236),
9077 Some(16325237),
9078 Some(16325238),
9079 Some(16325239),
9080 Some(16325240),
9081 None,
9082 None,
9083 None,
9084 None,
9085 None,
9086 None,
9087 None,
9088 None,
9089 None
9090 ]
9091 );
9092 let rp: Vec<_> = it
9093 .next()
9094 .unwrap()
9095 .unwrap()
9096 .reference_positions_full()
9097 .collect();
9098 assert_eq!(
9099 rp,
9100 vec![
9101 None,
9102 None,
9103 None,
9104 None,
9105 None,
9106 None,
9107 None,
9108 None,
9109 None,
9110 None,
9111 None,
9112 None,
9113 None,
9114 Some(16352865),
9115 Some(16352866),
9116 Some(16352867),
9117 Some(16352868),
9118 Some(16352869),
9119 Some(16352870),
9120 Some(16352871),
9121 Some(16352872),
9122 Some(16352873),
9123 Some(16352874),
9124 Some(16352875),
9125 Some(16352876),
9126 Some(16352877),
9127 Some(16352878),
9128 Some(16352879),
9129 Some(16352880),
9130 Some(16352881),
9131 Some(16352882),
9132 Some(16352883),
9133 Some(16352884),
9134 Some(16352885),
9135 Some(16352886),
9136 Some(16352887),
9137 Some(16352888),
9138 Some(16352889),
9139 Some(16352890),
9140 Some(16352891),
9141 Some(16352892),
9142 Some(16352893),
9143 Some(16352894),
9144 Some(16352895),
9145 Some(16352896),
9146 Some(16352897),
9147 Some(16352898),
9148 Some(16352899),
9149 Some(16352900),
9150 Some(16352901),
9151 Some(16352902)
9152 ]
9153 );
9154 let rp: Vec<_> = it
9155 .next()
9156 .unwrap()
9157 .unwrap()
9158 .reference_positions_full()
9159 .collect();
9160 assert_eq!(
9161 rp,
9162 vec![
9163 Some(16352968),
9164 Some(16352969),
9165 Some(16352970),
9166 Some(16352971),
9167 Some(16352972),
9168 Some(16352973),
9169 Some(16352974),
9170 Some(16352975),
9171 Some(16352976),
9172 Some(16352977),
9173 Some(16352978),
9174 Some(16352979),
9175 Some(16352980),
9176 Some(16352981),
9177 Some(16352982),
9178 Some(16352983),
9179 Some(16352984),
9180 Some(16352985),
9181 Some(16352986),
9182 Some(16352987),
9183 Some(16352988),
9184 Some(16352989),
9185 Some(16352990),
9186 Some(16352991),
9187 Some(16352992),
9188 Some(16352993),
9189 Some(16352994),
9190 Some(16352995),
9191 Some(16352996),
9192 Some(16352997),
9193 Some(16352998),
9194 Some(16352999),
9195 Some(16353000),
9196 Some(16353001),
9197 Some(16353002),
9198 Some(16353003),
9199 Some(16353004),
9200 Some(16353005),
9201 Some(16353006),
9202 Some(16353007),
9203 Some(16353008),
9204 Some(16353009),
9205 Some(16353010),
9206 Some(16353011),
9207 None,
9208 None,
9209 None,
9210 None,
9211 None,
9212 None,
9213 None
9214 ]
9215 );
9216 let rp: Vec<_> = it
9217 .next()
9218 .unwrap()
9219 .unwrap()
9220 .reference_positions_full()
9221 .collect();
9222 assert_eq!(
9223 rp,
9224 vec![
9225 None,
9226 None,
9227 None,
9228 None,
9229 None,
9230 Some(16414998),
9231 Some(16414999),
9232 Some(16415000),
9233 Some(16415001),
9234 Some(16415002),
9235 Some(16415003),
9236 Some(16415004),
9237 Some(16415005),
9238 Some(16415006),
9239 Some(16415007),
9240 Some(16415008),
9241 Some(16415009),
9242 Some(16415010),
9243 Some(16415011),
9244 Some(16415012),
9245 Some(16415013),
9246 Some(16415014),
9247 Some(16415015),
9248 Some(16415016),
9249 Some(16415017),
9250 Some(16415018),
9251 Some(16415019),
9252 Some(16415020),
9253 Some(16415021),
9254 Some(16415022),
9255 Some(16415023),
9256 Some(16415024),
9257 Some(16415025),
9258 Some(16415026),
9259 Some(16415027),
9260 Some(16415028),
9261 Some(16415029),
9262 Some(16415030),
9263 Some(16415031),
9264 Some(16415032),
9265 Some(16415033),
9266 Some(16415034),
9267 Some(16415035),
9268 Some(16415036),
9269 Some(16415037),
9270 Some(16415038),
9271 Some(16415039),
9272 Some(16415040),
9273 Some(16415041),
9274 Some(16415042),
9275 Some(16415043)
9276 ]
9277 );
9278 let rp: Vec<_> = it
9279 .next()
9280 .unwrap()
9281 .unwrap()
9282 .reference_positions_full()
9283 .collect();
9284 assert_eq!(
9285 rp,
9286 vec![
9287 Some(17031591),
9288 Some(17031592),
9289 Some(17031593),
9290 Some(17031594),
9291 Some(17031595),
9292 Some(17031596),
9293 Some(17031597),
9294 Some(17031598),
9295 Some(17031599),
9296 Some(17031600),
9297 Some(17031601),
9298 Some(17031602),
9299 Some(17031603),
9300 Some(17031604),
9301 Some(17031605),
9302 Some(17031606),
9303 Some(17031607),
9304 Some(17031608),
9305 Some(17031609),
9306 Some(17031610),
9307 Some(17031611),
9308 Some(17031612),
9309 Some(17031613),
9310 None,
9311 None,
9312 None,
9313 None,
9314 Some(17031614),
9315 Some(17031615),
9316 Some(17031616),
9317 Some(17031617),
9318 Some(17031618),
9319 Some(17031619),
9320 Some(17031620),
9321 Some(17031621),
9322 Some(17031622),
9323 Some(17031623),
9324 Some(17031624),
9325 Some(17031625),
9326 Some(17031626),
9327 Some(17031627),
9328 Some(17031628),
9329 Some(17031629),
9330 Some(17031630),
9331 Some(17031631),
9332 Some(17031632),
9333 Some(17031633),
9334 Some(17031634),
9335 Some(17031635),
9336 Some(17031636),
9337 Some(17031637)
9338 ]
9339 );
9340 let rp: Vec<_> = it
9341 .next()
9342 .unwrap()
9343 .unwrap()
9344 .reference_positions_full()
9345 .collect();
9346 assert_eq!(
9347 rp,
9348 vec![
9349 Some(17057382),
9350 Some(17057383),
9351 Some(17057384),
9352 Some(17057385),
9353 Some(17057386),
9354 Some(17057387),
9355 Some(17057388),
9356 Some(17057389),
9357 Some(17057390),
9358 Some(17057391),
9359 Some(17057392),
9360 Some(17057393),
9361 Some(17057394),
9362 Some(17057395),
9363 Some(17057396),
9364 Some(17057397),
9365 Some(17057398),
9366 Some(17057399),
9367 None,
9368 Some(17057400),
9369 Some(17057401),
9370 Some(17057402),
9371 Some(17057403),
9372 Some(17057404),
9373 Some(17057405),
9374 Some(17057406),
9375 Some(17057407),
9376 Some(17057408),
9377 Some(17057409),
9378 Some(17057410),
9379 Some(17057411),
9380 Some(17057412),
9381 Some(17057413),
9382 Some(17057414),
9383 Some(17057415),
9384 Some(17057416),
9385 Some(17057417),
9386 Some(17057418),
9387 Some(17057419),
9388 Some(17057420),
9389 Some(17057421),
9390 Some(17057422),
9391 Some(17057423),
9392 Some(17057424),
9393 Some(17057425),
9394 Some(17057426),
9395 Some(17057427),
9396 Some(17057428),
9397 Some(17057429),
9398 Some(17057430),
9399 Some(17057431)
9400 ]
9401 );
9402 let rp: Vec<_> = it
9403 .next()
9404 .unwrap()
9405 .unwrap()
9406 .reference_positions_full()
9407 .collect();
9408 assert_eq!(
9409 rp,
9410 vec![
9411 Some(17092766),
9412 Some(17092767),
9413 Some(17092768),
9414 Some(17092769),
9415 Some(17092770),
9416 Some(17092771),
9417 Some(17092772),
9418 Some(17092773),
9419 Some(17092774),
9420 Some(17092775),
9421 Some(17092776),
9422 Some(17092777),
9423 Some(17092778),
9424 Some(17092779),
9425 Some(17092780),
9426 Some(17092781),
9427 Some(17092782),
9428 Some(17094966),
9429 Some(17094967),
9430 Some(17094968),
9431 Some(17094969),
9432 Some(17094970),
9433 Some(17094971),
9434 Some(17094972),
9435 Some(17094973),
9436 Some(17094974),
9437 Some(17094975),
9438 Some(17094976),
9439 Some(17094977),
9440 Some(17094978),
9441 Some(17094979),
9442 Some(17094980),
9443 Some(17094981),
9444 Some(17094982),
9445 Some(17094983),
9446 Some(17094984),
9447 Some(17094985),
9448 Some(17094986),
9449 Some(17094987),
9450 Some(17094988),
9451 Some(17094989),
9452 Some(17094990),
9453 Some(17094991),
9454 Some(17094992),
9455 Some(17094993),
9456 Some(17094994),
9457 Some(17094995),
9458 Some(17094996),
9459 Some(17094997),
9460 Some(17094998),
9461 Some(17094999)
9462 ]
9463 );
9464 let rp: Vec<_> = it
9465 .next()
9466 .unwrap()
9467 .unwrap()
9468 .reference_positions_full()
9469 .collect();
9470 assert_eq!(
9471 rp,
9472 vec![
9473 Some(17092782),
9474 Some(17094966),
9475 Some(17094967),
9476 Some(17094968),
9477 Some(17094969),
9478 Some(17094970),
9479 Some(17094971),
9480 Some(17094972),
9481 Some(17094973),
9482 Some(17094974),
9483 Some(17094975),
9484 Some(17094976),
9485 Some(17094977),
9486 Some(17094978),
9487 Some(17094979),
9488 Some(17094980),
9489 Some(17094981),
9490 Some(17094982),
9491 Some(17094983),
9492 Some(17094984),
9493 Some(17094985),
9494 Some(17094986),
9495 Some(17094987),
9496 Some(17094988),
9497 Some(17094989),
9498 Some(17094990),
9499 Some(17094991),
9500 Some(17094992),
9501 Some(17094993),
9502 Some(17094994),
9503 Some(17094995),
9504 Some(17094996),
9505 Some(17094997),
9506 Some(17094998),
9507 Some(17094999),
9508 Some(17095000),
9509 Some(17095001),
9510 Some(17095002),
9511 Some(17095003),
9512 Some(17095004),
9513 Some(17095005),
9514 Some(17095006),
9515 Some(17095007),
9516 Some(17095008),
9517 Some(17095009),
9518 Some(17095010),
9519 Some(17095011),
9520 Some(17095012),
9521 Some(17095013),
9522 Some(17095014),
9523 Some(17095015)
9524 ]
9525 );
9526 let rp: Vec<_> = it
9527 .next()
9528 .unwrap()
9529 .unwrap()
9530 .reference_positions_full()
9531 .collect();
9532 assert_eq!(
9533 rp,
9534 vec![
9535 Some(17092782),
9536 Some(17094966),
9537 Some(17094967),
9538 Some(17094968),
9539 Some(17094969),
9540 Some(17094970),
9541 Some(17094971),
9542 Some(17094972),
9543 Some(17094973),
9544 Some(17094974),
9545 Some(17094975),
9546 Some(17094976),
9547 Some(17094977),
9548 Some(17094978),
9549 Some(17094979),
9550 Some(17094980),
9551 Some(17094981),
9552 Some(17094982),
9553 Some(17094983),
9554 Some(17094984),
9555 Some(17094985),
9556 Some(17094986),
9557 Some(17094987),
9558 Some(17094988),
9559 Some(17094989),
9560 Some(17094990),
9561 Some(17094991),
9562 Some(17094992),
9563 Some(17094993),
9564 Some(17094994),
9565 Some(17094995),
9566 Some(17094996),
9567 Some(17094997),
9568 Some(17094998),
9569 Some(17094999),
9570 Some(17095000),
9571 Some(17095001),
9572 Some(17095002),
9573 Some(17095003),
9574 Some(17095004),
9575 Some(17095005),
9576 Some(17095006),
9577 Some(17095007),
9578 Some(17095008),
9579 Some(17095009),
9580 Some(17095010),
9581 Some(17095011),
9582 Some(17095012),
9583 Some(17095013),
9584 Some(17095014),
9585 Some(17095015)
9586 ]
9587 );
9588 let rp: Vec<_> = it
9589 .next()
9590 .unwrap()
9591 .unwrap()
9592 .reference_positions_full()
9593 .collect();
9594 assert_eq!(
9595 rp,
9596 vec![
9597 None,
9598 None,
9599 None,
9600 None,
9601 None,
9602 None,
9603 None,
9604 None,
9605 None,
9606 Some(17137287),
9607 Some(17137288),
9608 Some(17137289),
9609 Some(17137290),
9610 Some(17137291),
9611 Some(17137292),
9612 Some(17137293),
9613 Some(17137294),
9614 Some(17137295),
9615 Some(17137296),
9616 Some(17137297),
9617 Some(17137298),
9618 Some(17137299),
9619 Some(17137300),
9620 Some(17137301),
9621 Some(17137302),
9622 Some(17137303),
9623 Some(17137304),
9624 Some(17137305),
9625 Some(17137306),
9626 Some(17137307),
9627 Some(17137308),
9628 Some(17137309),
9629 Some(17137310),
9630 Some(17137311),
9631 Some(17137312),
9632 Some(17137313),
9633 Some(17137314),
9634 Some(17137315),
9635 Some(17137316),
9636 Some(17137317),
9637 Some(17137318),
9638 Some(17137319),
9639 None,
9640 None,
9641 None,
9642 None,
9643 None,
9644 None,
9645 None,
9646 None,
9647 None
9648 ]
9649 );
9650 let rp: Vec<_> = it
9651 .next()
9652 .unwrap()
9653 .unwrap()
9654 .reference_positions_full()
9655 .collect();
9656 assert_eq!(
9657 rp,
9658 vec![
9659 None,
9660 None,
9661 Some(17306238),
9662 Some(17306239),
9663 Some(17306240),
9664 Some(17306241),
9665 Some(17306242),
9666 Some(17306243),
9667 Some(17306244),
9668 Some(17306245),
9669 Some(17306246),
9670 Some(17306247),
9671 Some(17306248),
9672 Some(17306249),
9673 Some(17306250),
9674 Some(17306251),
9675 Some(17306252),
9676 Some(17306253),
9677 Some(17306254),
9678 Some(17306255),
9679 Some(17306256),
9680 Some(17306257),
9681 Some(17306258),
9682 Some(17306259),
9683 Some(17306260),
9684 Some(17306261),
9685 Some(17306262),
9686 Some(17306263),
9687 Some(17306264),
9688 Some(17306265),
9689 Some(17306266),
9690 Some(17306267),
9691 Some(17306268),
9692 Some(17306269),
9693 Some(17306270),
9694 Some(17306271),
9695 Some(17306272),
9696 Some(17306273),
9697 Some(17306274),
9698 Some(17306275),
9699 Some(17306276),
9700 Some(17306277),
9701 Some(17306278),
9702 Some(17306279),
9703 Some(17306280),
9704 Some(17306281),
9705 Some(17306282),
9706 Some(17306283),
9707 Some(17306284),
9708 Some(17306285),
9709 None
9710 ]
9711 );
9712 let rp: Vec<_> = it
9713 .next()
9714 .unwrap()
9715 .unwrap()
9716 .reference_positions_full()
9717 .collect();
9718 assert_eq!(
9719 rp,
9720 vec![
9721 None,
9722 None,
9723 None,
9724 None,
9725 Some(17561868),
9726 Some(17561869),
9727 Some(17561870),
9728 Some(17561871),
9729 Some(17561872),
9730 Some(17561873),
9731 Some(17561874),
9732 Some(17561875),
9733 Some(17561876),
9734 Some(17561877),
9735 Some(17561878),
9736 Some(17561879),
9737 Some(17561880),
9738 Some(17561881),
9739 Some(17561882),
9740 Some(17561883),
9741 Some(17561884),
9742 Some(17561885),
9743 Some(17561886),
9744 Some(17561887),
9745 Some(17561888),
9746 Some(17561889),
9747 Some(17561890),
9748 Some(17561891),
9749 Some(17561892),
9750 Some(17561893),
9751 Some(17561894),
9752 Some(17561895),
9753 Some(17561896),
9754 Some(17561897),
9755 Some(17561898),
9756 Some(17561899),
9757 Some(17561900),
9758 Some(17561901),
9759 Some(17561902),
9760 Some(17561903),
9761 Some(17561904),
9762 Some(17561905),
9763 Some(17561906),
9764 Some(17561907),
9765 Some(17561908),
9766 Some(17561909),
9767 Some(17561910),
9768 Some(17561911),
9769 Some(17561912),
9770 None,
9771 None
9772 ]
9773 );
9774 let rp: Vec<_> = it
9775 .next()
9776 .unwrap()
9777 .unwrap()
9778 .reference_positions_full()
9779 .collect();
9780 assert_eq!(
9781 rp,
9782 vec![
9783 Some(17566078),
9784 Some(17566079),
9785 Some(17566080),
9786 Some(17566081),
9787 Some(17566082),
9788 Some(17566083),
9789 Some(17566084),
9790 Some(17566085),
9791 Some(17566086),
9792 Some(17566087),
9793 Some(17566088),
9794 Some(17566089),
9795 Some(17566090),
9796 Some(17566091),
9797 Some(17566092),
9798 Some(17566093),
9799 Some(17566094),
9800 Some(17566095),
9801 Some(17566096),
9802 Some(17566097),
9803 Some(17566098),
9804 Some(17566099),
9805 Some(17566100),
9806 Some(17566101),
9807 Some(17566102),
9808 Some(17566103),
9809 Some(17566104),
9810 Some(17566105),
9811 Some(17566106),
9812 Some(17566107),
9813 Some(17566108),
9814 Some(17566109),
9815 Some(17566110),
9816 Some(17566111),
9817 Some(17566112),
9818 Some(17566113),
9819 Some(17566114),
9820 Some(17566115),
9821 Some(17566116),
9822 Some(17566117),
9823 Some(17566118),
9824 Some(17577951),
9825 Some(17577952),
9826 Some(17577953),
9827 Some(17577954),
9828 Some(17577955),
9829 Some(17577956),
9830 Some(17577957),
9831 Some(17577958),
9832 Some(17577959),
9833 Some(17577960)
9834 ]
9835 );
9836 let rp: Vec<_> = it
9837 .next()
9838 .unwrap()
9839 .unwrap()
9840 .reference_positions_full()
9841 .collect();
9842 assert_eq!(
9843 rp,
9844 vec![
9845 Some(17566108),
9846 Some(17566109),
9847 Some(17566110),
9848 Some(17566111),
9849 Some(17566112),
9850 Some(17566113),
9851 Some(17566114),
9852 Some(17566115),
9853 Some(17566116),
9854 Some(17566117),
9855 Some(17566118),
9856 Some(17577951),
9857 Some(17577952),
9858 Some(17577953),
9859 Some(17577954),
9860 Some(17577955),
9861 Some(17577956),
9862 Some(17577957),
9863 Some(17577958),
9864 Some(17577959),
9865 Some(17577960),
9866 Some(17577961),
9867 Some(17577962),
9868 Some(17577963),
9869 Some(17577964),
9870 Some(17577965),
9871 Some(17577966),
9872 Some(17577967),
9873 Some(17577968),
9874 Some(17577969),
9875 Some(17577970),
9876 Some(17577971),
9877 Some(17577972),
9878 Some(17577973),
9879 Some(17577974),
9880 Some(17577975),
9881 Some(17578686),
9882 Some(17578687),
9883 Some(17578688),
9884 Some(17578689),
9885 Some(17578690),
9886 Some(17578691),
9887 Some(17578692),
9888 Some(17578693),
9889 Some(17578694),
9890 Some(17578695),
9891 Some(17578696),
9892 Some(17578697),
9893 Some(17578698),
9894 Some(17578699),
9895 Some(17578700)
9896 ]
9897 );
9898 let rp: Vec<_> = it
9899 .next()
9900 .unwrap()
9901 .unwrap()
9902 .reference_positions_full()
9903 .collect();
9904 assert_eq!(
9905 rp,
9906 vec![
9907 Some(17566111),
9908 Some(17566112),
9909 Some(17566113),
9910 Some(17566114),
9911 Some(17566115),
9912 Some(17566116),
9913 Some(17566117),
9914 Some(17566118),
9915 Some(17577951),
9916 Some(17577952),
9917 Some(17577953),
9918 Some(17577954),
9919 Some(17577955),
9920 Some(17577956),
9921 Some(17577957),
9922 Some(17577958),
9923 Some(17577959),
9924 Some(17577960),
9925 Some(17577961),
9926 Some(17577962),
9927 Some(17577963),
9928 Some(17577964),
9929 Some(17577965),
9930 Some(17577966),
9931 Some(17577967),
9932 Some(17577968),
9933 Some(17577969),
9934 Some(17577970),
9935 Some(17577971),
9936 Some(17577972),
9937 Some(17577973),
9938 Some(17577974),
9939 Some(17577975),
9940 Some(17578686),
9941 Some(17578687),
9942 Some(17578688),
9943 Some(17578689),
9944 Some(17578690),
9945 Some(17578691),
9946 Some(17578692),
9947 Some(17578693),
9948 Some(17578694),
9949 Some(17578695),
9950 Some(17578696),
9951 Some(17578697),
9952 Some(17578698),
9953 Some(17578699),
9954 Some(17578700),
9955 Some(17578701),
9956 Some(17578702),
9957 Some(17578703)
9958 ]
9959 );
9960 let rp: Vec<_> = it
9961 .next()
9962 .unwrap()
9963 .unwrap()
9964 .reference_positions_full()
9965 .collect();
9966 assert_eq!(
9967 rp,
9968 vec![
9969 Some(17566111),
9970 Some(17566112),
9971 Some(17566113),
9972 Some(17566114),
9973 Some(17566115),
9974 Some(17566116),
9975 Some(17566117),
9976 Some(17566118),
9977 Some(17577951),
9978 Some(17577952),
9979 Some(17577953),
9980 Some(17577954),
9981 Some(17577955),
9982 Some(17577956),
9983 Some(17577957),
9984 Some(17577958),
9985 Some(17577959),
9986 Some(17577960),
9987 Some(17577961),
9988 Some(17577962),
9989 Some(17577963),
9990 Some(17577964),
9991 Some(17577965),
9992 Some(17577966),
9993 Some(17577967),
9994 Some(17577968),
9995 Some(17577969),
9996 Some(17577970),
9997 Some(17577971),
9998 Some(17577972),
9999 Some(17577973),
10000 Some(17577974),
10001 Some(17577975),
10002 Some(17578686),
10003 Some(17578687),
10004 Some(17578688),
10005 Some(17578689),
10006 Some(17578690),
10007 Some(17578691),
10008 Some(17578692),
10009 Some(17578693),
10010 Some(17578694),
10011 Some(17578695),
10012 Some(17578696),
10013 Some(17578697),
10014 Some(17578698),
10015 Some(17578699),
10016 Some(17578700),
10017 Some(17578701),
10018 Some(17578702),
10019 Some(17578703)
10020 ]
10021 );
10022 let rp: Vec<_> = it
10023 .next()
10024 .unwrap()
10025 .unwrap()
10026 .reference_positions_full()
10027 .collect();
10028 assert_eq!(
10029 rp,
10030 vec![
10031 Some(17566111),
10032 Some(17566112),
10033 Some(17566113),
10034 Some(17566114),
10035 Some(17566115),
10036 Some(17566116),
10037 Some(17566117),
10038 Some(17566118),
10039 Some(17577951),
10040 Some(17577952),
10041 Some(17577953),
10042 Some(17577954),
10043 Some(17577955),
10044 Some(17577956),
10045 Some(17577957),
10046 Some(17577958),
10047 Some(17577959),
10048 Some(17577960),
10049 Some(17577961),
10050 Some(17577962),
10051 Some(17577963),
10052 Some(17577964),
10053 Some(17577965),
10054 Some(17577966),
10055 Some(17577967),
10056 Some(17577968),
10057 Some(17577969),
10058 Some(17577970),
10059 Some(17577971),
10060 Some(17577972),
10061 Some(17577973),
10062 Some(17577974),
10063 Some(17577975),
10064 Some(17578686),
10065 Some(17578687),
10066 Some(17578688),
10067 Some(17578689),
10068 Some(17578690),
10069 Some(17578691),
10070 Some(17578692),
10071 Some(17578693),
10072 Some(17578694),
10073 Some(17578695),
10074 Some(17578696),
10075 Some(17578697),
10076 Some(17578698),
10077 Some(17578699),
10078 Some(17578700),
10079 Some(17578701),
10080 Some(17578702),
10081 Some(17578703)
10082 ]
10083 );
10084 let rp: Vec<_> = it
10085 .next()
10086 .unwrap()
10087 .unwrap()
10088 .reference_positions_full()
10089 .collect();
10090 assert_eq!(
10091 rp,
10092 vec![
10093 Some(17566111),
10094 Some(17566112),
10095 Some(17566113),
10096 Some(17566114),
10097 Some(17566115),
10098 Some(17566116),
10099 Some(17566117),
10100 Some(17566118),
10101 Some(17577951),
10102 Some(17577952),
10103 Some(17577953),
10104 Some(17577954),
10105 Some(17577955),
10106 Some(17577956),
10107 Some(17577957),
10108 Some(17577958),
10109 Some(17577959),
10110 Some(17577960),
10111 Some(17577961),
10112 Some(17577962),
10113 Some(17577963),
10114 Some(17577964),
10115 Some(17577965),
10116 Some(17577966),
10117 Some(17577967),
10118 Some(17577968),
10119 Some(17577969),
10120 Some(17577970),
10121 Some(17577971),
10122 Some(17577972),
10123 Some(17577973),
10124 Some(17577974),
10125 Some(17577975),
10126 Some(17578686),
10127 Some(17578687),
10128 Some(17578688),
10129 Some(17578689),
10130 Some(17578690),
10131 Some(17578691),
10132 Some(17578692),
10133 Some(17578693),
10134 Some(17578694),
10135 Some(17578695),
10136 Some(17578696),
10137 Some(17578697),
10138 Some(17578698),
10139 Some(17578699),
10140 Some(17578700),
10141 Some(17578701),
10142 Some(17578702),
10143 Some(17578703)
10144 ]
10145 );
10146 let rp: Vec<_> = it
10147 .next()
10148 .unwrap()
10149 .unwrap()
10150 .reference_positions_full()
10151 .collect();
10152 assert_eq!(
10153 rp,
10154 vec![
10155 Some(17566112),
10156 Some(17566113),
10157 Some(17566114),
10158 Some(17566115),
10159 Some(17566116),
10160 Some(17566117),
10161 Some(17566118),
10162 Some(17577951),
10163 Some(17577952),
10164 Some(17577953),
10165 Some(17577954),
10166 Some(17577955),
10167 Some(17577956),
10168 Some(17577957),
10169 Some(17577958),
10170 Some(17577959),
10171 Some(17577960),
10172 Some(17577961),
10173 Some(17577962),
10174 Some(17577963),
10175 Some(17577964),
10176 Some(17577965),
10177 Some(17577966),
10178 Some(17577967),
10179 Some(17577968),
10180 Some(17577969),
10181 Some(17577970),
10182 Some(17577971),
10183 Some(17577972),
10184 Some(17577973),
10185 Some(17577974),
10186 Some(17577975),
10187 Some(17578686),
10188 Some(17578687),
10189 Some(17578688),
10190 Some(17578689),
10191 Some(17578690),
10192 Some(17578691),
10193 Some(17578692),
10194 Some(17578693),
10195 Some(17578694),
10196 Some(17578695),
10197 Some(17578696),
10198 Some(17578697),
10199 Some(17578698),
10200 Some(17578699),
10201 Some(17578700),
10202 Some(17578701),
10203 Some(17578702),
10204 Some(17578703),
10205 Some(17578704)
10206 ]
10207 );
10208 let rp: Vec<_> = it
10209 .next()
10210 .unwrap()
10211 .unwrap()
10212 .reference_positions_full()
10213 .collect();
10214 assert_eq!(
10215 rp,
10216 vec![
10217 Some(17566113),
10218 Some(17566114),
10219 Some(17566115),
10220 Some(17566116),
10221 Some(17566117),
10222 Some(17566118),
10223 Some(17577951),
10224 Some(17577952),
10225 Some(17577953),
10226 Some(17577954),
10227 Some(17577955),
10228 Some(17577956),
10229 Some(17577957),
10230 Some(17577958),
10231 Some(17577959),
10232 Some(17577960),
10233 Some(17577961),
10234 Some(17577962),
10235 Some(17577963),
10236 Some(17577964),
10237 Some(17577965),
10238 Some(17577966),
10239 Some(17577967),
10240 Some(17577968),
10241 Some(17577969),
10242 Some(17577970),
10243 Some(17577971),
10244 Some(17577972),
10245 Some(17577973),
10246 Some(17577974),
10247 Some(17577975),
10248 Some(17578686),
10249 Some(17578687),
10250 Some(17578688),
10251 Some(17578689),
10252 Some(17578690),
10253 Some(17578691),
10254 Some(17578692),
10255 Some(17578693),
10256 Some(17578694),
10257 Some(17578695),
10258 Some(17578696),
10259 Some(17578697),
10260 Some(17578698),
10261 Some(17578699),
10262 Some(17578700),
10263 Some(17578701),
10264 Some(17578702),
10265 Some(17578703),
10266 Some(17578704),
10267 Some(17578705)
10268 ]
10269 );
10270 let rp: Vec<_> = it
10271 .next()
10272 .unwrap()
10273 .unwrap()
10274 .reference_positions_full()
10275 .collect();
10276 assert_eq!(
10277 rp,
10278 vec![
10279 Some(17566113),
10280 Some(17566114),
10281 Some(17566115),
10282 Some(17566116),
10283 Some(17566117),
10284 Some(17566118),
10285 Some(17577951),
10286 Some(17577952),
10287 Some(17577953),
10288 Some(17577954),
10289 Some(17577955),
10290 Some(17577956),
10291 Some(17577957),
10292 Some(17577958),
10293 Some(17577959),
10294 Some(17577960),
10295 Some(17577961),
10296 Some(17577962),
10297 Some(17577963),
10298 Some(17577964),
10299 Some(17577965),
10300 Some(17577966),
10301 Some(17577967),
10302 Some(17577968),
10303 Some(17577969),
10304 Some(17577970),
10305 Some(17577971),
10306 Some(17577972),
10307 Some(17577973),
10308 Some(17577974),
10309 Some(17577975),
10310 Some(17578686),
10311 Some(17578687),
10312 Some(17578688),
10313 Some(17578689),
10314 Some(17578690),
10315 Some(17578691),
10316 Some(17578692),
10317 Some(17578693),
10318 Some(17578694),
10319 Some(17578695),
10320 Some(17578696),
10321 Some(17578697),
10322 Some(17578698),
10323 Some(17578699),
10324 Some(17578700),
10325 Some(17578701),
10326 Some(17578702),
10327 Some(17578703),
10328 Some(17578704),
10329 Some(17578705)
10330 ]
10331 );
10332 let rp: Vec<_> = it
10333 .next()
10334 .unwrap()
10335 .unwrap()
10336 .reference_positions_full()
10337 .collect();
10338 assert_eq!(
10339 rp,
10340 vec![
10341 None,
10342 Some(17579733),
10343 Some(17579734),
10344 Some(17579735),
10345 Some(17579736),
10346 Some(17579737),
10347 Some(17579738),
10348 Some(17579739),
10349 Some(17579740),
10350 Some(17579741),
10351 Some(17579742),
10352 Some(17579743),
10353 Some(17579744),
10354 Some(17579745),
10355 Some(17579746),
10356 Some(17579747),
10357 Some(17579748),
10358 Some(17579749),
10359 Some(17579750),
10360 Some(17579751),
10361 Some(17579752),
10362 Some(17579753),
10363 Some(17579754),
10364 Some(17579755),
10365 Some(17579756),
10366 Some(17579757),
10367 Some(17579758),
10368 Some(17579759),
10369 Some(17579760),
10370 Some(17579761),
10371 Some(17579762),
10372 Some(17579763),
10373 Some(17579764),
10374 Some(17579765),
10375 Some(17579766),
10376 Some(17579767),
10377 Some(17579768),
10378 Some(17579769),
10379 Some(17579770),
10380 Some(17579771),
10381 Some(17579772),
10382 Some(17579773),
10383 Some(17579774),
10384 Some(17579775),
10385 Some(17579776),
10386 Some(17581244),
10387 Some(17581245),
10388 Some(17581246),
10389 Some(17581247),
10390 Some(17581248),
10391 Some(17581249)
10392 ]
10393 );
10394 let rp: Vec<_> = it
10395 .next()
10396 .unwrap()
10397 .unwrap()
10398 .reference_positions_full()
10399 .collect();
10400 assert_eq!(
10401 rp,
10402 vec![
10403 Some(17581369),
10404 Some(17581370),
10405 Some(17582885),
10406 Some(17582886),
10407 Some(17582887),
10408 Some(17582888),
10409 Some(17582889),
10410 Some(17582890),
10411 Some(17582891),
10412 Some(17582892),
10413 Some(17582893),
10414 Some(17582894),
10415 Some(17582895),
10416 Some(17582896),
10417 Some(17582897),
10418 Some(17582898),
10419 Some(17582899),
10420 Some(17582900),
10421 Some(17582901),
10422 Some(17582902),
10423 Some(17582903),
10424 Some(17582904),
10425 Some(17582905),
10426 Some(17582906),
10427 Some(17582907),
10428 Some(17582908),
10429 Some(17582909),
10430 Some(17582910),
10431 Some(17582911),
10432 Some(17582912),
10433 Some(17582913),
10434 Some(17582914),
10435 Some(17582915),
10436 Some(17582916),
10437 Some(17582917),
10438 Some(17582918),
10439 Some(17582919),
10440 Some(17582920),
10441 Some(17582921),
10442 Some(17582922),
10443 Some(17582923),
10444 Some(17582924),
10445 Some(17582925),
10446 Some(17582926),
10447 Some(17582927),
10448 Some(17582928),
10449 Some(17582929),
10450 Some(17582930),
10451 Some(17582931),
10452 Some(17582932),
10453 Some(17583028)
10454 ]
10455 );
10456 let rp: Vec<_> = it
10457 .next()
10458 .unwrap()
10459 .unwrap()
10460 .reference_positions_full()
10461 .collect();
10462 assert_eq!(
10463 rp,
10464 vec![
10465 Some(17581370),
10466 Some(17582885),
10467 Some(17582886),
10468 Some(17582887),
10469 Some(17582888),
10470 Some(17582889),
10471 Some(17582890),
10472 Some(17582891),
10473 Some(17582892),
10474 Some(17582893),
10475 Some(17582894),
10476 Some(17582895),
10477 Some(17582896),
10478 Some(17582897),
10479 Some(17582898),
10480 Some(17582899),
10481 Some(17582900),
10482 Some(17582901),
10483 Some(17582902),
10484 Some(17582903),
10485 Some(17582904),
10486 Some(17582905),
10487 Some(17582906),
10488 Some(17582907),
10489 Some(17582908),
10490 Some(17582909),
10491 Some(17582910),
10492 Some(17582911),
10493 Some(17582912),
10494 Some(17582913),
10495 Some(17582914),
10496 Some(17582915),
10497 Some(17582916),
10498 Some(17582917),
10499 Some(17582918),
10500 Some(17582919),
10501 Some(17582920),
10502 Some(17582921),
10503 Some(17582922),
10504 Some(17582923),
10505 Some(17582924),
10506 Some(17582925),
10507 Some(17582926),
10508 Some(17582927),
10509 Some(17582928),
10510 Some(17582929),
10511 Some(17582930),
10512 Some(17582931),
10513 Some(17582932),
10514 Some(17583028),
10515 Some(17583029)
10516 ]
10517 );
10518 let rp: Vec<_> = it
10519 .next()
10520 .unwrap()
10521 .unwrap()
10522 .reference_positions_full()
10523 .collect();
10524 assert_eq!(
10525 rp,
10526 vec![
10527 Some(17581370),
10528 Some(17582885),
10529 Some(17582886),
10530 Some(17582887),
10531 Some(17582888),
10532 Some(17582889),
10533 Some(17582890),
10534 Some(17582891),
10535 Some(17582892),
10536 Some(17582893),
10537 Some(17582894),
10538 Some(17582895),
10539 Some(17582896),
10540 Some(17582897),
10541 Some(17582898),
10542 Some(17582899),
10543 Some(17582900),
10544 Some(17582901),
10545 Some(17582902),
10546 Some(17582903),
10547 Some(17582904),
10548 Some(17582905),
10549 Some(17582906),
10550 Some(17582907),
10551 Some(17582908),
10552 Some(17582909),
10553 Some(17582910),
10554 Some(17582911),
10555 Some(17582912),
10556 Some(17582913),
10557 Some(17582914),
10558 Some(17582915),
10559 Some(17582916),
10560 Some(17582917),
10561 Some(17582918),
10562 Some(17582919),
10563 Some(17582920),
10564 Some(17582921),
10565 Some(17582922),
10566 Some(17582923),
10567 Some(17582924),
10568 Some(17582925),
10569 Some(17582926),
10570 Some(17582927),
10571 Some(17582928),
10572 Some(17582929),
10573 Some(17582930),
10574 Some(17582931),
10575 Some(17582932),
10576 Some(17583028),
10577 Some(17583029)
10578 ]
10579 );
10580 let rp: Vec<_> = it
10581 .next()
10582 .unwrap()
10583 .unwrap()
10584 .reference_positions_full()
10585 .collect();
10586 assert_eq!(
10587 rp,
10588 vec![
10589 None,
10590 Some(17582911),
10591 Some(17582912),
10592 Some(17582913),
10593 Some(17582914),
10594 Some(17582915),
10595 Some(17582916),
10596 Some(17582917),
10597 Some(17582918),
10598 Some(17582919),
10599 Some(17582920),
10600 Some(17582921),
10601 Some(17582922),
10602 Some(17582923),
10603 Some(17582924),
10604 Some(17582925),
10605 Some(17582926),
10606 Some(17582927),
10607 Some(17582928),
10608 Some(17582929),
10609 Some(17582930),
10610 Some(17582931),
10611 Some(17582932),
10612 Some(17583028),
10613 Some(17583029),
10614 Some(17583030),
10615 Some(17583031),
10616 Some(17583032),
10617 Some(17583033),
10618 Some(17583034),
10619 Some(17583035),
10620 Some(17583036),
10621 Some(17583037),
10622 Some(17583038),
10623 Some(17583039),
10624 Some(17583040),
10625 Some(17583041),
10626 Some(17583042),
10627 Some(17583043),
10628 Some(17583044),
10629 Some(17583045),
10630 Some(17583046),
10631 Some(17583047),
10632 Some(17583048),
10633 Some(17583049),
10634 Some(17583050),
10635 Some(17583051),
10636 Some(17583052),
10637 Some(17583053),
10638 Some(17583054),
10639 Some(17583055)
10640 ]
10641 );
10642 let rp: Vec<_> = it
10643 .next()
10644 .unwrap()
10645 .unwrap()
10646 .reference_positions_full()
10647 .collect();
10648 assert_eq!(
10649 rp,
10650 vec![
10651 Some(17588621),
10652 Some(17588622),
10653 Some(17588623),
10654 Some(17588624),
10655 Some(17588625),
10656 Some(17588626),
10657 Some(17588627),
10658 Some(17588628),
10659 Some(17588629),
10660 Some(17588630),
10661 Some(17588631),
10662 Some(17588632),
10663 Some(17588633),
10664 Some(17588634),
10665 Some(17588635),
10666 Some(17588636),
10667 Some(17588637),
10668 Some(17588638),
10669 Some(17588639),
10670 Some(17588640),
10671 Some(17588641),
10672 Some(17588642),
10673 Some(17588643),
10674 Some(17588644),
10675 Some(17588645),
10676 Some(17588646),
10677 Some(17588647),
10678 Some(17588648),
10679 Some(17588649),
10680 Some(17588650),
10681 Some(17588651),
10682 Some(17588652),
10683 Some(17588653),
10684 Some(17588654),
10685 Some(17588655),
10686 Some(17588656),
10687 Some(17588657),
10688 Some(17589196),
10689 Some(17589197),
10690 Some(17589198),
10691 Some(17589199),
10692 Some(17589200),
10693 Some(17589201),
10694 Some(17589202),
10695 Some(17589203),
10696 Some(17589204),
10697 Some(17589205),
10698 Some(17589206),
10699 Some(17589207),
10700 Some(17589208),
10701 None
10702 ]
10703 );
10704 let rp: Vec<_> = it
10705 .next()
10706 .unwrap()
10707 .unwrap()
10708 .reference_positions_full()
10709 .collect();
10710 assert_eq!(
10711 rp,
10712 vec![
10713 Some(17588621),
10714 Some(17588622),
10715 Some(17588623),
10716 Some(17588624),
10717 Some(17588625),
10718 Some(17588626),
10719 Some(17588627),
10720 Some(17588628),
10721 Some(17588629),
10722 Some(17588630),
10723 Some(17588631),
10724 Some(17588632),
10725 Some(17588633),
10726 Some(17588634),
10727 Some(17588635),
10728 Some(17588636),
10729 Some(17588637),
10730 Some(17588638),
10731 Some(17588639),
10732 Some(17588640),
10733 Some(17588641),
10734 Some(17588642),
10735 Some(17588643),
10736 Some(17588644),
10737 Some(17588645),
10738 Some(17588646),
10739 Some(17588647),
10740 Some(17588648),
10741 Some(17588649),
10742 Some(17588650),
10743 Some(17588651),
10744 Some(17588652),
10745 Some(17588653),
10746 Some(17588654),
10747 Some(17588655),
10748 Some(17588656),
10749 Some(17588657),
10750 Some(17589196),
10751 Some(17589197),
10752 Some(17589198),
10753 Some(17589199),
10754 Some(17589200),
10755 Some(17589201),
10756 Some(17589202),
10757 Some(17589203),
10758 Some(17589204),
10759 Some(17589205),
10760 Some(17589206),
10761 Some(17589207),
10762 Some(17589208),
10763 None
10764 ]
10765 );
10766 let rp: Vec<_> = it
10767 .next()
10768 .unwrap()
10769 .unwrap()
10770 .reference_positions_full()
10771 .collect();
10772 assert_eq!(
10773 rp,
10774 vec![
10775 Some(17588621),
10776 Some(17588622),
10777 Some(17588623),
10778 Some(17588624),
10779 Some(17588625),
10780 Some(17588626),
10781 Some(17588627),
10782 Some(17588628),
10783 Some(17588629),
10784 Some(17588630),
10785 Some(17588631),
10786 Some(17588632),
10787 Some(17588633),
10788 Some(17588634),
10789 Some(17588635),
10790 Some(17588636),
10791 Some(17588637),
10792 Some(17588638),
10793 Some(17588639),
10794 Some(17588640),
10795 Some(17588641),
10796 Some(17588642),
10797 Some(17588643),
10798 Some(17588644),
10799 Some(17588645),
10800 Some(17588646),
10801 Some(17588647),
10802 Some(17588648),
10803 Some(17588649),
10804 Some(17588650),
10805 Some(17588651),
10806 Some(17588652),
10807 Some(17588653),
10808 Some(17588654),
10809 Some(17588655),
10810 Some(17588656),
10811 Some(17588657),
10812 Some(17589196),
10813 Some(17589197),
10814 Some(17589198),
10815 Some(17589199),
10816 Some(17589200),
10817 Some(17589201),
10818 Some(17589202),
10819 Some(17589203),
10820 Some(17589204),
10821 Some(17589205),
10822 Some(17589206),
10823 Some(17589207),
10824 Some(17589208),
10825 None
10826 ]
10827 );
10828 let rp: Vec<_> = it
10829 .next()
10830 .unwrap()
10831 .unwrap()
10832 .reference_positions_full()
10833 .collect();
10834 assert_eq!(
10835 rp,
10836 vec![
10837 None,
10838 Some(17591770),
10839 Some(17591771),
10840 Some(17591772),
10841 Some(17591773),
10842 Some(17591774),
10843 Some(17591775),
10844 Some(17591776),
10845 Some(17591777),
10846 Some(17591778),
10847 Some(17591779),
10848 Some(17591780),
10849 Some(17591781),
10850 Some(17591782),
10851 Some(17591783),
10852 Some(17591784),
10853 Some(17591785),
10854 Some(17591786),
10855 Some(17591787),
10856 Some(17591788),
10857 Some(17591789),
10858 Some(17591790),
10859 Some(17591791),
10860 Some(17591792),
10861 Some(17591793),
10862 Some(17591794),
10863 Some(17591796),
10864 Some(17591797),
10865 Some(17591798),
10866 Some(17591799),
10867 Some(17591800),
10868 Some(17591801),
10869 Some(17591802),
10870 Some(17591803),
10871 Some(17591804),
10872 Some(17591805),
10873 Some(17591806),
10874 Some(17591807),
10875 Some(17591808),
10876 Some(17591809),
10877 Some(17591810),
10878 Some(17591811),
10879 Some(17591812),
10880 Some(17591813),
10881 Some(17591814),
10882 Some(17591815),
10883 Some(17591816),
10884 Some(17591817),
10885 Some(17591818),
10886 Some(17591819),
10887 Some(17591820)
10888 ]
10889 );
10890 let rp: Vec<_> = it
10891 .next()
10892 .unwrap()
10893 .unwrap()
10894 .reference_positions_full()
10895 .collect();
10896 assert_eq!(
10897 rp,
10898 vec![
10899 Some(17593855),
10900 Some(17593856),
10901 Some(17593857),
10902 Some(17593858),
10903 Some(17593859),
10904 Some(17593860),
10905 Some(17593861),
10906 Some(17593862),
10907 Some(17593863),
10908 Some(17593864),
10909 Some(17593865),
10910 Some(17593866),
10911 Some(17593867),
10912 Some(17593868),
10913 Some(17593869),
10914 Some(17593870),
10915 Some(17593871),
10916 Some(17593872),
10917 Some(17593873),
10918 Some(17593874),
10919 Some(17593875),
10920 Some(17593876),
10921 Some(17593877),
10922 Some(17593878),
10923 Some(17593880),
10924 Some(17593881),
10925 Some(17593882),
10926 Some(17593883),
10927 Some(17593884),
10928 Some(17593885),
10929 Some(17593886),
10930 Some(17593887),
10931 Some(17593888),
10932 Some(17593889),
10933 Some(17593890),
10934 Some(17593891),
10935 Some(17593892),
10936 Some(17593893),
10937 Some(17593894),
10938 Some(17593895),
10939 Some(17593896),
10940 Some(17593897),
10941 Some(17593898),
10942 Some(17593899),
10943 Some(17593900),
10944 Some(17593901),
10945 Some(17593902),
10946 Some(17593903),
10947 None,
10948 None,
10949 None
10950 ]
10951 );
10952 let rp: Vec<_> = it
10953 .next()
10954 .unwrap()
10955 .unwrap()
10956 .reference_positions_full()
10957 .collect();
10958 assert_eq!(
10959 rp,
10960 vec![
10961 Some(17593863),
10962 Some(17593864),
10963 Some(17593865),
10964 Some(17593866),
10965 Some(17593867),
10966 Some(17593868),
10967 Some(17593869),
10968 Some(17593870),
10969 Some(17593871),
10970 Some(17593872),
10971 Some(17593873),
10972 Some(17593874),
10973 Some(17593875),
10974 Some(17593876),
10975 Some(17593877),
10976 Some(17593878),
10977 Some(17593880),
10978 Some(17593881),
10979 Some(17593882),
10980 Some(17593883),
10981 Some(17593884),
10982 Some(17593885),
10983 Some(17593886),
10984 Some(17593887),
10985 Some(17593888),
10986 Some(17593889),
10987 Some(17593890),
10988 Some(17593891),
10989 Some(17593892),
10990 Some(17593893),
10991 Some(17593894),
10992 Some(17593895),
10993 Some(17593896),
10994 Some(17593897),
10995 Some(17593898),
10996 Some(17593899),
10997 Some(17593900),
10998 Some(17593901),
10999 Some(17593902),
11000 Some(17593903),
11001 Some(17593904),
11002 Some(17593905),
11003 Some(17593906),
11004 Some(17593907),
11005 None,
11006 None,
11007 None,
11008 None,
11009 None,
11010 None,
11011 None
11012 ]
11013 );
11014 let rp: Vec<_> = it
11015 .next()
11016 .unwrap()
11017 .unwrap()
11018 .reference_positions_full()
11019 .collect();
11020 assert_eq!(
11021 rp,
11022 vec![
11023 None,
11024 None,
11025 None,
11026 None,
11027 None,
11028 None,
11029 None,
11030 None,
11031 None,
11032 None,
11033 None,
11034 Some(17596476),
11035 Some(17596477),
11036 Some(17596478),
11037 Some(17596479),
11038 Some(17596480),
11039 Some(17596481),
11040 Some(17596482),
11041 None,
11042 Some(17596483),
11043 Some(17596484),
11044 Some(17596485),
11045 Some(17596486),
11046 Some(17596487),
11047 Some(17596488),
11048 Some(17596489),
11049 Some(17596490),
11050 Some(17596491),
11051 Some(17596492),
11052 Some(17596493),
11053 Some(17596494),
11054 Some(17596495),
11055 Some(17596496),
11056 Some(17596497),
11057 Some(17596498),
11058 Some(17596499),
11059 Some(17596500),
11060 Some(17596501),
11061 Some(17596502),
11062 Some(17596503),
11063 Some(17596504),
11064 Some(17596505),
11065 Some(17596506),
11066 Some(17596507),
11067 Some(17596508),
11068 Some(17596509),
11069 Some(17596510),
11070 Some(17596511),
11071 Some(17596512),
11072 Some(17596513),
11073 Some(17596514)
11074 ]
11075 );
11076 let rp: Vec<_> = it
11077 .next()
11078 .unwrap()
11079 .unwrap()
11080 .reference_positions_full()
11081 .collect();
11082 assert_eq!(
11083 rp,
11084 vec![
11085 None,
11086 None,
11087 None,
11088 None,
11089 None,
11090 Some(17624012),
11091 Some(17624013),
11092 Some(17624014),
11093 Some(17624015),
11094 Some(17624016),
11095 Some(17624017),
11096 Some(17624018),
11097 Some(17624019),
11098 Some(17624020),
11099 Some(17625913),
11100 Some(17625914),
11101 Some(17625915),
11102 Some(17625916),
11103 Some(17625917),
11104 Some(17625918),
11105 Some(17625919),
11106 Some(17625920),
11107 Some(17625921),
11108 Some(17625922),
11109 Some(17625923),
11110 Some(17625924),
11111 Some(17625925),
11112 Some(17625926),
11113 Some(17625927),
11114 Some(17625928),
11115 Some(17625929),
11116 Some(17625930),
11117 Some(17625931),
11118 Some(17625932),
11119 Some(17625933),
11120 Some(17625934),
11121 Some(17625935),
11122 Some(17625936),
11123 Some(17625937),
11124 Some(17625938),
11125 Some(17625939),
11126 Some(17625940),
11127 Some(17625941),
11128 Some(17625942),
11129 Some(17625943),
11130 Some(17625944),
11131 Some(17625945),
11132 Some(17625946),
11133 Some(17625947),
11134 Some(17625948),
11135 Some(17625949)
11136 ]
11137 );
11138 let rp: Vec<_> = it
11139 .next()
11140 .unwrap()
11141 .unwrap()
11142 .reference_positions_full()
11143 .collect();
11144 assert_eq!(
11145 rp,
11146 vec![
11147 None,
11148 None,
11149 Some(17624012),
11150 Some(17624013),
11151 Some(17624014),
11152 Some(17624015),
11153 Some(17624016),
11154 Some(17624017),
11155 Some(17624018),
11156 Some(17624019),
11157 Some(17624020),
11158 Some(17625913),
11159 Some(17625914),
11160 Some(17625915),
11161 Some(17625916),
11162 Some(17625917),
11163 Some(17625918),
11164 Some(17625919),
11165 Some(17625920),
11166 Some(17625921),
11167 Some(17625922),
11168 Some(17625923),
11169 Some(17625924),
11170 Some(17625925),
11171 Some(17625926),
11172 Some(17625927),
11173 Some(17625928),
11174 Some(17625929),
11175 Some(17625930),
11176 Some(17625931),
11177 Some(17625932),
11178 Some(17625933),
11179 Some(17625934),
11180 Some(17625935),
11181 Some(17625936),
11182 Some(17625937),
11183 Some(17625938),
11184 Some(17625939),
11185 Some(17625940),
11186 Some(17625941),
11187 Some(17625942),
11188 Some(17625943),
11189 Some(17625944),
11190 Some(17625945),
11191 Some(17625946),
11192 Some(17625947),
11193 Some(17625948),
11194 Some(17625949),
11195 Some(17625950),
11196 Some(17625951),
11197 Some(17625952)
11198 ]
11199 );
11200 let rp: Vec<_> = it
11201 .next()
11202 .unwrap()
11203 .unwrap()
11204 .reference_positions_full()
11205 .collect();
11206 assert_eq!(
11207 rp,
11208 vec![
11209 None,
11210 Some(31796700),
11211 Some(31796701),
11212 Some(31796702),
11213 Some(31796703),
11214 Some(31796704),
11215 Some(31796705),
11216 Some(31796706),
11217 Some(31796710),
11218 Some(31796711),
11219 Some(31796712),
11220 Some(31796713),
11221 Some(31796714),
11222 Some(31796715),
11223 Some(31796716),
11224 Some(31796717),
11225 Some(31796718),
11226 Some(31796719),
11227 Some(31796720),
11228 Some(31796721),
11229 Some(31796722),
11230 Some(31796723),
11231 Some(31796724),
11232 Some(31796725),
11233 Some(31796726),
11234 Some(31796727),
11235 Some(31796728),
11236 Some(31799014),
11237 Some(31799015),
11238 Some(31799016),
11239 Some(31799017),
11240 Some(31799018),
11241 Some(31799019),
11242 Some(31799020),
11243 Some(31799021),
11244 Some(31799022),
11245 Some(31799023),
11246 Some(31799024),
11247 Some(31799025),
11248 Some(31799026),
11249 Some(31799027),
11250 Some(31799028),
11251 Some(31799029),
11252 Some(31799030),
11253 Some(31799031),
11254 Some(31799032),
11255 Some(31799033),
11256 Some(31799034),
11257 Some(31799035),
11258 Some(31799036),
11259 Some(31799037)
11260 ]
11261 );
11262 let rp: Vec<_> = it
11263 .next()
11264 .unwrap()
11265 .unwrap()
11266 .reference_positions_full()
11267 .collect();
11268 assert_eq!(
11269 rp,
11270 vec![
11271 Some(36722692),
11272 Some(36722693),
11273 Some(36722694),
11274 Some(36722695),
11275 Some(36722696),
11276 Some(36722697),
11277 Some(36722698),
11278 Some(36722699),
11279 Some(36722700),
11280 Some(36722701),
11281 Some(36722702),
11282 Some(36722703),
11283 Some(36722704),
11284 Some(36722705),
11285 Some(36723505),
11286 Some(36723506),
11287 Some(36723507),
11288 Some(36723508),
11289 Some(36723509),
11290 Some(36723510),
11291 Some(36723511),
11292 Some(36723512),
11293 Some(36723513),
11294 Some(36723514),
11295 Some(36723515),
11296 Some(36723516),
11297 Some(36723517),
11298 Some(36723518),
11299 Some(36723519),
11300 Some(36723520),
11301 Some(36723521),
11302 Some(36723522),
11303 Some(36723523),
11304 Some(36723524),
11305 Some(36723525),
11306 Some(36723526),
11307 Some(36723527),
11308 Some(36723528),
11309 Some(36723529),
11310 Some(36723530),
11311 Some(36723531),
11312 Some(36723532),
11313 Some(36737414),
11314 Some(36737415),
11315 Some(36737416),
11316 Some(36737417),
11317 Some(36737418),
11318 Some(36737419),
11319 Some(36737420),
11320 None,
11321 None
11322 ]
11323 );
11324 let rp: Vec<_> = it
11325 .next()
11326 .unwrap()
11327 .unwrap()
11328 .reference_positions_full()
11329 .collect();
11330 assert_eq!(
11331 rp,
11332 vec![
11333 None,
11334 None,
11335 None,
11336 None,
11337 Some(44587963),
11338 Some(44587964),
11339 Some(44587965),
11340 Some(44587966),
11341 Some(44587967),
11342 Some(44587968),
11343 Some(44587969),
11344 Some(44587970),
11345 Some(44587971),
11346 Some(44587972),
11347 Some(44587973),
11348 Some(44587974),
11349 Some(44587975),
11350 Some(44587976),
11351 Some(44587977),
11352 Some(44587978),
11353 Some(44587979),
11354 Some(44587980),
11355 Some(44587981),
11356 Some(44587982),
11357 Some(44587983),
11358 Some(44589680),
11359 Some(44589681),
11360 Some(44589682),
11361 Some(44589683),
11362 Some(44589684),
11363 Some(44589685),
11364 Some(44589686),
11365 Some(44589687),
11366 Some(44589688),
11367 Some(44589689),
11368 Some(44589690),
11369 Some(44589691),
11370 Some(44589692),
11371 Some(44589693),
11372 Some(44589694),
11373 Some(44589695),
11374 Some(44589696),
11375 Some(44589697),
11376 Some(44589698),
11377 Some(44589699),
11378 Some(44589700),
11379 Some(44589701),
11380 Some(44589702),
11381 Some(44592034),
11382 Some(44592035),
11383 Some(44592036)
11384 ]
11385 );
11386 }
11387
11388 #[test]
11389 fn test_reference_start_end() {
11390 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
11391 let mut it = bam.records();
11392 let read = it.next().unwrap().unwrap();
11393 assert_eq!(read.reference_start(), 16050676);
11394 assert_eq!(read.reference_end(), 16050721);
11395 let read = it.next().unwrap().unwrap();
11396 assert_eq!(read.reference_start(), 16096878);
11397 assert_eq!(read.reference_end(), 16096931);
11398 let read = it.next().unwrap().unwrap();
11399 assert_eq!(read.reference_start(), 16097145);
11400 assert_eq!(read.reference_end(), 16097198);
11401 let read = it.next().unwrap().unwrap();
11402 assert_eq!(read.reference_start(), 16117350);
11403 assert_eq!(read.reference_end(), 16117401);
11404 let read = it.next().unwrap().unwrap();
11405 assert_eq!(read.reference_start(), 16118483);
11406 assert_eq!(read.reference_end(), 16118534);
11407 let read = it.next().unwrap().unwrap();
11408 assert_eq!(read.reference_start(), 16118499);
11409 assert_eq!(read.reference_end(), 16118550);
11410 let read = it.next().unwrap().unwrap();
11411 assert_eq!(read.reference_start(), 16118499);
11412 assert_eq!(read.reference_end(), 16118550);
11413 let read = it.next().unwrap().unwrap();
11414 assert_eq!(read.reference_start(), 16118499);
11415 assert_eq!(read.reference_end(), 16118550);
11416 let read = it.next().unwrap().unwrap();
11417 assert_eq!(read.reference_start(), 16123411);
11418 assert_eq!(read.reference_end(), 16123462);
11419 let read = it.next().unwrap().unwrap();
11420 assert_eq!(read.reference_start(), 16123417);
11421 assert_eq!(read.reference_end(), 16123462);
11422 let read = it.next().unwrap().unwrap();
11423 assert_eq!(read.reference_start(), 16165860);
11424 assert_eq!(read.reference_end(), 16165901);
11425 let read = it.next().unwrap().unwrap();
11426 assert_eq!(read.reference_start(), 16180871);
11427 assert_eq!(read.reference_end(), 16180922);
11428 let read = it.next().unwrap().unwrap();
11429 assert_eq!(read.reference_start(), 16189705);
11430 assert_eq!(read.reference_end(), 16189756);
11431 let read = it.next().unwrap().unwrap();
11432 assert_eq!(read.reference_start(), 16231271);
11433 assert_eq!(read.reference_end(), 16231322);
11434 let read = it.next().unwrap().unwrap();
11435 assert_eq!(read.reference_start(), 16237657);
11436 assert_eq!(read.reference_end(), 16237708);
11437 let read = it.next().unwrap().unwrap();
11438 assert_eq!(read.reference_start(), 16255012);
11439 assert_eq!(read.reference_end(), 16255054);
11440 let read = it.next().unwrap().unwrap();
11441 assert_eq!(read.reference_start(), 16255391);
11442 assert_eq!(read.reference_end(), 16255442);
11443 let read = it.next().unwrap().unwrap();
11444 assert_eq!(read.reference_start(), 16255392);
11445 assert_eq!(read.reference_end(), 16255442);
11446 let read = it.next().unwrap().unwrap();
11447 assert_eq!(read.reference_start(), 16256084);
11448 assert_eq!(read.reference_end(), 16256129);
11449 let read = it.next().unwrap().unwrap();
11450 assert_eq!(read.reference_start(), 16256224);
11451 assert_eq!(read.reference_end(), 16256272);
11452 let read = it.next().unwrap().unwrap();
11453 assert_eq!(read.reference_start(), 16325199);
11454 assert_eq!(read.reference_end(), 16325241);
11455 let read = it.next().unwrap().unwrap();
11456 assert_eq!(read.reference_start(), 16352865);
11457 assert_eq!(read.reference_end(), 16352903);
11458 let read = it.next().unwrap().unwrap();
11459 assert_eq!(read.reference_start(), 16352968);
11460 assert_eq!(read.reference_end(), 16353012);
11461 let read = it.next().unwrap().unwrap();
11462 assert_eq!(read.reference_start(), 16414998);
11463 assert_eq!(read.reference_end(), 16415044);
11464 let read = it.next().unwrap().unwrap();
11465 assert_eq!(read.reference_start(), 17031591);
11466 assert_eq!(read.reference_end(), 17031638);
11467 let read = it.next().unwrap().unwrap();
11468 assert_eq!(read.reference_start(), 17057382);
11469 assert_eq!(read.reference_end(), 17057432);
11470 let read = it.next().unwrap().unwrap();
11471 assert_eq!(read.reference_start(), 17092766);
11472 assert_eq!(read.reference_end(), 17095000);
11473 let read = it.next().unwrap().unwrap();
11474 assert_eq!(read.reference_start(), 17092782);
11475 assert_eq!(read.reference_end(), 17095016);
11476 let read = it.next().unwrap().unwrap();
11477 assert_eq!(read.reference_start(), 17092782);
11478 assert_eq!(read.reference_end(), 17095016);
11479 let read = it.next().unwrap().unwrap();
11480 assert_eq!(read.reference_start(), 17137287);
11481 assert_eq!(read.reference_end(), 17137320);
11482 let read = it.next().unwrap().unwrap();
11483 assert_eq!(read.reference_start(), 17306238);
11484 assert_eq!(read.reference_end(), 17306286);
11485 let read = it.next().unwrap().unwrap();
11486 assert_eq!(read.reference_start(), 17561868);
11487 assert_eq!(read.reference_end(), 17561913);
11488 let read = it.next().unwrap().unwrap();
11489 assert_eq!(read.reference_start(), 17566078);
11490 assert_eq!(read.reference_end(), 17577961);
11491 let read = it.next().unwrap().unwrap();
11492 assert_eq!(read.reference_start(), 17566108);
11493 assert_eq!(read.reference_end(), 17578701);
11494 let read = it.next().unwrap().unwrap();
11495 assert_eq!(read.reference_start(), 17566111);
11496 assert_eq!(read.reference_end(), 17578704);
11497 let read = it.next().unwrap().unwrap();
11498 assert_eq!(read.reference_start(), 17566111);
11499 assert_eq!(read.reference_end(), 17578704);
11500 let read = it.next().unwrap().unwrap();
11501 assert_eq!(read.reference_start(), 17566111);
11502 assert_eq!(read.reference_end(), 17578704);
11503 let read = it.next().unwrap().unwrap();
11504 assert_eq!(read.reference_start(), 17566111);
11505 assert_eq!(read.reference_end(), 17578704);
11506 let read = it.next().unwrap().unwrap();
11507 assert_eq!(read.reference_start(), 17566112);
11508 assert_eq!(read.reference_end(), 17578705);
11509 let read = it.next().unwrap().unwrap();
11510 assert_eq!(read.reference_start(), 17566113);
11511 assert_eq!(read.reference_end(), 17578706);
11512 let read = it.next().unwrap().unwrap();
11513 assert_eq!(read.reference_start(), 17566113);
11514 assert_eq!(read.reference_end(), 17578706);
11515 let read = it.next().unwrap().unwrap();
11516 assert_eq!(read.reference_start(), 17579733);
11517 assert_eq!(read.reference_end(), 17581250);
11518 let read = it.next().unwrap().unwrap();
11519 assert_eq!(read.reference_start(), 17581369);
11520 assert_eq!(read.reference_end(), 17583029);
11521 let read = it.next().unwrap().unwrap();
11522 assert_eq!(read.reference_start(), 17581370);
11523 assert_eq!(read.reference_end(), 17583030);
11524 let read = it.next().unwrap().unwrap();
11525 assert_eq!(read.reference_start(), 17581370);
11526 assert_eq!(read.reference_end(), 17583030);
11527 let read = it.next().unwrap().unwrap();
11528 assert_eq!(read.reference_start(), 17582911);
11529 assert_eq!(read.reference_end(), 17583056);
11530 let read = it.next().unwrap().unwrap();
11531 assert_eq!(read.reference_start(), 17588621);
11532 assert_eq!(read.reference_end(), 17589209);
11533 let read = it.next().unwrap().unwrap();
11534 assert_eq!(read.reference_start(), 17588621);
11535 assert_eq!(read.reference_end(), 17589209);
11536 let read = it.next().unwrap().unwrap();
11537 assert_eq!(read.reference_start(), 17588621);
11538 assert_eq!(read.reference_end(), 17589209);
11539 let read = it.next().unwrap().unwrap();
11540 assert_eq!(read.reference_start(), 17591770);
11541 assert_eq!(read.reference_end(), 17591821);
11542 let read = it.next().unwrap().unwrap();
11543 assert_eq!(read.reference_start(), 17593855);
11544 assert_eq!(read.reference_end(), 17593904);
11545 let read = it.next().unwrap().unwrap();
11546 assert_eq!(read.reference_start(), 17593863);
11547 assert_eq!(read.reference_end(), 17593908);
11548 let read = it.next().unwrap().unwrap();
11549 assert_eq!(read.reference_start(), 17596476);
11550 assert_eq!(read.reference_end(), 17596515);
11551 let read = it.next().unwrap().unwrap();
11552 assert_eq!(read.reference_start(), 17624012);
11553 assert_eq!(read.reference_end(), 17625950);
11554 let read = it.next().unwrap().unwrap();
11555 assert_eq!(read.reference_start(), 17624012);
11556 assert_eq!(read.reference_end(), 17625953);
11557 let read = it.next().unwrap().unwrap();
11558 assert_eq!(read.reference_start(), 31796700);
11559 assert_eq!(read.reference_end(), 31799038);
11560 let read = it.next().unwrap().unwrap();
11561 assert_eq!(read.reference_start(), 36722692);
11562 assert_eq!(read.reference_end(), 36737421);
11563 let read = it.next().unwrap().unwrap();
11564 assert_eq!(read.reference_start(), 44587963);
11565 assert_eq!(read.reference_end(), 44592037);
11566 }
11567
11568 #[test]
11569 fn test_infer_seq_len() {
11570 use std::convert::TryFrom;
11571 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
11572 for read in bam.records() {
11573 let read = read.unwrap();
11574 assert_eq!(read.seq_len_from_cigar(false), 51);
11575 assert_eq!(read.seq_len_from_cigar(true), 51);
11576 }
11577
11578 let mut read = bam::Record::new();
11579 for (input_cigar, supposed_length_wo_hard_clip, supposed_length_with_hard_clip) in &[
11580 ("40M", 40, 40),
11581 ("40=", 40, 40),
11582 ("40X", 40, 40),
11583 ("20M5I20M", 45, 45),
11584 ("20M5D20M", 40, 40),
11585 ("5H35M", 35, 40),
11586 ("5S35M", 40, 40),
11587 ("35M5H", 35, 40),
11588 ("35M5S", 40, 40),
11589 ("", 0, 0),
11590 ] {
11591 read.set(
11592 b"test",
11593 Some(&CigarString::try_from(*input_cigar).unwrap()),
11594 b"agtc",
11595 b"BBBB",
11596 );
11597 assert_eq!(
11598 &read.seq_len_from_cigar(false),
11599 supposed_length_wo_hard_clip
11600 );
11601 assert_eq!(
11602 &read.seq_len_from_cigar(true),
11603 supposed_length_with_hard_clip
11604 );
11605 }
11606 }
11607}