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 mx += cl;
446 k += 1;
447 rem_cl = 0;
448 }
449
450 Cigar::Equal(cl) | Cigar::Diff(cl) | Cigar::Match(cl) => {
453 let cl: usize = (*cl).try_into().map_err(|_| bam::Error::BamParseMD {
454 rec: format!("at line {}: Invalid CIGAR match length", line),
455 })?;
456 if rem_cl == 0 {
457 rem_cl = cl;
458 }
459 let take = ml.min(rem_cl);
460
461 if let Some(mismatch_base) = cap.get(4) {
462 let mut raw = String::new();
465 for (index, charm) in
466 mismatch_base.as_str().replace("0", "").chars().enumerate()
467 {
468 raw.push('*');
469 raw.push_str(&charm.to_string());
470 let string: Vec<char> =
471 seq.chars().skip(my.saturating_add(index)).take(1).collect();
472 let string: String = string.into_iter().collect();
473 if string.trim().is_empty() {
474 return Err(bam::Error::BamParseMD {
475 rec: format!(
476 "at line {}: Read sequence too short for MD tag",
477 line
478 ),
479 });
480 }
481 raw.push_str(&string);
482 }
483 cs.push_str(&raw);
484 } else if long_cs {
485 cs.push('=');
486 let string: Vec<char> = seq.chars().skip(my).take(take).collect();
487 let string: String = string.into_iter().collect();
488 if string.trim().is_empty() {
489 return Err(bam::Error::BamParseMD {
490 rec: format!(
491 "at line {}: Read sequence too short for MD tag",
492 line
493 ),
494 });
495 }
496 cs.push_str(&string);
497 } else {
498 cs.push(':');
499 cs.push_str(&take.to_string()); }
501
502 mx += take;
503 my += take;
504 cx += take;
505 cy += take;
506 ml -= take;
507 rem_cl -= take;
508
509 if rem_cl == 0 {
510 k += 1; }
512 if ml == 0 {
513 break;
514 }
515 }
516
517 Cigar::Ins(cl) => {
520 let cl: usize = (*cl).try_into().map_err(|_| bam::Error::BamParseMD {
521 rec: format!("at line {}: Invalid CIGAR insertion length", line),
522 })?;
523 cs.push('+');
524 let string: Vec<char> = seq.chars().skip(cy).take(cl).collect();
525 let string: String = string.into_iter().collect();
526 if string.trim().is_empty() {
527 return Err(bam::Error::BamParseMD {
528 rec: format!(
529 "at line {}: Read sequence too short for MD tag insertion. Cy is {} and CL is {}",
530 line, cy, cl
531 ),
532 });
533 }
534 cs.push_str(&string);
535 cy += cl;
536 my += cl;
537 k += 1;
538 rem_cl = 0;
539 }
540
541 Cigar::SoftClip(cl) => {
544 let cl: usize = (*cl).try_into().map_err(|_| bam::Error::BamParseMD {
545 rec: format!("at line {}: Invalid CIGAR soft clip length", line),
546 })?;
547 cy += cl;
548 my += cl;
549 k += 1;
550 rem_cl = 0;
551 }
552
553 Cigar::RefSkip(cl) => {
556 let cl: usize = (*cl).try_into().map_err(|_| bam::Error::BamParseMD {
557 rec: format!("at line {}: Invalid CIGAR reference skip length", line),
558 })?;
559 cx += cl;
560 mx += cl;
561 k += 1;
562 rem_cl = 0;
563 }
564
565 Cigar::HardClip(_) | Cigar::Pad(_) => {
568 k += 1;
569 rem_cl = 0;
570 }
571 }
572 }
573
574 if ml != 0 {
576 return Err(bam::Error::BamParseMD {
577 rec: format!(
578 "at line {}: Inconsistent MD tag (ml={} remaining, cx={}, mx={}, cy={}, my={}, cigarpos={}, elem={:?}, md={:?})",
579 line,
580 ml,
581 cx,
582 mx,
583 cy,
584 my,
585 k,
586 cigar.get(k.saturating_sub(1)),
587 cap
588 ),
589 });
590 }
591 }
592
593 if cx != mx || cy != my {
595 return Err(bam::Error::BamParseMD {
596 rec: format!(
597 "at line {}: Inconsistent alignment (cx={}, mx={}, cy={}, my={})",
598 line, cx, mx, cy, my
599 ),
600 });
601 }
602
603 Ok(Self::createfromcs(
605 CsString::from_str(&cs)?,
606 Some(seq.to_string()),
607 contig,
608 genome_pos,
609 )?)
610 }
611}
612pub trait MatchIter {
613 fn ismatchonly(&self) -> bool;
615 fn setmatchstate(&mut self, matchs: bool);
617}
618pub struct IterAlignedBlockCigarMatchPairs {
619 genome_pos: i64,
620 read_pos: i64,
621 cigar_index: usize,
622 cigar: Vec<Cigar>,
623}
624impl Iterator for IterAlignedBlockCigarMatchPairs {
625 type Item = (Option<(Range<i64>, Range<i64>)>, Cigar);
626 fn next(&mut self) -> Option<Self::Item> {
627 while self.cigar_index < self.cigar.len() {
628 let entry = self.cigar[self.cigar_index];
629 self.cigar_index += 1;
630 match entry {
631 Cigar::Match(len) | Cigar::Equal(len) | Cigar::Diff(len) => {
632 let qstart = self.read_pos;
633 let qend = qstart + len as i64;
634 let rstart = self.genome_pos;
635 let rend = self.genome_pos + len as i64;
636 self.read_pos += len as i64;
637 self.genome_pos += len as i64;
638 if matches!(entry, Cigar::Equal(_)) {
639 return Some((Some((qstart..qend, rstart..rend)), entry));
640 }
641 }
642 Cigar::Ins(len) | Cigar::SoftClip(len) => {
643 self.read_pos += len as i64;
644 }
645 Cigar::Del(len) | Cigar::RefSkip(len) => {
646 self.genome_pos += len as i64;
647 }
648 Cigar::HardClip(_) => {} Cigar::Pad(_) => panic!("Padding (Cigar::Pad) is not supported."), }
651 return Some((None, entry));
652 }
653 None
654 }
655}
656pub struct IterAlignedBlockCigarPairs {
657 genome_pos: i64,
658 read_pos: i64,
659 cigar_index: usize,
660 cigar: Vec<Cigar>,
661}
662impl Iterator for IterAlignedBlockCigarPairs {
663 type Item = (Range<i64>, Range<i64>, Cigar);
664 fn next(&mut self) -> Option<Self::Item> {
665 while self.cigar_index < self.cigar.len() {
666 let entry = self.cigar[self.cigar_index];
667 self.cigar_index += 1;
668 match entry {
669 Cigar::Match(len) | Cigar::Equal(len) | Cigar::Diff(len) => {
670 let qstart = self.read_pos;
671 let qend = qstart + len as i64;
672 let rstart = self.genome_pos;
673 let rend = self.genome_pos + len as i64;
674 self.read_pos += len as i64;
675 self.genome_pos += len as i64;
676 return Some((qstart..qend, rstart..rend, entry));
677 }
678 Cigar::Ins(len) | Cigar::SoftClip(len) => {
679 let qstart = self.read_pos;
680 let qend = qstart + len as i64;
681 let rstart = self.genome_pos;
682 self.read_pos += len as i64;
683 return Some((qstart..qend, rstart..rstart, entry));
684 }
685 Cigar::Del(len) | Cigar::RefSkip(len) => {
686 let qstart = self.read_pos;
687 let rstart = self.genome_pos;
688 let rend = self.genome_pos + len as i64;
689 self.genome_pos += len as i64;
690 return Some((qstart..qstart, rstart..rend, entry));
691 }
692 Cigar::HardClip(_) => {
693 return Some((
694 self.read_pos..self.read_pos,
695 self.genome_pos..self.genome_pos,
696 entry,
697 ));
698 } Cigar::Pad(_) => panic!("Padding (Cigar::Pad) is not supported."), }
701 }
702 None
703 }
704}
705pub struct IterAlignedBlockPairs {
706 genome_pos: i64,
707 read_pos: i64,
708 cigar_index: usize,
709 cigar: Vec<Cigar>,
710 r#match: bool,
711}
712impl MatchIter for IterAlignedBlockPairs {
713 fn ismatchonly(&self) -> bool {
714 self.r#match
715 }
716
717 fn setmatchstate(&mut self, matchs: bool) {
718 self.r#match = matchs;
719 }
720}
721impl Iterator for IterAlignedBlockPairs {
722 type Item = ([i64; 2], [i64; 2]);
723 fn next(&mut self) -> Option<Self::Item> {
724 while self.cigar_index < self.cigar.len() {
725 let entry = self.cigar[self.cigar_index];
726 match entry {
727 Cigar::Match(len) | Cigar::Equal(len) | Cigar::Diff(len) => {
728 let qstart = self.read_pos;
729 let qend = qstart + len as i64;
730 let rstart = self.genome_pos;
731 let rend = self.genome_pos + len as i64;
732 self.read_pos += len as i64;
733 self.genome_pos += len as i64;
734 #[allow(clippy::nonminimal_bool)]
735 if (self.r#match && matches!(entry, Cigar::Equal(_))) || !self.r#match {
736 self.cigar_index += 1;
737 return Some(([qstart, qend], [rstart, rend]));
738 }
739 }
740 Cigar::Ins(len) | Cigar::SoftClip(len) => {
741 self.read_pos += len as i64;
742 }
743 Cigar::Del(len) | Cigar::RefSkip(len) => {
744 self.genome_pos += len as i64;
745 }
746 Cigar::HardClip(_) => {} Cigar::Pad(_) => panic!("Padding (Cigar::Pad) is not supported."), }
749 self.cigar_index += 1;
750 }
751 None
752 }
753}
754#[derive(Ord, PartialOrd, Eq, PartialEq, Debug, Copy, Clone)]
755pub struct RangePos {
756 pub start: i64,
757 pub end: i64,
758}
759impl RangePos {
760 pub fn getrange(&self) -> Range<i64> {
761 self.start..self.end
762 }
763 pub fn start(&self) -> i64 {
764 self.start
765 }
766 pub fn end(&self) -> i64 {
767 self.end
768 }
769 #[allow(unused)]
770 fn new(start: i64, end: i64) -> Self {
771 let (start, end) = match start.cmp(&end) {
772 std::cmp::Ordering::Greater => (end, start),
773 _ => (start, end),
774 };
775 RangePos { start, end }
776 }
777}
778pub struct MatchSequence {
787 pub hash: BTreeMap<RangePos, String>,
788}
789impl MatchSequence {
790 pub fn new(range: RangePos, text: String) -> Self {
791 let mut map = BTreeMap::new();
792 map.insert(range, text);
793 MatchSequence { hash: map }
794 }
795 pub fn gethash(&self) -> &BTreeMap<RangePos, String> {
797 &self.hash
798 }
799 pub fn isfullymatched(&self, range: RangeInclusive<i64>) -> Option<String> {
801 let mut vec = self.hash.iter();
802 vec.find_map(|(a, b)| {
803 if a.getrange().contains(range.start()) && a.getrange().contains(range.end()) {
804 Some(b.clone())
805 } else {
806 None
807 }
808 })
809 }
810}
811impl Default for MatchSequence {
812 fn default() -> Self {
813 let default = String::new();
814 let range = RangePos { start: 1, end: 1 };
815 Self::new(range, default)
816 }
817}
818pub struct IterAlignedBlocks {
819 pos: i64,
820 cigar_index: usize,
821 cigar: Vec<Cigar>,
822 r#match: bool,
823}
824impl MatchIter for IterAlignedBlocks {
825 fn ismatchonly(&self) -> bool {
826 self.r#match
827 }
828
829 fn setmatchstate(&mut self, matchs: bool) {
830 self.r#match = matchs;
831 }
832}
833impl Iterator for IterAlignedBlocks {
834 type Item = [i64; 2];
835 fn next(&mut self) -> Option<Self::Item> {
836 while self.cigar_index < self.cigar.len() {
837 let entry = self.cigar[self.cigar_index];
838 match entry {
839 Cigar::Match(len) | Cigar::Equal(len) | Cigar::Diff(len) => {
840 let out_pos = self.pos;
841 self.pos += len as i64;
843 #[allow(clippy::nonminimal_bool)]
844 if (self.r#match && matches!(entry, Cigar::Equal(_))) || !self.r#match {
845 self.cigar_index += 1;
846 return Some([out_pos, out_pos + len as i64]);
847 }
848 }
849 Cigar::Del(len) => self.pos += len as i64,
850 Cigar::RefSkip(len) => self.pos += len as i64,
851 _ => (),
852 }
853 self.cigar_index += 1;
854 }
855 None
856 }
857}
858
859pub struct IterIntrons {
860 pos: i64,
861 cigar_index: usize,
862 cigar: Vec<Cigar>,
863}
864
865impl Iterator for IterIntrons {
866 type Item = [i64; 2];
867 fn next(&mut self) -> Option<Self::Item> {
868 while self.cigar_index < self.cigar.len() {
869 let entry = self.cigar[self.cigar_index];
870 match entry {
871 Cigar::Match(len) | Cigar::Equal(len) | Cigar::Diff(len) | Cigar::Del(len) => {
872 self.pos += len as i64
873 }
874 Cigar::RefSkip(len) => {
875 let junc_start = self.pos;
876 self.pos += len as i64;
877 self.cigar_index += 1;
878 return Some([junc_start, self.pos]); }
880 _ => {}
881 }
882 self.cigar_index += 1;
883 }
884 None
885 }
886}
887
888pub struct IterAlignedPairs {
889 genome_pos: i64,
890 read_pos: i64,
891 cigar: Vec<Cigar>,
892 remaining_match_bp: u32,
893 cigar_index: usize,
894 r#match: bool,
895}
896impl MatchIter for IterAlignedPairs {
897 fn ismatchonly(&self) -> bool {
898 self.r#match
899 }
900
901 fn setmatchstate(&mut self, matchs: bool) {
902 self.r#match = matchs;
903 }
904}
905impl Iterator for IterAlignedPairs {
906 type Item = [i64; 2];
907 fn next(&mut self) -> Option<Self::Item> {
908 if self.remaining_match_bp > 0 {
909 self.remaining_match_bp -= 1;
910 self.genome_pos += 1;
911 self.read_pos += 1;
912 return Some([self.read_pos - 1, self.genome_pos - 1]);
913 }
914
915 while self.cigar_index < self.cigar.len() {
916 let entry = self.cigar[self.cigar_index];
917 match entry {
918 Cigar::Match(len) | Cigar::Equal(len) | Cigar::Diff(len) => {
919 self.genome_pos += 1;
920 self.read_pos += 1;
921 self.remaining_match_bp = len - 1;
922 #[allow(clippy::nonminimal_bool)]
923 if (self.r#match && matches!(entry, Cigar::Equal(_))) || !self.r#match {
924 self.cigar_index += 1;
925 return Some([self.read_pos - 1, self.genome_pos - 1]);
926 }
927 }
928 Cigar::Ins(len) | Cigar::SoftClip(len) => {
929 self.read_pos += len as i64;
930 }
931 Cigar::Del(len) | Cigar::RefSkip(len) => {
932 self.genome_pos += len as i64;
933 }
934 Cigar::HardClip(_) => {} Cigar::Pad(_) => panic!("Padding (Cigar::Pad) is not supported."), }
937 self.cigar_index += 1;
938 }
939 None
940 }
941}
942
943pub struct IterAlignedPairsFull {
944 genome_pos: i64,
945 read_pos: i64,
946 cigar: Vec<Cigar>,
947 remaining_match_bp: u32,
948 remaining_ins_bp: u32,
949 remaining_del_bp: u32,
950 cigar_index: usize,
951}
952pub(super) struct IterAlignedPairsFullCigar {
953 genome_pos: i64,
954 read_pos: i64,
955 cigar: Vec<Cigar>,
956 qual: Vec<u8>,
957 remaining_match_bp: u32,
958 remaining_ins_bp: u32,
959 remaining_del_bp: u32,
960 cigar_index: usize,
961}
962impl IterAlignedPairsFullCigar {
963 pub fn new(start: IterAlignedPairsFull, record: &bam::Record) -> Self {
964 Self {
965 genome_pos: start.genome_pos,
966 read_pos: start.read_pos,
967 cigar: start.cigar,
968 qual: record.qual().to_vec(),
969 remaining_match_bp: start.remaining_match_bp,
970 remaining_ins_bp: start.remaining_ins_bp,
971 remaining_del_bp: start.remaining_del_bp,
972 cigar_index: start.cigar_index,
973 }
974 }
975}
976impl Iterator for IterAlignedPairsFullCigar {
978 type Item = ([Option<i64>; 2], Cigar, u8);
979 fn next(&mut self) -> Option<Self::Item> {
980 if self.remaining_match_bp > 0 {
981 self.remaining_match_bp -= 1;
982 self.genome_pos += 1;
983 self.read_pos += 1;
984 return Some((
985 [Some(self.read_pos - 1), Some(self.genome_pos - 1)],
986 self.cigar[self.cigar_index.saturating_sub(1)],
987 self.qual
988 .get(
989 usize::try_from(self.read_pos)
990 .unwrap_or_default()
991 .saturating_sub(1),
992 )
993 .copied()
994 .unwrap_or(u8::MAX),
995 ));
996 }
997 if self.remaining_ins_bp > 0 {
998 self.remaining_ins_bp -= 1;
999 self.read_pos += 1;
1000 return Some((
1001 [Some(self.read_pos - 1), None],
1002 self.cigar[self.cigar_index.saturating_sub(1)],
1003 self.qual
1004 .get(
1005 usize::try_from(self.read_pos)
1006 .unwrap_or_default()
1007 .saturating_sub(1),
1008 )
1009 .copied()
1010 .unwrap_or(u8::MAX),
1011 ));
1012 }
1013 if self.remaining_del_bp > 0 {
1014 self.remaining_del_bp -= 1;
1015 self.genome_pos += 1;
1016 return Some((
1017 [None, Some(self.genome_pos - 1)],
1018 self.cigar[self.cigar_index.saturating_sub(1)],
1019 self.qual
1020 .get(usize::try_from(self.read_pos).unwrap_or_default())
1021 .copied()
1022 .unwrap_or(u8::MAX),
1023 ));
1024 }
1025
1026 while self.cigar_index < self.cigar.len() {
1027 let entry = self.cigar[self.cigar_index];
1028 match entry {
1029 Cigar::Match(len) | Cigar::Equal(len) | Cigar::Diff(len) => {
1030 self.genome_pos += 1;
1031 self.read_pos += 1;
1032 self.remaining_match_bp = len - 1;
1033 self.cigar_index += 1;
1034 return Some((
1035 [Some(self.read_pos - 1), Some(self.genome_pos - 1)],
1036 entry,
1037 self.qual
1038 .get(
1039 usize::try_from(self.read_pos)
1040 .unwrap_or_default()
1041 .saturating_sub(1),
1042 )
1043 .copied()
1044 .unwrap_or(u8::MAX),
1045 ));
1046 }
1047 Cigar::Ins(len) | Cigar::SoftClip(len) => {
1048 self.read_pos += 1;
1049 self.remaining_ins_bp = len - 1;
1050 self.cigar_index += 1;
1051 return Some((
1052 [Some(self.read_pos - 1), None],
1053 entry,
1054 self.qual
1055 .get(
1056 usize::try_from(self.read_pos)
1057 .unwrap_or_default()
1058 .saturating_sub(1),
1059 )
1060 .copied()
1061 .unwrap_or(u8::MAX),
1062 ));
1063 }
1064 Cigar::Del(len) | Cigar::RefSkip(len) => {
1065 self.genome_pos += 1;
1066 self.remaining_del_bp = len - 1;
1067 self.cigar_index += 1;
1068 return Some((
1069 [None, Some(self.genome_pos - 1)],
1070 entry,
1071 self.qual
1072 .get(usize::try_from(self.read_pos).unwrap_or_default())
1073 .copied()
1074 .unwrap_or(u8::MAX),
1075 ));
1076 }
1077 Cigar::HardClip(_) => {
1078 }
1080 Cigar::Pad(_) => panic!("Padding (Cigar::Pad) is not supported."), }
1082 self.cigar_index += 1;
1083 }
1084 None
1085 }
1086}
1087
1088impl Iterator for IterAlignedPairsFull {
1089 type Item = [Option<i64>; 2];
1090 fn next(&mut self) -> Option<Self::Item> {
1091 if self.remaining_match_bp > 0 {
1092 self.remaining_match_bp -= 1;
1093 self.genome_pos += 1;
1094 self.read_pos += 1;
1095 return Some([Some(self.read_pos - 1), Some(self.genome_pos - 1)]);
1096 }
1097 if self.remaining_ins_bp > 0 {
1098 self.remaining_ins_bp -= 1;
1099 self.read_pos += 1;
1100 return Some([Some(self.read_pos - 1), None]);
1101 }
1102 if self.remaining_del_bp > 0 {
1103 self.remaining_del_bp -= 1;
1104 self.genome_pos += 1;
1105 return Some([None, Some(self.genome_pos - 1)]);
1106 }
1107
1108 while self.cigar_index < self.cigar.len() {
1109 let entry = self.cigar[self.cigar_index];
1110 match entry {
1111 Cigar::Match(len) | Cigar::Equal(len) | Cigar::Diff(len) => {
1112 self.genome_pos += 1;
1113 self.read_pos += 1;
1114 self.remaining_match_bp = len - 1;
1115 self.cigar_index += 1;
1116 return Some([Some(self.read_pos - 1), Some(self.genome_pos - 1)]);
1117 }
1118 Cigar::Ins(len) | Cigar::SoftClip(len) => {
1119 self.read_pos += 1;
1120 self.remaining_ins_bp = len - 1;
1121 self.cigar_index += 1;
1122 return Some([Some(self.read_pos - 1), None]);
1123 }
1124 Cigar::Del(len) | Cigar::RefSkip(len) => {
1125 self.genome_pos += 1;
1126 self.remaining_del_bp = len - 1;
1127 self.cigar_index += 1;
1128 return Some([None, Some(self.genome_pos - 1)]);
1129 }
1130 Cigar::HardClip(_) => {
1131 }
1133 Cigar::Pad(_) => panic!("Padding (Cigar::Pad) is not supported."), }
1135 self.cigar_index += 1;
1136 }
1137 None
1138 }
1139}
1140
1141pub trait BamRecordExtensions {
1145 fn matched_sequence(&self) -> Option<MatchSequence>;
1150 fn aligned_blocks(&self) -> IterAlignedBlocks;
1160 fn aligned_blocks_match(&self) -> Option<IterAlignedBlocks>;
1168 fn aligned_block_pairs(&self) -> IterAlignedBlockPairs;
1177 fn aligned_block_pairs_match(&self) -> Option<IterAlignedBlockPairs>;
1189 fn aligned_block_pairs_cigar(&self) -> IterAlignedBlockCigarPairs;
1199 fn aligned_block_pairs_cigar_match(&self) -> Option<IterAlignedBlockCigarMatchPairs>;
1212 fn introns(&self) -> IterIntrons;
1218 fn aligned_pairs_match(&self) -> Option<IterAlignedPairs>;
1231 fn aligned_pairs(&self) -> IterAlignedPairs;
1242
1243 fn aligned_pairs_full(&self) -> IterAlignedPairsFull;
1251
1252 fn cigar_stats_nucleotides(&self) -> HashMap<Cigar, i32>;
1258
1259 fn cigar_stats_blocks(&self) -> HashMap<Cigar, i32>;
1266
1267 fn reference_positions(&self) -> Box<dyn Iterator<Item = i64>>;
1274 fn reference_positions_match(&self) -> Option<Box<dyn Iterator<Item = i64>>>;
1281 fn reference_positions_full(&self) -> Box<dyn Iterator<Item = Option<i64>>>;
1288
1289 fn reference_start(&self) -> i64;
1291
1292 fn reference_end(&self) -> i64;
1294
1295 fn seq_len_from_cigar(&self, include_hard_clip: bool) -> usize;
1302 #[deprecated(since = "0.3.0", note = "use getorgeneratecsblock")]
1304 fn getcsaligned(&self) -> Option<CgAlignedBlockPairs>;
1305 fn getorgeneratecsblock(&self, long_cs: bool) -> crate::bam::Result<CgAlignedBlockPairs>;
1346 fn setcigarfromcs(&mut self, record: Option<&CgAlignedBlockPairs>) -> Option<()>;
1362 #[deprecated(since = "0.4.0", note = "Use setcigarfromcs")]
1363 fn setseqfromcs(&mut self, record: &CgAlignedBlockPairs) -> Option<()>;
1364 fn updateorsetcstag(&mut self, string: &CsString) -> bam::Result<()>;
1386}
1387impl BamRecordExtensions for bam::Record {
1388 fn matched_sequence(&self) -> Option<MatchSequence> {
1389 let aligned = self.aligned_block_pairs_match()?;
1390 let sequence = self.seq();
1391 if sequence.is_empty() {
1392 return None;
1393 }
1394 let mut hash = BTreeMap::new();
1395 for ([rstart, rend], [gstart, gend]) in aligned {
1396 let (rstart, rend) = (rstart.try_into().unwrap(), rend.try_into().unwrap());
1397 let sequence = sequence.rangeextract(rstart..rend).unwrap();
1398 hash.insert(
1399 RangePos {
1400 start: gstart,
1401 end: gend,
1402 },
1403 sequence.to_string(),
1404 );
1405 }
1406 Some(MatchSequence { hash })
1407 }
1408 fn aligned_blocks(&self) -> IterAlignedBlocks {
1409 IterAlignedBlocks {
1410 pos: self.pos(),
1411 cigar: self.cigar().take().0,
1412 cigar_index: 0,
1413 r#match: false,
1414 }
1415 }
1416 fn aligned_blocks_match(&self) -> Option<IterAlignedBlocks> {
1417 if !self.cigar().containsequal() {
1418 return None;
1419 };
1420 Some(IterAlignedBlocks {
1421 pos: self.pos(),
1422 cigar: self.cigar().take().0,
1423 cigar_index: 0,
1424 r#match: true,
1425 })
1426 }
1427 fn getcsaligned(&self) -> Option<CgAlignedBlockPairs> {
1428 self.getorgeneratecsblock(true).ok()
1429 }
1430 fn setseqfromcs(&mut self, record: &CgAlignedBlockPairs) -> Option<()> {
1431 let initialcigar = self.cigar();
1432 let mycigar = initialcigar.iter();
1433 let first: Vec<&Cigar> = mycigar
1434 .take_while(|p| matches!(p, &Cigar::SoftClip(_)) || matches!(p, &Cigar::HardClip(_)))
1435 .collect();
1436 let mycigar = initialcigar.iter().skip(first.len());
1437 let mut first = first.into_iter().map(|p| p.clone()).collect();
1438 let last: Vec<&Cigar> = mycigar
1439 .skip_while(|p| !matches!(p, &Cigar::SoftClip(_)) && !matches!(p, &Cigar::HardClip(_)))
1440 .take_while(|_| true)
1441 .collect();
1442 let mut last = last.into_iter().map(|p| p.clone()).collect();
1443 let mut length: Option<usize> = None;
1444 let mut vec: Vec<Cigar> = Vec::new();
1445 vec.append(&mut first);
1446 for elem in record.csdata.iter() {
1447 if elem.state.isubstitution() {
1448 if let Some(l) = length {
1449 length = Some(l.saturating_add(1));
1450 } else {
1451 length = Some(1);
1452 }
1453 continue;
1454 }
1455 let lengthraw = elem.state.getlength().try_into().ok()?;
1456 if let Some(a) = length {
1457 vec.push(Cigar::Diff(a.try_into().ok()?));
1458 length = None;
1459 }
1460 let val = match elem.state {
1461 Same(_) => Cigar::Equal(lengthraw),
1462 Insertion(_) => Cigar::Ins(lengthraw),
1463 Deletion(_) => Cigar::Del(lengthraw),
1464 Intron(_) => Cigar::RefSkip(lengthraw),
1465 Substitution(_) if let Some(a) = length => Cigar::Diff(a.try_into().ok()?),
1466 Substitution(_) => unreachable!("Length must be set"),
1467 };
1468 vec.push(val);
1469 }
1470 if let Some(a) = length {
1471 vec.push(Cigar::Diff(a.try_into().ok()?));
1472 }
1473 vec.append(&mut last);
1474 self.set_cigar(Some(&CigarString::from(vec)));
1475 Some(())
1476 }
1477 fn setcigarfromcs(&mut self, record: Option<&CgAlignedBlockPairs>) -> Option<()> {
1478 if self
1479 .cigar()
1480 .iter()
1481 .any(|p| matches!(p, Cigar::Equal(_)) || matches!(p, Cigar::Diff(_)))
1482 {
1483 return None; }
1485 let record = match record {
1486 Some(a) => a,
1487 None => &self.getorgeneratecsblock(true).ok()?,
1488 };
1489 let initialcigar = self.cigar();
1490 let mycigar = initialcigar.iter();
1491 let first: Vec<&Cigar> = mycigar
1492 .take_while(|p| matches!(p, &Cigar::SoftClip(_)) || matches!(p, &Cigar::HardClip(_)))
1493 .collect();
1494 let mycigar = initialcigar.iter().skip(first.len());
1495 let mut first = first.into_iter().map(|p| p.clone()).collect();
1496 let last: Vec<&Cigar> = mycigar
1497 .skip_while(|p| !matches!(p, &Cigar::SoftClip(_)) && !matches!(p, &Cigar::HardClip(_)))
1498 .take_while(|_| true)
1499 .collect();
1500 let mut last = last.into_iter().map(|p| p.clone()).collect();
1501 let mut length: Option<usize> = None;
1502 let mut vec: Vec<Cigar> = Vec::new();
1503 vec.append(&mut first);
1504 for elem in record.csdata.iter() {
1505 if elem.state.isubstitution() {
1506 if let Some(l) = length {
1507 length = Some(l.saturating_add(1));
1508 } else {
1509 length = Some(1);
1510 }
1511 continue;
1512 }
1513 let lengthraw = elem.state.getlength().try_into().ok()?;
1514 if let Some(a) = length {
1515 vec.push(Cigar::Diff(a.try_into().ok()?));
1516 length = None;
1517 }
1518 let val = match elem.state {
1519 Same(_) => Cigar::Equal(lengthraw),
1520 Insertion(_) => Cigar::Ins(lengthraw),
1521 Deletion(_) => Cigar::Del(lengthraw),
1522 Intron(_) => Cigar::RefSkip(lengthraw),
1523 Substitution(_) if let Some(a) = length => Cigar::Diff(a.try_into().ok()?),
1524 Substitution(_) => unreachable!("Length must be set"),
1525 };
1526 vec.push(val);
1527 }
1528 if let Some(a) = length {
1529 vec.push(Cigar::Diff(a.try_into().ok()?));
1530 }
1531 vec.append(&mut last);
1532 self.set_cigar(Some(&CigarString::from(vec)));
1533 Some(())
1534 }
1535 fn updateorsetcstag(&mut self, string: &CsString) -> bam::Result<()> {
1536 self.update_aux(b"cs", Aux::String(&string.to_string()))
1537 }
1538 fn getorgeneratecsblock(&self, long_cs: bool) -> crate::bam::Result<CgAlignedBlockPairs> {
1539 let csext = self.aux(b"cs");
1540 let mdext = self.aux(b"MD");
1541 match (
1542 csext
1543 .and_then(|ext| {
1544 if let bam::record::Aux::String(d) = ext {
1545 Ok(d)
1546 } else {
1547 Err(bam::Error::BamParseCS {
1548 rec: "Invalid CS tag found".to_string(),
1549 })
1550 }
1551 })
1552 .map_err(|_| bam::Error::BamParseCS {
1553 rec: "Absent CS tag.".to_string(),
1554 }),
1555 mdext
1556 .and_then(|ext| {
1557 if let bam::record::Aux::String(d) = ext {
1558 Ok(d)
1559 } else {
1560 Err(bam::Error::BamParseMD {
1561 rec: "Invalid MD tag found".to_string(),
1562 })
1563 }
1564 })
1565 .map_err(|_| bam::Error::BamParseCS {
1566 rec: "Absent MD tag.".to_string(),
1567 }),
1568 ) {
1569 (Ok(data), _) => CgAlignedBlockPairs::createfromcs(
1570 CsString::from_str(data)?,
1572 String::from_utf8(self.seq().as_bytes())
1573 .map(|a| a.to_string())
1574 .map_err(|_| crate::bam::Error::NoSequencesInReference)
1575 .ok(),
1576 self.contig().as_bytes().to_vec(),
1577 self.reference_start(),
1578 ),
1579 (Err(_), Ok(ext)) => {
1580 let line = String::from_utf8_lossy(self.qname());
1582 let cigar = &self.cigar().0;
1583 let seq = String::from_utf8(self.seq().as_bytes())
1584 .map_err(|_| crate::bam::Error::NoSequencesInReference)?;
1585 let a = CgAlignedBlockPairs::createfrommdtag(
1586 ext,
1587 &seq,
1588 cigar,
1589 &line,
1590 long_cs,
1591 self.contig().as_bytes().to_vec(),
1592 self.reference_start(),
1593 );
1594 a
1595 }
1596 (_, Err(b)) => return Err(b),
1597 }
1598 }
1599 fn introns(&self) -> IterIntrons {
1600 IterIntrons {
1601 pos: self.pos(),
1602 cigar: self.cigar().take().0,
1603 cigar_index: 0,
1604 }
1605 }
1606
1607 fn aligned_block_pairs(&self) -> IterAlignedBlockPairs {
1608 IterAlignedBlockPairs {
1609 genome_pos: self.pos(),
1610 read_pos: 0,
1611 cigar: self.cigar().take().0,
1612 cigar_index: 0,
1613 r#match: false,
1614 }
1615 }
1616 fn aligned_block_pairs_cigar_match(&self) -> Option<IterAlignedBlockCigarMatchPairs> {
1617 let cigar = self.cigar().take().0;
1618 if cigar.iter().any(|f| matches!(f, Cigar::Match(_))) {
1619 return None;
1620 }
1621 Some(IterAlignedBlockCigarMatchPairs {
1622 genome_pos: self.pos(),
1623 read_pos: 0,
1624 cigar: cigar,
1625 cigar_index: 0,
1626 })
1627 }
1628 fn aligned_block_pairs_cigar(&self) -> IterAlignedBlockCigarPairs {
1629 IterAlignedBlockCigarPairs {
1630 genome_pos: self.pos(),
1631 read_pos: 0,
1632 cigar: self.cigar().take().0,
1633 cigar_index: 0,
1634 }
1635 }
1636 fn aligned_block_pairs_match(&self) -> Option<IterAlignedBlockPairs> {
1637 if !self.cigar().containsequal() {
1638 return None;
1639 };
1640 Some(IterAlignedBlockPairs {
1641 genome_pos: self.pos(),
1642 read_pos: 0,
1643 cigar: self.cigar().take().0,
1644 cigar_index: 0,
1645 r#match: true,
1646 })
1647 }
1648 fn aligned_pairs_match(&self) -> Option<IterAlignedPairs> {
1649 if !self.cigar().containsequal() {
1650 return None;
1651 };
1652 Some(IterAlignedPairs {
1653 genome_pos: self.pos(),
1654 read_pos: 0,
1655 cigar: self.cigar().take().0,
1656 remaining_match_bp: 0,
1657 cigar_index: 0,
1658 r#match: true,
1659 })
1660 }
1661 fn aligned_pairs(&self) -> IterAlignedPairs {
1662 IterAlignedPairs {
1663 genome_pos: self.pos(),
1664 read_pos: 0,
1665 cigar: self.cigar().take().0,
1666 remaining_match_bp: 0,
1667 cigar_index: 0,
1668 r#match: false,
1669 }
1670 }
1671
1672 fn aligned_pairs_full(&self) -> IterAlignedPairsFull {
1673 IterAlignedPairsFull {
1674 genome_pos: self.pos(),
1675 read_pos: 0,
1676 cigar: self.cigar().take().0,
1677 remaining_match_bp: 0,
1678 remaining_ins_bp: 0,
1679 remaining_del_bp: 0,
1680 cigar_index: 0,
1681 }
1682 }
1683
1684 fn cigar_stats_nucleotides(&self) -> HashMap<Cigar, i32> {
1685 let mut result = HashMap::new();
1686 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() {
1696 match entry {
1697 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) => {
1702 *result.get_mut(&Cigar::SoftClip(0)).unwrap() += *len as i32
1703 } Cigar::HardClip(len) => {
1705 *result.get_mut(&Cigar::HardClip(0)).unwrap() += *len as i32
1706 } 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, }
1711 }
1712 result
1713 }
1714
1715 fn cigar_stats_blocks(&self) -> HashMap<Cigar, i32> {
1716 let mut result = HashMap::new();
1717 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() {
1727 match entry {
1728 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, }
1738 }
1739 result
1740 }
1741
1742 fn reference_positions(&self) -> Box<dyn Iterator<Item = i64>> {
1743 Box::new(self.aligned_pairs().map(|x| x[1]))
1744 }
1745 fn reference_positions_match(&self) -> Option<Box<dyn Iterator<Item = i64>>> {
1746 match self.aligned_pairs_match() {
1747 Some(b) => Some(Box::new(b.map(|x| x[1]))),
1748 None => None,
1749 }
1750 }
1751 fn reference_positions_full(&self) -> Box<dyn Iterator<Item = Option<i64>>> {
1752 Box::new(
1753 self.aligned_pairs_full()
1754 .filter(|x| x.get(0).copied().flatten().is_some())
1755 .map(|x| x.get(1).copied().flatten()),
1756 )
1757 }
1758
1759 fn reference_start(&self) -> i64 {
1760 self.pos()
1761 }
1762
1763 fn reference_end(&self) -> i64 {
1766 unsafe { htslib::bam_endpos(self.inner_ptr()) }
1767 }
1768
1769 fn seq_len_from_cigar(&self, include_hard_clip: bool) -> usize {
1770 let mut result = 0;
1771 for entry in self.cigar().iter() {
1772 match entry {
1773 Cigar::Match(len)
1774 | Cigar::Ins(len)
1775 | Cigar::SoftClip(len)
1776 | Cigar::Equal(len)
1777 | Cigar::Diff(len) => {
1778 result += len;
1779 }
1780 Cigar::HardClip(len) if include_hard_clip => {
1781 result += len;
1782 }
1783 _ => {}
1784 }
1785 }
1786 result as usize
1787 }
1788}
1789
1790#[cfg(test)]
1791mod tests {
1792 use crate::bam;
1793 use crate::bam::Read;
1794 use crate::bam::Record;
1795 use crate::bam::ext::BamRecordExtensions;
1796 use crate::bam::ext::CsValue;
1797 use crate::bam::ext::RangePos;
1798 use crate::bam::record::{Cigar, CigarString};
1799 use bio_types::genome::AbstractInterval;
1800 use std::collections::HashMap;
1801 fn mergemdandcstest(element: &Record) {
1802 assert_eq!(element.qname(), b"SRR11292120.509914");
1803 assert_eq!(element.contig(), "chr14");
1804 let mut cs = element.getorgeneratecsblock(true).unwrap();
1805 let val = cs.next().unwrap();
1806 assert_eq!(val.getreadpos(), Some(0));
1807 assert_eq!(val.getgenomepos(), Some(99813318));
1808 let val = cs.nth(2).unwrap();
1809 assert_eq!(val.getreadpos(), None);
1810 assert_eq!(val.getgenomepos(), Some(99813465));
1811 assert_eq!(val.state, CsValue::Deletion("c".to_string()));
1812 assert!(val.sequence.genomematch(None::<&str>));
1813 assert!(val.sequence.readmatch(Some("c")));
1814 let val = cs.nth(2).unwrap();
1815 assert_eq!(val.getreadpos(), Some(292));
1816 assert_eq!(val.getgenomepos(), Some(99813609));
1817 if let CsValue::Same(a) = val.state {
1818 assert_eq!(a.getsize(), 203)
1819 } else {
1820 assert!(false)
1821 };
1822 }
1823 #[test]
1864 fn testcs() {
1865 let mut read = crate::bam::Reader::from_path("test/locus.bam").unwrap();
1866 let mut element = read.records().filter_map(Result::ok).skip(1).take(1);
1867 let element = element.next().unwrap();
1868 mergemdandcstest(&element);
1869 }
1870 #[test]
1871 fn testgeneratedcssame() {
1873 let mut csread = crate::bam::Reader::from_path("test/locus.bam").unwrap();
1874 let mut mdread = crate::bam::Reader::from_path("test/locusmd.bam").unwrap();
1875 let mdread = mdread
1876 .rc_records()
1877 .filter_map(Result::ok)
1878 .filter(|a| a.is_primary())
1879 .map(|a| a.getorgeneratecsblock(false).unwrap());
1880 let csread = csread
1881 .rc_records()
1882 .filter_map(Result::ok)
1883 .filter(|a| a.is_primary())
1884 .map(|a| a.getorgeneratecsblock(false).unwrap());
1885 for (mdread, csread) in mdread.zip(csread) {
1886 if mdread.islongcs() == csread.islongcs() {
1887 assert_eq!(mdread.cs, csread.cs)
1889 } else {
1890 panic!("Different format");
1891 }
1892 }
1893 }
1894 #[test]
1895 fn testgeneratedmdsame() {
1896 let mut csread = crate::bam::Reader::from_path("test/locus.bam").unwrap();
1897 let mut mdread = crate::bam::Reader::from_path("test/locusmdcigar.bam").unwrap();
1898 let mdread = mdread
1899 .rc_records()
1900 .filter_map(Result::ok)
1901 .filter(|a| a.is_primary())
1902 .map(|a| a.getorgeneratecsblock(false).unwrap());
1903 let csread = csread
1904 .rc_records()
1905 .filter_map(Result::ok)
1906 .filter(|a| a.is_primary())
1907 .map(|a| a.getorgeneratecsblock(false).unwrap());
1908 for (mdread, csread) in mdread.zip(csread) {
1909 if mdread.islongcs() == csread.islongcs() {
1910 assert_eq!(mdread.cs, csread.cs)
1912 } else {
1913 panic!("Different format");
1914 }
1915 }
1916 }
1917 #[test]
1918 fn testmd() {
1919 let mut read = crate::bam::Reader::from_path("test/locusmd.bam").unwrap();
1920 let mut element = read.rc_records().filter_map(Result::ok).skip(1).take(1);
1921 let element = element.next().unwrap();
1922 mergemdandcstest(&element);
1923 }
1924 #[test]
1948 fn testcigar() {
1949 let mut read = crate::bam::Reader::from_path("test/locus.bam").unwrap();
1950 let elem = read
1951 .rc_records()
1952 .filter_map(Result::ok)
1953 .take(1)
1954 .next()
1955 .unwrap();
1956 let mut cigar = elem.aligned_pairs_match().unwrap();
1957 let _ = cigar.next();
1958 let align = cigar.next();
1959 assert_eq!(align, Some([1, 99812480]));
1960 let align = cigar.nth(40);
1961 assert_eq!(align, Some([43, 99812521]));
1962 }
1963 #[test]
1964 fn testblock() {
1965 let mut read = crate::bam::Reader::from_path("test/locus.bam").unwrap();
1966 let elem = read.rc_records().filter_map(Result::ok).nth(3).unwrap();
1967 assert_eq!(elem.qname(), b"SRR11292123.1482913");
1968 assert_eq!(elem.contig(), "chr14");
1969 let mut element = elem.aligned_blocks_match().unwrap();
1970 assert_eq!(element.next(), Some([99814926, 99816399]));
1971 assert_eq!(element.next(), Some([99816400, 99817131]));
1972 assert_eq!(element.next(), Some([99817132, 99830222]));
1973 assert!(element.next().is_none());
1974 }
1975 #[test]
1976 fn testseq() {
1977 let mut read = crate::bam::Reader::from_path("test/locus.bam").unwrap();
1978 let elem = read.records().filter_map(Result::ok).nth(7).unwrap();
1979 let val = elem.matched_sequence().unwrap();
1980 assert!(val.isfullymatched(99820271..=99826916).is_some());
1981 assert!(val.isfullymatched(99820271..=99826917).is_none());
1982 let mut elem = val.gethash().iter();
1983 let test = elem.next();
1984 let rangepos = RangePos::new(99820271, 99826917);
1985 assert_eq!(
1986 test,
1987 Some((
1988 &rangepos,
1989 &String::from(
1990 "AGAGGCAGGGATGACAGAGACAGACACAAAGCAGAGAGACGGAGGCAGAGGGAGACATGCAGAGTCGCGGAGACATCCGGGCTCAGGCCCCGACTCTCAGGGGCCACCCCCAGGGAGGACACGCAGTGCACCCCCACACCCACACCTCACACACACACTCACACCCACATACCCCCATCCACACACACCCAGAGACACACAGACACCCACAGCCACACACTCACACTCACGAACTTATCCAGTCACGTCCCACACACTCCCACCCAACCCATACACCACACACCTACACAACCCATACACCACACACACTCACAAACTATATACCACACACACACCAACCATACACCTATATACACTCACACACCCATATACCACACACTCACACACAACCCATACACCACACGCACACAACCCATACACCTATACACACTCACACCTACAAACTATATACTACACACTCACACACAACCCATACACCTATACACACACACCCATATACCACACACAACCCATACACCACACACACAAACCATATACCACACACTCACACAACCCATACACCTATACACACTCATACCCATATACCACATACAACCAATATACCACACACACACAACCCATACACCTATACACACACACCTATACACCACACACAGCCCATACACTACACAATCACACCACAAACTGTATACCACACACTCACACATAACCCATACACCTATACACACACACCCATATACCACACACACAACCTGTGCACCTACACACACACATACACCACACACACACAACTCCTACACCTACACACACCCACCACCCATACACACACAGCCTATACACCTACACACACTCATACACTCATATAGCACACACACAACCCATATACCACACACACAACCCACATACCTATACACACACGCCCATACACCACACACTCACACAACCCATGCACCACATACACCCACAAACTATATGCTACACGCTCACACACAACCCATACACCTATACACAATCCCACAACCCATACACACTTACACAACCTATACACCACACACACTCACAATCTGTATACCACACACACAACCCATACAGTTATACACACACACCCATATACCACACACACACAACCCATATACCACACACTCACACACAAACCATACATCTATACACATACCCATATGCCACACATACAACCCATACACCACACACTCACACACAACACATACACCACACACACAACCCATAGAACACAAACACAAGTCATAACCACACACACAGCCCATATACCTATACACATTCACACACACAACCCATACACTACACACACAACACATACACCTATACACACTCACACTCAATTCATACACCACACACACACAGCCCATACATCTATACACAAACTCACACACAATCCATATACCACAAACTCACACACAACGCATACACCTATACACACACACGCAACTCATACAGCACACACTCACACAACCCACAGACCATAAACACACACAAGCCATAACCACACACAAACCCATACACCTATACACACACTCATAAACAAGCCATACACCCCTACACAACCCATACACCACACACTCACAACCCATACACCTATATACACACACAACCATATACCACAAACTCACGCTCAACACATACACCTATACACACACACAACTCATACACCACACACTCATACACAACGCACAGACCACATACACAAGCCATAACCACACACACACAACCCGTACACATATATACACACTAATAAACAAGCCATACACCTACACATACAACCCATACACCACACATTCACACATAACCCATACACCTATACACACACACACACAACCCATATACCACAAACACACACAACCTATACACACATACAACCCATACACCACACACACAACACATACACACCACACACACACAGAATACTCATACACACACCCATACACCACCCCCACACAGAACCCATACACCACACACACACAACCTATACACCTATACACACACTCACACACACAACTCATATACCACAAACACACACAACACATACACCTATGCACACACACAACCCATACACCACACATTCACATACAACCCATACACCACACACACACAACACATACATGAAACATACATACAACCCACACACCACCCACTCATACACAACCTATACACCACACACACAACTCATACACCTATACACACACAACACATACACCTATCATACACTCACAACACATACACCTCCTATACACACACAACACACACACTTCCTATACACACAACCCACACGCCTATACACACATCCTCACTCACACTCACCCTCACATTCATATACTCACTAACACACTTCCACACTCACACCCTCACCCACACTTACACCCCCACCCACACTCAAACCCCGACGCTAAGTCACTGTCACATTTGTACCCATGCTCACACGCTCACACGCTCACACACTCACCCCCCACCAGCTCCAGGGCTCACTGGTGTGTGCCCACCAAACCCCCCTCGGGGGTCCCCTCGGTAAGCCGACAGTGCTCTGCTCATCGGTGGCCTGGGGAAACAGGGCCCACCCAAGGCCTGGCTCAGGAAAGGCTCCAAACACACATGGCCCAGGAGCAAATGGGCAGAGCTCAGCCTGCAGCTGGGAGCGGCCGAGCGGGTGCTGGGCCAGAGTCGGGGCCTGTCTGTGGGTGAGGGGCACGGCAGCACGGGCCCACCTGCACCTACAAGGCCTGGCCCCCGAGGTCACTGGGCCACCACCCAGCCCTCGCCCTGTTCCCCGTCTGTGCTGGCCGGGGCAGGACTCTGAGCCTCGGGGAAACCCACAGATACACACGGGACCCCGAACATCGGGCTGGGGAGGCTGGGGTGGGTAACAACATCCCAGAGGCAGGAGCAGGAGGTCCTGGGACCCTGCACACTGCGACCCCAGCCCTGGGGGCTGAAGCCCAGGACAGCCTCAGGTCTCCCAGGAGGGACTGGATAGTGGGGGATGGTCAGAGAACAGGACAGCCAGCAGGGTGCAGCCCGAGGACAGGGATGGATGCTGGGAGGTCAACAGGACAGGGGCAGGGGCAGGGGCTGTGGAGTGTGAGAAGGTCCTGGAGGGCCTGGAGAACCTGTGGGTCAGTGTCTGTGGGAAGGAGGCCAGGAGCAGCCCTGAGTGGCCAGGCTGGCAGGGGTGAGGAGGTGGGGGCAGTGAGGTGAGGGTGACCGAGACAGGCCTCTGGCCAGGGAGGGGACCTTGGCTGGGCTCTGACTGAACCCAGGGCTCCTGGAGAAGGGGCCCCAGGCGGGGATGAGGATGTGGGCATCTGACTCCATCAACAATGGGGCTTCCAACACGCACAGCCTGGGCCTCGGAGACCTGGGCCCTGACCCGCCTCCCCCTGGCACTGGGCCGGGTGCCGTGTGTGGTCCCCAGTCCCCGCAGCACCTCCCCCACACTGGTCACGTTCCAGGGCCCCTCTGAAGCACCTGCTGTGAGGGGATGTGAGGAGGGGACAGGGACTTGGGCCTGAGCTGCCGGGTCGGGGGGGAGTCGGGGACCCAGGCTCAGCGTGTGGCTGGGGACCAGACAGATGGGGATGGAGGAGGACACGCCCTGTACCCACTGCCTGCCAAGGGGCTGGACCCACGCCCAGTCTAGGCCATGTCCCCCGAGGCCTGTGAACCTTCACTCTGAGCCACTAAAACATTCAGGAGCTTTGAAAGCAGCCCCCGTCCTTGTCACTATGCGATGACTCTGAGCATCACGCTGTCCCTGCTGGATCCACCCTCCAGCCCCAGCGAGGGAGGCTGGGCCCCGGGCAGCAGGTGGTGAGGGCAGCGGGCACAGCCACCCTACAGCACACACAGGGTCTCAGGGACGCGTCCACCACAGCCCGTGCACAGGCTCCTCACGGCACTGAGTTCACCCGGGGCGCGGGCCGTTTGTCCTCAGGAGTCCCACTGTGCCCTCCGCCCCCAGCCCTGTCCTGCTGAGGCTGCAGCTGGGTCCCGGGGCACAGGGCGGCCCTGAGCACCTTGTCATGTTGGTCCCTGTCGGGTGGGCTGCTGGCTGTCTGTGGAGCTGGCAGAGCCGCGGTTCAGCCTTGGAGGCCGGTCCTGGGGCCCAGCAGCCGTGGGGAGCACTGCCCAGTCCCGTGCCCACAGGGAATCACCTGGGCTGAGGAAGGGCCCACACGCCGACGGGATCGGGGTCAGGCAGCGCACGCCTGGCACCGAGATCCCACGTCCCGAAGTGGGGACACGGCCCAGGGGCACTGTTCCGGGAGGGTCTCAAGATGGGGTCTCCTATTTCAATCTTCACTCCTTCTGCACCTGTTAGCTGGGAACCTTCTAGAAGGAGGGGTGTCCTCAATCATGGGGTGGTTGTGAGCTGAGCACAGATCATGCAGGAAGGTACATGGCTTCTCCTTCACCAGGAAAACAGTGCAGAGAGACAGAGACACAGAGACAGAGTAACAGAGAAAGACAGAGAGACAGAGACACAGAGACAGAGACAGAGTAACAGAGAAAGACAGAGAGACAGAGAGACACAGACAGAGACAGAGTAACAGAGAAAGGCAGAGAGACAGAGAGAGACAGAGACAGAGTAACAGAGAAAGACAGAGAGGCAGAGAGAGAGAGACAGAGACAGAGACAGAGTAACAGAGATAGACAGAGAGACACAGAGACAGAGACAGAGTAACAGAGATAGAGAGACAGAGAGAGACACAGAGACAGAGTAACAGACAGAGACAGAGACAGGCACAGAGATAAGAAAGATACACAGAAACAGAGAGAGACAGAGACAGAGATAGTCACTGTCACATTCATACCCACGCTCACCTGCTCACACACACACACCTCACACACACTCACACTCACACTCACCTCACACACACAGTCACACACACACTCACACACACTCACACACACACACTGAGCTTCCCTCAGGCCCTGTCACTTCCGATGGGGCCTACGGCCTGTCTAAGCCTCTGGGCCACCAGCCCCTGGCTCACCGGTGTGTGCCCACCACACCCCGCCTTGGGGGTCTCCTCTATGAGCTGGGCACATGCCCTCCGCTCTGTTCATGGCTGGCCTGGGGGAAACAGGGCCCACCCAAGGCCTGGCTCAGGGAAGGCCTCAAACACACATGGCCCAGGAGCAAAGGGGCAGAGCTCAGCCTGCAGCTGGGAGCGGGCAGGGGTAGTGGAGTGGGCGGAGGGCCTGGAGAACCTGCAGGGCTACGATGTCTCTGGGAAGGGGGCCCAGGAGCAGCTCAGCGTGGCTGGGCCGGCAGGGCCGAGGAGGTGGGGGCCGTGAGGGAGGGGTGACTCGGCTGTGTGGGGTGCCGGGGGACACGGGCTTTGCTCCGGCTGAGCCCAGGCAGTGGCGAATCCCTGAGCTGCCAGGAGGAGAGCAGGGCCGGGGTCAGGCAGAGGTGGGCCGCGGGGCCGAGGGCTGCGGCCGGTCGGGAGCAGTCGGTCGGTTGAGGGCACCATTACATGGAGGGCTGTGAGACGGGAGACCCCATTCCCTTCATTCCTTGTGCACGTGTTAGTGAGGAAGCTTCTAGAAGGAGGGCATTGCTCGTAGTGGGTGAGTGTGAGCACAGATCATGCAGGCTGGCGTGCTGCCGTGAAGTGCCTCTCTTTACTTTCCAGACCTCAGCATGGCAAGCCCGTCCTGCGCCCCAGGGTCTTTCTGGAGTACACGCCGCGCGGTCCTGGTGGGCACCATACCTGGCACCCACGCTTTGGCCGGGCCCGAACCTTGCGCCCTCCCAGCCCCCATGTGGCTCTCCCTTGGCCATACTGGCCTTTTGCCAGTCCTCCTACCTCACCCTAGGGTCTGCCTGGCCCTGCCCTCCCTTCCTAGCCCCCCAAGGAGGCTGGAGGGCACCCCTGCGTCCACCAGCAGCAGCTCCTCATGGGCGAGTCTCCTTGGGCCAGTGACACATAGTGTGCCCCGATGGTGCCACGGCAGCCTGGGCCCTCCGCCTTCCTGCTTGGCAGGCACCCCCGCTCCCTGCACCCTCACCGGGGCACCTGTGAGCCCTGAGGGCCAGTGGGGGTCTCACTGCTGCTCCCTCCCACAGCCTAGCCTCGGGCCTCAGGGCTCTGCATCCAAGCGGCCCAGGGCTCCCTGAGGTCTCAGCCCGAGTGGGCCTTTGAGCCTTCGCGTTCTCTGCAGGGTGGGACCTGCCCAAGGGCTGCTGAGGGCTTCCCAGGGGTCCTGTGGGTCCCACCTAGGGGCAAGCTGGTGAGGAAAGTGGGTCCTGCCATGGCGGCCGGGTGGGCTGAGTTTTCGGCATCTCTGGGCCCAACAGCAGGTCCCTGGAGCGGCGCCCACCCCTCCCCCAGGCAGGTGTGAGGGCTCTGATCTGTTTCTCCTTGAGTGACTCATTCTGGGCAGACTTGGCCCTCAGGGCACATGCAAATGGTTGTTTGTTCCACACCGAAAACATGTTTCTTGCCCTCTGAGGCTGTTTCCAGAAATAGCTTGCACGATTCTCCACCTGCAGCTGCAGCCGCCACCCACCCAGTGTGGCCAGGCTGGCCCAGGCCTCCAGATTCGGGGACACCCCCCGCCCCCTCCCCCAGCGTGGCCAGGCTGGCTCAGGCCTCCAGATTCGGGGACA"
1991 )
1992 ))
1993 );
1994 let test = elem.next();
1995 let rangepos = RangePos::new(99826917, 99827017);
1996 assert_eq!(
1997 test,
1998 Some((
1999 &rangepos,
2000 &String::from(
2001 "CCCCCCCCCCCCAACAGCGTGGCCAGGCTGGCTCAGGCCTCCAGATTCGGGGACACCCCCCCACCACAGCGTGGCCAGGCTGGCTCAGGCCTCCAGATTC"
2002 )
2003 ))
2004 );
2005 let test = elem.next();
2006 let rangepos = RangePos::new(99827017, 99829102);
2007 assert_eq!(
2008 test,
2009 Some((
2010 &rangepos,
2011 &String::from(
2012 "GGGGACACCCGCCCCCTCCCCCAGGACAGGCCCACTTGGGTTACTGACACTGGGACCACCCTGCAAACGTCAACTTTATTGAATTCAGTGGTTCTGAACTTGTTGCCATCTTTGGGACCAGGACCCAGGGGCAGCCCCCAGGTTGGCAGGAAGGGCAGGGGAGCCAACGCTGGCAGGGCCCCCAGCCAACCCCCACCCCAGAAGCCCCAAGGAGGCTGAGCGGAGGTGGCCCTGGTGGCCTGGGCACAGGCAGCCCGATTGGTACAGGGCCTGTCTGGTGCAGGCCCGCACCTCCCCCACCCTCATGGCCTGGTGGTCCCCACTGTACAGAGAGAACACTGAGGCTCAGCAGGGCCAGGGACATGGCCTGAGGTTACATGGTGATGGGGGCTGGGTCTCCGGGCCTGGGGGCCGTGGTGGGTGCAGCACCCGGACTGCGTGGGCTGTGGCCTCCCTGCTCCCAGCTCTGTCACACCCGTCTCCATCTGAGCCTCCAGCTCCATCTTTCCCGCTGTCCCTGTCTCTGGCCACCCTTCTGTCTCCCTGTCTCTCTGCCTCTCTGAAGGTATCTCCCTGCCCGAATCTCTGTCTCTGTCCCATTGTCGGTGTCTCTGACTCATCTCTGTCAAGCCCGTCTGCTGGGCTTTGTCCCGCCATCTTGCCTGTCTTGGCCTCTCTCTCTTTCTGTGTGTCTCCGTCGGTGCCTCCTTTCTCCATCCATCTCTCCCCCGTGTCTGTCTCTATCCCTCCGTCTCTCTTCCCGTCTATCCCTCCCTCTGTGCCTGTCCCTTTGCTGTGTCCCTTTCTTTGCCTCTGTCTCTCTGTCTGTCTCTTCGTGTCCCTGTGTGTGTCTCTCTCTTCTCTCTGCTTCTCTTTCTGTATCTCTGTCTATATCTCAGCCTCTTTGTGTCCCTGTGTGTGTGTCTCTCTCTTCTCTGTCTTTCCATGTCTCTGTCTATATCTCTGTCTCTCTGCCTCTGTATCTCTGTCTGTCTGTTCGTGTCCCTGTGTATGTCTCTCTCTGTCTCTTTCTGTATCTCTGTCTATATCTGTCTCTCTCATCTGTCTCTTCCTGTGTGTGTCTCTCTGTCTCTCTGCCTCTGTCTCTGTCTCTCTGTCTCTTCATCTCTGTCTGTCTCTGCCTGTCTGTGTCATTTGGTGTCTCTGTTTTTGTATGTCTCTCTGTTTGTCTGTGTCTCTTCCTCTCTGTAGCTCTGCCTCTCTCTATCTCTCCTTATATCTGTCTTTCTCTCTCCCTGTTTCTTTCTCTGTCTCTTTTTGTCTTTCTGAGTCTGTCTCTGTCTCTGTCTCTTCCTCTCTGTATATACCTCTCTGTCTTTCTGTTGCTGTCTGTCTCTGTTTCTCTTCTCCTCTCTCTATCTCTCTTTGTCTGTCTTTCTCTGCCTTTCTAACTCTGTCTTTCTCTGTCTCTCTGTCTCTATCTCAGTCTCTCTTCTTATCTCTCTCTCTGTCTCTCTCACTCTCTGTATCTCTTTGTCTCTGTCTTTCTCTTATCTCTATCGCTCTGTCTCTATCTCTCTTTCTGTCTCTCTGTATCTCTATCTCTGTCTCTCTCATGTCTATCTCTCTGTCTTTCTCTGTCTCTCTGTATCTCTGTCTTTCATCTCTATCTCTATCTCTGTCTTTCTGTCTCTATCTCTGTCTCTCTATCTCTTTCTCTGTCTGTATCTCTCTGTCTCTATCTCTCTCTGTCTTTCTCTGTGTCTCTGTATCTCTGTCTCTATCTCTGTCTCTCTATCTCTCTCTGTCTCTCCCTGTCTCTCTCTATCTCTGTCTCTCCATCCCATGTGGGTCTGTGGGTTTCCCCGAGGCTCAGAGCCCTGCCCCGGTCAGCACAGACAGGGAACAGGGCGAGGGCTGGGTGGTGGCCCAGTGACCTTGGGGGCCAGGCCTTGGGGGTGCAGGTGGGCCCGTGCTGCCGTGCCCCCCACCCACAGACAGGCCCCGGCTCTGGCCCAGCACCCGCTCCGCCGCTCCCAGCTGCAGGCTGAGCTCTGCCCGTTTGCTGCTGGGCCATGTGTGTTTGGGGCCTTTCCTGAGCCAGGCCTTGGGTGGGCCCTGTTT"
2013 )
2014 ))
2015 );
2016 let test = elem.next();
2017 let rangepos = RangePos::new(99829102, 99835825);
2018 assert_eq!(
2019 test,
2020 Some((
2021 &rangepos,
2022 &String::from(
2023 "CCCCAGACCACCCATGAGCAGAGTGTAGGGCACGTGCCCAGCTCACAGAGGGGACCTCTGAGGCGGGGTGTGGTGGGCACACAGCAGTGAGCCATGAGGCTGGTGGCCCAGAGGCTTGGACATGCCGTGGGCCCCATAGGAAGTGACAGGGCTTGAGGGAAGCTCAGTGTGAGTGTGTGAGCGTGGGTATGAATGTGACAGTGACTCTCTATCTGTCTCTTTGTATCTCTGTCTCTCTGTGTGTATCTTTCTATCTCTGTCTCTCTATATGTCTCTCTATCTCTGTCTCTCTGTATCTCTATCTCTCTGTGTGTATCTTTCTATCTCTGTCTCTCTTTCTTGATCTCTCTCTATCTCTGTCTCTGTAACTCTCTTTATCTCTTACTGCTTCTGTTTCTCTCACTCTGTCTCTGTCTCTCTTTATCTCTGTCTTGCTCTCTCTCTCTGTAACTTTATCTCTGTCTCTCTGTTTCTATCTCTGTTTTTCTCTGTCTCTGTCTGTATCTCTGTCTCTCTTTATCTGTCTCTCTGTCTCTGTGTATCTCTGTCTCTCTGTAACTTTATCTCTGTCTTTTTCTGTCTCTGTGTGTGTCTGTCTCTGTGTCTTTGTTTTTCTCTCTGTCTCTGTCAATGTCTCTTTCTGTATCTGTTTCTTTCTCTCTGTCTCTGTCTCTCTATCTCTGTCTCTATCTCTCTGTCTCTCTGTAACTCCTCATCTCTGTCTCTGTGTCTGCATGTCTCTTTCTGTGTCTCTGTTTCTCTCTCTGTCTCTGTCTCTCTGTGACTCTGTCTCTGTCTCTGTCTCTGTCTTTCTCTGTTACTCTGTCTCTCTCTCTGTCTCTCTGTGACTCTATCTGTTACTCTGTCTCTGTCTCTGTCTCTCTCTGTCTCTCTTTCTCTGTTACTCTGTCTGTGTCTCTGTGTCTCTCTCTCGTCTGTCTTTCTCTGTTACTCTGTCTCTGTCTCTGTGTCTCTGTCTCTCTGCACTGTTTTCCTGGTGAAGGAGAAGCCATGTACCTTCCTGCATGATCTGTGCTCAGCTCACAACCACCCCATGATTGAGGACACCCCTCCTTCTAGAAGGTTCCCAGCTAACAGGTGCAGAAGGAGTGAAGATTGAAATAGGAGACCCCATCTTGAGACCCTCCCGGAACAGTGCCCCTGGGCCGTGTCCCCACTTCGGGACGTGGGATCTCGGTGCCAGGCGTGCGCTGCCTGACCCCGATCCCGTCGGCGTGTGGGCCCTTCCTCAGCCCAGGTGATTCCCTGTGGGCACGGGACTGGGCAGTGCTCCCCACGGCTGCTGGGCCCCAGGACCGGCCTCCAAGGCTGAACCGCGGCTCTGCCAGCTCCACAGACAGCCAGCAGCCCACCCGACAGGGACCAACATGACAAGGTGCTCAGGGCCGCCCTGTGCCCCGGGACCCAGCTGCAGCCTCAGCAGGACAGGGCTGGGGGTGGAGGGCACAGCCGGACTCCTGAGGACAAACGGCCCGCGCCCCGGGTGAACTCAGTGCCGTGGGGAGCCTGTGCACGGGCTGTGGTGGACGCGTCCCTGAGACCCTGTGTGTGCTGTAGGGTGGCTGTGCCCGCTGCCCTCACCACCTGCTGCCCGGGGCCCAGCCTCCCTCGCTGGGGCTGGAGGGTGGATCCAGCAGGGACAGCGTGATGCTCAGAGTCATCGCATAGTGACAAGGACGGGGGCTGCTTTCAAAGCTCCTGAATGTTTTAGTGGCTCAGAGTGAAGGTTCACAGGCCTCGGGGGACATGGCCTAGACTGGGCGTGGGTCCAGCCCCTTGGCAAGCAGTGGGTACATGGCGTGTCCTCCTCCATCCCCATCTGTCTGGTCCCCAGCCACACGCTGAGCCTGGGTCCCCGACTCCCCCCCGACCCGGCAGCTCAGGCCCAAGTCCCTGTCCCCTCCCCACATCCCCTCACAGCAGGTGCTTCAGAGGGGCCCTGGAACGTGACCAGTGTGGGGGAGGTGCTGCGGGGACTGGGGACCACACACGGCACCCGGCCCAGTGCCAGGGGGAGGCGGGTCAGGGCCCAGGTCTCCGAGGCCCAGGCTGTGCGTGTTGGAAGCCCCATTGTTGATGGAGTCAGATGCCCACATCCTCATCCCCGCCTGGGGCCCCTTCTTCAGGAGCCCTGGGTTCAGTCAGAGCCCAGCCAAGGTCCCCTCCCTGGCCAGAGGCCTCACTGTCTCGGTCACCCTCACCTCACTGCCCCCACCTCCTCACCCCTGCCAGCCTGGCCACTCTGGGCTGCTCCTGGCCTCCTTCCCACAAACACGGACCCACAGGTTCTCTAGGCCCTCCAGGACCTTCGCCCACTCCACGGCCCCTGCCCCTGTCCTGTTGACCTCCCAGCGTCCATCCCTGTCCTCGGGCTGCACCCTGCTGGCTATCCTGTTCTCTGACCATCCCCCACTGTCCAGTCCCTCCTGGGAGACCTGAGGCCGTCCTGGGCTTCAGCCCCCAGGGCTGGGGTCGCAGTGCGCAGGGTCCTGGGACCTCCTGCTCCCGCCTCTCCCATGTTGTTACCCACCCCAGCCCGATGTTCGGGGTCCTGTGTGGATCTGTAGGTTTCCCCGAGGCTCAGAGTCCTGCCCCGTCCAGCACAGACGGGGAACAGGGCGAGGGCTGGGTGGTGGCCCAGTGACCTCGGGGGCCAGGCCTTGTAGGTGCAGGTGGGCCCGTGCTGCCGTGCCCCCCACCCACAGACAGGCCCCGACTCTGGCCCAGCGCCCGCTCGGCCGCTCCCAGCTGCAGGCTGAGGTCTCCCCATTTGCTCCTGGGCCATGTGTGTTTGGGTGTGAGTGTGGGTATGGATGTGACAGTGACTTAGTGTGTGGCTGTGAGCGTGGGTATGTTTCTGTGTGTTTGTGTGTGAATGTTGTATAATAGTCGTGGTGTGTGTTTGTGAGAGTGACTGTGTGAGAGGGGCTTGCAGCTGAGTTCCTGGGCCCATCTTGCTGCCTCTTTCTCTCCCTGTGTGTTCTCTGCCTCTGTTGTGTTCTCTCTGCATGTCTGTCTCCATGTCTCTTTTTCCCTGTTCCCATCTCCTCCCTTTTTCTCCCATCTCTGTCTCTGTTTCTTATCTATCTCATCTCATCTCTCTCTTTCTGTCTCTTGTGTCTCTGTCCCTCCCCATCCCTGTCTCTTATCTCTCTCCATCCCCATCTCTCTCTCTGTGTCTGTCTTTGTCTCTGTCTCTATGTCTCTTGTCTCTCCCCATCCCTGTCTCTCTCTATGTCTCTGTGTCTCTTATCTCTCCCCATCCCTGTCTCTCTATGTCTCTGTGTCTCTTATCTCTCCTTGTCCTTGTCTTTCTCTGTCTACGTCTCTGTGTCTCTCTCCATCCCTGTCTCTCTCTATGTCTCTGTGTCTCTTATCTCTCCCTATCCCTGTCTCTCTATGTCTCTTGTCTCTCCCCATCCCTGTCTCTCTCTCTCTATGTCTCTGTGTCTCTTATCTCTCCCCATCCCTGTCTCTCTCTATGTCTCTTCATCTCTTATCTCTCTCCCCATCCCTGTCTCTATGTCTCTGTGTCTCTTATCTCTCCCCATCCTTGTCTCTGTCTATGTCTCTGTGTCTCTTGTCTCTCCCTGTCCCTGTCTCTCTCTATGTCTCTGTGTCTCTCTGGGCCCCTGGTCCAATGTCCCCTTCCCAGAACCCCTGTTTCCCTGGTGTGGGGTGCAGGTCCTTCTGTGGCCCTGTGGGCCGTGCTTGTGCTGGGCACAGCCTGCCAGGGCAGCCACTCAAGCCCCAGGGCTGGGCACTGCGTCCTGGCTCTGGCCAAGGGCCCTGGGGAGAGCTGAGGGAGGTGCATGCAGGGTGTGAGGCCCACCACAGTCACTGCCAGATGCTCAGTGCTGGTGCTTCCCTGGGTCTGCTGTGTGGTGGGCACAGCCCTCGTGAGGGCTGCCCATGGAGGAGGCCTGCCGCCTAGAGAGCCCGGACAGGGGGACAATGGCCTGTGCTGACCCTGGCGGAACCCTGGCTGGCCCCAGATGACCCCAGATGGCCCTGGCTGACCCTGGCGGAACCCAGATGACCCTGGCTGACCCTGGCTGGCCCTGGCTGACCCCAGATGACCCTGGCTGACCCTGGCTGATCCTGGCTGACCCTGGCTGACCTCTGCCTAACCCTGGACCTGGAAAGCCCTAGCTGACCCCGGGCTGGTTGGGGCTGGGCCTCCCTGTGGCTGCAGCCCCTCGCTCAGGCCCCAGGCACACCTGGCCAGGTCTCGGTTTTGGGGCATGTTTCTCAGAACAGCAGTTCTCTGGCTGGAACACCTGGCCTGGGCTGTGTTCACAATGACTCAGCCGCCCCACAGGGCTATTTTGGATATTTCTGCAGGTGATGGGGTACAAGAGGCTTCAGGAGAGAGAGAAAAGCAAGAGAATACAAACAGCATGGCCTCCCCCGACCTTCCTGTCCCCACTCCTGTACTGTACCCCCTCCCCAGTGCTAAGTCGAGACCTGGCGACCCCTTAGGGGCTGGGGCTGGGTGTAGCTCACAGGGCCTGGGCTGGTCCTCTCCCCACCAAGTCCTCCTGGGGCCTACACACCCCTCTGAGCCTGGAAAAATGGAGCAAGCCATTGGGGTCATTTCTTCATCTACCAGTGAGTACATGCACTGAGAGGGTCTCGGCTCCCCTGGAGGCCTCCCTCCACCACTGCAGGTCACTTACTCATGAGGGCCAAGGCTCAGAAATCAGACAGGACTCAGTGTCTAGTCAGACTGATACATGCTCAGAAAAGGAATCAGATTTCAAAATGAATATGTATAAGAAAAGAACCGGGGATCAGTGATCAGGAACAGGGATCCATGATCTGGTCCAGGGCTCAGCGGTCAGGAACAGGGCCCAGCGATCAGGACCAGGGCTCAGTAATCAGGACCAGGGCCCAGTGATCAGGACCAGGGCCCAGCGATTGGGTCCAGGGCTCAGTGATCAGGAACAGGGCTCAGTGATCAGGACCAGGGCCCAGTGATCAGGAACAGGGGCCAGTGACTGGGTCCAGGGCTCAGTAATCAGGACCAGGGCTCAGTGATCAGGACCAGGGCTCAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGACCAGCATTCAGTGATCAGGACCAGGGCTCAGTGATCAGGAACAGGGCTCAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGACCAGCACTCAGTGATCAGGACCAGGGCCCAGTGATCAGGAACAGGGGCCAGTGACTGGGTCCAGGGCTCAGTAATCAGGACCAGGGCTCAGTGATCAGGACCAGGGCTCAGTGATCAGGAATAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGACCAGGGCTCAGTGATCAGGAACAGGGCTCAGTGATCAGGAACAGTGGTCAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCGGGACCAGGGCTCAGTGATCAGGACCAGGGCCCAGTGATTGTGTCCAGGGCTCAGTGATCAGGACCAGGGCTCAGTGATCAGGAACAGGGCTCAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGACCAGCACTCAGTGATCAGGACCAGGGCCCAGTGATCAGGACCAGGGCCCAGCGATTGGGTCCAGGGCTCAGTAATCAGGACCAGGGCCCAGTGATCAGGAACAGGGCTCAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGAACAGGGCTCAGAGATCAGGACCAGGGCCCAGCGATTGGGTCCAGAGCTCAGTGATCAGGAACAGGGCCCAGCGATCAGGACCAGGGCTCAGTAATCAGGACCAGGGCTCAGTGATCAGGACCAGGGCCCAGTGATCAGGAACAGGGGCCAGTGACTGGGTCCAGGGCTCAGTAATCAGGACCAGGGCTCAGTGATCAGGAACAGCGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGACCAGCGCTCAGTGATCAGGAGCAGGGCTCAGTAATCAGGACCAGGGCCCAGTGATCAGGAACAGGGCTCAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGACCAGGGCCCAGCGATTGGGTCCAGAGCTCAGTGATCAGGAACAGGGCCCAGCGATCAGGACCAGGGCTCAGTAATCAGGACCAGGGCTCAGTGATCAGTACCAGGGCCCAGCGATTGGGTCCAGGGCTCAGTGATCAGGACCAGGGCCCAGCGATTGGGTCCAGGGCTCAGTGATCAGGAACAGGGCCCAGCGATCAGGACCAGGGCTCAGTAATCAGGACCAGGGCTCAGTGATCAGGACCAGGGCCCAGCGATTGGGTCCAGGGCTCAGTGATCAGGAACAGGGCCCAGCGATTGGGTCCAGGGCTCAGTGATCAGGAACAGGGCCCAGCGATCAGGACCAGGGCTCAGTAATCAGGACCAGGGCTCAGTGATCAGGACCAGGGCCCAGCGATTGGGTCCAGGGCTCAGTGATCAGGACCAGGGCCCAGCGATTGGGTCCAGGGCTCAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGAACAGGGGTTAGTGATCAGGAACAGGGCTCAGTGATCAGGACCAGGGCCCAGTGATT"
2024 )
2025 ))
2026 );
2027 assert!(elem.next().is_none());
2028 }
2029 #[test]
2030 fn testseqreverse() {
2031 let mut read = crate::bam::Reader::from_path("test/locus.bam").unwrap();
2032 let elem = read.records().filter_map(Result::ok).nth(8).unwrap();
2033 let val = elem.matched_sequence().unwrap();
2034 assert!(val.isfullymatched(99820441..=99821296).is_some());
2035 assert!(val.isfullymatched(99821296..=99821298).is_none());
2036 let mut elem = val.gethash().iter();
2037 let test = elem.next();
2038 let rangepos = RangePos::new(99820441, 99821297);
2039 assert_eq!(
2040 test,
2041 Some((
2042 &rangepos,
2043 &String::from(
2044 "ACCCCCATCCACACACACCCAGAGACACACAGACACCCACAGCCACACACTCACACTCACGAACTTATCCAGTCACGTCCCACACACTCCCACCCAACCCATACACCACACACCTACACAACCCATACACCACACACACTCACAAACTATATACCACACACACACCAACCATACACCTATATACACTCACACACCCATATACCACACACTCACACACAACCCATACACCACACGCACACAACCCATACACCTATACACACTCACACCTACAAACTATATACTACACACTCACACACAACCCATACACCTATACACACACACCCATATACCACACACAACCCATACACCACACACACAAACCATATACCACACACTCACACAACCCATACACCTATACACACTCATACCCATATACCACATACAACCAATATACCACACACACACAACCCATACACCTATACACACACACCTATACACCACACACAGCCCATACACTACACAATCACACCACAAACTGTATACCACACACTCACACATAACCCATACACCTATACACACACACCCATATACCACACACACAACCTGTGCACCTACACACACACATACACCACACACACACAACTCCTACACCTACACACACCCACCACCCATACACACACAGCCTATACACCTACACACACTCATACACTCATATAGCACACACACAACCCATATACCACACACACAACCCACATACCTATACACACACGCCCATACACCACACACTCACACAACCCATGCACCACATACACCCACAAACTATATGCTACACGCTCACACACAACCCATACACCTATACACAATCCCACAACCCATA"
2045 )
2046 ))
2047 );
2048 let test = elem.next();
2049 let rangepos = RangePos::new(99821297, 99822851);
2050 assert_eq!(
2051 test,
2052 Some((
2053 &rangepos,
2054 &String::from(
2055 "CACACTTACACAACCTATACACCACACACACTCACAATCTGTATACCACACACACAACCCATACAGTTATACACACACACCCATATACCACACACACACAACCCATATACCACACACTCACACACAAACCATACATCTATACACATACCCATATGCCACACATACAACCCATACACCACACACTCACACACAACACATACACCACACACACAACCCATAGAACACAAACACAAGTCATAACCACACACACAGCCCATATACCTATACACATTCACACACACAACCCATACACTACACACACAACACATACACCTATACACACTCACACTCAATTCATACACCACACACACACAGCCCATACATCTATACACAAACTCACACACAATCCATATACCACAAACTCACACACAACGCATACACCTATACACACACACGCAACTCATACAGCACACACTCACACAACCCACAGACCATAAACACACACAAGCCATAACCACACACAAACCCATACACCTATACACACACTCATAAACAAGCCATACACCCCTACACAACCCATACACCACACACTCACAACCCATACACCTATATACACACACAACCATATACCACAAACTCACGCTCAACACATACACCTATACACACACACAACTCATACACCACACACTCATACACAACGCACAGACCACATACACAAGCCATAACCACACACACACAACCCGTACACATATATACACACTAATAAACAAGCCATACACCTACACATACAACCCATACACCACACATTCACACATAACCCATACACCTATACACACACACACACAACCCATATACCACAAACACACACAACCTATACACACATACAACCCATACACCACACACACAACACATACACACCACACACACACAGAATACTCATACACACACCCATACACCACCCCCACACAGAACCCATACACCACACACACACAACCTATACACCTATACACACACTCACACACACAACTCATATACCACAAACACACACAACACATACACCTATGCACACACACAACCCATACACCACACATTCACATACAACCCATACACCACACACACACAACACATACATGAAACATACATACAACCCACACACCACCCACTCATACACAACCTATACACCACACACACAACTCATACACCTATACACACACAACACATACACCTATCATACACTCACAACACATACACCTCCTATACACACACAACACACACACTTCCTATACACACAACCCACACGCCTATACACACATCCTCACTCACACTCACCCTCACATTCATATACTCACTAACACACTTCCACACTCACACCCTCACCCACACTTACACCCCCACCCACACTCAAACCCCGACGCTAAGTCACTGTCACATTTGTACCCATGCTCACACGCTCACACGCTCACACACTCACCCCCCACCAGCTCCAGGGCTCACTGGTGTGTGCCCACCAAACCCCCCTCGGGGGTCCCCTCGGTAAGCCGACAGTGCTCTGCTCATCGGTGGCCTGGGGAAACA"
2056 )
2057 ))
2058 );
2059 }
2060 #[test]
2061 fn spliced_reads() {
2062 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
2063 let mut it = bam.records();
2064 let blocks: Vec<_> = it.next().expect("iter").unwrap().aligned_blocks().collect();
2065 assert!(blocks[0] == [16050676, 16050721]);
2067
2068 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2069 assert!(blocks[0] == [16096878, 16096885]);
2071 assert!(blocks[1] == [16096887, 16096931]);
2073
2074 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2075 assert!(blocks[0] == [16097145, 16097174]);
2077 assert!(blocks[1] == [16097176, 16097198]);
2079
2080 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2081 assert!(blocks[0] == [16117350, 16117401]);
2083
2084 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2085 assert!(blocks[0] == [16118483, 16118534]);
2087
2088 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2089 assert!(blocks[0] == [16118499, 16118550]);
2091
2092 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2093 assert!(blocks[0] == [16118499, 16118550]);
2095
2096 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2097 assert!(blocks[0] == [16118499, 16118550]);
2099
2100 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2101 assert!(blocks[0] == [16123411, 16123462]);
2103
2104 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2105 assert!(blocks[0] == [16123417, 16123462]);
2107
2108 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2109 assert!(blocks[0] == [16165860, 16165901]);
2111
2112 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2113 assert!(blocks[0] == [16180871, 16180922]);
2115
2116 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2117 assert!(blocks[0] == [16189705, 16189756]);
2119
2120 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2121 assert!(blocks[0] == [16231271, 16231322]);
2123
2124 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2125 assert!(blocks[0] == [16237657, 16237708]);
2127
2128 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2129 assert!(blocks[0] == [16255012, 16255054]);
2131
2132 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2133 assert!(blocks[0] == [16255391, 16255442]);
2135
2136 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2137 assert!(blocks[0] == [16255392, 16255442]);
2139
2140 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2141 assert!(blocks[0] == [16256084, 16256129]);
2143
2144 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2145 assert!(blocks[0] == [16256224, 16256272]);
2147
2148 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2149 assert!(blocks[0] == [16325199, 16325241]);
2151
2152 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2153 assert!(blocks[0] == [16352865, 16352903]);
2155
2156 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2157 assert!(blocks[0] == [16352968, 16353012]);
2159
2160 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2161 assert!(blocks[0] == [16414998, 16415044]);
2163
2164 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2165 assert!(blocks[0] == [17031591, 17031614]);
2167 assert!(blocks[1] == [17031614, 17031638]);
2169
2170 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2171 assert!(blocks[0] == [17057382, 17057400]);
2173 assert!(blocks[1] == [17057400, 17057432]);
2175
2176 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2177 assert!(blocks[0] == [17092766, 17092783]);
2179 assert!(blocks[1] == [17094966, 17095000]);
2181
2182 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2183 assert!(blocks[0] == [17092782, 17092783]);
2185 assert!(blocks[1] == [17094966, 17095016]);
2187
2188 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2189 assert!(blocks[0] == [17092782, 17092783]);
2191 assert!(blocks[1] == [17094966, 17095016]);
2193
2194 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2195 assert!(blocks[0] == [17137287, 17137320]);
2197
2198 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2199 assert!(blocks[0] == [17306238, 17306286]);
2201
2202 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2203 assert!(blocks[0] == [17561868, 17561913]);
2205
2206 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2207 assert!(blocks[0] == [17566078, 17566119]);
2209 assert!(blocks[1] == [17577951, 17577961]);
2211
2212 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2213 assert!(blocks[0] == [17566108, 17566119]);
2215 assert!(blocks[1] == [17577951, 17577976]);
2217 assert!(blocks[2] == [17578686, 17578701]);
2219
2220 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2221 assert!(blocks[0] == [17566111, 17566119]);
2223 assert!(blocks[1] == [17577951, 17577976]);
2225 assert!(blocks[2] == [17578686, 17578704]);
2227
2228 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2229 assert!(blocks[0] == [17566111, 17566119]);
2231 assert!(blocks[1] == [17577951, 17577976]);
2233 assert!(blocks[2] == [17578686, 17578704]);
2235
2236 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2237 assert!(blocks[0] == [17566111, 17566119]);
2239 assert!(blocks[1] == [17577951, 17577976]);
2241 assert!(blocks[2] == [17578686, 17578704]);
2243
2244 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2245 assert!(blocks[0] == [17566111, 17566119]);
2247 assert!(blocks[1] == [17577951, 17577976]);
2249 assert!(blocks[2] == [17578686, 17578704]);
2251
2252 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2253 assert!(blocks[0] == [17566112, 17566119]);
2255 assert!(blocks[1] == [17577951, 17577976]);
2257 assert!(blocks[2] == [17578686, 17578705]);
2259
2260 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2261 assert!(blocks[0] == [17566113, 17566119]);
2263 assert!(blocks[1] == [17577951, 17577976]);
2265 assert!(blocks[2] == [17578686, 17578706]);
2267
2268 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2269 assert!(blocks[0] == [17566113, 17566119]);
2271 assert!(blocks[1] == [17577951, 17577976]);
2273 assert!(blocks[2] == [17578686, 17578706]);
2275
2276 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2277 assert!(blocks[0] == [17579733, 17579777]);
2279 assert!(blocks[1] == [17581244, 17581250]);
2281
2282 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2283 assert!(blocks[0] == [17581369, 17581371]);
2285 assert!(blocks[1] == [17582885, 17582933]);
2287 assert!(blocks[2] == [17583028, 17583029]);
2289
2290 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2291 assert!(blocks[0] == [17581370, 17581371]);
2293 assert!(blocks[1] == [17582885, 17582933]);
2295 assert!(blocks[2] == [17583028, 17583030]);
2297
2298 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2299 assert!(blocks[0] == [17581370, 17581371]);
2301 assert!(blocks[1] == [17582885, 17582933]);
2303 assert!(blocks[2] == [17583028, 17583030]);
2305
2306 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2307 assert!(blocks[0] == [17582911, 17582933]);
2309 assert!(blocks[1] == [17583028, 17583056]);
2311
2312 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2313 assert!(blocks[0] == [17588621, 17588658]);
2315 assert!(blocks[1] == [17589196, 17589209]);
2317
2318 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2319 assert!(blocks[0] == [17588621, 17588658]);
2321 assert!(blocks[1] == [17589196, 17589209]);
2323
2324 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2325 assert!(blocks[0] == [17588621, 17588658]);
2327 assert!(blocks[1] == [17589196, 17589209]);
2329
2330 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2331 assert!(blocks[0] == [17591770, 17591795]);
2333 assert!(blocks[1] == [17591796, 17591821]);
2335
2336 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2337 assert!(blocks[0] == [17593855, 17593879]);
2339 assert!(blocks[1] == [17593880, 17593904]);
2341
2342 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2343 assert!(blocks[0] == [17593863, 17593879]);
2345 assert!(blocks[1] == [17593880, 17593908]);
2347
2348 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2349 assert!(blocks[0] == [17596476, 17596483]);
2351 assert!(blocks[1] == [17596483, 17596515]);
2353
2354 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2355 assert!(blocks[0] == [17624012, 17624021]);
2357 assert!(blocks[1] == [17625913, 17625950]);
2359
2360 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2361 assert!(blocks[0] == [17624012, 17624021]);
2363 assert!(blocks[1] == [17625913, 17625953]);
2365
2366 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2367 assert!(blocks[0] == [31796700, 31796707]);
2369 assert!(blocks[1] == [31796710, 31796729]);
2371 assert!(blocks[2] == [31799014, 31799038]);
2373
2374 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2375 assert!(blocks[0] == [36722692, 36722706]);
2377 assert!(blocks[1] == [36723505, 36723533]);
2379 assert!(blocks[2] == [36737414, 36737421]);
2381
2382 let blocks: Vec<_> = it.next().unwrap().unwrap().aligned_blocks().collect();
2383 assert!(blocks[0] == [44587963, 44587984]);
2385 assert!(blocks[1] == [44589680, 44589703]);
2387 assert!(blocks[2] == [44592034, 44592037]);
2389 }
2390
2391 #[test]
2392 fn test_introns() {
2393 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
2394 let mut it = bam.records();
2395
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(), 0);
2414 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2416 assert_eq!(introns.len(), 0);
2417 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2419 assert_eq!(introns.len(), 0);
2420 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2422 assert_eq!(introns.len(), 0);
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(), 0);
2435 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2437 assert_eq!(introns.len(), 0);
2438 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2440 assert_eq!(introns.len(), 0);
2441 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2443 assert_eq!(introns.len(), 0);
2444 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2446 assert_eq!(introns.len(), 0);
2447 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2449 assert_eq!(introns.len(), 0);
2450 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2452 assert_eq!(introns.len(), 0);
2453 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2455 assert_eq!(introns.len(), 0);
2456 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2458 assert_eq!(introns.len(), 0);
2459 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2461 assert_eq!(introns.len(), 0);
2462 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2464 assert_eq!(introns.len(), 0);
2465 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2467 assert_eq!(introns.len(), 0);
2468 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2470 assert_eq!(introns.len(), 0);
2471 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2473 assert_eq!(introns.len(), 0);
2474 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2476 assert_eq!(introns.len(), 1);
2477 assert_eq!(introns[0], [17092783, 17094966]);
2478 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2480 assert_eq!(introns.len(), 1);
2481 assert_eq!(introns[0], [17092783, 17094966]);
2482 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2484 assert_eq!(introns.len(), 1);
2485 assert_eq!(introns[0], [17092783, 17094966]);
2486 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2488 assert_eq!(introns.len(), 0);
2489 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2491 assert_eq!(introns.len(), 0);
2492 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2494 assert_eq!(introns.len(), 0);
2495 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2497 assert_eq!(introns.len(), 1);
2498 assert_eq!(introns[0], [17566119, 17577951]);
2499 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2501 assert_eq!(introns.len(), 2);
2502 assert_eq!(introns[0], [17566119, 17577951]);
2503 assert_eq!(introns[1], [17577976, 17578686]);
2504 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2506 assert_eq!(introns.len(), 2);
2507 assert_eq!(introns[0], [17566119, 17577951]);
2508 assert_eq!(introns[1], [17577976, 17578686]);
2509 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2511 assert_eq!(introns.len(), 2);
2512 assert_eq!(introns[0], [17566119, 17577951]);
2513 assert_eq!(introns[1], [17577976, 17578686]);
2514 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2516 assert_eq!(introns.len(), 2);
2517 assert_eq!(introns[0], [17566119, 17577951]);
2518 assert_eq!(introns[1], [17577976, 17578686]);
2519 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2521 assert_eq!(introns.len(), 2);
2522 assert_eq!(introns[0], [17566119, 17577951]);
2523 assert_eq!(introns[1], [17577976, 17578686]);
2524 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2526 assert_eq!(introns.len(), 2);
2527 assert_eq!(introns[0], [17566119, 17577951]);
2528 assert_eq!(introns[1], [17577976, 17578686]);
2529 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2531 assert_eq!(introns.len(), 2);
2532 assert_eq!(introns[0], [17566119, 17577951]);
2533 assert_eq!(introns[1], [17577976, 17578686]);
2534 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2536 assert_eq!(introns.len(), 2);
2537 assert_eq!(introns[0], [17566119, 17577951]);
2538 assert_eq!(introns[1], [17577976, 17578686]);
2539 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2541 assert_eq!(introns.len(), 1);
2542 assert_eq!(introns[0], [17579777, 17581244]);
2543 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2545 assert_eq!(introns.len(), 2);
2546 assert_eq!(introns[0], [17581371, 17582885]);
2547 assert_eq!(introns[1], [17582933, 17583028]);
2548 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2550 assert_eq!(introns.len(), 2);
2551 assert_eq!(introns[0], [17581371, 17582885]);
2552 assert_eq!(introns[1], [17582933, 17583028]);
2553 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2555 assert_eq!(introns.len(), 2);
2556 assert_eq!(introns[0], [17581371, 17582885]);
2557 assert_eq!(introns[1], [17582933, 17583028]);
2558 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2560 assert_eq!(introns.len(), 1);
2561 assert_eq!(introns[0], [17582933, 17583028]);
2562 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2564 assert_eq!(introns.len(), 1);
2565 assert_eq!(introns[0], [17588658, 17589196]);
2566 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2568 assert_eq!(introns.len(), 1);
2569 assert_eq!(introns[0], [17588658, 17589196]);
2570 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2572 assert_eq!(introns.len(), 1);
2573 assert_eq!(introns[0], [17588658, 17589196]);
2574 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2576 assert_eq!(introns.len(), 0);
2577 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2579 assert_eq!(introns.len(), 0);
2580 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2582 assert_eq!(introns.len(), 0);
2583 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2585 assert_eq!(introns.len(), 0);
2586 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2588 assert_eq!(introns.len(), 1);
2589 assert_eq!(introns[0], [17624021, 17625913]);
2590 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2592 assert_eq!(introns.len(), 1);
2593 assert_eq!(introns[0], [17624021, 17625913]);
2594 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2596 assert_eq!(introns.len(), 1);
2597 assert_eq!(introns[0], [31796729, 31799014]);
2598 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2600 assert_eq!(introns.len(), 2);
2601 assert_eq!(introns[0], [36722706, 36723505]);
2602 assert_eq!(introns[1], [36723533, 36737414]);
2603 let introns: Vec<_> = it.next().unwrap().unwrap().introns().collect();
2605 assert_eq!(introns.len(), 2);
2606 assert_eq!(introns[0], [44587984, 44589680]);
2607 assert_eq!(introns[1], [44589703, 44592034]);
2608 }
2609
2610 #[test]
2611 fn test_aligned_pairs() {
2612 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
2613 let mut it = bam.records();
2614
2615 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
2616 assert_eq!(
2617 pairs,
2618 vec![
2619 [6, 16050676],
2620 [7, 16050677],
2621 [8, 16050678],
2622 [9, 16050679],
2623 [10, 16050680],
2624 [11, 16050681],
2625 [12, 16050682],
2626 [13, 16050683],
2627 [14, 16050684],
2628 [15, 16050685],
2629 [16, 16050686],
2630 [17, 16050687],
2631 [18, 16050688],
2632 [19, 16050689],
2633 [20, 16050690],
2634 [21, 16050691],
2635 [22, 16050692],
2636 [23, 16050693],
2637 [24, 16050694],
2638 [25, 16050695],
2639 [26, 16050696],
2640 [27, 16050697],
2641 [28, 16050698],
2642 [29, 16050699],
2643 [30, 16050700],
2644 [31, 16050701],
2645 [32, 16050702],
2646 [33, 16050703],
2647 [34, 16050704],
2648 [35, 16050705],
2649 [36, 16050706],
2650 [37, 16050707],
2651 [38, 16050708],
2652 [39, 16050709],
2653 [40, 16050710],
2654 [41, 16050711],
2655 [42, 16050712],
2656 [43, 16050713],
2657 [44, 16050714],
2658 [45, 16050715],
2659 [46, 16050716],
2660 [47, 16050717],
2661 [48, 16050718],
2662 [49, 16050719],
2663 [50, 16050720]
2664 ]
2665 );
2666 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
2667 assert_eq!(
2668 pairs,
2669 vec![
2670 [0, 16096878],
2671 [1, 16096879],
2672 [2, 16096880],
2673 [3, 16096881],
2674 [4, 16096882],
2675 [5, 16096883],
2676 [6, 16096884],
2677 [7, 16096887],
2678 [8, 16096888],
2679 [9, 16096889],
2680 [10, 16096890],
2681 [11, 16096891],
2682 [12, 16096892],
2683 [13, 16096893],
2684 [14, 16096894],
2685 [15, 16096895],
2686 [16, 16096896],
2687 [17, 16096897],
2688 [18, 16096898],
2689 [19, 16096899],
2690 [20, 16096900],
2691 [21, 16096901],
2692 [22, 16096902],
2693 [23, 16096903],
2694 [24, 16096904],
2695 [25, 16096905],
2696 [26, 16096906],
2697 [27, 16096907],
2698 [28, 16096908],
2699 [29, 16096909],
2700 [30, 16096910],
2701 [31, 16096911],
2702 [32, 16096912],
2703 [33, 16096913],
2704 [34, 16096914],
2705 [35, 16096915],
2706 [36, 16096916],
2707 [37, 16096917],
2708 [38, 16096918],
2709 [39, 16096919],
2710 [40, 16096920],
2711 [41, 16096921],
2712 [42, 16096922],
2713 [43, 16096923],
2714 [44, 16096924],
2715 [45, 16096925],
2716 [46, 16096926],
2717 [47, 16096927],
2718 [48, 16096928],
2719 [49, 16096929],
2720 [50, 16096930]
2721 ]
2722 );
2723 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
2724 assert_eq!(
2725 pairs,
2726 vec![
2727 [0, 16097145],
2728 [1, 16097146],
2729 [2, 16097147],
2730 [3, 16097148],
2731 [4, 16097149],
2732 [5, 16097150],
2733 [6, 16097151],
2734 [7, 16097152],
2735 [8, 16097153],
2736 [9, 16097154],
2737 [10, 16097155],
2738 [11, 16097156],
2739 [12, 16097157],
2740 [13, 16097158],
2741 [14, 16097159],
2742 [15, 16097160],
2743 [16, 16097161],
2744 [17, 16097162],
2745 [18, 16097163],
2746 [19, 16097164],
2747 [20, 16097165],
2748 [21, 16097166],
2749 [22, 16097167],
2750 [23, 16097168],
2751 [24, 16097169],
2752 [25, 16097170],
2753 [26, 16097171],
2754 [27, 16097172],
2755 [28, 16097173],
2756 [29, 16097176],
2757 [30, 16097177],
2758 [31, 16097178],
2759 [32, 16097179],
2760 [33, 16097180],
2761 [34, 16097181],
2762 [35, 16097182],
2763 [36, 16097183],
2764 [37, 16097184],
2765 [38, 16097185],
2766 [39, 16097186],
2767 [40, 16097187],
2768 [41, 16097188],
2769 [42, 16097189],
2770 [43, 16097190],
2771 [44, 16097191],
2772 [45, 16097192],
2773 [46, 16097193],
2774 [47, 16097194],
2775 [48, 16097195],
2776 [49, 16097196],
2777 [50, 16097197]
2778 ]
2779 );
2780 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
2781 assert_eq!(
2782 pairs,
2783 vec![
2784 [0, 16117350],
2785 [1, 16117351],
2786 [2, 16117352],
2787 [3, 16117353],
2788 [4, 16117354],
2789 [5, 16117355],
2790 [6, 16117356],
2791 [7, 16117357],
2792 [8, 16117358],
2793 [9, 16117359],
2794 [10, 16117360],
2795 [11, 16117361],
2796 [12, 16117362],
2797 [13, 16117363],
2798 [14, 16117364],
2799 [15, 16117365],
2800 [16, 16117366],
2801 [17, 16117367],
2802 [18, 16117368],
2803 [19, 16117369],
2804 [20, 16117370],
2805 [21, 16117371],
2806 [22, 16117372],
2807 [23, 16117373],
2808 [24, 16117374],
2809 [25, 16117375],
2810 [26, 16117376],
2811 [27, 16117377],
2812 [28, 16117378],
2813 [29, 16117379],
2814 [30, 16117380],
2815 [31, 16117381],
2816 [32, 16117382],
2817 [33, 16117383],
2818 [34, 16117384],
2819 [35, 16117385],
2820 [36, 16117386],
2821 [37, 16117387],
2822 [38, 16117388],
2823 [39, 16117389],
2824 [40, 16117390],
2825 [41, 16117391],
2826 [42, 16117392],
2827 [43, 16117393],
2828 [44, 16117394],
2829 [45, 16117395],
2830 [46, 16117396],
2831 [47, 16117397],
2832 [48, 16117398],
2833 [49, 16117399],
2834 [50, 16117400]
2835 ]
2836 );
2837 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
2838 assert_eq!(
2839 pairs,
2840 vec![
2841 [0, 16118483],
2842 [1, 16118484],
2843 [2, 16118485],
2844 [3, 16118486],
2845 [4, 16118487],
2846 [5, 16118488],
2847 [6, 16118489],
2848 [7, 16118490],
2849 [8, 16118491],
2850 [9, 16118492],
2851 [10, 16118493],
2852 [11, 16118494],
2853 [12, 16118495],
2854 [13, 16118496],
2855 [14, 16118497],
2856 [15, 16118498],
2857 [16, 16118499],
2858 [17, 16118500],
2859 [18, 16118501],
2860 [19, 16118502],
2861 [20, 16118503],
2862 [21, 16118504],
2863 [22, 16118505],
2864 [23, 16118506],
2865 [24, 16118507],
2866 [25, 16118508],
2867 [26, 16118509],
2868 [27, 16118510],
2869 [28, 16118511],
2870 [29, 16118512],
2871 [30, 16118513],
2872 [31, 16118514],
2873 [32, 16118515],
2874 [33, 16118516],
2875 [34, 16118517],
2876 [35, 16118518],
2877 [36, 16118519],
2878 [37, 16118520],
2879 [38, 16118521],
2880 [39, 16118522],
2881 [40, 16118523],
2882 [41, 16118524],
2883 [42, 16118525],
2884 [43, 16118526],
2885 [44, 16118527],
2886 [45, 16118528],
2887 [46, 16118529],
2888 [47, 16118530],
2889 [48, 16118531],
2890 [49, 16118532],
2891 [50, 16118533]
2892 ]
2893 );
2894 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
2895 assert_eq!(
2896 pairs,
2897 vec![
2898 [0, 16118499],
2899 [1, 16118500],
2900 [2, 16118501],
2901 [3, 16118502],
2902 [4, 16118503],
2903 [5, 16118504],
2904 [6, 16118505],
2905 [7, 16118506],
2906 [8, 16118507],
2907 [9, 16118508],
2908 [10, 16118509],
2909 [11, 16118510],
2910 [12, 16118511],
2911 [13, 16118512],
2912 [14, 16118513],
2913 [15, 16118514],
2914 [16, 16118515],
2915 [17, 16118516],
2916 [18, 16118517],
2917 [19, 16118518],
2918 [20, 16118519],
2919 [21, 16118520],
2920 [22, 16118521],
2921 [23, 16118522],
2922 [24, 16118523],
2923 [25, 16118524],
2924 [26, 16118525],
2925 [27, 16118526],
2926 [28, 16118527],
2927 [29, 16118528],
2928 [30, 16118529],
2929 [31, 16118530],
2930 [32, 16118531],
2931 [33, 16118532],
2932 [34, 16118533],
2933 [35, 16118534],
2934 [36, 16118535],
2935 [37, 16118536],
2936 [38, 16118537],
2937 [39, 16118538],
2938 [40, 16118539],
2939 [41, 16118540],
2940 [42, 16118541],
2941 [43, 16118542],
2942 [44, 16118543],
2943 [45, 16118544],
2944 [46, 16118545],
2945 [47, 16118546],
2946 [48, 16118547],
2947 [49, 16118548],
2948 [50, 16118549]
2949 ]
2950 );
2951 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
2952 assert_eq!(
2953 pairs,
2954 vec![
2955 [0, 16118499],
2956 [1, 16118500],
2957 [2, 16118501],
2958 [3, 16118502],
2959 [4, 16118503],
2960 [5, 16118504],
2961 [6, 16118505],
2962 [7, 16118506],
2963 [8, 16118507],
2964 [9, 16118508],
2965 [10, 16118509],
2966 [11, 16118510],
2967 [12, 16118511],
2968 [13, 16118512],
2969 [14, 16118513],
2970 [15, 16118514],
2971 [16, 16118515],
2972 [17, 16118516],
2973 [18, 16118517],
2974 [19, 16118518],
2975 [20, 16118519],
2976 [21, 16118520],
2977 [22, 16118521],
2978 [23, 16118522],
2979 [24, 16118523],
2980 [25, 16118524],
2981 [26, 16118525],
2982 [27, 16118526],
2983 [28, 16118527],
2984 [29, 16118528],
2985 [30, 16118529],
2986 [31, 16118530],
2987 [32, 16118531],
2988 [33, 16118532],
2989 [34, 16118533],
2990 [35, 16118534],
2991 [36, 16118535],
2992 [37, 16118536],
2993 [38, 16118537],
2994 [39, 16118538],
2995 [40, 16118539],
2996 [41, 16118540],
2997 [42, 16118541],
2998 [43, 16118542],
2999 [44, 16118543],
3000 [45, 16118544],
3001 [46, 16118545],
3002 [47, 16118546],
3003 [48, 16118547],
3004 [49, 16118548],
3005 [50, 16118549]
3006 ]
3007 );
3008 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3009 assert_eq!(
3010 pairs,
3011 vec![
3012 [0, 16118499],
3013 [1, 16118500],
3014 [2, 16118501],
3015 [3, 16118502],
3016 [4, 16118503],
3017 [5, 16118504],
3018 [6, 16118505],
3019 [7, 16118506],
3020 [8, 16118507],
3021 [9, 16118508],
3022 [10, 16118509],
3023 [11, 16118510],
3024 [12, 16118511],
3025 [13, 16118512],
3026 [14, 16118513],
3027 [15, 16118514],
3028 [16, 16118515],
3029 [17, 16118516],
3030 [18, 16118517],
3031 [19, 16118518],
3032 [20, 16118519],
3033 [21, 16118520],
3034 [22, 16118521],
3035 [23, 16118522],
3036 [24, 16118523],
3037 [25, 16118524],
3038 [26, 16118525],
3039 [27, 16118526],
3040 [28, 16118527],
3041 [29, 16118528],
3042 [30, 16118529],
3043 [31, 16118530],
3044 [32, 16118531],
3045 [33, 16118532],
3046 [34, 16118533],
3047 [35, 16118534],
3048 [36, 16118535],
3049 [37, 16118536],
3050 [38, 16118537],
3051 [39, 16118538],
3052 [40, 16118539],
3053 [41, 16118540],
3054 [42, 16118541],
3055 [43, 16118542],
3056 [44, 16118543],
3057 [45, 16118544],
3058 [46, 16118545],
3059 [47, 16118546],
3060 [48, 16118547],
3061 [49, 16118548],
3062 [50, 16118549]
3063 ]
3064 );
3065 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3066 assert_eq!(
3067 pairs,
3068 vec![
3069 [0, 16123411],
3070 [1, 16123412],
3071 [2, 16123413],
3072 [3, 16123414],
3073 [4, 16123415],
3074 [5, 16123416],
3075 [6, 16123417],
3076 [7, 16123418],
3077 [8, 16123419],
3078 [9, 16123420],
3079 [10, 16123421],
3080 [11, 16123422],
3081 [12, 16123423],
3082 [13, 16123424],
3083 [14, 16123425],
3084 [15, 16123426],
3085 [16, 16123427],
3086 [17, 16123428],
3087 [18, 16123429],
3088 [19, 16123430],
3089 [20, 16123431],
3090 [21, 16123432],
3091 [22, 16123433],
3092 [23, 16123434],
3093 [24, 16123435],
3094 [25, 16123436],
3095 [26, 16123437],
3096 [27, 16123438],
3097 [28, 16123439],
3098 [29, 16123440],
3099 [30, 16123441],
3100 [31, 16123442],
3101 [32, 16123443],
3102 [33, 16123444],
3103 [34, 16123445],
3104 [35, 16123446],
3105 [36, 16123447],
3106 [37, 16123448],
3107 [38, 16123449],
3108 [39, 16123450],
3109 [40, 16123451],
3110 [41, 16123452],
3111 [42, 16123453],
3112 [43, 16123454],
3113 [44, 16123455],
3114 [45, 16123456],
3115 [46, 16123457],
3116 [47, 16123458],
3117 [48, 16123459],
3118 [49, 16123460],
3119 [50, 16123461]
3120 ]
3121 );
3122 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3123 assert_eq!(
3124 pairs,
3125 vec![
3126 [6, 16123417],
3127 [7, 16123418],
3128 [8, 16123419],
3129 [9, 16123420],
3130 [10, 16123421],
3131 [11, 16123422],
3132 [12, 16123423],
3133 [13, 16123424],
3134 [14, 16123425],
3135 [15, 16123426],
3136 [16, 16123427],
3137 [17, 16123428],
3138 [18, 16123429],
3139 [19, 16123430],
3140 [20, 16123431],
3141 [21, 16123432],
3142 [22, 16123433],
3143 [23, 16123434],
3144 [24, 16123435],
3145 [25, 16123436],
3146 [26, 16123437],
3147 [27, 16123438],
3148 [28, 16123439],
3149 [29, 16123440],
3150 [30, 16123441],
3151 [31, 16123442],
3152 [32, 16123443],
3153 [33, 16123444],
3154 [34, 16123445],
3155 [35, 16123446],
3156 [36, 16123447],
3157 [37, 16123448],
3158 [38, 16123449],
3159 [39, 16123450],
3160 [40, 16123451],
3161 [41, 16123452],
3162 [42, 16123453],
3163 [43, 16123454],
3164 [44, 16123455],
3165 [45, 16123456],
3166 [46, 16123457],
3167 [47, 16123458],
3168 [48, 16123459],
3169 [49, 16123460],
3170 [50, 16123461]
3171 ]
3172 );
3173 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3174 assert_eq!(
3175 pairs,
3176 vec![
3177 [0, 16165860],
3178 [1, 16165861],
3179 [2, 16165862],
3180 [3, 16165863],
3181 [4, 16165864],
3182 [5, 16165865],
3183 [6, 16165866],
3184 [7, 16165867],
3185 [8, 16165868],
3186 [9, 16165869],
3187 [10, 16165870],
3188 [11, 16165871],
3189 [12, 16165872],
3190 [13, 16165873],
3191 [14, 16165874],
3192 [15, 16165875],
3193 [16, 16165876],
3194 [17, 16165877],
3195 [18, 16165878],
3196 [19, 16165879],
3197 [20, 16165880],
3198 [21, 16165881],
3199 [22, 16165882],
3200 [23, 16165883],
3201 [24, 16165884],
3202 [25, 16165885],
3203 [26, 16165886],
3204 [27, 16165887],
3205 [28, 16165888],
3206 [29, 16165889],
3207 [30, 16165890],
3208 [31, 16165891],
3209 [32, 16165892],
3210 [33, 16165893],
3211 [34, 16165894],
3212 [35, 16165895],
3213 [36, 16165896],
3214 [37, 16165897],
3215 [38, 16165898],
3216 [39, 16165899],
3217 [40, 16165900]
3218 ]
3219 );
3220 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3221 assert_eq!(
3222 pairs,
3223 vec![
3224 [0, 16180871],
3225 [1, 16180872],
3226 [2, 16180873],
3227 [3, 16180874],
3228 [4, 16180875],
3229 [5, 16180876],
3230 [6, 16180877],
3231 [7, 16180878],
3232 [8, 16180879],
3233 [9, 16180880],
3234 [10, 16180881],
3235 [11, 16180882],
3236 [12, 16180883],
3237 [13, 16180884],
3238 [14, 16180885],
3239 [15, 16180886],
3240 [16, 16180887],
3241 [17, 16180888],
3242 [18, 16180889],
3243 [19, 16180890],
3244 [20, 16180891],
3245 [21, 16180892],
3246 [22, 16180893],
3247 [23, 16180894],
3248 [24, 16180895],
3249 [25, 16180896],
3250 [26, 16180897],
3251 [27, 16180898],
3252 [28, 16180899],
3253 [29, 16180900],
3254 [30, 16180901],
3255 [31, 16180902],
3256 [32, 16180903],
3257 [33, 16180904],
3258 [34, 16180905],
3259 [35, 16180906],
3260 [36, 16180907],
3261 [37, 16180908],
3262 [38, 16180909],
3263 [39, 16180910],
3264 [40, 16180911],
3265 [41, 16180912],
3266 [42, 16180913],
3267 [43, 16180914],
3268 [44, 16180915],
3269 [45, 16180916],
3270 [46, 16180917],
3271 [47, 16180918],
3272 [48, 16180919],
3273 [49, 16180920],
3274 [50, 16180921]
3275 ]
3276 );
3277 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3278 assert_eq!(
3279 pairs,
3280 vec![
3281 [0, 16189705],
3282 [1, 16189706],
3283 [2, 16189707],
3284 [3, 16189708],
3285 [4, 16189709],
3286 [5, 16189710],
3287 [6, 16189711],
3288 [7, 16189712],
3289 [8, 16189713],
3290 [9, 16189714],
3291 [10, 16189715],
3292 [11, 16189716],
3293 [12, 16189717],
3294 [13, 16189718],
3295 [14, 16189719],
3296 [15, 16189720],
3297 [16, 16189721],
3298 [17, 16189722],
3299 [18, 16189723],
3300 [19, 16189724],
3301 [20, 16189725],
3302 [21, 16189726],
3303 [22, 16189727],
3304 [23, 16189728],
3305 [24, 16189729],
3306 [25, 16189730],
3307 [26, 16189731],
3308 [27, 16189732],
3309 [28, 16189733],
3310 [29, 16189734],
3311 [30, 16189735],
3312 [31, 16189736],
3313 [32, 16189737],
3314 [33, 16189738],
3315 [34, 16189739],
3316 [35, 16189740],
3317 [36, 16189741],
3318 [37, 16189742],
3319 [38, 16189743],
3320 [39, 16189744],
3321 [40, 16189745],
3322 [41, 16189746],
3323 [42, 16189747],
3324 [43, 16189748],
3325 [44, 16189749],
3326 [45, 16189750],
3327 [46, 16189751],
3328 [47, 16189752],
3329 [48, 16189753],
3330 [49, 16189754],
3331 [50, 16189755]
3332 ]
3333 );
3334 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3335 assert_eq!(
3336 pairs,
3337 vec![
3338 [0, 16231271],
3339 [1, 16231272],
3340 [2, 16231273],
3341 [3, 16231274],
3342 [4, 16231275],
3343 [5, 16231276],
3344 [6, 16231277],
3345 [7, 16231278],
3346 [8, 16231279],
3347 [9, 16231280],
3348 [10, 16231281],
3349 [11, 16231282],
3350 [12, 16231283],
3351 [13, 16231284],
3352 [14, 16231285],
3353 [15, 16231286],
3354 [16, 16231287],
3355 [17, 16231288],
3356 [18, 16231289],
3357 [19, 16231290],
3358 [20, 16231291],
3359 [21, 16231292],
3360 [22, 16231293],
3361 [23, 16231294],
3362 [24, 16231295],
3363 [25, 16231296],
3364 [26, 16231297],
3365 [27, 16231298],
3366 [28, 16231299],
3367 [29, 16231300],
3368 [30, 16231301],
3369 [31, 16231302],
3370 [32, 16231303],
3371 [33, 16231304],
3372 [34, 16231305],
3373 [35, 16231306],
3374 [36, 16231307],
3375 [37, 16231308],
3376 [38, 16231309],
3377 [39, 16231310],
3378 [40, 16231311],
3379 [41, 16231312],
3380 [42, 16231313],
3381 [43, 16231314],
3382 [44, 16231315],
3383 [45, 16231316],
3384 [46, 16231317],
3385 [47, 16231318],
3386 [48, 16231319],
3387 [49, 16231320],
3388 [50, 16231321]
3389 ]
3390 );
3391 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3392 assert_eq!(
3393 pairs,
3394 vec![
3395 [0, 16237657],
3396 [1, 16237658],
3397 [2, 16237659],
3398 [3, 16237660],
3399 [4, 16237661],
3400 [5, 16237662],
3401 [6, 16237663],
3402 [7, 16237664],
3403 [8, 16237665],
3404 [9, 16237666],
3405 [10, 16237667],
3406 [11, 16237668],
3407 [12, 16237669],
3408 [13, 16237670],
3409 [14, 16237671],
3410 [15, 16237672],
3411 [16, 16237673],
3412 [17, 16237674],
3413 [18, 16237675],
3414 [19, 16237676],
3415 [20, 16237677],
3416 [21, 16237678],
3417 [22, 16237679],
3418 [23, 16237680],
3419 [24, 16237681],
3420 [25, 16237682],
3421 [26, 16237683],
3422 [27, 16237684],
3423 [28, 16237685],
3424 [29, 16237686],
3425 [30, 16237687],
3426 [31, 16237688],
3427 [32, 16237689],
3428 [33, 16237690],
3429 [34, 16237691],
3430 [35, 16237692],
3431 [36, 16237693],
3432 [37, 16237694],
3433 [38, 16237695],
3434 [39, 16237696],
3435 [40, 16237697],
3436 [41, 16237698],
3437 [42, 16237699],
3438 [43, 16237700],
3439 [44, 16237701],
3440 [45, 16237702],
3441 [46, 16237703],
3442 [47, 16237704],
3443 [48, 16237705],
3444 [49, 16237706],
3445 [50, 16237707]
3446 ]
3447 );
3448 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3449 assert_eq!(
3450 pairs,
3451 vec![
3452 [9, 16255012],
3453 [10, 16255013],
3454 [11, 16255014],
3455 [12, 16255015],
3456 [13, 16255016],
3457 [14, 16255017],
3458 [15, 16255018],
3459 [16, 16255019],
3460 [17, 16255020],
3461 [18, 16255021],
3462 [19, 16255022],
3463 [20, 16255023],
3464 [21, 16255024],
3465 [22, 16255025],
3466 [23, 16255026],
3467 [24, 16255027],
3468 [25, 16255028],
3469 [26, 16255029],
3470 [27, 16255030],
3471 [28, 16255031],
3472 [29, 16255032],
3473 [30, 16255033],
3474 [31, 16255034],
3475 [32, 16255035],
3476 [33, 16255036],
3477 [34, 16255037],
3478 [35, 16255038],
3479 [36, 16255039],
3480 [37, 16255040],
3481 [38, 16255041],
3482 [39, 16255042],
3483 [40, 16255043],
3484 [41, 16255044],
3485 [42, 16255045],
3486 [43, 16255046],
3487 [44, 16255047],
3488 [45, 16255048],
3489 [46, 16255049],
3490 [47, 16255050],
3491 [48, 16255051],
3492 [49, 16255052],
3493 [50, 16255053]
3494 ]
3495 );
3496 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3497 assert_eq!(
3498 pairs,
3499 vec![
3500 [0, 16255391],
3501 [1, 16255392],
3502 [2, 16255393],
3503 [3, 16255394],
3504 [4, 16255395],
3505 [5, 16255396],
3506 [6, 16255397],
3507 [7, 16255398],
3508 [8, 16255399],
3509 [9, 16255400],
3510 [10, 16255401],
3511 [11, 16255402],
3512 [12, 16255403],
3513 [13, 16255404],
3514 [14, 16255405],
3515 [15, 16255406],
3516 [16, 16255407],
3517 [17, 16255408],
3518 [18, 16255409],
3519 [19, 16255410],
3520 [20, 16255411],
3521 [21, 16255412],
3522 [22, 16255413],
3523 [23, 16255414],
3524 [24, 16255415],
3525 [25, 16255416],
3526 [26, 16255417],
3527 [27, 16255418],
3528 [28, 16255419],
3529 [29, 16255420],
3530 [30, 16255421],
3531 [31, 16255422],
3532 [32, 16255423],
3533 [33, 16255424],
3534 [34, 16255425],
3535 [35, 16255426],
3536 [36, 16255427],
3537 [37, 16255428],
3538 [38, 16255429],
3539 [39, 16255430],
3540 [40, 16255431],
3541 [41, 16255432],
3542 [42, 16255433],
3543 [43, 16255434],
3544 [44, 16255435],
3545 [45, 16255436],
3546 [46, 16255437],
3547 [47, 16255438],
3548 [48, 16255439],
3549 [49, 16255440],
3550 [50, 16255441]
3551 ]
3552 );
3553 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3554 assert_eq!(
3555 pairs,
3556 vec![
3557 [0, 16255392],
3558 [1, 16255393],
3559 [2, 16255394],
3560 [3, 16255395],
3561 [4, 16255396],
3562 [5, 16255397],
3563 [6, 16255398],
3564 [7, 16255399],
3565 [8, 16255400],
3566 [9, 16255401],
3567 [10, 16255402],
3568 [11, 16255403],
3569 [12, 16255404],
3570 [13, 16255405],
3571 [14, 16255406],
3572 [15, 16255407],
3573 [16, 16255408],
3574 [17, 16255409],
3575 [18, 16255410],
3576 [19, 16255411],
3577 [20, 16255412],
3578 [21, 16255413],
3579 [22, 16255414],
3580 [23, 16255415],
3581 [24, 16255416],
3582 [25, 16255417],
3583 [26, 16255418],
3584 [27, 16255419],
3585 [28, 16255420],
3586 [29, 16255421],
3587 [30, 16255422],
3588 [31, 16255423],
3589 [32, 16255424],
3590 [33, 16255425],
3591 [34, 16255426],
3592 [35, 16255427],
3593 [36, 16255428],
3594 [37, 16255429],
3595 [38, 16255430],
3596 [39, 16255431],
3597 [40, 16255432],
3598 [41, 16255433],
3599 [42, 16255434],
3600 [43, 16255435],
3601 [44, 16255436],
3602 [45, 16255437],
3603 [46, 16255438],
3604 [47, 16255439],
3605 [48, 16255440],
3606 [49, 16255441]
3607 ]
3608 );
3609 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3610 assert_eq!(
3611 pairs,
3612 vec![
3613 [0, 16256084],
3614 [1, 16256085],
3615 [2, 16256086],
3616 [3, 16256087],
3617 [4, 16256088],
3618 [5, 16256089],
3619 [6, 16256090],
3620 [7, 16256091],
3621 [8, 16256092],
3622 [9, 16256093],
3623 [10, 16256094],
3624 [11, 16256095],
3625 [12, 16256096],
3626 [13, 16256097],
3627 [14, 16256098],
3628 [15, 16256099],
3629 [16, 16256100],
3630 [17, 16256101],
3631 [18, 16256102],
3632 [19, 16256103],
3633 [20, 16256104],
3634 [21, 16256105],
3635 [22, 16256106],
3636 [23, 16256107],
3637 [24, 16256108],
3638 [25, 16256109],
3639 [26, 16256110],
3640 [27, 16256111],
3641 [28, 16256112],
3642 [29, 16256113],
3643 [30, 16256114],
3644 [31, 16256115],
3645 [32, 16256116],
3646 [33, 16256117],
3647 [34, 16256118],
3648 [35, 16256119],
3649 [36, 16256120],
3650 [37, 16256121],
3651 [38, 16256122],
3652 [39, 16256123],
3653 [40, 16256124],
3654 [41, 16256125],
3655 [42, 16256126],
3656 [43, 16256127],
3657 [44, 16256128]
3658 ]
3659 );
3660 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3661 assert_eq!(
3662 pairs,
3663 vec![
3664 [3, 16256224],
3665 [4, 16256225],
3666 [5, 16256226],
3667 [6, 16256227],
3668 [7, 16256228],
3669 [8, 16256229],
3670 [9, 16256230],
3671 [10, 16256231],
3672 [11, 16256232],
3673 [12, 16256233],
3674 [13, 16256234],
3675 [14, 16256235],
3676 [15, 16256236],
3677 [16, 16256237],
3678 [17, 16256238],
3679 [18, 16256239],
3680 [19, 16256240],
3681 [20, 16256241],
3682 [21, 16256242],
3683 [22, 16256243],
3684 [23, 16256244],
3685 [24, 16256245],
3686 [25, 16256246],
3687 [26, 16256247],
3688 [27, 16256248],
3689 [28, 16256249],
3690 [29, 16256250],
3691 [30, 16256251],
3692 [31, 16256252],
3693 [32, 16256253],
3694 [33, 16256254],
3695 [34, 16256255],
3696 [35, 16256256],
3697 [36, 16256257],
3698 [37, 16256258],
3699 [38, 16256259],
3700 [39, 16256260],
3701 [40, 16256261],
3702 [41, 16256262],
3703 [42, 16256263],
3704 [43, 16256264],
3705 [44, 16256265],
3706 [45, 16256266],
3707 [46, 16256267],
3708 [47, 16256268],
3709 [48, 16256269],
3710 [49, 16256270],
3711 [50, 16256271]
3712 ]
3713 );
3714 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3715 assert_eq!(
3716 pairs,
3717 vec![
3718 [0, 16325199],
3719 [1, 16325200],
3720 [2, 16325201],
3721 [3, 16325202],
3722 [4, 16325203],
3723 [5, 16325204],
3724 [6, 16325205],
3725 [7, 16325206],
3726 [8, 16325207],
3727 [9, 16325208],
3728 [10, 16325209],
3729 [11, 16325210],
3730 [12, 16325211],
3731 [13, 16325212],
3732 [14, 16325213],
3733 [15, 16325214],
3734 [16, 16325215],
3735 [17, 16325216],
3736 [18, 16325217],
3737 [19, 16325218],
3738 [20, 16325219],
3739 [21, 16325220],
3740 [22, 16325221],
3741 [23, 16325222],
3742 [24, 16325223],
3743 [25, 16325224],
3744 [26, 16325225],
3745 [27, 16325226],
3746 [28, 16325227],
3747 [29, 16325228],
3748 [30, 16325229],
3749 [31, 16325230],
3750 [32, 16325231],
3751 [33, 16325232],
3752 [34, 16325233],
3753 [35, 16325234],
3754 [36, 16325235],
3755 [37, 16325236],
3756 [38, 16325237],
3757 [39, 16325238],
3758 [40, 16325239],
3759 [41, 16325240]
3760 ]
3761 );
3762 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3763 assert_eq!(
3764 pairs,
3765 vec![
3766 [13, 16352865],
3767 [14, 16352866],
3768 [15, 16352867],
3769 [16, 16352868],
3770 [17, 16352869],
3771 [18, 16352870],
3772 [19, 16352871],
3773 [20, 16352872],
3774 [21, 16352873],
3775 [22, 16352874],
3776 [23, 16352875],
3777 [24, 16352876],
3778 [25, 16352877],
3779 [26, 16352878],
3780 [27, 16352879],
3781 [28, 16352880],
3782 [29, 16352881],
3783 [30, 16352882],
3784 [31, 16352883],
3785 [32, 16352884],
3786 [33, 16352885],
3787 [34, 16352886],
3788 [35, 16352887],
3789 [36, 16352888],
3790 [37, 16352889],
3791 [38, 16352890],
3792 [39, 16352891],
3793 [40, 16352892],
3794 [41, 16352893],
3795 [42, 16352894],
3796 [43, 16352895],
3797 [44, 16352896],
3798 [45, 16352897],
3799 [46, 16352898],
3800 [47, 16352899],
3801 [48, 16352900],
3802 [49, 16352901],
3803 [50, 16352902]
3804 ]
3805 );
3806 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3807 assert_eq!(
3808 pairs,
3809 vec![
3810 [0, 16352968],
3811 [1, 16352969],
3812 [2, 16352970],
3813 [3, 16352971],
3814 [4, 16352972],
3815 [5, 16352973],
3816 [6, 16352974],
3817 [7, 16352975],
3818 [8, 16352976],
3819 [9, 16352977],
3820 [10, 16352978],
3821 [11, 16352979],
3822 [12, 16352980],
3823 [13, 16352981],
3824 [14, 16352982],
3825 [15, 16352983],
3826 [16, 16352984],
3827 [17, 16352985],
3828 [18, 16352986],
3829 [19, 16352987],
3830 [20, 16352988],
3831 [21, 16352989],
3832 [22, 16352990],
3833 [23, 16352991],
3834 [24, 16352992],
3835 [25, 16352993],
3836 [26, 16352994],
3837 [27, 16352995],
3838 [28, 16352996],
3839 [29, 16352997],
3840 [30, 16352998],
3841 [31, 16352999],
3842 [32, 16353000],
3843 [33, 16353001],
3844 [34, 16353002],
3845 [35, 16353003],
3846 [36, 16353004],
3847 [37, 16353005],
3848 [38, 16353006],
3849 [39, 16353007],
3850 [40, 16353008],
3851 [41, 16353009],
3852 [42, 16353010],
3853 [43, 16353011]
3854 ]
3855 );
3856 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3857 assert_eq!(
3858 pairs,
3859 vec![
3860 [5, 16414998],
3861 [6, 16414999],
3862 [7, 16415000],
3863 [8, 16415001],
3864 [9, 16415002],
3865 [10, 16415003],
3866 [11, 16415004],
3867 [12, 16415005],
3868 [13, 16415006],
3869 [14, 16415007],
3870 [15, 16415008],
3871 [16, 16415009],
3872 [17, 16415010],
3873 [18, 16415011],
3874 [19, 16415012],
3875 [20, 16415013],
3876 [21, 16415014],
3877 [22, 16415015],
3878 [23, 16415016],
3879 [24, 16415017],
3880 [25, 16415018],
3881 [26, 16415019],
3882 [27, 16415020],
3883 [28, 16415021],
3884 [29, 16415022],
3885 [30, 16415023],
3886 [31, 16415024],
3887 [32, 16415025],
3888 [33, 16415026],
3889 [34, 16415027],
3890 [35, 16415028],
3891 [36, 16415029],
3892 [37, 16415030],
3893 [38, 16415031],
3894 [39, 16415032],
3895 [40, 16415033],
3896 [41, 16415034],
3897 [42, 16415035],
3898 [43, 16415036],
3899 [44, 16415037],
3900 [45, 16415038],
3901 [46, 16415039],
3902 [47, 16415040],
3903 [48, 16415041],
3904 [49, 16415042],
3905 [50, 16415043]
3906 ]
3907 );
3908 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3909 assert_eq!(
3910 pairs,
3911 vec![
3912 [0, 17031591],
3913 [1, 17031592],
3914 [2, 17031593],
3915 [3, 17031594],
3916 [4, 17031595],
3917 [5, 17031596],
3918 [6, 17031597],
3919 [7, 17031598],
3920 [8, 17031599],
3921 [9, 17031600],
3922 [10, 17031601],
3923 [11, 17031602],
3924 [12, 17031603],
3925 [13, 17031604],
3926 [14, 17031605],
3927 [15, 17031606],
3928 [16, 17031607],
3929 [17, 17031608],
3930 [18, 17031609],
3931 [19, 17031610],
3932 [20, 17031611],
3933 [21, 17031612],
3934 [22, 17031613],
3935 [27, 17031614],
3936 [28, 17031615],
3937 [29, 17031616],
3938 [30, 17031617],
3939 [31, 17031618],
3940 [32, 17031619],
3941 [33, 17031620],
3942 [34, 17031621],
3943 [35, 17031622],
3944 [36, 17031623],
3945 [37, 17031624],
3946 [38, 17031625],
3947 [39, 17031626],
3948 [40, 17031627],
3949 [41, 17031628],
3950 [42, 17031629],
3951 [43, 17031630],
3952 [44, 17031631],
3953 [45, 17031632],
3954 [46, 17031633],
3955 [47, 17031634],
3956 [48, 17031635],
3957 [49, 17031636],
3958 [50, 17031637]
3959 ]
3960 );
3961 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
3962 assert_eq!(
3963 pairs,
3964 vec![
3965 [0, 17057382],
3966 [1, 17057383],
3967 [2, 17057384],
3968 [3, 17057385],
3969 [4, 17057386],
3970 [5, 17057387],
3971 [6, 17057388],
3972 [7, 17057389],
3973 [8, 17057390],
3974 [9, 17057391],
3975 [10, 17057392],
3976 [11, 17057393],
3977 [12, 17057394],
3978 [13, 17057395],
3979 [14, 17057396],
3980 [15, 17057397],
3981 [16, 17057398],
3982 [17, 17057399],
3983 [19, 17057400],
3984 [20, 17057401],
3985 [21, 17057402],
3986 [22, 17057403],
3987 [23, 17057404],
3988 [24, 17057405],
3989 [25, 17057406],
3990 [26, 17057407],
3991 [27, 17057408],
3992 [28, 17057409],
3993 [29, 17057410],
3994 [30, 17057411],
3995 [31, 17057412],
3996 [32, 17057413],
3997 [33, 17057414],
3998 [34, 17057415],
3999 [35, 17057416],
4000 [36, 17057417],
4001 [37, 17057418],
4002 [38, 17057419],
4003 [39, 17057420],
4004 [40, 17057421],
4005 [41, 17057422],
4006 [42, 17057423],
4007 [43, 17057424],
4008 [44, 17057425],
4009 [45, 17057426],
4010 [46, 17057427],
4011 [47, 17057428],
4012 [48, 17057429],
4013 [49, 17057430],
4014 [50, 17057431]
4015 ]
4016 );
4017 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4018 assert_eq!(
4019 pairs,
4020 vec![
4021 [0, 17092766],
4022 [1, 17092767],
4023 [2, 17092768],
4024 [3, 17092769],
4025 [4, 17092770],
4026 [5, 17092771],
4027 [6, 17092772],
4028 [7, 17092773],
4029 [8, 17092774],
4030 [9, 17092775],
4031 [10, 17092776],
4032 [11, 17092777],
4033 [12, 17092778],
4034 [13, 17092779],
4035 [14, 17092780],
4036 [15, 17092781],
4037 [16, 17092782],
4038 [17, 17094966],
4039 [18, 17094967],
4040 [19, 17094968],
4041 [20, 17094969],
4042 [21, 17094970],
4043 [22, 17094971],
4044 [23, 17094972],
4045 [24, 17094973],
4046 [25, 17094974],
4047 [26, 17094975],
4048 [27, 17094976],
4049 [28, 17094977],
4050 [29, 17094978],
4051 [30, 17094979],
4052 [31, 17094980],
4053 [32, 17094981],
4054 [33, 17094982],
4055 [34, 17094983],
4056 [35, 17094984],
4057 [36, 17094985],
4058 [37, 17094986],
4059 [38, 17094987],
4060 [39, 17094988],
4061 [40, 17094989],
4062 [41, 17094990],
4063 [42, 17094991],
4064 [43, 17094992],
4065 [44, 17094993],
4066 [45, 17094994],
4067 [46, 17094995],
4068 [47, 17094996],
4069 [48, 17094997],
4070 [49, 17094998],
4071 [50, 17094999]
4072 ]
4073 );
4074 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4075 assert_eq!(
4076 pairs,
4077 vec![
4078 [0, 17092782],
4079 [1, 17094966],
4080 [2, 17094967],
4081 [3, 17094968],
4082 [4, 17094969],
4083 [5, 17094970],
4084 [6, 17094971],
4085 [7, 17094972],
4086 [8, 17094973],
4087 [9, 17094974],
4088 [10, 17094975],
4089 [11, 17094976],
4090 [12, 17094977],
4091 [13, 17094978],
4092 [14, 17094979],
4093 [15, 17094980],
4094 [16, 17094981],
4095 [17, 17094982],
4096 [18, 17094983],
4097 [19, 17094984],
4098 [20, 17094985],
4099 [21, 17094986],
4100 [22, 17094987],
4101 [23, 17094988],
4102 [24, 17094989],
4103 [25, 17094990],
4104 [26, 17094991],
4105 [27, 17094992],
4106 [28, 17094993],
4107 [29, 17094994],
4108 [30, 17094995],
4109 [31, 17094996],
4110 [32, 17094997],
4111 [33, 17094998],
4112 [34, 17094999],
4113 [35, 17095000],
4114 [36, 17095001],
4115 [37, 17095002],
4116 [38, 17095003],
4117 [39, 17095004],
4118 [40, 17095005],
4119 [41, 17095006],
4120 [42, 17095007],
4121 [43, 17095008],
4122 [44, 17095009],
4123 [45, 17095010],
4124 [46, 17095011],
4125 [47, 17095012],
4126 [48, 17095013],
4127 [49, 17095014],
4128 [50, 17095015]
4129 ]
4130 );
4131 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4132 assert_eq!(
4133 pairs,
4134 vec![
4135 [0, 17092782],
4136 [1, 17094966],
4137 [2, 17094967],
4138 [3, 17094968],
4139 [4, 17094969],
4140 [5, 17094970],
4141 [6, 17094971],
4142 [7, 17094972],
4143 [8, 17094973],
4144 [9, 17094974],
4145 [10, 17094975],
4146 [11, 17094976],
4147 [12, 17094977],
4148 [13, 17094978],
4149 [14, 17094979],
4150 [15, 17094980],
4151 [16, 17094981],
4152 [17, 17094982],
4153 [18, 17094983],
4154 [19, 17094984],
4155 [20, 17094985],
4156 [21, 17094986],
4157 [22, 17094987],
4158 [23, 17094988],
4159 [24, 17094989],
4160 [25, 17094990],
4161 [26, 17094991],
4162 [27, 17094992],
4163 [28, 17094993],
4164 [29, 17094994],
4165 [30, 17094995],
4166 [31, 17094996],
4167 [32, 17094997],
4168 [33, 17094998],
4169 [34, 17094999],
4170 [35, 17095000],
4171 [36, 17095001],
4172 [37, 17095002],
4173 [38, 17095003],
4174 [39, 17095004],
4175 [40, 17095005],
4176 [41, 17095006],
4177 [42, 17095007],
4178 [43, 17095008],
4179 [44, 17095009],
4180 [45, 17095010],
4181 [46, 17095011],
4182 [47, 17095012],
4183 [48, 17095013],
4184 [49, 17095014],
4185 [50, 17095015]
4186 ]
4187 );
4188 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4189 assert_eq!(
4190 pairs,
4191 vec![
4192 [9, 17137287],
4193 [10, 17137288],
4194 [11, 17137289],
4195 [12, 17137290],
4196 [13, 17137291],
4197 [14, 17137292],
4198 [15, 17137293],
4199 [16, 17137294],
4200 [17, 17137295],
4201 [18, 17137296],
4202 [19, 17137297],
4203 [20, 17137298],
4204 [21, 17137299],
4205 [22, 17137300],
4206 [23, 17137301],
4207 [24, 17137302],
4208 [25, 17137303],
4209 [26, 17137304],
4210 [27, 17137305],
4211 [28, 17137306],
4212 [29, 17137307],
4213 [30, 17137308],
4214 [31, 17137309],
4215 [32, 17137310],
4216 [33, 17137311],
4217 [34, 17137312],
4218 [35, 17137313],
4219 [36, 17137314],
4220 [37, 17137315],
4221 [38, 17137316],
4222 [39, 17137317],
4223 [40, 17137318],
4224 [41, 17137319]
4225 ]
4226 );
4227 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4228 assert_eq!(
4229 pairs,
4230 vec![
4231 [2, 17306238],
4232 [3, 17306239],
4233 [4, 17306240],
4234 [5, 17306241],
4235 [6, 17306242],
4236 [7, 17306243],
4237 [8, 17306244],
4238 [9, 17306245],
4239 [10, 17306246],
4240 [11, 17306247],
4241 [12, 17306248],
4242 [13, 17306249],
4243 [14, 17306250],
4244 [15, 17306251],
4245 [16, 17306252],
4246 [17, 17306253],
4247 [18, 17306254],
4248 [19, 17306255],
4249 [20, 17306256],
4250 [21, 17306257],
4251 [22, 17306258],
4252 [23, 17306259],
4253 [24, 17306260],
4254 [25, 17306261],
4255 [26, 17306262],
4256 [27, 17306263],
4257 [28, 17306264],
4258 [29, 17306265],
4259 [30, 17306266],
4260 [31, 17306267],
4261 [32, 17306268],
4262 [33, 17306269],
4263 [34, 17306270],
4264 [35, 17306271],
4265 [36, 17306272],
4266 [37, 17306273],
4267 [38, 17306274],
4268 [39, 17306275],
4269 [40, 17306276],
4270 [41, 17306277],
4271 [42, 17306278],
4272 [43, 17306279],
4273 [44, 17306280],
4274 [45, 17306281],
4275 [46, 17306282],
4276 [47, 17306283],
4277 [48, 17306284],
4278 [49, 17306285]
4279 ]
4280 );
4281 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4282 assert_eq!(
4283 pairs,
4284 vec![
4285 [4, 17561868],
4286 [5, 17561869],
4287 [6, 17561870],
4288 [7, 17561871],
4289 [8, 17561872],
4290 [9, 17561873],
4291 [10, 17561874],
4292 [11, 17561875],
4293 [12, 17561876],
4294 [13, 17561877],
4295 [14, 17561878],
4296 [15, 17561879],
4297 [16, 17561880],
4298 [17, 17561881],
4299 [18, 17561882],
4300 [19, 17561883],
4301 [20, 17561884],
4302 [21, 17561885],
4303 [22, 17561886],
4304 [23, 17561887],
4305 [24, 17561888],
4306 [25, 17561889],
4307 [26, 17561890],
4308 [27, 17561891],
4309 [28, 17561892],
4310 [29, 17561893],
4311 [30, 17561894],
4312 [31, 17561895],
4313 [32, 17561896],
4314 [33, 17561897],
4315 [34, 17561898],
4316 [35, 17561899],
4317 [36, 17561900],
4318 [37, 17561901],
4319 [38, 17561902],
4320 [39, 17561903],
4321 [40, 17561904],
4322 [41, 17561905],
4323 [42, 17561906],
4324 [43, 17561907],
4325 [44, 17561908],
4326 [45, 17561909],
4327 [46, 17561910],
4328 [47, 17561911],
4329 [48, 17561912]
4330 ]
4331 );
4332 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4333 assert_eq!(
4334 pairs,
4335 vec![
4336 [0, 17566078],
4337 [1, 17566079],
4338 [2, 17566080],
4339 [3, 17566081],
4340 [4, 17566082],
4341 [5, 17566083],
4342 [6, 17566084],
4343 [7, 17566085],
4344 [8, 17566086],
4345 [9, 17566087],
4346 [10, 17566088],
4347 [11, 17566089],
4348 [12, 17566090],
4349 [13, 17566091],
4350 [14, 17566092],
4351 [15, 17566093],
4352 [16, 17566094],
4353 [17, 17566095],
4354 [18, 17566096],
4355 [19, 17566097],
4356 [20, 17566098],
4357 [21, 17566099],
4358 [22, 17566100],
4359 [23, 17566101],
4360 [24, 17566102],
4361 [25, 17566103],
4362 [26, 17566104],
4363 [27, 17566105],
4364 [28, 17566106],
4365 [29, 17566107],
4366 [30, 17566108],
4367 [31, 17566109],
4368 [32, 17566110],
4369 [33, 17566111],
4370 [34, 17566112],
4371 [35, 17566113],
4372 [36, 17566114],
4373 [37, 17566115],
4374 [38, 17566116],
4375 [39, 17566117],
4376 [40, 17566118],
4377 [41, 17577951],
4378 [42, 17577952],
4379 [43, 17577953],
4380 [44, 17577954],
4381 [45, 17577955],
4382 [46, 17577956],
4383 [47, 17577957],
4384 [48, 17577958],
4385 [49, 17577959],
4386 [50, 17577960]
4387 ]
4388 );
4389 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4390 assert_eq!(
4391 pairs,
4392 vec![
4393 [0, 17566108],
4394 [1, 17566109],
4395 [2, 17566110],
4396 [3, 17566111],
4397 [4, 17566112],
4398 [5, 17566113],
4399 [6, 17566114],
4400 [7, 17566115],
4401 [8, 17566116],
4402 [9, 17566117],
4403 [10, 17566118],
4404 [11, 17577951],
4405 [12, 17577952],
4406 [13, 17577953],
4407 [14, 17577954],
4408 [15, 17577955],
4409 [16, 17577956],
4410 [17, 17577957],
4411 [18, 17577958],
4412 [19, 17577959],
4413 [20, 17577960],
4414 [21, 17577961],
4415 [22, 17577962],
4416 [23, 17577963],
4417 [24, 17577964],
4418 [25, 17577965],
4419 [26, 17577966],
4420 [27, 17577967],
4421 [28, 17577968],
4422 [29, 17577969],
4423 [30, 17577970],
4424 [31, 17577971],
4425 [32, 17577972],
4426 [33, 17577973],
4427 [34, 17577974],
4428 [35, 17577975],
4429 [36, 17578686],
4430 [37, 17578687],
4431 [38, 17578688],
4432 [39, 17578689],
4433 [40, 17578690],
4434 [41, 17578691],
4435 [42, 17578692],
4436 [43, 17578693],
4437 [44, 17578694],
4438 [45, 17578695],
4439 [46, 17578696],
4440 [47, 17578697],
4441 [48, 17578698],
4442 [49, 17578699],
4443 [50, 17578700]
4444 ]
4445 );
4446 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4447 assert_eq!(
4448 pairs,
4449 vec![
4450 [0, 17566111],
4451 [1, 17566112],
4452 [2, 17566113],
4453 [3, 17566114],
4454 [4, 17566115],
4455 [5, 17566116],
4456 [6, 17566117],
4457 [7, 17566118],
4458 [8, 17577951],
4459 [9, 17577952],
4460 [10, 17577953],
4461 [11, 17577954],
4462 [12, 17577955],
4463 [13, 17577956],
4464 [14, 17577957],
4465 [15, 17577958],
4466 [16, 17577959],
4467 [17, 17577960],
4468 [18, 17577961],
4469 [19, 17577962],
4470 [20, 17577963],
4471 [21, 17577964],
4472 [22, 17577965],
4473 [23, 17577966],
4474 [24, 17577967],
4475 [25, 17577968],
4476 [26, 17577969],
4477 [27, 17577970],
4478 [28, 17577971],
4479 [29, 17577972],
4480 [30, 17577973],
4481 [31, 17577974],
4482 [32, 17577975],
4483 [33, 17578686],
4484 [34, 17578687],
4485 [35, 17578688],
4486 [36, 17578689],
4487 [37, 17578690],
4488 [38, 17578691],
4489 [39, 17578692],
4490 [40, 17578693],
4491 [41, 17578694],
4492 [42, 17578695],
4493 [43, 17578696],
4494 [44, 17578697],
4495 [45, 17578698],
4496 [46, 17578699],
4497 [47, 17578700],
4498 [48, 17578701],
4499 [49, 17578702],
4500 [50, 17578703]
4501 ]
4502 );
4503 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4504 assert_eq!(
4505 pairs,
4506 vec![
4507 [0, 17566111],
4508 [1, 17566112],
4509 [2, 17566113],
4510 [3, 17566114],
4511 [4, 17566115],
4512 [5, 17566116],
4513 [6, 17566117],
4514 [7, 17566118],
4515 [8, 17577951],
4516 [9, 17577952],
4517 [10, 17577953],
4518 [11, 17577954],
4519 [12, 17577955],
4520 [13, 17577956],
4521 [14, 17577957],
4522 [15, 17577958],
4523 [16, 17577959],
4524 [17, 17577960],
4525 [18, 17577961],
4526 [19, 17577962],
4527 [20, 17577963],
4528 [21, 17577964],
4529 [22, 17577965],
4530 [23, 17577966],
4531 [24, 17577967],
4532 [25, 17577968],
4533 [26, 17577969],
4534 [27, 17577970],
4535 [28, 17577971],
4536 [29, 17577972],
4537 [30, 17577973],
4538 [31, 17577974],
4539 [32, 17577975],
4540 [33, 17578686],
4541 [34, 17578687],
4542 [35, 17578688],
4543 [36, 17578689],
4544 [37, 17578690],
4545 [38, 17578691],
4546 [39, 17578692],
4547 [40, 17578693],
4548 [41, 17578694],
4549 [42, 17578695],
4550 [43, 17578696],
4551 [44, 17578697],
4552 [45, 17578698],
4553 [46, 17578699],
4554 [47, 17578700],
4555 [48, 17578701],
4556 [49, 17578702],
4557 [50, 17578703]
4558 ]
4559 );
4560 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4561 assert_eq!(
4562 pairs,
4563 vec![
4564 [0, 17566111],
4565 [1, 17566112],
4566 [2, 17566113],
4567 [3, 17566114],
4568 [4, 17566115],
4569 [5, 17566116],
4570 [6, 17566117],
4571 [7, 17566118],
4572 [8, 17577951],
4573 [9, 17577952],
4574 [10, 17577953],
4575 [11, 17577954],
4576 [12, 17577955],
4577 [13, 17577956],
4578 [14, 17577957],
4579 [15, 17577958],
4580 [16, 17577959],
4581 [17, 17577960],
4582 [18, 17577961],
4583 [19, 17577962],
4584 [20, 17577963],
4585 [21, 17577964],
4586 [22, 17577965],
4587 [23, 17577966],
4588 [24, 17577967],
4589 [25, 17577968],
4590 [26, 17577969],
4591 [27, 17577970],
4592 [28, 17577971],
4593 [29, 17577972],
4594 [30, 17577973],
4595 [31, 17577974],
4596 [32, 17577975],
4597 [33, 17578686],
4598 [34, 17578687],
4599 [35, 17578688],
4600 [36, 17578689],
4601 [37, 17578690],
4602 [38, 17578691],
4603 [39, 17578692],
4604 [40, 17578693],
4605 [41, 17578694],
4606 [42, 17578695],
4607 [43, 17578696],
4608 [44, 17578697],
4609 [45, 17578698],
4610 [46, 17578699],
4611 [47, 17578700],
4612 [48, 17578701],
4613 [49, 17578702],
4614 [50, 17578703]
4615 ]
4616 );
4617 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4618 assert_eq!(
4619 pairs,
4620 vec![
4621 [0, 17566111],
4622 [1, 17566112],
4623 [2, 17566113],
4624 [3, 17566114],
4625 [4, 17566115],
4626 [5, 17566116],
4627 [6, 17566117],
4628 [7, 17566118],
4629 [8, 17577951],
4630 [9, 17577952],
4631 [10, 17577953],
4632 [11, 17577954],
4633 [12, 17577955],
4634 [13, 17577956],
4635 [14, 17577957],
4636 [15, 17577958],
4637 [16, 17577959],
4638 [17, 17577960],
4639 [18, 17577961],
4640 [19, 17577962],
4641 [20, 17577963],
4642 [21, 17577964],
4643 [22, 17577965],
4644 [23, 17577966],
4645 [24, 17577967],
4646 [25, 17577968],
4647 [26, 17577969],
4648 [27, 17577970],
4649 [28, 17577971],
4650 [29, 17577972],
4651 [30, 17577973],
4652 [31, 17577974],
4653 [32, 17577975],
4654 [33, 17578686],
4655 [34, 17578687],
4656 [35, 17578688],
4657 [36, 17578689],
4658 [37, 17578690],
4659 [38, 17578691],
4660 [39, 17578692],
4661 [40, 17578693],
4662 [41, 17578694],
4663 [42, 17578695],
4664 [43, 17578696],
4665 [44, 17578697],
4666 [45, 17578698],
4667 [46, 17578699],
4668 [47, 17578700],
4669 [48, 17578701],
4670 [49, 17578702],
4671 [50, 17578703]
4672 ]
4673 );
4674 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4675 assert_eq!(
4676 pairs,
4677 vec![
4678 [0, 17566112],
4679 [1, 17566113],
4680 [2, 17566114],
4681 [3, 17566115],
4682 [4, 17566116],
4683 [5, 17566117],
4684 [6, 17566118],
4685 [7, 17577951],
4686 [8, 17577952],
4687 [9, 17577953],
4688 [10, 17577954],
4689 [11, 17577955],
4690 [12, 17577956],
4691 [13, 17577957],
4692 [14, 17577958],
4693 [15, 17577959],
4694 [16, 17577960],
4695 [17, 17577961],
4696 [18, 17577962],
4697 [19, 17577963],
4698 [20, 17577964],
4699 [21, 17577965],
4700 [22, 17577966],
4701 [23, 17577967],
4702 [24, 17577968],
4703 [25, 17577969],
4704 [26, 17577970],
4705 [27, 17577971],
4706 [28, 17577972],
4707 [29, 17577973],
4708 [30, 17577974],
4709 [31, 17577975],
4710 [32, 17578686],
4711 [33, 17578687],
4712 [34, 17578688],
4713 [35, 17578689],
4714 [36, 17578690],
4715 [37, 17578691],
4716 [38, 17578692],
4717 [39, 17578693],
4718 [40, 17578694],
4719 [41, 17578695],
4720 [42, 17578696],
4721 [43, 17578697],
4722 [44, 17578698],
4723 [45, 17578699],
4724 [46, 17578700],
4725 [47, 17578701],
4726 [48, 17578702],
4727 [49, 17578703],
4728 [50, 17578704]
4729 ]
4730 );
4731 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4732 assert_eq!(
4733 pairs,
4734 vec![
4735 [0, 17566113],
4736 [1, 17566114],
4737 [2, 17566115],
4738 [3, 17566116],
4739 [4, 17566117],
4740 [5, 17566118],
4741 [6, 17577951],
4742 [7, 17577952],
4743 [8, 17577953],
4744 [9, 17577954],
4745 [10, 17577955],
4746 [11, 17577956],
4747 [12, 17577957],
4748 [13, 17577958],
4749 [14, 17577959],
4750 [15, 17577960],
4751 [16, 17577961],
4752 [17, 17577962],
4753 [18, 17577963],
4754 [19, 17577964],
4755 [20, 17577965],
4756 [21, 17577966],
4757 [22, 17577967],
4758 [23, 17577968],
4759 [24, 17577969],
4760 [25, 17577970],
4761 [26, 17577971],
4762 [27, 17577972],
4763 [28, 17577973],
4764 [29, 17577974],
4765 [30, 17577975],
4766 [31, 17578686],
4767 [32, 17578687],
4768 [33, 17578688],
4769 [34, 17578689],
4770 [35, 17578690],
4771 [36, 17578691],
4772 [37, 17578692],
4773 [38, 17578693],
4774 [39, 17578694],
4775 [40, 17578695],
4776 [41, 17578696],
4777 [42, 17578697],
4778 [43, 17578698],
4779 [44, 17578699],
4780 [45, 17578700],
4781 [46, 17578701],
4782 [47, 17578702],
4783 [48, 17578703],
4784 [49, 17578704],
4785 [50, 17578705]
4786 ]
4787 );
4788 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4789 assert_eq!(
4790 pairs,
4791 vec![
4792 [0, 17566113],
4793 [1, 17566114],
4794 [2, 17566115],
4795 [3, 17566116],
4796 [4, 17566117],
4797 [5, 17566118],
4798 [6, 17577951],
4799 [7, 17577952],
4800 [8, 17577953],
4801 [9, 17577954],
4802 [10, 17577955],
4803 [11, 17577956],
4804 [12, 17577957],
4805 [13, 17577958],
4806 [14, 17577959],
4807 [15, 17577960],
4808 [16, 17577961],
4809 [17, 17577962],
4810 [18, 17577963],
4811 [19, 17577964],
4812 [20, 17577965],
4813 [21, 17577966],
4814 [22, 17577967],
4815 [23, 17577968],
4816 [24, 17577969],
4817 [25, 17577970],
4818 [26, 17577971],
4819 [27, 17577972],
4820 [28, 17577973],
4821 [29, 17577974],
4822 [30, 17577975],
4823 [31, 17578686],
4824 [32, 17578687],
4825 [33, 17578688],
4826 [34, 17578689],
4827 [35, 17578690],
4828 [36, 17578691],
4829 [37, 17578692],
4830 [38, 17578693],
4831 [39, 17578694],
4832 [40, 17578695],
4833 [41, 17578696],
4834 [42, 17578697],
4835 [43, 17578698],
4836 [44, 17578699],
4837 [45, 17578700],
4838 [46, 17578701],
4839 [47, 17578702],
4840 [48, 17578703],
4841 [49, 17578704],
4842 [50, 17578705]
4843 ]
4844 );
4845 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4846 assert_eq!(
4847 pairs,
4848 vec![
4849 [1, 17579733],
4850 [2, 17579734],
4851 [3, 17579735],
4852 [4, 17579736],
4853 [5, 17579737],
4854 [6, 17579738],
4855 [7, 17579739],
4856 [8, 17579740],
4857 [9, 17579741],
4858 [10, 17579742],
4859 [11, 17579743],
4860 [12, 17579744],
4861 [13, 17579745],
4862 [14, 17579746],
4863 [15, 17579747],
4864 [16, 17579748],
4865 [17, 17579749],
4866 [18, 17579750],
4867 [19, 17579751],
4868 [20, 17579752],
4869 [21, 17579753],
4870 [22, 17579754],
4871 [23, 17579755],
4872 [24, 17579756],
4873 [25, 17579757],
4874 [26, 17579758],
4875 [27, 17579759],
4876 [28, 17579760],
4877 [29, 17579761],
4878 [30, 17579762],
4879 [31, 17579763],
4880 [32, 17579764],
4881 [33, 17579765],
4882 [34, 17579766],
4883 [35, 17579767],
4884 [36, 17579768],
4885 [37, 17579769],
4886 [38, 17579770],
4887 [39, 17579771],
4888 [40, 17579772],
4889 [41, 17579773],
4890 [42, 17579774],
4891 [43, 17579775],
4892 [44, 17579776],
4893 [45, 17581244],
4894 [46, 17581245],
4895 [47, 17581246],
4896 [48, 17581247],
4897 [49, 17581248],
4898 [50, 17581249]
4899 ]
4900 );
4901 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4902 assert_eq!(
4903 pairs,
4904 vec![
4905 [0, 17581369],
4906 [1, 17581370],
4907 [2, 17582885],
4908 [3, 17582886],
4909 [4, 17582887],
4910 [5, 17582888],
4911 [6, 17582889],
4912 [7, 17582890],
4913 [8, 17582891],
4914 [9, 17582892],
4915 [10, 17582893],
4916 [11, 17582894],
4917 [12, 17582895],
4918 [13, 17582896],
4919 [14, 17582897],
4920 [15, 17582898],
4921 [16, 17582899],
4922 [17, 17582900],
4923 [18, 17582901],
4924 [19, 17582902],
4925 [20, 17582903],
4926 [21, 17582904],
4927 [22, 17582905],
4928 [23, 17582906],
4929 [24, 17582907],
4930 [25, 17582908],
4931 [26, 17582909],
4932 [27, 17582910],
4933 [28, 17582911],
4934 [29, 17582912],
4935 [30, 17582913],
4936 [31, 17582914],
4937 [32, 17582915],
4938 [33, 17582916],
4939 [34, 17582917],
4940 [35, 17582918],
4941 [36, 17582919],
4942 [37, 17582920],
4943 [38, 17582921],
4944 [39, 17582922],
4945 [40, 17582923],
4946 [41, 17582924],
4947 [42, 17582925],
4948 [43, 17582926],
4949 [44, 17582927],
4950 [45, 17582928],
4951 [46, 17582929],
4952 [47, 17582930],
4953 [48, 17582931],
4954 [49, 17582932],
4955 [50, 17583028]
4956 ]
4957 );
4958 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
4959 assert_eq!(
4960 pairs,
4961 vec![
4962 [0, 17581370],
4963 [1, 17582885],
4964 [2, 17582886],
4965 [3, 17582887],
4966 [4, 17582888],
4967 [5, 17582889],
4968 [6, 17582890],
4969 [7, 17582891],
4970 [8, 17582892],
4971 [9, 17582893],
4972 [10, 17582894],
4973 [11, 17582895],
4974 [12, 17582896],
4975 [13, 17582897],
4976 [14, 17582898],
4977 [15, 17582899],
4978 [16, 17582900],
4979 [17, 17582901],
4980 [18, 17582902],
4981 [19, 17582903],
4982 [20, 17582904],
4983 [21, 17582905],
4984 [22, 17582906],
4985 [23, 17582907],
4986 [24, 17582908],
4987 [25, 17582909],
4988 [26, 17582910],
4989 [27, 17582911],
4990 [28, 17582912],
4991 [29, 17582913],
4992 [30, 17582914],
4993 [31, 17582915],
4994 [32, 17582916],
4995 [33, 17582917],
4996 [34, 17582918],
4997 [35, 17582919],
4998 [36, 17582920],
4999 [37, 17582921],
5000 [38, 17582922],
5001 [39, 17582923],
5002 [40, 17582924],
5003 [41, 17582925],
5004 [42, 17582926],
5005 [43, 17582927],
5006 [44, 17582928],
5007 [45, 17582929],
5008 [46, 17582930],
5009 [47, 17582931],
5010 [48, 17582932],
5011 [49, 17583028],
5012 [50, 17583029]
5013 ]
5014 );
5015 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5016 assert_eq!(
5017 pairs,
5018 vec![
5019 [0, 17581370],
5020 [1, 17582885],
5021 [2, 17582886],
5022 [3, 17582887],
5023 [4, 17582888],
5024 [5, 17582889],
5025 [6, 17582890],
5026 [7, 17582891],
5027 [8, 17582892],
5028 [9, 17582893],
5029 [10, 17582894],
5030 [11, 17582895],
5031 [12, 17582896],
5032 [13, 17582897],
5033 [14, 17582898],
5034 [15, 17582899],
5035 [16, 17582900],
5036 [17, 17582901],
5037 [18, 17582902],
5038 [19, 17582903],
5039 [20, 17582904],
5040 [21, 17582905],
5041 [22, 17582906],
5042 [23, 17582907],
5043 [24, 17582908],
5044 [25, 17582909],
5045 [26, 17582910],
5046 [27, 17582911],
5047 [28, 17582912],
5048 [29, 17582913],
5049 [30, 17582914],
5050 [31, 17582915],
5051 [32, 17582916],
5052 [33, 17582917],
5053 [34, 17582918],
5054 [35, 17582919],
5055 [36, 17582920],
5056 [37, 17582921],
5057 [38, 17582922],
5058 [39, 17582923],
5059 [40, 17582924],
5060 [41, 17582925],
5061 [42, 17582926],
5062 [43, 17582927],
5063 [44, 17582928],
5064 [45, 17582929],
5065 [46, 17582930],
5066 [47, 17582931],
5067 [48, 17582932],
5068 [49, 17583028],
5069 [50, 17583029]
5070 ]
5071 );
5072 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5073 assert_eq!(
5074 pairs,
5075 vec![
5076 [1, 17582911],
5077 [2, 17582912],
5078 [3, 17582913],
5079 [4, 17582914],
5080 [5, 17582915],
5081 [6, 17582916],
5082 [7, 17582917],
5083 [8, 17582918],
5084 [9, 17582919],
5085 [10, 17582920],
5086 [11, 17582921],
5087 [12, 17582922],
5088 [13, 17582923],
5089 [14, 17582924],
5090 [15, 17582925],
5091 [16, 17582926],
5092 [17, 17582927],
5093 [18, 17582928],
5094 [19, 17582929],
5095 [20, 17582930],
5096 [21, 17582931],
5097 [22, 17582932],
5098 [23, 17583028],
5099 [24, 17583029],
5100 [25, 17583030],
5101 [26, 17583031],
5102 [27, 17583032],
5103 [28, 17583033],
5104 [29, 17583034],
5105 [30, 17583035],
5106 [31, 17583036],
5107 [32, 17583037],
5108 [33, 17583038],
5109 [34, 17583039],
5110 [35, 17583040],
5111 [36, 17583041],
5112 [37, 17583042],
5113 [38, 17583043],
5114 [39, 17583044],
5115 [40, 17583045],
5116 [41, 17583046],
5117 [42, 17583047],
5118 [43, 17583048],
5119 [44, 17583049],
5120 [45, 17583050],
5121 [46, 17583051],
5122 [47, 17583052],
5123 [48, 17583053],
5124 [49, 17583054],
5125 [50, 17583055]
5126 ]
5127 );
5128 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5129 assert_eq!(
5130 pairs,
5131 vec![
5132 [0, 17588621],
5133 [1, 17588622],
5134 [2, 17588623],
5135 [3, 17588624],
5136 [4, 17588625],
5137 [5, 17588626],
5138 [6, 17588627],
5139 [7, 17588628],
5140 [8, 17588629],
5141 [9, 17588630],
5142 [10, 17588631],
5143 [11, 17588632],
5144 [12, 17588633],
5145 [13, 17588634],
5146 [14, 17588635],
5147 [15, 17588636],
5148 [16, 17588637],
5149 [17, 17588638],
5150 [18, 17588639],
5151 [19, 17588640],
5152 [20, 17588641],
5153 [21, 17588642],
5154 [22, 17588643],
5155 [23, 17588644],
5156 [24, 17588645],
5157 [25, 17588646],
5158 [26, 17588647],
5159 [27, 17588648],
5160 [28, 17588649],
5161 [29, 17588650],
5162 [30, 17588651],
5163 [31, 17588652],
5164 [32, 17588653],
5165 [33, 17588654],
5166 [34, 17588655],
5167 [35, 17588656],
5168 [36, 17588657],
5169 [37, 17589196],
5170 [38, 17589197],
5171 [39, 17589198],
5172 [40, 17589199],
5173 [41, 17589200],
5174 [42, 17589201],
5175 [43, 17589202],
5176 [44, 17589203],
5177 [45, 17589204],
5178 [46, 17589205],
5179 [47, 17589206],
5180 [48, 17589207],
5181 [49, 17589208]
5182 ]
5183 );
5184 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5185 assert_eq!(
5186 pairs,
5187 vec![
5188 [0, 17588621],
5189 [1, 17588622],
5190 [2, 17588623],
5191 [3, 17588624],
5192 [4, 17588625],
5193 [5, 17588626],
5194 [6, 17588627],
5195 [7, 17588628],
5196 [8, 17588629],
5197 [9, 17588630],
5198 [10, 17588631],
5199 [11, 17588632],
5200 [12, 17588633],
5201 [13, 17588634],
5202 [14, 17588635],
5203 [15, 17588636],
5204 [16, 17588637],
5205 [17, 17588638],
5206 [18, 17588639],
5207 [19, 17588640],
5208 [20, 17588641],
5209 [21, 17588642],
5210 [22, 17588643],
5211 [23, 17588644],
5212 [24, 17588645],
5213 [25, 17588646],
5214 [26, 17588647],
5215 [27, 17588648],
5216 [28, 17588649],
5217 [29, 17588650],
5218 [30, 17588651],
5219 [31, 17588652],
5220 [32, 17588653],
5221 [33, 17588654],
5222 [34, 17588655],
5223 [35, 17588656],
5224 [36, 17588657],
5225 [37, 17589196],
5226 [38, 17589197],
5227 [39, 17589198],
5228 [40, 17589199],
5229 [41, 17589200],
5230 [42, 17589201],
5231 [43, 17589202],
5232 [44, 17589203],
5233 [45, 17589204],
5234 [46, 17589205],
5235 [47, 17589206],
5236 [48, 17589207],
5237 [49, 17589208]
5238 ]
5239 );
5240 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5241 assert_eq!(
5242 pairs,
5243 vec![
5244 [0, 17588621],
5245 [1, 17588622],
5246 [2, 17588623],
5247 [3, 17588624],
5248 [4, 17588625],
5249 [5, 17588626],
5250 [6, 17588627],
5251 [7, 17588628],
5252 [8, 17588629],
5253 [9, 17588630],
5254 [10, 17588631],
5255 [11, 17588632],
5256 [12, 17588633],
5257 [13, 17588634],
5258 [14, 17588635],
5259 [15, 17588636],
5260 [16, 17588637],
5261 [17, 17588638],
5262 [18, 17588639],
5263 [19, 17588640],
5264 [20, 17588641],
5265 [21, 17588642],
5266 [22, 17588643],
5267 [23, 17588644],
5268 [24, 17588645],
5269 [25, 17588646],
5270 [26, 17588647],
5271 [27, 17588648],
5272 [28, 17588649],
5273 [29, 17588650],
5274 [30, 17588651],
5275 [31, 17588652],
5276 [32, 17588653],
5277 [33, 17588654],
5278 [34, 17588655],
5279 [35, 17588656],
5280 [36, 17588657],
5281 [37, 17589196],
5282 [38, 17589197],
5283 [39, 17589198],
5284 [40, 17589199],
5285 [41, 17589200],
5286 [42, 17589201],
5287 [43, 17589202],
5288 [44, 17589203],
5289 [45, 17589204],
5290 [46, 17589205],
5291 [47, 17589206],
5292 [48, 17589207],
5293 [49, 17589208]
5294 ]
5295 );
5296 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5297 assert_eq!(
5298 pairs,
5299 vec![
5300 [1, 17591770],
5301 [2, 17591771],
5302 [3, 17591772],
5303 [4, 17591773],
5304 [5, 17591774],
5305 [6, 17591775],
5306 [7, 17591776],
5307 [8, 17591777],
5308 [9, 17591778],
5309 [10, 17591779],
5310 [11, 17591780],
5311 [12, 17591781],
5312 [13, 17591782],
5313 [14, 17591783],
5314 [15, 17591784],
5315 [16, 17591785],
5316 [17, 17591786],
5317 [18, 17591787],
5318 [19, 17591788],
5319 [20, 17591789],
5320 [21, 17591790],
5321 [22, 17591791],
5322 [23, 17591792],
5323 [24, 17591793],
5324 [25, 17591794],
5325 [26, 17591796],
5326 [27, 17591797],
5327 [28, 17591798],
5328 [29, 17591799],
5329 [30, 17591800],
5330 [31, 17591801],
5331 [32, 17591802],
5332 [33, 17591803],
5333 [34, 17591804],
5334 [35, 17591805],
5335 [36, 17591806],
5336 [37, 17591807],
5337 [38, 17591808],
5338 [39, 17591809],
5339 [40, 17591810],
5340 [41, 17591811],
5341 [42, 17591812],
5342 [43, 17591813],
5343 [44, 17591814],
5344 [45, 17591815],
5345 [46, 17591816],
5346 [47, 17591817],
5347 [48, 17591818],
5348 [49, 17591819],
5349 [50, 17591820]
5350 ]
5351 );
5352 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5353 assert_eq!(
5354 pairs,
5355 vec![
5356 [0, 17593855],
5357 [1, 17593856],
5358 [2, 17593857],
5359 [3, 17593858],
5360 [4, 17593859],
5361 [5, 17593860],
5362 [6, 17593861],
5363 [7, 17593862],
5364 [8, 17593863],
5365 [9, 17593864],
5366 [10, 17593865],
5367 [11, 17593866],
5368 [12, 17593867],
5369 [13, 17593868],
5370 [14, 17593869],
5371 [15, 17593870],
5372 [16, 17593871],
5373 [17, 17593872],
5374 [18, 17593873],
5375 [19, 17593874],
5376 [20, 17593875],
5377 [21, 17593876],
5378 [22, 17593877],
5379 [23, 17593878],
5380 [24, 17593880],
5381 [25, 17593881],
5382 [26, 17593882],
5383 [27, 17593883],
5384 [28, 17593884],
5385 [29, 17593885],
5386 [30, 17593886],
5387 [31, 17593887],
5388 [32, 17593888],
5389 [33, 17593889],
5390 [34, 17593890],
5391 [35, 17593891],
5392 [36, 17593892],
5393 [37, 17593893],
5394 [38, 17593894],
5395 [39, 17593895],
5396 [40, 17593896],
5397 [41, 17593897],
5398 [42, 17593898],
5399 [43, 17593899],
5400 [44, 17593900],
5401 [45, 17593901],
5402 [46, 17593902],
5403 [47, 17593903]
5404 ]
5405 );
5406 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5407 assert_eq!(
5408 pairs,
5409 vec![
5410 [0, 17593863],
5411 [1, 17593864],
5412 [2, 17593865],
5413 [3, 17593866],
5414 [4, 17593867],
5415 [5, 17593868],
5416 [6, 17593869],
5417 [7, 17593870],
5418 [8, 17593871],
5419 [9, 17593872],
5420 [10, 17593873],
5421 [11, 17593874],
5422 [12, 17593875],
5423 [13, 17593876],
5424 [14, 17593877],
5425 [15, 17593878],
5426 [16, 17593880],
5427 [17, 17593881],
5428 [18, 17593882],
5429 [19, 17593883],
5430 [20, 17593884],
5431 [21, 17593885],
5432 [22, 17593886],
5433 [23, 17593887],
5434 [24, 17593888],
5435 [25, 17593889],
5436 [26, 17593890],
5437 [27, 17593891],
5438 [28, 17593892],
5439 [29, 17593893],
5440 [30, 17593894],
5441 [31, 17593895],
5442 [32, 17593896],
5443 [33, 17593897],
5444 [34, 17593898],
5445 [35, 17593899],
5446 [36, 17593900],
5447 [37, 17593901],
5448 [38, 17593902],
5449 [39, 17593903],
5450 [40, 17593904],
5451 [41, 17593905],
5452 [42, 17593906],
5453 [43, 17593907]
5454 ]
5455 );
5456 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5457 assert_eq!(
5458 pairs,
5459 vec![
5460 [11, 17596476],
5461 [12, 17596477],
5462 [13, 17596478],
5463 [14, 17596479],
5464 [15, 17596480],
5465 [16, 17596481],
5466 [17, 17596482],
5467 [19, 17596483],
5468 [20, 17596484],
5469 [21, 17596485],
5470 [22, 17596486],
5471 [23, 17596487],
5472 [24, 17596488],
5473 [25, 17596489],
5474 [26, 17596490],
5475 [27, 17596491],
5476 [28, 17596492],
5477 [29, 17596493],
5478 [30, 17596494],
5479 [31, 17596495],
5480 [32, 17596496],
5481 [33, 17596497],
5482 [34, 17596498],
5483 [35, 17596499],
5484 [36, 17596500],
5485 [37, 17596501],
5486 [38, 17596502],
5487 [39, 17596503],
5488 [40, 17596504],
5489 [41, 17596505],
5490 [42, 17596506],
5491 [43, 17596507],
5492 [44, 17596508],
5493 [45, 17596509],
5494 [46, 17596510],
5495 [47, 17596511],
5496 [48, 17596512],
5497 [49, 17596513],
5498 [50, 17596514]
5499 ]
5500 );
5501 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5502 assert_eq!(
5503 pairs,
5504 vec![
5505 [5, 17624012],
5506 [6, 17624013],
5507 [7, 17624014],
5508 [8, 17624015],
5509 [9, 17624016],
5510 [10, 17624017],
5511 [11, 17624018],
5512 [12, 17624019],
5513 [13, 17624020],
5514 [14, 17625913],
5515 [15, 17625914],
5516 [16, 17625915],
5517 [17, 17625916],
5518 [18, 17625917],
5519 [19, 17625918],
5520 [20, 17625919],
5521 [21, 17625920],
5522 [22, 17625921],
5523 [23, 17625922],
5524 [24, 17625923],
5525 [25, 17625924],
5526 [26, 17625925],
5527 [27, 17625926],
5528 [28, 17625927],
5529 [29, 17625928],
5530 [30, 17625929],
5531 [31, 17625930],
5532 [32, 17625931],
5533 [33, 17625932],
5534 [34, 17625933],
5535 [35, 17625934],
5536 [36, 17625935],
5537 [37, 17625936],
5538 [38, 17625937],
5539 [39, 17625938],
5540 [40, 17625939],
5541 [41, 17625940],
5542 [42, 17625941],
5543 [43, 17625942],
5544 [44, 17625943],
5545 [45, 17625944],
5546 [46, 17625945],
5547 [47, 17625946],
5548 [48, 17625947],
5549 [49, 17625948],
5550 [50, 17625949]
5551 ]
5552 );
5553 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5554 assert_eq!(
5555 pairs,
5556 vec![
5557 [2, 17624012],
5558 [3, 17624013],
5559 [4, 17624014],
5560 [5, 17624015],
5561 [6, 17624016],
5562 [7, 17624017],
5563 [8, 17624018],
5564 [9, 17624019],
5565 [10, 17624020],
5566 [11, 17625913],
5567 [12, 17625914],
5568 [13, 17625915],
5569 [14, 17625916],
5570 [15, 17625917],
5571 [16, 17625918],
5572 [17, 17625919],
5573 [18, 17625920],
5574 [19, 17625921],
5575 [20, 17625922],
5576 [21, 17625923],
5577 [22, 17625924],
5578 [23, 17625925],
5579 [24, 17625926],
5580 [25, 17625927],
5581 [26, 17625928],
5582 [27, 17625929],
5583 [28, 17625930],
5584 [29, 17625931],
5585 [30, 17625932],
5586 [31, 17625933],
5587 [32, 17625934],
5588 [33, 17625935],
5589 [34, 17625936],
5590 [35, 17625937],
5591 [36, 17625938],
5592 [37, 17625939],
5593 [38, 17625940],
5594 [39, 17625941],
5595 [40, 17625942],
5596 [41, 17625943],
5597 [42, 17625944],
5598 [43, 17625945],
5599 [44, 17625946],
5600 [45, 17625947],
5601 [46, 17625948],
5602 [47, 17625949],
5603 [48, 17625950],
5604 [49, 17625951],
5605 [50, 17625952]
5606 ]
5607 );
5608 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5609 assert_eq!(
5610 pairs,
5611 vec![
5612 [1, 31796700],
5613 [2, 31796701],
5614 [3, 31796702],
5615 [4, 31796703],
5616 [5, 31796704],
5617 [6, 31796705],
5618 [7, 31796706],
5619 [8, 31796710],
5620 [9, 31796711],
5621 [10, 31796712],
5622 [11, 31796713],
5623 [12, 31796714],
5624 [13, 31796715],
5625 [14, 31796716],
5626 [15, 31796717],
5627 [16, 31796718],
5628 [17, 31796719],
5629 [18, 31796720],
5630 [19, 31796721],
5631 [20, 31796722],
5632 [21, 31796723],
5633 [22, 31796724],
5634 [23, 31796725],
5635 [24, 31796726],
5636 [25, 31796727],
5637 [26, 31796728],
5638 [27, 31799014],
5639 [28, 31799015],
5640 [29, 31799016],
5641 [30, 31799017],
5642 [31, 31799018],
5643 [32, 31799019],
5644 [33, 31799020],
5645 [34, 31799021],
5646 [35, 31799022],
5647 [36, 31799023],
5648 [37, 31799024],
5649 [38, 31799025],
5650 [39, 31799026],
5651 [40, 31799027],
5652 [41, 31799028],
5653 [42, 31799029],
5654 [43, 31799030],
5655 [44, 31799031],
5656 [45, 31799032],
5657 [46, 31799033],
5658 [47, 31799034],
5659 [48, 31799035],
5660 [49, 31799036],
5661 [50, 31799037]
5662 ]
5663 );
5664 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5665 assert_eq!(
5666 pairs,
5667 vec![
5668 [0, 36722692],
5669 [1, 36722693],
5670 [2, 36722694],
5671 [3, 36722695],
5672 [4, 36722696],
5673 [5, 36722697],
5674 [6, 36722698],
5675 [7, 36722699],
5676 [8, 36722700],
5677 [9, 36722701],
5678 [10, 36722702],
5679 [11, 36722703],
5680 [12, 36722704],
5681 [13, 36722705],
5682 [14, 36723505],
5683 [15, 36723506],
5684 [16, 36723507],
5685 [17, 36723508],
5686 [18, 36723509],
5687 [19, 36723510],
5688 [20, 36723511],
5689 [21, 36723512],
5690 [22, 36723513],
5691 [23, 36723514],
5692 [24, 36723515],
5693 [25, 36723516],
5694 [26, 36723517],
5695 [27, 36723518],
5696 [28, 36723519],
5697 [29, 36723520],
5698 [30, 36723521],
5699 [31, 36723522],
5700 [32, 36723523],
5701 [33, 36723524],
5702 [34, 36723525],
5703 [35, 36723526],
5704 [36, 36723527],
5705 [37, 36723528],
5706 [38, 36723529],
5707 [39, 36723530],
5708 [40, 36723531],
5709 [41, 36723532],
5710 [42, 36737414],
5711 [43, 36737415],
5712 [44, 36737416],
5713 [45, 36737417],
5714 [46, 36737418],
5715 [47, 36737419],
5716 [48, 36737420]
5717 ]
5718 );
5719 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs().collect();
5720 assert_eq!(
5721 pairs,
5722 vec![
5723 [4, 44587963],
5724 [5, 44587964],
5725 [6, 44587965],
5726 [7, 44587966],
5727 [8, 44587967],
5728 [9, 44587968],
5729 [10, 44587969],
5730 [11, 44587970],
5731 [12, 44587971],
5732 [13, 44587972],
5733 [14, 44587973],
5734 [15, 44587974],
5735 [16, 44587975],
5736 [17, 44587976],
5737 [18, 44587977],
5738 [19, 44587978],
5739 [20, 44587979],
5740 [21, 44587980],
5741 [22, 44587981],
5742 [23, 44587982],
5743 [24, 44587983],
5744 [25, 44589680],
5745 [26, 44589681],
5746 [27, 44589682],
5747 [28, 44589683],
5748 [29, 44589684],
5749 [30, 44589685],
5750 [31, 44589686],
5751 [32, 44589687],
5752 [33, 44589688],
5753 [34, 44589689],
5754 [35, 44589690],
5755 [36, 44589691],
5756 [37, 44589692],
5757 [38, 44589693],
5758 [39, 44589694],
5759 [40, 44589695],
5760 [41, 44589696],
5761 [42, 44589697],
5762 [43, 44589698],
5763 [44, 44589699],
5764 [45, 44589700],
5765 [46, 44589701],
5766 [47, 44589702],
5767 [48, 44592034],
5768 [49, 44592035],
5769 [50, 44592036]
5770 ]
5771 );
5772 }
5773 #[test]
5774 fn test_cigar_full() {
5775 let mut bam = bam::Reader::from_path("./test/locusmd.bam").unwrap();
5776 let mut it = bam.records();
5777 let test = it.next().unwrap().unwrap();
5778 let pairs: Vec<_> = test.aligned_block_pairs_cigar().collect();
5779 assert_eq!(
5780 pairs,
5781 vec![
5782 (0..15, 99812479..99812494, Cigar::Equal(15)),
5783 (15..16, 99812494..99812494, Cigar::Ins(1)),
5784 (16..83, 99812494..99812561, Cigar::Equal(67)),
5785 (83..84, 99812561..99812561, Cigar::Ins(1)),
5786 (84..413, 99812561..99812890, Cigar::Equal(329)),
5787 (413..413, 99812890..99812891, Cigar::Del(1)),
5788 (413..538, 99812891..99813016, Cigar::Equal(125)),
5789 (538..539, 99813016..99813016, Cigar::Ins(1)),
5790 (539..597, 99813016..99813074, Cigar::Equal(58)),
5791 (597..597, 99813074..99813075, Cigar::Del(1)),
5792 (597..1498, 99813075..99813976, Cigar::Equal(901)),
5793 (1498..1499, 99813976..99813976, Cigar::Ins(1)),
5794 (1499..1779, 99813976..99814256, Cigar::Equal(280)),
5795 (1779..1779, 99814256..99814257, Cigar::Del(1)),
5796 (1779..1939, 99814257..99814417, Cigar::Equal(160)),
5797 (1939..1939, 99814417..99814418, Cigar::Del(1)),
5798 (1939..1962, 99814418..99814441, Cigar::Equal(23)),
5799 (1962..1962, 99814441..99814442, Cigar::Del(1)),
5800 (1962..1994, 99814442..99814474, Cigar::Equal(32)),
5801 (1994..1994, 99814474..99814475, Cigar::Del(1)),
5802 (1994..2067, 99814475..99814548, Cigar::Equal(73)),
5803 (2067..2068, 99814548..99814548, Cigar::Ins(1)),
5804 (2068..2368, 99814548..99814848, Cigar::Equal(300)),
5805 (2368..2368, 99814848..99814850, Cigar::Del(2)),
5806 (2368..2384, 99814850..99814866, Cigar::Equal(16)),
5807 (2384..2384, 99814866..99814867, Cigar::Del(1)),
5808 (2384..2785, 99814867..99815268, Cigar::Equal(401)),
5809 (2785..2785, 99815268..99815269, Cigar::Del(1)),
5810 (2785..2790, 99815269..99815274, Cigar::Equal(5)),
5811 (2790..2791, 99815274..99815275, Cigar::Diff(1)),
5812 (2791..2867, 99815275..99815351, Cigar::Equal(76)),
5813 (2867..2867, 99815351..99815352, Cigar::Del(1)),
5814 (2867..3126, 99815352..99815611, Cigar::Equal(259)),
5815 (3126..3127, 99815611..99815612, Cigar::Diff(1)),
5816 (3127..3314, 99815612..99815799, Cigar::Equal(187)),
5817 (3314..3314, 99815799..99815800, Cigar::Del(1)),
5818 (3314..3331, 99815800..99815817, Cigar::Equal(17)),
5819 (3331..3331, 99815817..99815818, Cigar::Del(1)),
5820 (3331..3367, 99815818..99815854, Cigar::Equal(36)),
5821 (3367..3367, 99815854..99815855, Cigar::Del(1)),
5822 (3367..3430, 99815855..99815918, Cigar::Equal(63)),
5823 (3430..3430, 99815918..99815919, Cigar::Del(1)),
5824 (3430..3469, 99815919..99815958, Cigar::Equal(39)),
5825 (3469..3469, 99815958..99815959, Cigar::Del(1)),
5826 (3469..3508, 99815959..99815998, Cigar::Equal(39)),
5827 (3508..3508, 99815998..99815999, Cigar::Del(1)),
5828 (3508..3701, 99815999..99816192, Cigar::Equal(193)),
5829 (3701..3701, 99816192..99816193, Cigar::Del(1)),
5830 (3701..3829, 99816193..99816321, Cigar::Equal(128)),
5831 (3829..3830, 99816321..99816321, Cigar::Ins(1)),
5832 (3830..4519, 99816321..99817010, Cigar::Equal(689)),
5833 (4519..4520, 99817010..99817010, Cigar::Ins(1)),
5834 (4520..4569, 99817010..99817059, Cigar::Equal(49)),
5835 (4569..4569, 99817059..99817060, Cigar::Del(1)),
5836 (4569..4702, 99817060..99817193, Cigar::Equal(133)),
5837 (4702..4702, 99817193..99817194, Cigar::Del(1)),
5838 (4702..4888, 99817194..99817380, Cigar::Equal(186)),
5839 (4888..4889, 99817380..99817380, Cigar::Ins(1)),
5840 (4889..4981, 99817380..99817472, Cigar::Equal(92)),
5841 (4981..4982, 99817472..99817472, Cigar::Ins(1)),
5842 (4982..5089, 99817472..99817579, Cigar::Equal(107)),
5843 (5089..5090, 99817579..99817579, Cigar::Ins(1)),
5844 (5090..5132, 99817579..99817621, Cigar::Equal(42)),
5845 (5132..5133, 99817621..99817621, Cigar::Ins(1)),
5846 (5133..5383, 99817621..99817871, Cigar::Equal(250)),
5847 (5383..5383, 99817871..99817872, Cigar::Del(1)),
5848 (5383..5451, 99817872..99817940, Cigar::Equal(68)),
5849 (5451..5451, 99817940..99817941, Cigar::Del(1)),
5850 (5451..5457, 99817941..99817947, Cigar::Equal(6)),
5851 (5457..5457, 99817947..99817948, Cigar::Del(1)),
5852 (5457..5593, 99817948..99818084, Cigar::Equal(136)),
5853 (5593..5594, 99818084..99818084, Cigar::Ins(1)),
5854 (5594..5900, 99818084..99818390, Cigar::Equal(306)),
5855 (5900..5901, 99818390..99818390, Cigar::Ins(1)),
5856 (5901..5932, 99818390..99818421, Cigar::Equal(31)),
5857 (5932..5933, 99818421..99818421, Cigar::Ins(1)),
5858 (5933..6100, 99818421..99818588, Cigar::Equal(167)),
5859 (6100..6100, 99818588..99818589, Cigar::Del(1)),
5860 (6100..6256, 99818589..99818745, Cigar::Equal(156)),
5861 (6256..6257, 99818745..99818746, Cigar::Diff(1)),
5862 (6257..7576, 99818746..99820065, Cigar::Equal(1319)),
5863 (7576..7576, 99820065..99820066, Cigar::Del(1)),
5864 (7576..7884, 99820066..99820374, Cigar::Equal(308)),
5865 (7884..7884, 99820374..99820375, Cigar::Del(1)),
5866 (7884..7951, 99820375..99820442, Cigar::Equal(67)),
5867 (7951..7951, 99820442..99820443, Cigar::Del(1)),
5868 (7951..8159, 99820443..99820651, Cigar::Equal(208)),
5869 (8159..8159, 99820651..99820653, Cigar::Del(2)),
5870 (8159..8225, 99820653..99820719, Cigar::Equal(66)),
5871 (8225..8226, 99820719..99820719, Cigar::Ins(1)),
5872 (8226..8229, 99820719..99820722, Cigar::Equal(3)),
5873 (8229..8229, 99820722..99820723, Cigar::Del(1)),
5874 (8229..8245, 99820723..99820739, Cigar::Equal(16)),
5875 (8245..8245, 99820739..99820740, Cigar::Del(1)),
5876 (8245..8283, 99820740..99820778, Cigar::Equal(38)),
5877 (8283..8283, 99820778..99820780, Cigar::Del(2)),
5878 (8283..8285, 99820780..99820782, Cigar::Equal(2)),
5879 (8285..8286, 99820782..99820783, Cigar::Diff(1)),
5880 (8286..8326, 99820783..99820823, Cigar::Equal(40)),
5881 (8326..8326, 99820823..99820824, Cigar::Del(1)),
5882 (8326..8454, 99820824..99820952, Cigar::Equal(128)),
5883 (8454..8454, 99820952..99820953, Cigar::Del(1)),
5884 (8454..8508, 99820953..99821007, Cigar::Equal(54)),
5885 (8508..8509, 99821007..99821007, Cigar::Ins(1)),
5886 (8509..8560, 99821007..99821058, Cigar::Equal(51)),
5887 (8560..8560, 99821058..99821059, Cigar::Del(1)),
5888 (8560..8833, 99821059..99821332, Cigar::Equal(273)),
5889 (8833..8833, 99821332..99821333, Cigar::Del(1)),
5890 (8833..8836, 99821333..99821336, Cigar::Equal(3)),
5891 (8836..8836, 99821336..99821337, Cigar::Del(1)),
5892 (8836..9061, 99821337..99821562, Cigar::Equal(225)),
5893 (9061..9061, 99821562..99821563, Cigar::Del(1)),
5894 (9061..9065, 99821563..99821567, Cigar::Equal(4)),
5895 (9065..9065, 99821567..99821568, Cigar::Del(1)),
5896 (9065..9110, 99821568..99821613, Cigar::Equal(45)),
5897 (9110..9110, 99821613..99821615, Cigar::Del(2)),
5898 (9110..9163, 99821615..99821668, Cigar::Equal(53)),
5899 (9163..9163, 99821668..99821669, Cigar::Del(1)),
5900 (9163..9390, 99821669..99821896, Cigar::Equal(227)),
5901 (9390..9390, 99821896..99821897, Cigar::Del(1)),
5902 (9390..9427, 99821897..99821934, Cigar::Equal(37)),
5903 (9427..9430, 99821934..99821937, Cigar::Diff(3)),
5904 (9430..9461, 99821937..99821968, Cigar::Equal(31)),
5905 (9461..9461, 99821968..99821970, Cigar::Del(2)),
5906 (9461..9493, 99821970..99822002, Cigar::Equal(32)),
5907 (9493..9493, 99822002..99822004, Cigar::Del(2)),
5908 (9493..9692, 99822004..99822203, Cigar::Equal(199)),
5909 (9692..9693, 99822203..99822204, Cigar::Diff(1)),
5910 (9693..9829, 99822204..99822340, Cigar::Equal(136)),
5911 (9829..9829, 99822340..99822342, Cigar::Del(2)),
5912 (9829..9870, 99822342..99822383, Cigar::Equal(41)),
5913 (9870..9870, 99822383..99822386, Cigar::Del(3)),
5914 (9870..9915, 99822386..99822431, Cigar::Equal(45)),
5915 (9915..9915, 99822431..99822432, Cigar::Del(1)),
5916 (9915..10285, 99822432..99822802, Cigar::Equal(370)),
5917 (10285..10285, 99822802..99822803, Cigar::Del(1)),
5918 (10285..10480, 99822803..99822998, Cigar::Equal(195)),
5919 (10480..10480, 99822998..99822999, Cigar::Del(1)),
5920 (10480..10721, 99822999..99823240, Cigar::Equal(241)),
5921 (10721..10722, 99823240..99823240, Cigar::Ins(1)),
5922 (10722..11122, 99823240..99823640, Cigar::Equal(400)),
5923 (11122..11122, 99823640..99823641, Cigar::Del(1)),
5924 (11122..11230, 99823641..99823749, Cigar::Equal(108)),
5925 (11230..11230, 99823749..99823750, Cigar::Del(1)),
5926 (11230..11911, 99823750..99824431, Cigar::Equal(681)),
5927 (11911..11912, 99824431..99824431, Cigar::Ins(1)),
5928 (11912..12102, 99824431..99824621, Cigar::Equal(190)),
5929 (12102..12102, 99824621..99824622, Cigar::Del(1)),
5930 (12102..12870, 99824622..99825390, Cigar::Equal(768)),
5931 (12870..12870, 99825390..99825391, Cigar::Del(1)),
5932 (12870..12978, 99825391..99825499, Cigar::Equal(108)),
5933 (12978..12978, 99825499..99825500, Cigar::Del(1)),
5934 (12978..13419, 99825500..99825941, Cigar::Equal(441)),
5935 (13419..13419, 99825941..99825942, Cigar::Del(1)),
5936 (13419..13617, 99825942..99826140, Cigar::Equal(198)),
5937 (13617..13617, 99826140..99826141, Cigar::Del(1)),
5938 (13617..13697, 99826141..99826221, Cigar::Equal(80)),
5939 (13697..13698, 99826221..99826221, Cigar::Ins(1)),
5940 (13698..13811, 99826221..99826334, Cigar::Equal(113)),
5941 (13811..13812, 99826334..99826334, Cigar::Ins(1)),
5942 (13812..14020, 99826334..99826542, Cigar::Equal(208)),
5943 (14020..14020, 99826542..99826543, Cigar::Del(1)),
5944 (14020..14524, 99826543..99827047, Cigar::Equal(504)),
5945 (14524..14524, 99827047..99827048, Cigar::Del(1)),
5946 (14524..14533, 99827048..99827057, Cigar::Equal(9)),
5947 (14533..14534, 99827057..99827057, Cigar::Ins(1)),
5948 (14534..14787, 99827057..99827310, Cigar::Equal(253)),
5949 (14787..14788, 99827310..99827310, Cigar::Ins(1)),
5950 (14788..14901, 99827310..99827423, Cigar::Equal(113)),
5951 (14901..14901, 99827423..99827424, Cigar::Del(1)),
5952 (14901..15001, 99827424..99827524, Cigar::Equal(100)),
5953 (15001..15002, 99827524..99827524, Cigar::Ins(1)),
5954 (15002..15166, 99827524..99827688, Cigar::Equal(164)),
5955 (15166..15166, 99827688..99827689, Cigar::Del(1)),
5956 (15166..15805, 99827689..99828328, Cigar::Equal(639)),
5957 (15805..15805, 99828328..99828329, Cigar::Del(1)),
5958 (15805..16195, 99828329..99828719, Cigar::Equal(390)),
5959 (16195..16195, 99828719..99828721, Cigar::Del(2)),
5960 (16195..16576, 99828721..99829102, Cigar::Equal(381)),
5961 (16576..16577, 99829102..99829102, Cigar::Ins(1)),
5962 (16577..16912, 99829102..99829437, Cigar::Equal(335)),
5963 (16912..16912, 99829437..99829438, Cigar::Del(1)),
5964 (16912..17896, 99829438..99830422, Cigar::Equal(984)),
5965 (17896..17897, 99830422..99830422, Cigar::Ins(1)),
5966 (17897..18370, 99830422..99830895, Cigar::Equal(473)),
5967 (18370..18370, 99830895..99830896, Cigar::Del(1)),
5968 (18370..18410, 99830896..99830936, Cigar::Equal(40)),
5969 (18410..18410, 99830936..99830937, Cigar::Del(1)),
5970 (18410..18449, 99830937..99830976, Cigar::Equal(39)),
5971 (18449..18450, 99830976..99830976, Cigar::Ins(1)),
5972 (18450..18675, 99830976..99831201, Cigar::Equal(225)),
5973 (18675..18675, 99831201..99831202, Cigar::Del(1)),
5974 (18675..18729, 99831202..99831256, Cigar::Equal(54)),
5975 (18729..18729, 99831256..99831257, Cigar::Del(1)),
5976 (18729..18812, 99831257..99831340, Cigar::Equal(83)),
5977 (18812..18813, 99831340..99831340, Cigar::Ins(1)),
5978 (18813..18895, 99831340..99831422, Cigar::Equal(82)),
5979 (18895..18895, 99831422..99831423, Cigar::Del(1)),
5980 (18895..19239, 99831423..99831767, Cigar::Equal(344)),
5981 (19239..19240, 99831767..99831767, Cigar::Ins(1)),
5982 (19240..19244, 99831767..99831771, Cigar::Equal(4)),
5983 (19244..19245, 99831771..99831771, Cigar::Ins(1)),
5984 (19245..19387, 99831771..99831913, Cigar::Equal(142)),
5985 (19387..19387, 99831913..99831914, Cigar::Del(1)),
5986 (19387..19883, 99831914..99832410, Cigar::Equal(496)),
5987 ]
5988 );
5989 assert_eq!(
5990 test.aligned_block_pairs_cigar_match()
5991 .unwrap()
5992 .into_iter()
5993 .filter_map(|a| match a {
5994 (Some((a, b)), _) => Some(((a.start, a.end), (b.start, b.end))),
5995 (None, _) => None,
5996 })
5997 .collect::<Vec<_>>(),
5998 test.aligned_block_pairs_match()
6000 .unwrap()
6001 .into_iter()
6002 .map(|(a, b)| ((a[0], a[1]), (b[0], b[1])))
6003 .collect::<Vec<_>>(),
6004 "Invalid alignment of pairs and cigar"
6005 );
6006 let pairs: Vec<_> = test.aligned_block_pairs_cigar_match().unwrap().collect();
6007 assert_eq!(
6008 pairs,
6009 vec![
6010 (Some((0..15, 99812479..99812494)), Cigar::Equal(15)),
6011 (None, Cigar::Ins(1)),
6012 (Some((16..83, 99812494..99812561)), Cigar::Equal(67)),
6013 (None, Cigar::Ins(1)),
6014 (Some((84..413, 99812561..99812890)), Cigar::Equal(329)),
6015 (None, Cigar::Del(1)),
6016 (Some((413..538, 99812891..99813016)), Cigar::Equal(125)),
6017 (None, Cigar::Ins(1)),
6018 (Some((539..597, 99813016..99813074)), Cigar::Equal(58)),
6019 (None, Cigar::Del(1)),
6020 (Some((597..1498, 99813075..99813976)), Cigar::Equal(901)),
6021 (None, Cigar::Ins(1)),
6022 (Some((1499..1779, 99813976..99814256)), Cigar::Equal(280)),
6023 (None, Cigar::Del(1)),
6024 (Some((1779..1939, 99814257..99814417)), Cigar::Equal(160)),
6025 (None, Cigar::Del(1)),
6026 (Some((1939..1962, 99814418..99814441)), Cigar::Equal(23)),
6027 (None, Cigar::Del(1)),
6028 (Some((1962..1994, 99814442..99814474)), Cigar::Equal(32)),
6029 (None, Cigar::Del(1)),
6030 (Some((1994..2067, 99814475..99814548)), Cigar::Equal(73)),
6031 (None, Cigar::Ins(1)),
6032 (Some((2068..2368, 99814548..99814848)), Cigar::Equal(300)),
6033 (None, Cigar::Del(2)),
6034 (Some((2368..2384, 99814850..99814866)), Cigar::Equal(16)),
6035 (None, Cigar::Del(1)),
6036 (Some((2384..2785, 99814867..99815268)), Cigar::Equal(401)),
6037 (None, Cigar::Del(1)),
6038 (Some((2785..2790, 99815269..99815274)), Cigar::Equal(5)),
6039 (None, Cigar::Diff(1)),
6040 (Some((2791..2867, 99815275..99815351)), Cigar::Equal(76)),
6041 (None, Cigar::Del(1)),
6042 (Some((2867..3126, 99815352..99815611)), Cigar::Equal(259)),
6043 (None, Cigar::Diff(1)),
6044 (Some((3127..3314, 99815612..99815799)), Cigar::Equal(187)),
6045 (None, Cigar::Del(1)),
6046 (Some((3314..3331, 99815800..99815817)), Cigar::Equal(17)),
6047 (None, Cigar::Del(1)),
6048 (Some((3331..3367, 99815818..99815854)), Cigar::Equal(36)),
6049 (None, Cigar::Del(1)),
6050 (Some((3367..3430, 99815855..99815918)), Cigar::Equal(63)),
6051 (None, Cigar::Del(1)),
6052 (Some((3430..3469, 99815919..99815958)), Cigar::Equal(39)),
6053 (None, Cigar::Del(1)),
6054 (Some((3469..3508, 99815959..99815998)), Cigar::Equal(39)),
6055 (None, Cigar::Del(1)),
6056 (Some((3508..3701, 99815999..99816192)), Cigar::Equal(193)),
6057 (None, Cigar::Del(1)),
6058 (Some((3701..3829, 99816193..99816321)), Cigar::Equal(128)),
6059 (None, Cigar::Ins(1)),
6060 (Some((3830..4519, 99816321..99817010)), Cigar::Equal(689)),
6061 (None, Cigar::Ins(1)),
6062 (Some((4520..4569, 99817010..99817059)), Cigar::Equal(49)),
6063 (None, Cigar::Del(1)),
6064 (Some((4569..4702, 99817060..99817193)), Cigar::Equal(133)),
6065 (None, Cigar::Del(1)),
6066 (Some((4702..4888, 99817194..99817380)), Cigar::Equal(186)),
6067 (None, Cigar::Ins(1)),
6068 (Some((4889..4981, 99817380..99817472)), Cigar::Equal(92)),
6069 (None, Cigar::Ins(1)),
6070 (Some((4982..5089, 99817472..99817579)), Cigar::Equal(107)),
6071 (None, Cigar::Ins(1)),
6072 (Some((5090..5132, 99817579..99817621)), Cigar::Equal(42)),
6073 (None, Cigar::Ins(1)),
6074 (Some((5133..5383, 99817621..99817871)), Cigar::Equal(250)),
6075 (None, Cigar::Del(1)),
6076 (Some((5383..5451, 99817872..99817940)), Cigar::Equal(68)),
6077 (None, Cigar::Del(1)),
6078 (Some((5451..5457, 99817941..99817947)), Cigar::Equal(6)),
6079 (None, Cigar::Del(1)),
6080 (Some((5457..5593, 99817948..99818084)), Cigar::Equal(136)),
6081 (None, Cigar::Ins(1)),
6082 (Some((5594..5900, 99818084..99818390)), Cigar::Equal(306)),
6083 (None, Cigar::Ins(1)),
6084 (Some((5901..5932, 99818390..99818421)), Cigar::Equal(31)),
6085 (None, Cigar::Ins(1)),
6086 (Some((5933..6100, 99818421..99818588)), Cigar::Equal(167)),
6087 (None, Cigar::Del(1)),
6088 (Some((6100..6256, 99818589..99818745)), Cigar::Equal(156)),
6089 (None, Cigar::Diff(1)),
6090 (Some((6257..7576, 99818746..99820065)), Cigar::Equal(1319)),
6091 (None, Cigar::Del(1)),
6092 (Some((7576..7884, 99820066..99820374)), Cigar::Equal(308)),
6093 (None, Cigar::Del(1)),
6094 (Some((7884..7951, 99820375..99820442)), Cigar::Equal(67)),
6095 (None, Cigar::Del(1)),
6096 (Some((7951..8159, 99820443..99820651)), Cigar::Equal(208)),
6097 (None, Cigar::Del(2)),
6098 (Some((8159..8225, 99820653..99820719)), Cigar::Equal(66)),
6099 (None, Cigar::Ins(1)),
6100 (Some((8226..8229, 99820719..99820722)), Cigar::Equal(3)),
6101 (None, Cigar::Del(1)),
6102 (Some((8229..8245, 99820723..99820739)), Cigar::Equal(16)),
6103 (None, Cigar::Del(1)),
6104 (Some((8245..8283, 99820740..99820778)), Cigar::Equal(38)),
6105 (None, Cigar::Del(2)),
6106 (Some((8283..8285, 99820780..99820782)), Cigar::Equal(2)),
6107 (None, Cigar::Diff(1)),
6108 (Some((8286..8326, 99820783..99820823)), Cigar::Equal(40)),
6109 (None, Cigar::Del(1)),
6110 (Some((8326..8454, 99820824..99820952)), Cigar::Equal(128)),
6111 (None, Cigar::Del(1)),
6112 (Some((8454..8508, 99820953..99821007)), Cigar::Equal(54)),
6113 (None, Cigar::Ins(1)),
6114 (Some((8509..8560, 99821007..99821058)), Cigar::Equal(51)),
6115 (None, Cigar::Del(1)),
6116 (Some((8560..8833, 99821059..99821332)), Cigar::Equal(273)),
6117 (None, Cigar::Del(1)),
6118 (Some((8833..8836, 99821333..99821336)), Cigar::Equal(3)),
6119 (None, Cigar::Del(1)),
6120 (Some((8836..9061, 99821337..99821562)), Cigar::Equal(225)),
6121 (None, Cigar::Del(1)),
6122 (Some((9061..9065, 99821563..99821567)), Cigar::Equal(4)),
6123 (None, Cigar::Del(1)),
6124 (Some((9065..9110, 99821568..99821613)), Cigar::Equal(45)),
6125 (None, Cigar::Del(2)),
6126 (Some((9110..9163, 99821615..99821668)), Cigar::Equal(53)),
6127 (None, Cigar::Del(1)),
6128 (Some((9163..9390, 99821669..99821896)), Cigar::Equal(227)),
6129 (None, Cigar::Del(1)),
6130 (Some((9390..9427, 99821897..99821934)), Cigar::Equal(37)),
6131 (None, Cigar::Diff(3)),
6132 (Some((9430..9461, 99821937..99821968)), Cigar::Equal(31)),
6133 (None, Cigar::Del(2)),
6134 (Some((9461..9493, 99821970..99822002)), Cigar::Equal(32)),
6135 (None, Cigar::Del(2)),
6136 (Some((9493..9692, 99822004..99822203)), Cigar::Equal(199)),
6137 (None, Cigar::Diff(1)),
6138 (Some((9693..9829, 99822204..99822340)), Cigar::Equal(136)),
6139 (None, Cigar::Del(2)),
6140 (Some((9829..9870, 99822342..99822383)), Cigar::Equal(41)),
6141 (None, Cigar::Del(3)),
6142 (Some((9870..9915, 99822386..99822431)), Cigar::Equal(45)),
6143 (None, Cigar::Del(1)),
6144 (Some((9915..10285, 99822432..99822802)), Cigar::Equal(370)),
6145 (None, Cigar::Del(1)),
6146 (Some((10285..10480, 99822803..99822998)), Cigar::Equal(195)),
6147 (None, Cigar::Del(1)),
6148 (Some((10480..10721, 99822999..99823240)), Cigar::Equal(241)),
6149 (None, Cigar::Ins(1)),
6150 (Some((10722..11122, 99823240..99823640)), Cigar::Equal(400)),
6151 (None, Cigar::Del(1)),
6152 (Some((11122..11230, 99823641..99823749)), Cigar::Equal(108)),
6153 (None, Cigar::Del(1)),
6154 (Some((11230..11911, 99823750..99824431)), Cigar::Equal(681)),
6155 (None, Cigar::Ins(1)),
6156 (Some((11912..12102, 99824431..99824621)), Cigar::Equal(190)),
6157 (None, Cigar::Del(1)),
6158 (Some((12102..12870, 99824622..99825390)), Cigar::Equal(768)),
6159 (None, Cigar::Del(1)),
6160 (Some((12870..12978, 99825391..99825499)), Cigar::Equal(108)),
6161 (None, Cigar::Del(1)),
6162 (Some((12978..13419, 99825500..99825941)), Cigar::Equal(441)),
6163 (None, Cigar::Del(1)),
6164 (Some((13419..13617, 99825942..99826140)), Cigar::Equal(198)),
6165 (None, Cigar::Del(1)),
6166 (Some((13617..13697, 99826141..99826221)), Cigar::Equal(80)),
6167 (None, Cigar::Ins(1)),
6168 (Some((13698..13811, 99826221..99826334)), Cigar::Equal(113)),
6169 (None, Cigar::Ins(1)),
6170 (Some((13812..14020, 99826334..99826542)), Cigar::Equal(208)),
6171 (None, Cigar::Del(1)),
6172 (Some((14020..14524, 99826543..99827047)), Cigar::Equal(504)),
6173 (None, Cigar::Del(1)),
6174 (Some((14524..14533, 99827048..99827057)), Cigar::Equal(9)),
6175 (None, Cigar::Ins(1)),
6176 (Some((14534..14787, 99827057..99827310)), Cigar::Equal(253)),
6177 (None, Cigar::Ins(1)),
6178 (Some((14788..14901, 99827310..99827423)), Cigar::Equal(113)),
6179 (None, Cigar::Del(1)),
6180 (Some((14901..15001, 99827424..99827524)), Cigar::Equal(100)),
6181 (None, Cigar::Ins(1)),
6182 (Some((15002..15166, 99827524..99827688)), Cigar::Equal(164)),
6183 (None, Cigar::Del(1)),
6184 (Some((15166..15805, 99827689..99828328)), Cigar::Equal(639)),
6185 (None, Cigar::Del(1)),
6186 (Some((15805..16195, 99828329..99828719)), Cigar::Equal(390)),
6187 (None, Cigar::Del(2)),
6188 (Some((16195..16576, 99828721..99829102)), Cigar::Equal(381)),
6189 (None, Cigar::Ins(1)),
6190 (Some((16577..16912, 99829102..99829437)), Cigar::Equal(335)),
6191 (None, Cigar::Del(1)),
6192 (Some((16912..17896, 99829438..99830422)), Cigar::Equal(984)),
6193 (None, Cigar::Ins(1)),
6194 (Some((17897..18370, 99830422..99830895)), Cigar::Equal(473)),
6195 (None, Cigar::Del(1)),
6196 (Some((18370..18410, 99830896..99830936)), Cigar::Equal(40)),
6197 (None, Cigar::Del(1)),
6198 (Some((18410..18449, 99830937..99830976)), Cigar::Equal(39)),
6199 (None, Cigar::Ins(1)),
6200 (Some((18450..18675, 99830976..99831201)), Cigar::Equal(225)),
6201 (None, Cigar::Del(1)),
6202 (Some((18675..18729, 99831202..99831256)), Cigar::Equal(54)),
6203 (None, Cigar::Del(1)),
6204 (Some((18729..18812, 99831257..99831340)), Cigar::Equal(83)),
6205 (None, Cigar::Ins(1)),
6206 (Some((18813..18895, 99831340..99831422)), Cigar::Equal(82)),
6207 (None, Cigar::Del(1)),
6208 (Some((18895..19239, 99831423..99831767)), Cigar::Equal(344)),
6209 (None, Cigar::Ins(1)),
6210 (Some((19240..19244, 99831767..99831771)), Cigar::Equal(4)),
6211 (None, Cigar::Ins(1)),
6212 (Some((19245..19387, 99831771..99831913)), Cigar::Equal(142)),
6213 (None, Cigar::Del(1)),
6214 (Some((19387..19883, 99831914..99832410)), Cigar::Equal(496))
6215 ]
6216 );
6217 let mut bam = bam::Reader::from_path("./test/setcigar.sam").unwrap();
6218 let mut it = bam.rc_records();
6219 let hit = it
6220 .next()
6221 .unwrap()
6222 .unwrap()
6223 .aligned_block_pairs_cigar_match();
6224 assert!(hit.is_none())
6225 }
6226 #[test]
6227 fn test_aligned_pairs_full() {
6228 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
6229 let mut it = bam.records();
6230 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6231 assert_eq!(
6232 pairs.clone().into_iter().take(12).collect::<Vec<_>>(),
6233 vec![
6234 [Some(0), None],
6235 [Some(1), None],
6236 [Some(2), None],
6237 [Some(3), None],
6238 [Some(4), None],
6239 [Some(5), None],
6240 [Some(6), Some(16050676)],
6241 [Some(7), Some(16050677)],
6242 [Some(8), Some(16050678)],
6243 [Some(9), Some(16050679)],
6244 [Some(10), Some(16050680)],
6245 [Some(11), Some(16050681)],
6246 ]
6247 );
6248 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6249 assert_eq!(
6250 pairs,
6251 vec![
6252 [Some(0), Some(16096878)],
6253 [Some(1), Some(16096879)],
6254 [Some(2), Some(16096880)],
6255 [Some(3), Some(16096881)],
6256 [Some(4), Some(16096882)],
6257 [Some(5), Some(16096883)],
6258 [Some(6), Some(16096884)],
6259 [None, Some(16096885)],
6260 [None, Some(16096886)],
6261 [Some(7), Some(16096887)],
6262 [Some(8), Some(16096888)],
6263 [Some(9), Some(16096889)],
6264 [Some(10), Some(16096890)],
6265 [Some(11), Some(16096891)],
6266 [Some(12), Some(16096892)],
6267 [Some(13), Some(16096893)],
6268 [Some(14), Some(16096894)],
6269 [Some(15), Some(16096895)],
6270 [Some(16), Some(16096896)],
6271 [Some(17), Some(16096897)],
6272 [Some(18), Some(16096898)],
6273 [Some(19), Some(16096899)],
6274 [Some(20), Some(16096900)],
6275 [Some(21), Some(16096901)],
6276 [Some(22), Some(16096902)],
6277 [Some(23), Some(16096903)],
6278 [Some(24), Some(16096904)],
6279 [Some(25), Some(16096905)],
6280 [Some(26), Some(16096906)],
6281 [Some(27), Some(16096907)],
6282 [Some(28), Some(16096908)],
6283 [Some(29), Some(16096909)],
6284 [Some(30), Some(16096910)],
6285 [Some(31), Some(16096911)],
6286 [Some(32), Some(16096912)],
6287 [Some(33), Some(16096913)],
6288 [Some(34), Some(16096914)],
6289 [Some(35), Some(16096915)],
6290 [Some(36), Some(16096916)],
6291 [Some(37), Some(16096917)],
6292 [Some(38), Some(16096918)],
6293 [Some(39), Some(16096919)],
6294 [Some(40), Some(16096920)],
6295 [Some(41), Some(16096921)],
6296 [Some(42), Some(16096922)],
6297 [Some(43), Some(16096923)],
6298 [Some(44), Some(16096924)],
6299 [Some(45), Some(16096925)],
6300 [Some(46), Some(16096926)],
6301 [Some(47), Some(16096927)],
6302 [Some(48), Some(16096928)],
6303 [Some(49), Some(16096929)],
6304 [Some(50), Some(16096930)]
6305 ]
6306 );
6307 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6308 assert_eq!(
6309 pairs,
6310 vec![
6311 [Some(0), Some(16097145)],
6312 [Some(1), Some(16097146)],
6313 [Some(2), Some(16097147)],
6314 [Some(3), Some(16097148)],
6315 [Some(4), Some(16097149)],
6316 [Some(5), Some(16097150)],
6317 [Some(6), Some(16097151)],
6318 [Some(7), Some(16097152)],
6319 [Some(8), Some(16097153)],
6320 [Some(9), Some(16097154)],
6321 [Some(10), Some(16097155)],
6322 [Some(11), Some(16097156)],
6323 [Some(12), Some(16097157)],
6324 [Some(13), Some(16097158)],
6325 [Some(14), Some(16097159)],
6326 [Some(15), Some(16097160)],
6327 [Some(16), Some(16097161)],
6328 [Some(17), Some(16097162)],
6329 [Some(18), Some(16097163)],
6330 [Some(19), Some(16097164)],
6331 [Some(20), Some(16097165)],
6332 [Some(21), Some(16097166)],
6333 [Some(22), Some(16097167)],
6334 [Some(23), Some(16097168)],
6335 [Some(24), Some(16097169)],
6336 [Some(25), Some(16097170)],
6337 [Some(26), Some(16097171)],
6338 [Some(27), Some(16097172)],
6339 [Some(28), Some(16097173)],
6340 [None, Some(16097174)],
6341 [None, Some(16097175)],
6342 [Some(29), Some(16097176)],
6343 [Some(30), Some(16097177)],
6344 [Some(31), Some(16097178)],
6345 [Some(32), Some(16097179)],
6346 [Some(33), Some(16097180)],
6347 [Some(34), Some(16097181)],
6348 [Some(35), Some(16097182)],
6349 [Some(36), Some(16097183)],
6350 [Some(37), Some(16097184)],
6351 [Some(38), Some(16097185)],
6352 [Some(39), Some(16097186)],
6353 [Some(40), Some(16097187)],
6354 [Some(41), Some(16097188)],
6355 [Some(42), Some(16097189)],
6356 [Some(43), Some(16097190)],
6357 [Some(44), Some(16097191)],
6358 [Some(45), Some(16097192)],
6359 [Some(46), Some(16097193)],
6360 [Some(47), Some(16097194)],
6361 [Some(48), Some(16097195)],
6362 [Some(49), Some(16097196)],
6363 [Some(50), Some(16097197)]
6364 ]
6365 );
6366 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6367 assert_eq!(
6368 pairs,
6369 vec![
6370 [Some(0), Some(16117350)],
6371 [Some(1), Some(16117351)],
6372 [Some(2), Some(16117352)],
6373 [Some(3), Some(16117353)],
6374 [Some(4), Some(16117354)],
6375 [Some(5), Some(16117355)],
6376 [Some(6), Some(16117356)],
6377 [Some(7), Some(16117357)],
6378 [Some(8), Some(16117358)],
6379 [Some(9), Some(16117359)],
6380 [Some(10), Some(16117360)],
6381 [Some(11), Some(16117361)],
6382 [Some(12), Some(16117362)],
6383 [Some(13), Some(16117363)],
6384 [Some(14), Some(16117364)],
6385 [Some(15), Some(16117365)],
6386 [Some(16), Some(16117366)],
6387 [Some(17), Some(16117367)],
6388 [Some(18), Some(16117368)],
6389 [Some(19), Some(16117369)],
6390 [Some(20), Some(16117370)],
6391 [Some(21), Some(16117371)],
6392 [Some(22), Some(16117372)],
6393 [Some(23), Some(16117373)],
6394 [Some(24), Some(16117374)],
6395 [Some(25), Some(16117375)],
6396 [Some(26), Some(16117376)],
6397 [Some(27), Some(16117377)],
6398 [Some(28), Some(16117378)],
6399 [Some(29), Some(16117379)],
6400 [Some(30), Some(16117380)],
6401 [Some(31), Some(16117381)],
6402 [Some(32), Some(16117382)],
6403 [Some(33), Some(16117383)],
6404 [Some(34), Some(16117384)],
6405 [Some(35), Some(16117385)],
6406 [Some(36), Some(16117386)],
6407 [Some(37), Some(16117387)],
6408 [Some(38), Some(16117388)],
6409 [Some(39), Some(16117389)],
6410 [Some(40), Some(16117390)],
6411 [Some(41), Some(16117391)],
6412 [Some(42), Some(16117392)],
6413 [Some(43), Some(16117393)],
6414 [Some(44), Some(16117394)],
6415 [Some(45), Some(16117395)],
6416 [Some(46), Some(16117396)],
6417 [Some(47), Some(16117397)],
6418 [Some(48), Some(16117398)],
6419 [Some(49), Some(16117399)],
6420 [Some(50), Some(16117400)]
6421 ]
6422 );
6423 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6424 assert_eq!(
6425 pairs,
6426 vec![
6427 [Some(0), Some(16118483)],
6428 [Some(1), Some(16118484)],
6429 [Some(2), Some(16118485)],
6430 [Some(3), Some(16118486)],
6431 [Some(4), Some(16118487)],
6432 [Some(5), Some(16118488)],
6433 [Some(6), Some(16118489)],
6434 [Some(7), Some(16118490)],
6435 [Some(8), Some(16118491)],
6436 [Some(9), Some(16118492)],
6437 [Some(10), Some(16118493)],
6438 [Some(11), Some(16118494)],
6439 [Some(12), Some(16118495)],
6440 [Some(13), Some(16118496)],
6441 [Some(14), Some(16118497)],
6442 [Some(15), Some(16118498)],
6443 [Some(16), Some(16118499)],
6444 [Some(17), Some(16118500)],
6445 [Some(18), Some(16118501)],
6446 [Some(19), Some(16118502)],
6447 [Some(20), Some(16118503)],
6448 [Some(21), Some(16118504)],
6449 [Some(22), Some(16118505)],
6450 [Some(23), Some(16118506)],
6451 [Some(24), Some(16118507)],
6452 [Some(25), Some(16118508)],
6453 [Some(26), Some(16118509)],
6454 [Some(27), Some(16118510)],
6455 [Some(28), Some(16118511)],
6456 [Some(29), Some(16118512)],
6457 [Some(30), Some(16118513)],
6458 [Some(31), Some(16118514)],
6459 [Some(32), Some(16118515)],
6460 [Some(33), Some(16118516)],
6461 [Some(34), Some(16118517)],
6462 [Some(35), Some(16118518)],
6463 [Some(36), Some(16118519)],
6464 [Some(37), Some(16118520)],
6465 [Some(38), Some(16118521)],
6466 [Some(39), Some(16118522)],
6467 [Some(40), Some(16118523)],
6468 [Some(41), Some(16118524)],
6469 [Some(42), Some(16118525)],
6470 [Some(43), Some(16118526)],
6471 [Some(44), Some(16118527)],
6472 [Some(45), Some(16118528)],
6473 [Some(46), Some(16118529)],
6474 [Some(47), Some(16118530)],
6475 [Some(48), Some(16118531)],
6476 [Some(49), Some(16118532)],
6477 [Some(50), Some(16118533)]
6478 ]
6479 );
6480
6481 fn some_count(pairs: &[[Option<i64>; 2]], pos: usize) -> i64 {
6484 pairs.iter().filter(|x| x[pos].is_some()).count() as i64
6485 }
6486 fn none_count(pairs: &[[Option<i64>; 2]], pos: usize) -> i64 {
6487 pairs.iter().filter(|x| x[pos].is_none()).count() as i64
6488 }
6489
6490 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6491 assert_eq!(some_count(&pairs, 0), 51);
6492 assert_eq!(none_count(&pairs, 0), 0);
6493 assert_eq!(some_count(&pairs, 1), 51);
6494 assert_eq!(none_count(&pairs, 1), 0);
6495 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6496 assert_eq!(some_count(&pairs, 0), 51);
6497 assert_eq!(none_count(&pairs, 0), 0);
6498 assert_eq!(some_count(&pairs, 1), 51);
6499 assert_eq!(none_count(&pairs, 1), 0);
6500 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6501 assert_eq!(some_count(&pairs, 0), 51);
6502 assert_eq!(none_count(&pairs, 0), 0);
6503 assert_eq!(some_count(&pairs, 1), 51);
6504 assert_eq!(none_count(&pairs, 1), 0);
6505 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6506 assert_eq!(some_count(&pairs, 0), 51);
6507 assert_eq!(none_count(&pairs, 0), 0);
6508 assert_eq!(some_count(&pairs, 1), 51);
6509 assert_eq!(none_count(&pairs, 1), 0);
6510 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6511 assert_eq!(some_count(&pairs, 0), 51);
6512 assert_eq!(none_count(&pairs, 0), 0);
6513 assert_eq!(some_count(&pairs, 1), 45);
6514 assert_eq!(none_count(&pairs, 1), 6);
6515 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6516 assert_eq!(some_count(&pairs, 0), 51);
6517 assert_eq!(none_count(&pairs, 0), 0);
6518 assert_eq!(some_count(&pairs, 1), 41);
6519 assert_eq!(none_count(&pairs, 1), 10);
6520 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6521 assert_eq!(some_count(&pairs, 0), 51);
6522 assert_eq!(none_count(&pairs, 0), 0);
6523 assert_eq!(some_count(&pairs, 1), 51);
6524 assert_eq!(none_count(&pairs, 1), 0);
6525 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6526 assert_eq!(some_count(&pairs, 0), 51);
6527 assert_eq!(none_count(&pairs, 0), 0);
6528 assert_eq!(some_count(&pairs, 1), 51);
6529 assert_eq!(none_count(&pairs, 1), 0);
6530 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6531 assert_eq!(some_count(&pairs, 0), 51);
6532 assert_eq!(none_count(&pairs, 0), 0);
6533 assert_eq!(some_count(&pairs, 1), 51);
6534 assert_eq!(none_count(&pairs, 1), 0);
6535 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6536 assert_eq!(some_count(&pairs, 0), 51);
6537 assert_eq!(none_count(&pairs, 0), 0);
6538 assert_eq!(some_count(&pairs, 1), 51);
6539 assert_eq!(none_count(&pairs, 1), 0);
6540 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6541 assert_eq!(some_count(&pairs, 0), 51);
6542 assert_eq!(none_count(&pairs, 0), 0);
6543 assert_eq!(some_count(&pairs, 1), 42);
6544 assert_eq!(none_count(&pairs, 1), 9);
6545 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6546 assert_eq!(some_count(&pairs, 0), 51);
6547 assert_eq!(none_count(&pairs, 0), 0);
6548 assert_eq!(some_count(&pairs, 1), 51);
6549 assert_eq!(none_count(&pairs, 1), 0);
6550 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6551 assert_eq!(some_count(&pairs, 0), 51);
6552 assert_eq!(none_count(&pairs, 0), 0);
6553 assert_eq!(some_count(&pairs, 1), 50);
6554 assert_eq!(none_count(&pairs, 1), 1);
6555 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6556 assert_eq!(some_count(&pairs, 0), 51);
6557 assert_eq!(none_count(&pairs, 0), 0);
6558 assert_eq!(some_count(&pairs, 1), 45);
6559 assert_eq!(none_count(&pairs, 1), 6);
6560 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6561 assert_eq!(some_count(&pairs, 0), 51);
6562 assert_eq!(none_count(&pairs, 0), 0);
6563 assert_eq!(some_count(&pairs, 1), 48);
6564 assert_eq!(none_count(&pairs, 1), 3);
6565 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6566 assert_eq!(some_count(&pairs, 0), 51);
6567 assert_eq!(none_count(&pairs, 0), 0);
6568 assert_eq!(some_count(&pairs, 1), 42);
6569 assert_eq!(none_count(&pairs, 1), 9);
6570 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6571 assert_eq!(some_count(&pairs, 0), 51);
6572 assert_eq!(none_count(&pairs, 0), 0);
6573 assert_eq!(some_count(&pairs, 1), 38);
6574 assert_eq!(none_count(&pairs, 1), 13);
6575 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6576 assert_eq!(some_count(&pairs, 0), 51);
6577 assert_eq!(none_count(&pairs, 0), 0);
6578 assert_eq!(some_count(&pairs, 1), 44);
6579 assert_eq!(none_count(&pairs, 1), 7);
6580 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6581 assert_eq!(some_count(&pairs, 0), 51);
6582 assert_eq!(none_count(&pairs, 0), 0);
6583 assert_eq!(some_count(&pairs, 1), 46);
6584 assert_eq!(none_count(&pairs, 1), 5);
6585 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6586 assert_eq!(some_count(&pairs, 0), 51);
6587 assert_eq!(none_count(&pairs, 0), 0);
6588 assert_eq!(some_count(&pairs, 1), 47);
6589 assert_eq!(none_count(&pairs, 1), 4);
6590 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6591 assert_eq!(some_count(&pairs, 0), 51);
6592 assert_eq!(none_count(&pairs, 0), 0);
6593 assert_eq!(some_count(&pairs, 1), 50);
6594 assert_eq!(none_count(&pairs, 1), 1);
6595 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6596 assert_eq!(some_count(&pairs, 0), 51);
6597 assert_eq!(none_count(&pairs, 0), 2183);
6598 assert_eq!(some_count(&pairs, 1), 2234);
6599 assert_eq!(none_count(&pairs, 1), 0);
6600 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6601 assert_eq!(some_count(&pairs, 0), 51);
6602 assert_eq!(none_count(&pairs, 0), 2183);
6603 assert_eq!(some_count(&pairs, 1), 2234);
6604 assert_eq!(none_count(&pairs, 1), 0);
6605 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6606 assert_eq!(some_count(&pairs, 0), 51);
6607 assert_eq!(none_count(&pairs, 0), 2183);
6608 assert_eq!(some_count(&pairs, 1), 2234);
6609 assert_eq!(none_count(&pairs, 1), 0);
6610 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6611 assert_eq!(some_count(&pairs, 0), 51);
6612 assert_eq!(none_count(&pairs, 0), 0);
6613 assert_eq!(some_count(&pairs, 1), 33);
6614 assert_eq!(none_count(&pairs, 1), 18);
6615 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6616 assert_eq!(some_count(&pairs, 0), 51);
6617 assert_eq!(none_count(&pairs, 0), 0);
6618 assert_eq!(some_count(&pairs, 1), 48);
6619 assert_eq!(none_count(&pairs, 1), 3);
6620 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6621 assert_eq!(some_count(&pairs, 0), 51);
6622 assert_eq!(none_count(&pairs, 0), 0);
6623 assert_eq!(some_count(&pairs, 1), 45);
6624 assert_eq!(none_count(&pairs, 1), 6);
6625 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6626 assert_eq!(some_count(&pairs, 0), 51);
6627 assert_eq!(none_count(&pairs, 0), 11832);
6628 assert_eq!(some_count(&pairs, 1), 11883);
6629 assert_eq!(none_count(&pairs, 1), 0);
6630 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6631 assert_eq!(some_count(&pairs, 0), 51);
6632 assert_eq!(none_count(&pairs, 0), 12542);
6633 assert_eq!(some_count(&pairs, 1), 12593);
6634 assert_eq!(none_count(&pairs, 1), 0);
6635 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6636 assert_eq!(some_count(&pairs, 0), 51);
6637 assert_eq!(none_count(&pairs, 0), 12542);
6638 assert_eq!(some_count(&pairs, 1), 12593);
6639 assert_eq!(none_count(&pairs, 1), 0);
6640 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6641 assert_eq!(some_count(&pairs, 0), 51);
6642 assert_eq!(none_count(&pairs, 0), 12542);
6643 assert_eq!(some_count(&pairs, 1), 12593);
6644 assert_eq!(none_count(&pairs, 1), 0);
6645 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6646 assert_eq!(some_count(&pairs, 0), 51);
6647 assert_eq!(none_count(&pairs, 0), 12542);
6648 assert_eq!(some_count(&pairs, 1), 12593);
6649 assert_eq!(none_count(&pairs, 1), 0);
6650 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6651 assert_eq!(some_count(&pairs, 0), 51);
6652 assert_eq!(none_count(&pairs, 0), 12542);
6653 assert_eq!(some_count(&pairs, 1), 12593);
6654 assert_eq!(none_count(&pairs, 1), 0);
6655 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6656 assert_eq!(some_count(&pairs, 0), 51);
6657 assert_eq!(none_count(&pairs, 0), 12542);
6658 assert_eq!(some_count(&pairs, 1), 12593);
6659 assert_eq!(none_count(&pairs, 1), 0);
6660 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6661 assert_eq!(some_count(&pairs, 0), 51);
6662 assert_eq!(none_count(&pairs, 0), 12542);
6663 assert_eq!(some_count(&pairs, 1), 12593);
6664 assert_eq!(none_count(&pairs, 1), 0);
6665 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6666 assert_eq!(some_count(&pairs, 0), 51);
6667 assert_eq!(none_count(&pairs, 0), 12542);
6668 assert_eq!(some_count(&pairs, 1), 12593);
6669 assert_eq!(none_count(&pairs, 1), 0);
6670 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6671 assert_eq!(some_count(&pairs, 0), 51);
6672 assert_eq!(none_count(&pairs, 0), 1467);
6673 assert_eq!(some_count(&pairs, 1), 1517);
6674 assert_eq!(none_count(&pairs, 1), 1);
6675 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6676 assert_eq!(some_count(&pairs, 0), 51);
6677 assert_eq!(none_count(&pairs, 0), 1609);
6678 assert_eq!(some_count(&pairs, 1), 1660);
6679 assert_eq!(none_count(&pairs, 1), 0);
6680 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6681 assert_eq!(some_count(&pairs, 0), 51);
6682 assert_eq!(none_count(&pairs, 0), 1609);
6683 assert_eq!(some_count(&pairs, 1), 1660);
6684 assert_eq!(none_count(&pairs, 1), 0);
6685 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6686 assert_eq!(some_count(&pairs, 0), 51);
6687 assert_eq!(none_count(&pairs, 0), 1609);
6688 assert_eq!(some_count(&pairs, 1), 1660);
6689 assert_eq!(none_count(&pairs, 1), 0);
6690 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6691 assert_eq!(some_count(&pairs, 0), 51);
6692 assert_eq!(none_count(&pairs, 0), 95);
6693 assert_eq!(some_count(&pairs, 1), 145);
6694 assert_eq!(none_count(&pairs, 1), 1);
6695 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6696 assert_eq!(some_count(&pairs, 0), 51);
6697 assert_eq!(none_count(&pairs, 0), 538);
6698 assert_eq!(some_count(&pairs, 1), 588);
6699 assert_eq!(none_count(&pairs, 1), 1);
6700 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6701 assert_eq!(some_count(&pairs, 0), 51);
6702 assert_eq!(none_count(&pairs, 0), 538);
6703 assert_eq!(some_count(&pairs, 1), 588);
6704 assert_eq!(none_count(&pairs, 1), 1);
6705 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6706 assert_eq!(some_count(&pairs, 0), 51);
6707 assert_eq!(none_count(&pairs, 0), 538);
6708 assert_eq!(some_count(&pairs, 1), 588);
6709 assert_eq!(none_count(&pairs, 1), 1);
6710 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6711 assert_eq!(some_count(&pairs, 0), 51);
6712 assert_eq!(none_count(&pairs, 0), 1);
6713 assert_eq!(some_count(&pairs, 1), 51);
6714 assert_eq!(none_count(&pairs, 1), 1);
6715 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6716 assert_eq!(some_count(&pairs, 0), 51);
6717 assert_eq!(none_count(&pairs, 0), 1);
6718 assert_eq!(some_count(&pairs, 1), 49);
6719 assert_eq!(none_count(&pairs, 1), 3);
6720 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6721 assert_eq!(some_count(&pairs, 0), 51);
6722 assert_eq!(none_count(&pairs, 0), 1);
6723 assert_eq!(some_count(&pairs, 1), 45);
6724 assert_eq!(none_count(&pairs, 1), 7);
6725 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6726 assert_eq!(some_count(&pairs, 0), 51);
6727 assert_eq!(none_count(&pairs, 0), 0);
6728 assert_eq!(some_count(&pairs, 1), 39);
6729 assert_eq!(none_count(&pairs, 1), 12);
6730 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6731 assert_eq!(some_count(&pairs, 0), 51);
6732 assert_eq!(none_count(&pairs, 0), 1892);
6733 assert_eq!(some_count(&pairs, 1), 1938);
6734 assert_eq!(none_count(&pairs, 1), 5);
6735 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6736 assert_eq!(some_count(&pairs, 0), 51);
6737 assert_eq!(none_count(&pairs, 0), 1892);
6738 assert_eq!(some_count(&pairs, 1), 1941);
6739 assert_eq!(none_count(&pairs, 1), 2);
6740 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6741 assert_eq!(some_count(&pairs, 0), 51);
6742 assert_eq!(none_count(&pairs, 0), 2288);
6743 assert_eq!(some_count(&pairs, 1), 2338);
6744 assert_eq!(none_count(&pairs, 1), 1);
6745 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6746 assert_eq!(some_count(&pairs, 0), 51);
6747 assert_eq!(none_count(&pairs, 0), 14680);
6748 assert_eq!(some_count(&pairs, 1), 14729);
6749 assert_eq!(none_count(&pairs, 1), 2);
6750 let pairs: Vec<_> = it.next().unwrap().unwrap().aligned_pairs_full().collect();
6751 assert_eq!(some_count(&pairs, 0), 51);
6752 assert_eq!(none_count(&pairs, 0), 4027);
6753 assert_eq!(some_count(&pairs, 1), 4074);
6754 assert_eq!(none_count(&pairs, 1), 4);
6755 }
6756
6757 #[test]
6758 fn test_aligned_block_pairs() {
6759 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
6760 let mut it = bam.records();
6761
6762 let read = it.next().unwrap().unwrap();
6763 let pairs: Vec<_> = read.aligned_pairs().collect();
6764 let block_pairs: Vec<_> = read.aligned_block_pairs().collect();
6765
6766 assert_eq!(pairs[0][0], block_pairs[0].0[0]); assert_eq!(pairs[0][1], block_pairs[0].1[0]); assert_eq!(
6772 pairs[pairs.len() - 1][0],
6773 block_pairs[block_pairs.len() - 1].0[1] - 1
6774 );
6775 assert_eq!(
6776 pairs[pairs.len() - 1][1],
6777 block_pairs[block_pairs.len() - 1].1[1] - 1
6778 );
6779
6780 for read in it {
6782 let read = read.unwrap();
6783 let pairs: Vec<_> = read.aligned_pairs().collect();
6784 let block_pairs: Vec<_> = read.aligned_block_pairs().collect();
6785 let mut ii = 0;
6786 for ([read_start, read_stop], [genome_start, genome_stop]) in block_pairs {
6787 assert_eq!(read_stop - read_start, genome_stop - genome_start);
6788 for (read_pos, genome_pos) in (read_start..read_stop).zip(genome_start..genome_stop)
6789 {
6790 assert_eq!(pairs[ii][0], read_pos);
6791 assert_eq!(pairs[ii][1], genome_pos);
6792 ii += 1;
6793 }
6794 }
6795 }
6796 }
6797
6798 #[test]
6799 fn test_get_cigar_stats() {
6800 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
6801 let mut it = bam.records();
6802
6803 fn to_arr(hm: HashMap<Cigar, i32>) -> [i32; 9] {
6804 [
6805 *hm.get(&Cigar::Match(0)).unwrap(),
6806 *hm.get(&Cigar::Ins(0)).unwrap(),
6807 *hm.get(&Cigar::Del(0)).unwrap(),
6808 *hm.get(&Cigar::RefSkip(0)).unwrap(),
6809 *hm.get(&Cigar::SoftClip(0)).unwrap(),
6810 *hm.get(&Cigar::HardClip(0)).unwrap(),
6811 *hm.get(&Cigar::Pad(0)).unwrap(),
6812 *hm.get(&Cigar::Equal(0)).unwrap(),
6813 *hm.get(&Cigar::Diff(0)).unwrap(),
6814 ]
6815 }
6816
6817 let read = it.next().unwrap().unwrap();
6818 let cigar_nucleotides = read.cigar_stats_nucleotides();
6819 assert_eq!(to_arr(cigar_nucleotides), [45, 0, 0, 0, 6, 0, 0, 0, 0]);
6820 let cigar_blocks = read.cigar_stats_blocks();
6821 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6822 let read = it.next().unwrap().unwrap();
6823 let cigar_nucleotides = read.cigar_stats_nucleotides();
6824 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 2, 0, 0, 0, 0, 0, 0]);
6825 let cigar_blocks = read.cigar_stats_blocks();
6826 assert_eq!(to_arr(cigar_blocks), [2, 0, 1, 0, 0, 0, 0, 0, 0]);
6827 let read = it.next().unwrap().unwrap();
6828 let cigar_nucleotides = read.cigar_stats_nucleotides();
6829 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 2, 0, 0, 0, 0, 0, 0]);
6830 let cigar_blocks = read.cigar_stats_blocks();
6831 assert_eq!(to_arr(cigar_blocks), [2, 0, 1, 0, 0, 0, 0, 0, 0]);
6832 let read = it.next().unwrap().unwrap();
6833 let cigar_nucleotides = read.cigar_stats_nucleotides();
6834 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6835 let cigar_blocks = read.cigar_stats_blocks();
6836 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6837 let read = it.next().unwrap().unwrap();
6838 let cigar_nucleotides = read.cigar_stats_nucleotides();
6839 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6840 let cigar_blocks = read.cigar_stats_blocks();
6841 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6842 let read = it.next().unwrap().unwrap();
6843 let cigar_nucleotides = read.cigar_stats_nucleotides();
6844 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6845 let cigar_blocks = read.cigar_stats_blocks();
6846 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6847 let read = it.next().unwrap().unwrap();
6848 let cigar_nucleotides = read.cigar_stats_nucleotides();
6849 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6850 let cigar_blocks = read.cigar_stats_blocks();
6851 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6852 let read = it.next().unwrap().unwrap();
6853 let cigar_nucleotides = read.cigar_stats_nucleotides();
6854 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6855 let cigar_blocks = read.cigar_stats_blocks();
6856 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6857 let read = it.next().unwrap().unwrap();
6858 let cigar_nucleotides = read.cigar_stats_nucleotides();
6859 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6860 let cigar_blocks = read.cigar_stats_blocks();
6861 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6862 let read = it.next().unwrap().unwrap();
6863 let cigar_nucleotides = read.cigar_stats_nucleotides();
6864 assert_eq!(to_arr(cigar_nucleotides), [45, 0, 0, 0, 6, 0, 0, 0, 0]);
6865 let cigar_blocks = read.cigar_stats_blocks();
6866 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6867 let read = it.next().unwrap().unwrap();
6868 let cigar_nucleotides = read.cigar_stats_nucleotides();
6869 assert_eq!(to_arr(cigar_nucleotides), [41, 0, 0, 0, 10, 0, 0, 0, 0]);
6870 let cigar_blocks = read.cigar_stats_blocks();
6871 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6872 let read = it.next().unwrap().unwrap();
6873 let cigar_nucleotides = read.cigar_stats_nucleotides();
6874 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6875 let cigar_blocks = read.cigar_stats_blocks();
6876 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6877 let read = it.next().unwrap().unwrap();
6878 let cigar_nucleotides = read.cigar_stats_nucleotides();
6879 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6880 let cigar_blocks = read.cigar_stats_blocks();
6881 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6882 let read = it.next().unwrap().unwrap();
6883 let cigar_nucleotides = read.cigar_stats_nucleotides();
6884 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6885 let cigar_blocks = read.cigar_stats_blocks();
6886 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6887 let read = it.next().unwrap().unwrap();
6888 let cigar_nucleotides = read.cigar_stats_nucleotides();
6889 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6890 let cigar_blocks = read.cigar_stats_blocks();
6891 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6892 let read = it.next().unwrap().unwrap();
6893 let cigar_nucleotides = read.cigar_stats_nucleotides();
6894 assert_eq!(to_arr(cigar_nucleotides), [42, 0, 0, 0, 9, 0, 0, 0, 0]);
6895 let cigar_blocks = read.cigar_stats_blocks();
6896 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6897 let read = it.next().unwrap().unwrap();
6898 let cigar_nucleotides = read.cigar_stats_nucleotides();
6899 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 0, 0, 0, 0, 0, 0]);
6900 let cigar_blocks = read.cigar_stats_blocks();
6901 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 0, 0, 0, 0, 0]);
6902 let read = it.next().unwrap().unwrap();
6903 let cigar_nucleotides = read.cigar_stats_nucleotides();
6904 assert_eq!(to_arr(cigar_nucleotides), [50, 0, 0, 0, 1, 0, 0, 0, 0]);
6905 let cigar_blocks = read.cigar_stats_blocks();
6906 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6907 let read = it.next().unwrap().unwrap();
6908 let cigar_nucleotides = read.cigar_stats_nucleotides();
6909 assert_eq!(to_arr(cigar_nucleotides), [45, 0, 0, 0, 6, 0, 0, 0, 0]);
6910 let cigar_blocks = read.cigar_stats_blocks();
6911 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6912 let read = it.next().unwrap().unwrap();
6913 let cigar_nucleotides = read.cigar_stats_nucleotides();
6914 assert_eq!(to_arr(cigar_nucleotides), [48, 0, 0, 0, 3, 0, 0, 0, 0]);
6915 let cigar_blocks = read.cigar_stats_blocks();
6916 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6917 let read = it.next().unwrap().unwrap();
6918 let cigar_nucleotides = read.cigar_stats_nucleotides();
6919 assert_eq!(to_arr(cigar_nucleotides), [42, 0, 0, 0, 9, 0, 0, 0, 0]);
6920 let cigar_blocks = read.cigar_stats_blocks();
6921 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6922 let read = it.next().unwrap().unwrap();
6923 let cigar_nucleotides = read.cigar_stats_nucleotides();
6924 assert_eq!(to_arr(cigar_nucleotides), [38, 0, 0, 0, 13, 0, 0, 0, 0]);
6925 let cigar_blocks = read.cigar_stats_blocks();
6926 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6927 let read = it.next().unwrap().unwrap();
6928 let cigar_nucleotides = read.cigar_stats_nucleotides();
6929 assert_eq!(to_arr(cigar_nucleotides), [44, 0, 0, 0, 7, 0, 0, 0, 0]);
6930 let cigar_blocks = read.cigar_stats_blocks();
6931 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6932 let read = it.next().unwrap().unwrap();
6933 let cigar_nucleotides = read.cigar_stats_nucleotides();
6934 assert_eq!(to_arr(cigar_nucleotides), [46, 0, 0, 0, 5, 0, 0, 0, 0]);
6935 let cigar_blocks = read.cigar_stats_blocks();
6936 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 1, 0, 0, 0, 0]);
6937 let read = it.next().unwrap().unwrap();
6938 let cigar_nucleotides = read.cigar_stats_nucleotides();
6939 assert_eq!(to_arr(cigar_nucleotides), [47, 4, 0, 0, 0, 0, 0, 0, 0]);
6940 let cigar_blocks = read.cigar_stats_blocks();
6941 assert_eq!(to_arr(cigar_blocks), [2, 1, 0, 0, 0, 0, 0, 0, 0]);
6942 let read = it.next().unwrap().unwrap();
6943 let cigar_nucleotides = read.cigar_stats_nucleotides();
6944 assert_eq!(to_arr(cigar_nucleotides), [50, 1, 0, 0, 0, 0, 0, 0, 0]);
6945 let cigar_blocks = read.cigar_stats_blocks();
6946 assert_eq!(to_arr(cigar_blocks), [2, 1, 0, 0, 0, 0, 0, 0, 0]);
6947 let read = it.next().unwrap().unwrap();
6948 let cigar_nucleotides = read.cigar_stats_nucleotides();
6949 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 2183, 0, 0, 0, 0, 0]);
6950 let cigar_blocks = read.cigar_stats_blocks();
6951 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 0, 0, 0, 0, 0]);
6952 let read = it.next().unwrap().unwrap();
6953 let cigar_nucleotides = read.cigar_stats_nucleotides();
6954 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 2183, 0, 0, 0, 0, 0]);
6955 let cigar_blocks = read.cigar_stats_blocks();
6956 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 0, 0, 0, 0, 0]);
6957 let read = it.next().unwrap().unwrap();
6958 let cigar_nucleotides = read.cigar_stats_nucleotides();
6959 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 2183, 0, 0, 0, 0, 0]);
6960 let cigar_blocks = read.cigar_stats_blocks();
6961 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 0, 0, 0, 0, 0]);
6962 let read = it.next().unwrap().unwrap();
6963 let cigar_nucleotides = read.cigar_stats_nucleotides();
6964 assert_eq!(to_arr(cigar_nucleotides), [33, 0, 0, 0, 18, 0, 0, 0, 0]);
6965 let cigar_blocks = read.cigar_stats_blocks();
6966 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 2, 0, 0, 0, 0]);
6967 let read = it.next().unwrap().unwrap();
6968 let cigar_nucleotides = read.cigar_stats_nucleotides();
6969 assert_eq!(to_arr(cigar_nucleotides), [48, 0, 0, 0, 3, 0, 0, 0, 0]);
6970 let cigar_blocks = read.cigar_stats_blocks();
6971 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 2, 0, 0, 0, 0]);
6972 let read = it.next().unwrap().unwrap();
6973 let cigar_nucleotides = read.cigar_stats_nucleotides();
6974 assert_eq!(to_arr(cigar_nucleotides), [45, 0, 0, 0, 6, 0, 0, 0, 0]);
6975 let cigar_blocks = read.cigar_stats_blocks();
6976 assert_eq!(to_arr(cigar_blocks), [1, 0, 0, 0, 2, 0, 0, 0, 0]);
6977 let read = it.next().unwrap().unwrap();
6978 let cigar_nucleotides = read.cigar_stats_nucleotides();
6979 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 11832, 0, 0, 0, 0, 0]);
6980 let cigar_blocks = read.cigar_stats_blocks();
6981 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 0, 0, 0, 0, 0]);
6982 let read = it.next().unwrap().unwrap();
6983 let cigar_nucleotides = read.cigar_stats_nucleotides();
6984 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 12542, 0, 0, 0, 0, 0],);
6985 let cigar_blocks = read.cigar_stats_blocks();
6986 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
6987 let read = it.next().unwrap().unwrap();
6988 let cigar_nucleotides = read.cigar_stats_nucleotides();
6989 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 12542, 0, 0, 0, 0, 0],);
6990 let cigar_blocks = read.cigar_stats_blocks();
6991 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
6992 let read = it.next().unwrap().unwrap();
6993 let cigar_nucleotides = read.cigar_stats_nucleotides();
6994 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 12542, 0, 0, 0, 0, 0],);
6995 let cigar_blocks = read.cigar_stats_blocks();
6996 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
6997 let read = it.next().unwrap().unwrap();
6998 let cigar_nucleotides = read.cigar_stats_nucleotides();
6999 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 12542, 0, 0, 0, 0, 0],);
7000 let cigar_blocks = read.cigar_stats_blocks();
7001 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
7002 let read = it.next().unwrap().unwrap();
7003 let cigar_nucleotides = read.cigar_stats_nucleotides();
7004 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 12542, 0, 0, 0, 0, 0],);
7005 let cigar_blocks = read.cigar_stats_blocks();
7006 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
7007 let read = it.next().unwrap().unwrap();
7008 let cigar_nucleotides = read.cigar_stats_nucleotides();
7009 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 12542, 0, 0, 0, 0, 0],);
7010 let cigar_blocks = read.cigar_stats_blocks();
7011 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
7012 let read = it.next().unwrap().unwrap();
7013 let cigar_nucleotides = read.cigar_stats_nucleotides();
7014 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 12542, 0, 0, 0, 0, 0],);
7015 let cigar_blocks = read.cigar_stats_blocks();
7016 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
7017 let read = it.next().unwrap().unwrap();
7018 let cigar_nucleotides = read.cigar_stats_nucleotides();
7019 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 12542, 0, 0, 0, 0, 0],);
7020 let cigar_blocks = read.cigar_stats_blocks();
7021 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
7022 let read = it.next().unwrap().unwrap();
7023 let cigar_nucleotides = read.cigar_stats_nucleotides();
7024 assert_eq!(to_arr(cigar_nucleotides), [50, 0, 0, 1467, 1, 0, 0, 0, 0]);
7025 let cigar_blocks = read.cigar_stats_blocks();
7026 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 1, 0, 0, 0, 0]);
7027 let read = it.next().unwrap().unwrap();
7028 let cigar_nucleotides = read.cigar_stats_nucleotides();
7029 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 1609, 0, 0, 0, 0, 0]);
7030 let cigar_blocks = read.cigar_stats_blocks();
7031 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
7032 let read = it.next().unwrap().unwrap();
7033 let cigar_nucleotides = read.cigar_stats_nucleotides();
7034 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 1609, 0, 0, 0, 0, 0]);
7035 let cigar_blocks = read.cigar_stats_blocks();
7036 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
7037 let read = it.next().unwrap().unwrap();
7038 let cigar_nucleotides = read.cigar_stats_nucleotides();
7039 assert_eq!(to_arr(cigar_nucleotides), [51, 0, 0, 1609, 0, 0, 0, 0, 0]);
7040 let cigar_blocks = read.cigar_stats_blocks();
7041 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 0, 0, 0, 0, 0]);
7042 let read = it.next().unwrap().unwrap();
7043 let cigar_nucleotides = read.cigar_stats_nucleotides();
7044 assert_eq!(to_arr(cigar_nucleotides), [50, 0, 0, 95, 1, 0, 0, 0, 0]);
7045 let cigar_blocks = read.cigar_stats_blocks();
7046 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 1, 0, 0, 0, 0]);
7047 let read = it.next().unwrap().unwrap();
7048 let cigar_nucleotides = read.cigar_stats_nucleotides();
7049 assert_eq!(to_arr(cigar_nucleotides), [50, 0, 0, 538, 1, 0, 0, 0, 0]);
7050 let cigar_blocks = read.cigar_stats_blocks();
7051 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 1, 0, 0, 0, 0]);
7052 let read = it.next().unwrap().unwrap();
7053 let cigar_nucleotides = read.cigar_stats_nucleotides();
7054 assert_eq!(to_arr(cigar_nucleotides), [50, 0, 0, 538, 1, 0, 0, 0, 0]);
7055 let cigar_blocks = read.cigar_stats_blocks();
7056 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 1, 0, 0, 0, 0]);
7057 let read = it.next().unwrap().unwrap();
7058 let cigar_nucleotides = read.cigar_stats_nucleotides();
7059 assert_eq!(to_arr(cigar_nucleotides), [50, 0, 0, 538, 1, 0, 0, 0, 0]);
7060 let cigar_blocks = read.cigar_stats_blocks();
7061 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 1, 0, 0, 0, 0]);
7062 let read = it.next().unwrap().unwrap();
7063 let cigar_nucleotides = read.cigar_stats_nucleotides();
7064 assert_eq!(to_arr(cigar_nucleotides), [50, 0, 1, 0, 1, 0, 0, 0, 0]);
7065 let cigar_blocks = read.cigar_stats_blocks();
7066 assert_eq!(to_arr(cigar_blocks), [2, 0, 1, 0, 1, 0, 0, 0, 0]);
7067 let read = it.next().unwrap().unwrap();
7068 let cigar_nucleotides = read.cigar_stats_nucleotides();
7069 assert_eq!(to_arr(cigar_nucleotides), [48, 0, 1, 0, 3, 0, 0, 0, 0]);
7070 let cigar_blocks = read.cigar_stats_blocks();
7071 assert_eq!(to_arr(cigar_blocks), [2, 0, 1, 0, 1, 0, 0, 0, 0]);
7072 let read = it.next().unwrap().unwrap();
7073 let cigar_nucleotides = read.cigar_stats_nucleotides();
7074 assert_eq!(to_arr(cigar_nucleotides), [44, 0, 1, 0, 7, 0, 0, 0, 0]);
7075 let cigar_blocks = read.cigar_stats_blocks();
7076 assert_eq!(to_arr(cigar_blocks), [2, 0, 1, 0, 1, 0, 0, 0, 0]);
7077 let read = it.next().unwrap().unwrap();
7078 let cigar_nucleotides = read.cigar_stats_nucleotides();
7079 assert_eq!(to_arr(cigar_nucleotides), [39, 1, 0, 0, 11, 0, 0, 0, 0]);
7080 let cigar_blocks = read.cigar_stats_blocks();
7081 assert_eq!(to_arr(cigar_blocks), [2, 1, 0, 0, 1, 0, 0, 0, 0]);
7082 let read = it.next().unwrap().unwrap();
7083 let cigar_nucleotides = read.cigar_stats_nucleotides();
7084 assert_eq!(to_arr(cigar_nucleotides), [46, 0, 0, 1892, 5, 0, 0, 0, 0]);
7085 let cigar_blocks = read.cigar_stats_blocks();
7086 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 1, 0, 0, 0, 0]);
7087 let read = it.next().unwrap().unwrap();
7088 let cigar_nucleotides = read.cigar_stats_nucleotides();
7089 assert_eq!(to_arr(cigar_nucleotides), [49, 0, 0, 1892, 2, 0, 0, 0, 0]);
7090 let cigar_blocks = read.cigar_stats_blocks();
7091 assert_eq!(to_arr(cigar_blocks), [2, 0, 0, 1, 1, 0, 0, 0, 0]);
7092 let read = it.next().unwrap().unwrap();
7093 let cigar_nucleotides = read.cigar_stats_nucleotides();
7094 assert_eq!(to_arr(cigar_nucleotides), [50, 0, 3, 2285, 1, 0, 0, 0, 0]);
7095 let cigar_blocks = read.cigar_stats_blocks();
7096 assert_eq!(to_arr(cigar_blocks), [3, 0, 1, 1, 1, 0, 0, 0, 0]);
7097 let read = it.next().unwrap().unwrap();
7098 let cigar_nucleotides = read.cigar_stats_nucleotides();
7099 assert_eq!(to_arr(cigar_nucleotides), [49, 0, 0, 14680, 2, 0, 0, 0, 0],);
7100 let cigar_blocks = read.cigar_stats_blocks();
7101 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 1, 0, 0, 0, 0]);
7102 let read = it.next().unwrap().unwrap();
7103 let cigar_nucleotides = read.cigar_stats_nucleotides();
7104 assert_eq!(to_arr(cigar_nucleotides), [47, 0, 0, 4027, 4, 0, 0, 0, 0]);
7105 let cigar_blocks = read.cigar_stats_blocks();
7106 assert_eq!(to_arr(cigar_blocks), [3, 0, 0, 2, 1, 0, 0, 0, 0]);
7107 }
7108
7109 #[test]
7110 fn test_reference_positions() {
7111 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
7112 let mut it = bam.records();
7113
7114 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7115 assert_eq!(
7116 rp,
7117 vec![
7118 16050676, 16050677, 16050678, 16050679, 16050680, 16050681, 16050682, 16050683,
7119 16050684, 16050685, 16050686, 16050687, 16050688, 16050689, 16050690, 16050691,
7120 16050692, 16050693, 16050694, 16050695, 16050696, 16050697, 16050698, 16050699,
7121 16050700, 16050701, 16050702, 16050703, 16050704, 16050705, 16050706, 16050707,
7122 16050708, 16050709, 16050710, 16050711, 16050712, 16050713, 16050714, 16050715,
7123 16050716, 16050717, 16050718, 16050719, 16050720
7124 ]
7125 );
7126 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7127 assert_eq!(
7128 rp,
7129 vec![
7130 16096878, 16096879, 16096880, 16096881, 16096882, 16096883, 16096884, 16096887,
7131 16096888, 16096889, 16096890, 16096891, 16096892, 16096893, 16096894, 16096895,
7132 16096896, 16096897, 16096898, 16096899, 16096900, 16096901, 16096902, 16096903,
7133 16096904, 16096905, 16096906, 16096907, 16096908, 16096909, 16096910, 16096911,
7134 16096912, 16096913, 16096914, 16096915, 16096916, 16096917, 16096918, 16096919,
7135 16096920, 16096921, 16096922, 16096923, 16096924, 16096925, 16096926, 16096927,
7136 16096928, 16096929, 16096930
7137 ]
7138 );
7139 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7140 assert_eq!(
7141 rp,
7142 vec![
7143 16097145, 16097146, 16097147, 16097148, 16097149, 16097150, 16097151, 16097152,
7144 16097153, 16097154, 16097155, 16097156, 16097157, 16097158, 16097159, 16097160,
7145 16097161, 16097162, 16097163, 16097164, 16097165, 16097166, 16097167, 16097168,
7146 16097169, 16097170, 16097171, 16097172, 16097173, 16097176, 16097177, 16097178,
7147 16097179, 16097180, 16097181, 16097182, 16097183, 16097184, 16097185, 16097186,
7148 16097187, 16097188, 16097189, 16097190, 16097191, 16097192, 16097193, 16097194,
7149 16097195, 16097196, 16097197
7150 ]
7151 );
7152 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7153 assert_eq!(
7154 rp,
7155 vec![
7156 16117350, 16117351, 16117352, 16117353, 16117354, 16117355, 16117356, 16117357,
7157 16117358, 16117359, 16117360, 16117361, 16117362, 16117363, 16117364, 16117365,
7158 16117366, 16117367, 16117368, 16117369, 16117370, 16117371, 16117372, 16117373,
7159 16117374, 16117375, 16117376, 16117377, 16117378, 16117379, 16117380, 16117381,
7160 16117382, 16117383, 16117384, 16117385, 16117386, 16117387, 16117388, 16117389,
7161 16117390, 16117391, 16117392, 16117393, 16117394, 16117395, 16117396, 16117397,
7162 16117398, 16117399, 16117400
7163 ]
7164 );
7165 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7166 assert_eq!(
7167 rp,
7168 vec![
7169 16118483, 16118484, 16118485, 16118486, 16118487, 16118488, 16118489, 16118490,
7170 16118491, 16118492, 16118493, 16118494, 16118495, 16118496, 16118497, 16118498,
7171 16118499, 16118500, 16118501, 16118502, 16118503, 16118504, 16118505, 16118506,
7172 16118507, 16118508, 16118509, 16118510, 16118511, 16118512, 16118513, 16118514,
7173 16118515, 16118516, 16118517, 16118518, 16118519, 16118520, 16118521, 16118522,
7174 16118523, 16118524, 16118525, 16118526, 16118527, 16118528, 16118529, 16118530,
7175 16118531, 16118532, 16118533
7176 ]
7177 );
7178 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7179 assert_eq!(
7180 rp,
7181 vec![
7182 16118499, 16118500, 16118501, 16118502, 16118503, 16118504, 16118505, 16118506,
7183 16118507, 16118508, 16118509, 16118510, 16118511, 16118512, 16118513, 16118514,
7184 16118515, 16118516, 16118517, 16118518, 16118519, 16118520, 16118521, 16118522,
7185 16118523, 16118524, 16118525, 16118526, 16118527, 16118528, 16118529, 16118530,
7186 16118531, 16118532, 16118533, 16118534, 16118535, 16118536, 16118537, 16118538,
7187 16118539, 16118540, 16118541, 16118542, 16118543, 16118544, 16118545, 16118546,
7188 16118547, 16118548, 16118549
7189 ]
7190 );
7191 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7192 assert_eq!(
7193 rp,
7194 vec![
7195 16118499, 16118500, 16118501, 16118502, 16118503, 16118504, 16118505, 16118506,
7196 16118507, 16118508, 16118509, 16118510, 16118511, 16118512, 16118513, 16118514,
7197 16118515, 16118516, 16118517, 16118518, 16118519, 16118520, 16118521, 16118522,
7198 16118523, 16118524, 16118525, 16118526, 16118527, 16118528, 16118529, 16118530,
7199 16118531, 16118532, 16118533, 16118534, 16118535, 16118536, 16118537, 16118538,
7200 16118539, 16118540, 16118541, 16118542, 16118543, 16118544, 16118545, 16118546,
7201 16118547, 16118548, 16118549
7202 ]
7203 );
7204 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7205 assert_eq!(
7206 rp,
7207 vec![
7208 16118499, 16118500, 16118501, 16118502, 16118503, 16118504, 16118505, 16118506,
7209 16118507, 16118508, 16118509, 16118510, 16118511, 16118512, 16118513, 16118514,
7210 16118515, 16118516, 16118517, 16118518, 16118519, 16118520, 16118521, 16118522,
7211 16118523, 16118524, 16118525, 16118526, 16118527, 16118528, 16118529, 16118530,
7212 16118531, 16118532, 16118533, 16118534, 16118535, 16118536, 16118537, 16118538,
7213 16118539, 16118540, 16118541, 16118542, 16118543, 16118544, 16118545, 16118546,
7214 16118547, 16118548, 16118549
7215 ]
7216 );
7217 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7218 assert_eq!(
7219 rp,
7220 vec![
7221 16123411, 16123412, 16123413, 16123414, 16123415, 16123416, 16123417, 16123418,
7222 16123419, 16123420, 16123421, 16123422, 16123423, 16123424, 16123425, 16123426,
7223 16123427, 16123428, 16123429, 16123430, 16123431, 16123432, 16123433, 16123434,
7224 16123435, 16123436, 16123437, 16123438, 16123439, 16123440, 16123441, 16123442,
7225 16123443, 16123444, 16123445, 16123446, 16123447, 16123448, 16123449, 16123450,
7226 16123451, 16123452, 16123453, 16123454, 16123455, 16123456, 16123457, 16123458,
7227 16123459, 16123460, 16123461
7228 ]
7229 );
7230 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7231 assert_eq!(
7232 rp,
7233 vec![
7234 16123417, 16123418, 16123419, 16123420, 16123421, 16123422, 16123423, 16123424,
7235 16123425, 16123426, 16123427, 16123428, 16123429, 16123430, 16123431, 16123432,
7236 16123433, 16123434, 16123435, 16123436, 16123437, 16123438, 16123439, 16123440,
7237 16123441, 16123442, 16123443, 16123444, 16123445, 16123446, 16123447, 16123448,
7238 16123449, 16123450, 16123451, 16123452, 16123453, 16123454, 16123455, 16123456,
7239 16123457, 16123458, 16123459, 16123460, 16123461
7240 ]
7241 );
7242 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7243 assert_eq!(
7244 rp,
7245 vec![
7246 16165860, 16165861, 16165862, 16165863, 16165864, 16165865, 16165866, 16165867,
7247 16165868, 16165869, 16165870, 16165871, 16165872, 16165873, 16165874, 16165875,
7248 16165876, 16165877, 16165878, 16165879, 16165880, 16165881, 16165882, 16165883,
7249 16165884, 16165885, 16165886, 16165887, 16165888, 16165889, 16165890, 16165891,
7250 16165892, 16165893, 16165894, 16165895, 16165896, 16165897, 16165898, 16165899,
7251 16165900
7252 ]
7253 );
7254 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7255 assert_eq!(
7256 rp,
7257 vec![
7258 16180871, 16180872, 16180873, 16180874, 16180875, 16180876, 16180877, 16180878,
7259 16180879, 16180880, 16180881, 16180882, 16180883, 16180884, 16180885, 16180886,
7260 16180887, 16180888, 16180889, 16180890, 16180891, 16180892, 16180893, 16180894,
7261 16180895, 16180896, 16180897, 16180898, 16180899, 16180900, 16180901, 16180902,
7262 16180903, 16180904, 16180905, 16180906, 16180907, 16180908, 16180909, 16180910,
7263 16180911, 16180912, 16180913, 16180914, 16180915, 16180916, 16180917, 16180918,
7264 16180919, 16180920, 16180921
7265 ]
7266 );
7267 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7268 assert_eq!(
7269 rp,
7270 vec![
7271 16189705, 16189706, 16189707, 16189708, 16189709, 16189710, 16189711, 16189712,
7272 16189713, 16189714, 16189715, 16189716, 16189717, 16189718, 16189719, 16189720,
7273 16189721, 16189722, 16189723, 16189724, 16189725, 16189726, 16189727, 16189728,
7274 16189729, 16189730, 16189731, 16189732, 16189733, 16189734, 16189735, 16189736,
7275 16189737, 16189738, 16189739, 16189740, 16189741, 16189742, 16189743, 16189744,
7276 16189745, 16189746, 16189747, 16189748, 16189749, 16189750, 16189751, 16189752,
7277 16189753, 16189754, 16189755
7278 ]
7279 );
7280 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7281 assert_eq!(
7282 rp,
7283 vec![
7284 16231271, 16231272, 16231273, 16231274, 16231275, 16231276, 16231277, 16231278,
7285 16231279, 16231280, 16231281, 16231282, 16231283, 16231284, 16231285, 16231286,
7286 16231287, 16231288, 16231289, 16231290, 16231291, 16231292, 16231293, 16231294,
7287 16231295, 16231296, 16231297, 16231298, 16231299, 16231300, 16231301, 16231302,
7288 16231303, 16231304, 16231305, 16231306, 16231307, 16231308, 16231309, 16231310,
7289 16231311, 16231312, 16231313, 16231314, 16231315, 16231316, 16231317, 16231318,
7290 16231319, 16231320, 16231321
7291 ]
7292 );
7293 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7294 assert_eq!(
7295 rp,
7296 vec![
7297 16237657, 16237658, 16237659, 16237660, 16237661, 16237662, 16237663, 16237664,
7298 16237665, 16237666, 16237667, 16237668, 16237669, 16237670, 16237671, 16237672,
7299 16237673, 16237674, 16237675, 16237676, 16237677, 16237678, 16237679, 16237680,
7300 16237681, 16237682, 16237683, 16237684, 16237685, 16237686, 16237687, 16237688,
7301 16237689, 16237690, 16237691, 16237692, 16237693, 16237694, 16237695, 16237696,
7302 16237697, 16237698, 16237699, 16237700, 16237701, 16237702, 16237703, 16237704,
7303 16237705, 16237706, 16237707
7304 ]
7305 );
7306 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7307 assert_eq!(
7308 rp,
7309 vec![
7310 16255012, 16255013, 16255014, 16255015, 16255016, 16255017, 16255018, 16255019,
7311 16255020, 16255021, 16255022, 16255023, 16255024, 16255025, 16255026, 16255027,
7312 16255028, 16255029, 16255030, 16255031, 16255032, 16255033, 16255034, 16255035,
7313 16255036, 16255037, 16255038, 16255039, 16255040, 16255041, 16255042, 16255043,
7314 16255044, 16255045, 16255046, 16255047, 16255048, 16255049, 16255050, 16255051,
7315 16255052, 16255053
7316 ]
7317 );
7318 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7319 assert_eq!(
7320 rp,
7321 vec![
7322 16255391, 16255392, 16255393, 16255394, 16255395, 16255396, 16255397, 16255398,
7323 16255399, 16255400, 16255401, 16255402, 16255403, 16255404, 16255405, 16255406,
7324 16255407, 16255408, 16255409, 16255410, 16255411, 16255412, 16255413, 16255414,
7325 16255415, 16255416, 16255417, 16255418, 16255419, 16255420, 16255421, 16255422,
7326 16255423, 16255424, 16255425, 16255426, 16255427, 16255428, 16255429, 16255430,
7327 16255431, 16255432, 16255433, 16255434, 16255435, 16255436, 16255437, 16255438,
7328 16255439, 16255440, 16255441
7329 ]
7330 );
7331 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7332 assert_eq!(
7333 rp,
7334 vec![
7335 16255392, 16255393, 16255394, 16255395, 16255396, 16255397, 16255398, 16255399,
7336 16255400, 16255401, 16255402, 16255403, 16255404, 16255405, 16255406, 16255407,
7337 16255408, 16255409, 16255410, 16255411, 16255412, 16255413, 16255414, 16255415,
7338 16255416, 16255417, 16255418, 16255419, 16255420, 16255421, 16255422, 16255423,
7339 16255424, 16255425, 16255426, 16255427, 16255428, 16255429, 16255430, 16255431,
7340 16255432, 16255433, 16255434, 16255435, 16255436, 16255437, 16255438, 16255439,
7341 16255440, 16255441
7342 ]
7343 );
7344 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7345 assert_eq!(
7346 rp,
7347 vec![
7348 16256084, 16256085, 16256086, 16256087, 16256088, 16256089, 16256090, 16256091,
7349 16256092, 16256093, 16256094, 16256095, 16256096, 16256097, 16256098, 16256099,
7350 16256100, 16256101, 16256102, 16256103, 16256104, 16256105, 16256106, 16256107,
7351 16256108, 16256109, 16256110, 16256111, 16256112, 16256113, 16256114, 16256115,
7352 16256116, 16256117, 16256118, 16256119, 16256120, 16256121, 16256122, 16256123,
7353 16256124, 16256125, 16256126, 16256127, 16256128
7354 ]
7355 );
7356 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7357 assert_eq!(
7358 rp,
7359 vec![
7360 16256224, 16256225, 16256226, 16256227, 16256228, 16256229, 16256230, 16256231,
7361 16256232, 16256233, 16256234, 16256235, 16256236, 16256237, 16256238, 16256239,
7362 16256240, 16256241, 16256242, 16256243, 16256244, 16256245, 16256246, 16256247,
7363 16256248, 16256249, 16256250, 16256251, 16256252, 16256253, 16256254, 16256255,
7364 16256256, 16256257, 16256258, 16256259, 16256260, 16256261, 16256262, 16256263,
7365 16256264, 16256265, 16256266, 16256267, 16256268, 16256269, 16256270, 16256271
7366 ]
7367 );
7368 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7369 assert_eq!(
7370 rp,
7371 vec![
7372 16325199, 16325200, 16325201, 16325202, 16325203, 16325204, 16325205, 16325206,
7373 16325207, 16325208, 16325209, 16325210, 16325211, 16325212, 16325213, 16325214,
7374 16325215, 16325216, 16325217, 16325218, 16325219, 16325220, 16325221, 16325222,
7375 16325223, 16325224, 16325225, 16325226, 16325227, 16325228, 16325229, 16325230,
7376 16325231, 16325232, 16325233, 16325234, 16325235, 16325236, 16325237, 16325238,
7377 16325239, 16325240
7378 ]
7379 );
7380 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7381 assert_eq!(
7382 rp,
7383 vec![
7384 16352865, 16352866, 16352867, 16352868, 16352869, 16352870, 16352871, 16352872,
7385 16352873, 16352874, 16352875, 16352876, 16352877, 16352878, 16352879, 16352880,
7386 16352881, 16352882, 16352883, 16352884, 16352885, 16352886, 16352887, 16352888,
7387 16352889, 16352890, 16352891, 16352892, 16352893, 16352894, 16352895, 16352896,
7388 16352897, 16352898, 16352899, 16352900, 16352901, 16352902
7389 ]
7390 );
7391 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7392 assert_eq!(
7393 rp,
7394 vec![
7395 16352968, 16352969, 16352970, 16352971, 16352972, 16352973, 16352974, 16352975,
7396 16352976, 16352977, 16352978, 16352979, 16352980, 16352981, 16352982, 16352983,
7397 16352984, 16352985, 16352986, 16352987, 16352988, 16352989, 16352990, 16352991,
7398 16352992, 16352993, 16352994, 16352995, 16352996, 16352997, 16352998, 16352999,
7399 16353000, 16353001, 16353002, 16353003, 16353004, 16353005, 16353006, 16353007,
7400 16353008, 16353009, 16353010, 16353011
7401 ]
7402 );
7403 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7404 assert_eq!(
7405 rp,
7406 vec![
7407 16414998, 16414999, 16415000, 16415001, 16415002, 16415003, 16415004, 16415005,
7408 16415006, 16415007, 16415008, 16415009, 16415010, 16415011, 16415012, 16415013,
7409 16415014, 16415015, 16415016, 16415017, 16415018, 16415019, 16415020, 16415021,
7410 16415022, 16415023, 16415024, 16415025, 16415026, 16415027, 16415028, 16415029,
7411 16415030, 16415031, 16415032, 16415033, 16415034, 16415035, 16415036, 16415037,
7412 16415038, 16415039, 16415040, 16415041, 16415042, 16415043
7413 ]
7414 );
7415 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7416 assert_eq!(
7417 rp,
7418 vec![
7419 17031591, 17031592, 17031593, 17031594, 17031595, 17031596, 17031597, 17031598,
7420 17031599, 17031600, 17031601, 17031602, 17031603, 17031604, 17031605, 17031606,
7421 17031607, 17031608, 17031609, 17031610, 17031611, 17031612, 17031613, 17031614,
7422 17031615, 17031616, 17031617, 17031618, 17031619, 17031620, 17031621, 17031622,
7423 17031623, 17031624, 17031625, 17031626, 17031627, 17031628, 17031629, 17031630,
7424 17031631, 17031632, 17031633, 17031634, 17031635, 17031636, 17031637
7425 ]
7426 );
7427 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7428 assert_eq!(
7429 rp,
7430 vec![
7431 17057382, 17057383, 17057384, 17057385, 17057386, 17057387, 17057388, 17057389,
7432 17057390, 17057391, 17057392, 17057393, 17057394, 17057395, 17057396, 17057397,
7433 17057398, 17057399, 17057400, 17057401, 17057402, 17057403, 17057404, 17057405,
7434 17057406, 17057407, 17057408, 17057409, 17057410, 17057411, 17057412, 17057413,
7435 17057414, 17057415, 17057416, 17057417, 17057418, 17057419, 17057420, 17057421,
7436 17057422, 17057423, 17057424, 17057425, 17057426, 17057427, 17057428, 17057429,
7437 17057430, 17057431
7438 ]
7439 );
7440 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7441 assert_eq!(
7442 rp,
7443 vec![
7444 17092766, 17092767, 17092768, 17092769, 17092770, 17092771, 17092772, 17092773,
7445 17092774, 17092775, 17092776, 17092777, 17092778, 17092779, 17092780, 17092781,
7446 17092782, 17094966, 17094967, 17094968, 17094969, 17094970, 17094971, 17094972,
7447 17094973, 17094974, 17094975, 17094976, 17094977, 17094978, 17094979, 17094980,
7448 17094981, 17094982, 17094983, 17094984, 17094985, 17094986, 17094987, 17094988,
7449 17094989, 17094990, 17094991, 17094992, 17094993, 17094994, 17094995, 17094996,
7450 17094997, 17094998, 17094999
7451 ]
7452 );
7453 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7454 assert_eq!(
7455 rp,
7456 vec![
7457 17092782, 17094966, 17094967, 17094968, 17094969, 17094970, 17094971, 17094972,
7458 17094973, 17094974, 17094975, 17094976, 17094977, 17094978, 17094979, 17094980,
7459 17094981, 17094982, 17094983, 17094984, 17094985, 17094986, 17094987, 17094988,
7460 17094989, 17094990, 17094991, 17094992, 17094993, 17094994, 17094995, 17094996,
7461 17094997, 17094998, 17094999, 17095000, 17095001, 17095002, 17095003, 17095004,
7462 17095005, 17095006, 17095007, 17095008, 17095009, 17095010, 17095011, 17095012,
7463 17095013, 17095014, 17095015
7464 ]
7465 );
7466 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7467 assert_eq!(
7468 rp,
7469 vec![
7470 17092782, 17094966, 17094967, 17094968, 17094969, 17094970, 17094971, 17094972,
7471 17094973, 17094974, 17094975, 17094976, 17094977, 17094978, 17094979, 17094980,
7472 17094981, 17094982, 17094983, 17094984, 17094985, 17094986, 17094987, 17094988,
7473 17094989, 17094990, 17094991, 17094992, 17094993, 17094994, 17094995, 17094996,
7474 17094997, 17094998, 17094999, 17095000, 17095001, 17095002, 17095003, 17095004,
7475 17095005, 17095006, 17095007, 17095008, 17095009, 17095010, 17095011, 17095012,
7476 17095013, 17095014, 17095015
7477 ]
7478 );
7479 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7480 assert_eq!(
7481 rp,
7482 vec![
7483 17137287, 17137288, 17137289, 17137290, 17137291, 17137292, 17137293, 17137294,
7484 17137295, 17137296, 17137297, 17137298, 17137299, 17137300, 17137301, 17137302,
7485 17137303, 17137304, 17137305, 17137306, 17137307, 17137308, 17137309, 17137310,
7486 17137311, 17137312, 17137313, 17137314, 17137315, 17137316, 17137317, 17137318,
7487 17137319
7488 ]
7489 );
7490 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7491 assert_eq!(
7492 rp,
7493 vec![
7494 17306238, 17306239, 17306240, 17306241, 17306242, 17306243, 17306244, 17306245,
7495 17306246, 17306247, 17306248, 17306249, 17306250, 17306251, 17306252, 17306253,
7496 17306254, 17306255, 17306256, 17306257, 17306258, 17306259, 17306260, 17306261,
7497 17306262, 17306263, 17306264, 17306265, 17306266, 17306267, 17306268, 17306269,
7498 17306270, 17306271, 17306272, 17306273, 17306274, 17306275, 17306276, 17306277,
7499 17306278, 17306279, 17306280, 17306281, 17306282, 17306283, 17306284, 17306285
7500 ]
7501 );
7502 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7503 assert_eq!(
7504 rp,
7505 vec![
7506 17561868, 17561869, 17561870, 17561871, 17561872, 17561873, 17561874, 17561875,
7507 17561876, 17561877, 17561878, 17561879, 17561880, 17561881, 17561882, 17561883,
7508 17561884, 17561885, 17561886, 17561887, 17561888, 17561889, 17561890, 17561891,
7509 17561892, 17561893, 17561894, 17561895, 17561896, 17561897, 17561898, 17561899,
7510 17561900, 17561901, 17561902, 17561903, 17561904, 17561905, 17561906, 17561907,
7511 17561908, 17561909, 17561910, 17561911, 17561912
7512 ]
7513 );
7514 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7515 assert_eq!(
7516 rp,
7517 vec![
7518 17566078, 17566079, 17566080, 17566081, 17566082, 17566083, 17566084, 17566085,
7519 17566086, 17566087, 17566088, 17566089, 17566090, 17566091, 17566092, 17566093,
7520 17566094, 17566095, 17566096, 17566097, 17566098, 17566099, 17566100, 17566101,
7521 17566102, 17566103, 17566104, 17566105, 17566106, 17566107, 17566108, 17566109,
7522 17566110, 17566111, 17566112, 17566113, 17566114, 17566115, 17566116, 17566117,
7523 17566118, 17577951, 17577952, 17577953, 17577954, 17577955, 17577956, 17577957,
7524 17577958, 17577959, 17577960
7525 ]
7526 );
7527 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7528 assert_eq!(
7529 rp,
7530 vec![
7531 17566108, 17566109, 17566110, 17566111, 17566112, 17566113, 17566114, 17566115,
7532 17566116, 17566117, 17566118, 17577951, 17577952, 17577953, 17577954, 17577955,
7533 17577956, 17577957, 17577958, 17577959, 17577960, 17577961, 17577962, 17577963,
7534 17577964, 17577965, 17577966, 17577967, 17577968, 17577969, 17577970, 17577971,
7535 17577972, 17577973, 17577974, 17577975, 17578686, 17578687, 17578688, 17578689,
7536 17578690, 17578691, 17578692, 17578693, 17578694, 17578695, 17578696, 17578697,
7537 17578698, 17578699, 17578700
7538 ]
7539 );
7540 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7541 assert_eq!(
7542 rp,
7543 vec![
7544 17566111, 17566112, 17566113, 17566114, 17566115, 17566116, 17566117, 17566118,
7545 17577951, 17577952, 17577953, 17577954, 17577955, 17577956, 17577957, 17577958,
7546 17577959, 17577960, 17577961, 17577962, 17577963, 17577964, 17577965, 17577966,
7547 17577967, 17577968, 17577969, 17577970, 17577971, 17577972, 17577973, 17577974,
7548 17577975, 17578686, 17578687, 17578688, 17578689, 17578690, 17578691, 17578692,
7549 17578693, 17578694, 17578695, 17578696, 17578697, 17578698, 17578699, 17578700,
7550 17578701, 17578702, 17578703
7551 ]
7552 );
7553 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7554 assert_eq!(
7555 rp,
7556 vec![
7557 17566111, 17566112, 17566113, 17566114, 17566115, 17566116, 17566117, 17566118,
7558 17577951, 17577952, 17577953, 17577954, 17577955, 17577956, 17577957, 17577958,
7559 17577959, 17577960, 17577961, 17577962, 17577963, 17577964, 17577965, 17577966,
7560 17577967, 17577968, 17577969, 17577970, 17577971, 17577972, 17577973, 17577974,
7561 17577975, 17578686, 17578687, 17578688, 17578689, 17578690, 17578691, 17578692,
7562 17578693, 17578694, 17578695, 17578696, 17578697, 17578698, 17578699, 17578700,
7563 17578701, 17578702, 17578703
7564 ]
7565 );
7566 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7567 assert_eq!(
7568 rp,
7569 vec![
7570 17566111, 17566112, 17566113, 17566114, 17566115, 17566116, 17566117, 17566118,
7571 17577951, 17577952, 17577953, 17577954, 17577955, 17577956, 17577957, 17577958,
7572 17577959, 17577960, 17577961, 17577962, 17577963, 17577964, 17577965, 17577966,
7573 17577967, 17577968, 17577969, 17577970, 17577971, 17577972, 17577973, 17577974,
7574 17577975, 17578686, 17578687, 17578688, 17578689, 17578690, 17578691, 17578692,
7575 17578693, 17578694, 17578695, 17578696, 17578697, 17578698, 17578699, 17578700,
7576 17578701, 17578702, 17578703
7577 ]
7578 );
7579 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7580 assert_eq!(
7581 rp,
7582 vec![
7583 17566111, 17566112, 17566113, 17566114, 17566115, 17566116, 17566117, 17566118,
7584 17577951, 17577952, 17577953, 17577954, 17577955, 17577956, 17577957, 17577958,
7585 17577959, 17577960, 17577961, 17577962, 17577963, 17577964, 17577965, 17577966,
7586 17577967, 17577968, 17577969, 17577970, 17577971, 17577972, 17577973, 17577974,
7587 17577975, 17578686, 17578687, 17578688, 17578689, 17578690, 17578691, 17578692,
7588 17578693, 17578694, 17578695, 17578696, 17578697, 17578698, 17578699, 17578700,
7589 17578701, 17578702, 17578703
7590 ]
7591 );
7592 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7593 assert_eq!(
7594 rp,
7595 vec![
7596 17566112, 17566113, 17566114, 17566115, 17566116, 17566117, 17566118, 17577951,
7597 17577952, 17577953, 17577954, 17577955, 17577956, 17577957, 17577958, 17577959,
7598 17577960, 17577961, 17577962, 17577963, 17577964, 17577965, 17577966, 17577967,
7599 17577968, 17577969, 17577970, 17577971, 17577972, 17577973, 17577974, 17577975,
7600 17578686, 17578687, 17578688, 17578689, 17578690, 17578691, 17578692, 17578693,
7601 17578694, 17578695, 17578696, 17578697, 17578698, 17578699, 17578700, 17578701,
7602 17578702, 17578703, 17578704
7603 ]
7604 );
7605 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7606 assert_eq!(
7607 rp,
7608 vec![
7609 17566113, 17566114, 17566115, 17566116, 17566117, 17566118, 17577951, 17577952,
7610 17577953, 17577954, 17577955, 17577956, 17577957, 17577958, 17577959, 17577960,
7611 17577961, 17577962, 17577963, 17577964, 17577965, 17577966, 17577967, 17577968,
7612 17577969, 17577970, 17577971, 17577972, 17577973, 17577974, 17577975, 17578686,
7613 17578687, 17578688, 17578689, 17578690, 17578691, 17578692, 17578693, 17578694,
7614 17578695, 17578696, 17578697, 17578698, 17578699, 17578700, 17578701, 17578702,
7615 17578703, 17578704, 17578705
7616 ]
7617 );
7618 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7619 assert_eq!(
7620 rp,
7621 vec![
7622 17566113, 17566114, 17566115, 17566116, 17566117, 17566118, 17577951, 17577952,
7623 17577953, 17577954, 17577955, 17577956, 17577957, 17577958, 17577959, 17577960,
7624 17577961, 17577962, 17577963, 17577964, 17577965, 17577966, 17577967, 17577968,
7625 17577969, 17577970, 17577971, 17577972, 17577973, 17577974, 17577975, 17578686,
7626 17578687, 17578688, 17578689, 17578690, 17578691, 17578692, 17578693, 17578694,
7627 17578695, 17578696, 17578697, 17578698, 17578699, 17578700, 17578701, 17578702,
7628 17578703, 17578704, 17578705
7629 ]
7630 );
7631 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7632 assert_eq!(
7633 rp,
7634 vec![
7635 17579733, 17579734, 17579735, 17579736, 17579737, 17579738, 17579739, 17579740,
7636 17579741, 17579742, 17579743, 17579744, 17579745, 17579746, 17579747, 17579748,
7637 17579749, 17579750, 17579751, 17579752, 17579753, 17579754, 17579755, 17579756,
7638 17579757, 17579758, 17579759, 17579760, 17579761, 17579762, 17579763, 17579764,
7639 17579765, 17579766, 17579767, 17579768, 17579769, 17579770, 17579771, 17579772,
7640 17579773, 17579774, 17579775, 17579776, 17581244, 17581245, 17581246, 17581247,
7641 17581248, 17581249
7642 ]
7643 );
7644 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7645 assert_eq!(
7646 rp,
7647 vec![
7648 17581369, 17581370, 17582885, 17582886, 17582887, 17582888, 17582889, 17582890,
7649 17582891, 17582892, 17582893, 17582894, 17582895, 17582896, 17582897, 17582898,
7650 17582899, 17582900, 17582901, 17582902, 17582903, 17582904, 17582905, 17582906,
7651 17582907, 17582908, 17582909, 17582910, 17582911, 17582912, 17582913, 17582914,
7652 17582915, 17582916, 17582917, 17582918, 17582919, 17582920, 17582921, 17582922,
7653 17582923, 17582924, 17582925, 17582926, 17582927, 17582928, 17582929, 17582930,
7654 17582931, 17582932, 17583028
7655 ]
7656 );
7657 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7658 assert_eq!(
7659 rp,
7660 vec![
7661 17581370, 17582885, 17582886, 17582887, 17582888, 17582889, 17582890, 17582891,
7662 17582892, 17582893, 17582894, 17582895, 17582896, 17582897, 17582898, 17582899,
7663 17582900, 17582901, 17582902, 17582903, 17582904, 17582905, 17582906, 17582907,
7664 17582908, 17582909, 17582910, 17582911, 17582912, 17582913, 17582914, 17582915,
7665 17582916, 17582917, 17582918, 17582919, 17582920, 17582921, 17582922, 17582923,
7666 17582924, 17582925, 17582926, 17582927, 17582928, 17582929, 17582930, 17582931,
7667 17582932, 17583028, 17583029
7668 ]
7669 );
7670 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7671 assert_eq!(
7672 rp,
7673 vec![
7674 17581370, 17582885, 17582886, 17582887, 17582888, 17582889, 17582890, 17582891,
7675 17582892, 17582893, 17582894, 17582895, 17582896, 17582897, 17582898, 17582899,
7676 17582900, 17582901, 17582902, 17582903, 17582904, 17582905, 17582906, 17582907,
7677 17582908, 17582909, 17582910, 17582911, 17582912, 17582913, 17582914, 17582915,
7678 17582916, 17582917, 17582918, 17582919, 17582920, 17582921, 17582922, 17582923,
7679 17582924, 17582925, 17582926, 17582927, 17582928, 17582929, 17582930, 17582931,
7680 17582932, 17583028, 17583029
7681 ]
7682 );
7683 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7684 assert_eq!(
7685 rp,
7686 vec![
7687 17582911, 17582912, 17582913, 17582914, 17582915, 17582916, 17582917, 17582918,
7688 17582919, 17582920, 17582921, 17582922, 17582923, 17582924, 17582925, 17582926,
7689 17582927, 17582928, 17582929, 17582930, 17582931, 17582932, 17583028, 17583029,
7690 17583030, 17583031, 17583032, 17583033, 17583034, 17583035, 17583036, 17583037,
7691 17583038, 17583039, 17583040, 17583041, 17583042, 17583043, 17583044, 17583045,
7692 17583046, 17583047, 17583048, 17583049, 17583050, 17583051, 17583052, 17583053,
7693 17583054, 17583055
7694 ]
7695 );
7696 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7697 assert_eq!(
7698 rp,
7699 vec![
7700 17588621, 17588622, 17588623, 17588624, 17588625, 17588626, 17588627, 17588628,
7701 17588629, 17588630, 17588631, 17588632, 17588633, 17588634, 17588635, 17588636,
7702 17588637, 17588638, 17588639, 17588640, 17588641, 17588642, 17588643, 17588644,
7703 17588645, 17588646, 17588647, 17588648, 17588649, 17588650, 17588651, 17588652,
7704 17588653, 17588654, 17588655, 17588656, 17588657, 17589196, 17589197, 17589198,
7705 17589199, 17589200, 17589201, 17589202, 17589203, 17589204, 17589205, 17589206,
7706 17589207, 17589208
7707 ]
7708 );
7709 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7710 assert_eq!(
7711 rp,
7712 vec![
7713 17588621, 17588622, 17588623, 17588624, 17588625, 17588626, 17588627, 17588628,
7714 17588629, 17588630, 17588631, 17588632, 17588633, 17588634, 17588635, 17588636,
7715 17588637, 17588638, 17588639, 17588640, 17588641, 17588642, 17588643, 17588644,
7716 17588645, 17588646, 17588647, 17588648, 17588649, 17588650, 17588651, 17588652,
7717 17588653, 17588654, 17588655, 17588656, 17588657, 17589196, 17589197, 17589198,
7718 17589199, 17589200, 17589201, 17589202, 17589203, 17589204, 17589205, 17589206,
7719 17589207, 17589208
7720 ]
7721 );
7722 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7723 assert_eq!(
7724 rp,
7725 vec![
7726 17588621, 17588622, 17588623, 17588624, 17588625, 17588626, 17588627, 17588628,
7727 17588629, 17588630, 17588631, 17588632, 17588633, 17588634, 17588635, 17588636,
7728 17588637, 17588638, 17588639, 17588640, 17588641, 17588642, 17588643, 17588644,
7729 17588645, 17588646, 17588647, 17588648, 17588649, 17588650, 17588651, 17588652,
7730 17588653, 17588654, 17588655, 17588656, 17588657, 17589196, 17589197, 17589198,
7731 17589199, 17589200, 17589201, 17589202, 17589203, 17589204, 17589205, 17589206,
7732 17589207, 17589208
7733 ]
7734 );
7735 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7736 assert_eq!(
7737 rp,
7738 vec![
7739 17591770, 17591771, 17591772, 17591773, 17591774, 17591775, 17591776, 17591777,
7740 17591778, 17591779, 17591780, 17591781, 17591782, 17591783, 17591784, 17591785,
7741 17591786, 17591787, 17591788, 17591789, 17591790, 17591791, 17591792, 17591793,
7742 17591794, 17591796, 17591797, 17591798, 17591799, 17591800, 17591801, 17591802,
7743 17591803, 17591804, 17591805, 17591806, 17591807, 17591808, 17591809, 17591810,
7744 17591811, 17591812, 17591813, 17591814, 17591815, 17591816, 17591817, 17591818,
7745 17591819, 17591820
7746 ]
7747 );
7748 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7749 assert_eq!(
7750 rp,
7751 vec![
7752 17593855, 17593856, 17593857, 17593858, 17593859, 17593860, 17593861, 17593862,
7753 17593863, 17593864, 17593865, 17593866, 17593867, 17593868, 17593869, 17593870,
7754 17593871, 17593872, 17593873, 17593874, 17593875, 17593876, 17593877, 17593878,
7755 17593880, 17593881, 17593882, 17593883, 17593884, 17593885, 17593886, 17593887,
7756 17593888, 17593889, 17593890, 17593891, 17593892, 17593893, 17593894, 17593895,
7757 17593896, 17593897, 17593898, 17593899, 17593900, 17593901, 17593902, 17593903
7758 ]
7759 );
7760 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7761 assert_eq!(
7762 rp,
7763 vec![
7764 17593863, 17593864, 17593865, 17593866, 17593867, 17593868, 17593869, 17593870,
7765 17593871, 17593872, 17593873, 17593874, 17593875, 17593876, 17593877, 17593878,
7766 17593880, 17593881, 17593882, 17593883, 17593884, 17593885, 17593886, 17593887,
7767 17593888, 17593889, 17593890, 17593891, 17593892, 17593893, 17593894, 17593895,
7768 17593896, 17593897, 17593898, 17593899, 17593900, 17593901, 17593902, 17593903,
7769 17593904, 17593905, 17593906, 17593907
7770 ]
7771 );
7772 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7773 assert_eq!(
7774 rp,
7775 vec![
7776 17596476, 17596477, 17596478, 17596479, 17596480, 17596481, 17596482, 17596483,
7777 17596484, 17596485, 17596486, 17596487, 17596488, 17596489, 17596490, 17596491,
7778 17596492, 17596493, 17596494, 17596495, 17596496, 17596497, 17596498, 17596499,
7779 17596500, 17596501, 17596502, 17596503, 17596504, 17596505, 17596506, 17596507,
7780 17596508, 17596509, 17596510, 17596511, 17596512, 17596513, 17596514
7781 ]
7782 );
7783 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7784 assert_eq!(
7785 rp,
7786 vec![
7787 17624012, 17624013, 17624014, 17624015, 17624016, 17624017, 17624018, 17624019,
7788 17624020, 17625913, 17625914, 17625915, 17625916, 17625917, 17625918, 17625919,
7789 17625920, 17625921, 17625922, 17625923, 17625924, 17625925, 17625926, 17625927,
7790 17625928, 17625929, 17625930, 17625931, 17625932, 17625933, 17625934, 17625935,
7791 17625936, 17625937, 17625938, 17625939, 17625940, 17625941, 17625942, 17625943,
7792 17625944, 17625945, 17625946, 17625947, 17625948, 17625949
7793 ]
7794 );
7795 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7796 assert_eq!(
7797 rp,
7798 vec![
7799 17624012, 17624013, 17624014, 17624015, 17624016, 17624017, 17624018, 17624019,
7800 17624020, 17625913, 17625914, 17625915, 17625916, 17625917, 17625918, 17625919,
7801 17625920, 17625921, 17625922, 17625923, 17625924, 17625925, 17625926, 17625927,
7802 17625928, 17625929, 17625930, 17625931, 17625932, 17625933, 17625934, 17625935,
7803 17625936, 17625937, 17625938, 17625939, 17625940, 17625941, 17625942, 17625943,
7804 17625944, 17625945, 17625946, 17625947, 17625948, 17625949, 17625950, 17625951,
7805 17625952
7806 ]
7807 );
7808 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7809 assert_eq!(
7810 rp,
7811 vec![
7812 31796700, 31796701, 31796702, 31796703, 31796704, 31796705, 31796706, 31796710,
7813 31796711, 31796712, 31796713, 31796714, 31796715, 31796716, 31796717, 31796718,
7814 31796719, 31796720, 31796721, 31796722, 31796723, 31796724, 31796725, 31796726,
7815 31796727, 31796728, 31799014, 31799015, 31799016, 31799017, 31799018, 31799019,
7816 31799020, 31799021, 31799022, 31799023, 31799024, 31799025, 31799026, 31799027,
7817 31799028, 31799029, 31799030, 31799031, 31799032, 31799033, 31799034, 31799035,
7818 31799036, 31799037
7819 ]
7820 );
7821 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7822 assert_eq!(
7823 rp,
7824 vec![
7825 36722692, 36722693, 36722694, 36722695, 36722696, 36722697, 36722698, 36722699,
7826 36722700, 36722701, 36722702, 36722703, 36722704, 36722705, 36723505, 36723506,
7827 36723507, 36723508, 36723509, 36723510, 36723511, 36723512, 36723513, 36723514,
7828 36723515, 36723516, 36723517, 36723518, 36723519, 36723520, 36723521, 36723522,
7829 36723523, 36723524, 36723525, 36723526, 36723527, 36723528, 36723529, 36723530,
7830 36723531, 36723532, 36737414, 36737415, 36737416, 36737417, 36737418, 36737419,
7831 36737420
7832 ]
7833 );
7834 let rp: Vec<i64> = it.next().unwrap().unwrap().reference_positions().collect();
7835 assert_eq!(
7836 rp,
7837 vec![
7838 44587963, 44587964, 44587965, 44587966, 44587967, 44587968, 44587969, 44587970,
7839 44587971, 44587972, 44587973, 44587974, 44587975, 44587976, 44587977, 44587978,
7840 44587979, 44587980, 44587981, 44587982, 44587983, 44589680, 44589681, 44589682,
7841 44589683, 44589684, 44589685, 44589686, 44589687, 44589688, 44589689, 44589690,
7842 44589691, 44589692, 44589693, 44589694, 44589695, 44589696, 44589697, 44589698,
7843 44589699, 44589700, 44589701, 44589702, 44592034, 44592035, 44592036
7844 ]
7845 );
7846 }
7847
7848 #[test]
7849 fn test_reference_positions_full() {
7850 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
7851 let mut it = bam.records();
7852
7853 let rp: Vec<_> = it
7854 .next()
7855 .unwrap()
7856 .unwrap()
7857 .reference_positions_full()
7858 .collect();
7859 assert_eq!(
7860 rp,
7861 vec![
7862 None,
7863 None,
7864 None,
7865 None,
7866 None,
7867 None,
7868 Some(16050676),
7869 Some(16050677),
7870 Some(16050678),
7871 Some(16050679),
7872 Some(16050680),
7873 Some(16050681),
7874 Some(16050682),
7875 Some(16050683),
7876 Some(16050684),
7877 Some(16050685),
7878 Some(16050686),
7879 Some(16050687),
7880 Some(16050688),
7881 Some(16050689),
7882 Some(16050690),
7883 Some(16050691),
7884 Some(16050692),
7885 Some(16050693),
7886 Some(16050694),
7887 Some(16050695),
7888 Some(16050696),
7889 Some(16050697),
7890 Some(16050698),
7891 Some(16050699),
7892 Some(16050700),
7893 Some(16050701),
7894 Some(16050702),
7895 Some(16050703),
7896 Some(16050704),
7897 Some(16050705),
7898 Some(16050706),
7899 Some(16050707),
7900 Some(16050708),
7901 Some(16050709),
7902 Some(16050710),
7903 Some(16050711),
7904 Some(16050712),
7905 Some(16050713),
7906 Some(16050714),
7907 Some(16050715),
7908 Some(16050716),
7909 Some(16050717),
7910 Some(16050718),
7911 Some(16050719),
7912 Some(16050720)
7913 ]
7914 );
7915 let rp: Vec<_> = it
7916 .next()
7917 .unwrap()
7918 .unwrap()
7919 .reference_positions_full()
7920 .collect();
7921 assert_eq!(
7922 rp,
7923 vec![
7924 Some(16096878),
7925 Some(16096879),
7926 Some(16096880),
7927 Some(16096881),
7928 Some(16096882),
7929 Some(16096883),
7930 Some(16096884),
7931 Some(16096887),
7932 Some(16096888),
7933 Some(16096889),
7934 Some(16096890),
7935 Some(16096891),
7936 Some(16096892),
7937 Some(16096893),
7938 Some(16096894),
7939 Some(16096895),
7940 Some(16096896),
7941 Some(16096897),
7942 Some(16096898),
7943 Some(16096899),
7944 Some(16096900),
7945 Some(16096901),
7946 Some(16096902),
7947 Some(16096903),
7948 Some(16096904),
7949 Some(16096905),
7950 Some(16096906),
7951 Some(16096907),
7952 Some(16096908),
7953 Some(16096909),
7954 Some(16096910),
7955 Some(16096911),
7956 Some(16096912),
7957 Some(16096913),
7958 Some(16096914),
7959 Some(16096915),
7960 Some(16096916),
7961 Some(16096917),
7962 Some(16096918),
7963 Some(16096919),
7964 Some(16096920),
7965 Some(16096921),
7966 Some(16096922),
7967 Some(16096923),
7968 Some(16096924),
7969 Some(16096925),
7970 Some(16096926),
7971 Some(16096927),
7972 Some(16096928),
7973 Some(16096929),
7974 Some(16096930)
7975 ]
7976 );
7977 let rp: Vec<_> = it
7978 .next()
7979 .unwrap()
7980 .unwrap()
7981 .reference_positions_full()
7982 .collect();
7983 assert_eq!(
7984 rp,
7985 vec![
7986 Some(16097145),
7987 Some(16097146),
7988 Some(16097147),
7989 Some(16097148),
7990 Some(16097149),
7991 Some(16097150),
7992 Some(16097151),
7993 Some(16097152),
7994 Some(16097153),
7995 Some(16097154),
7996 Some(16097155),
7997 Some(16097156),
7998 Some(16097157),
7999 Some(16097158),
8000 Some(16097159),
8001 Some(16097160),
8002 Some(16097161),
8003 Some(16097162),
8004 Some(16097163),
8005 Some(16097164),
8006 Some(16097165),
8007 Some(16097166),
8008 Some(16097167),
8009 Some(16097168),
8010 Some(16097169),
8011 Some(16097170),
8012 Some(16097171),
8013 Some(16097172),
8014 Some(16097173),
8015 Some(16097176),
8016 Some(16097177),
8017 Some(16097178),
8018 Some(16097179),
8019 Some(16097180),
8020 Some(16097181),
8021 Some(16097182),
8022 Some(16097183),
8023 Some(16097184),
8024 Some(16097185),
8025 Some(16097186),
8026 Some(16097187),
8027 Some(16097188),
8028 Some(16097189),
8029 Some(16097190),
8030 Some(16097191),
8031 Some(16097192),
8032 Some(16097193),
8033 Some(16097194),
8034 Some(16097195),
8035 Some(16097196),
8036 Some(16097197)
8037 ]
8038 );
8039 let rp: Vec<_> = it
8040 .next()
8041 .unwrap()
8042 .unwrap()
8043 .reference_positions_full()
8044 .collect();
8045 assert_eq!(
8046 rp,
8047 vec![
8048 Some(16117350),
8049 Some(16117351),
8050 Some(16117352),
8051 Some(16117353),
8052 Some(16117354),
8053 Some(16117355),
8054 Some(16117356),
8055 Some(16117357),
8056 Some(16117358),
8057 Some(16117359),
8058 Some(16117360),
8059 Some(16117361),
8060 Some(16117362),
8061 Some(16117363),
8062 Some(16117364),
8063 Some(16117365),
8064 Some(16117366),
8065 Some(16117367),
8066 Some(16117368),
8067 Some(16117369),
8068 Some(16117370),
8069 Some(16117371),
8070 Some(16117372),
8071 Some(16117373),
8072 Some(16117374),
8073 Some(16117375),
8074 Some(16117376),
8075 Some(16117377),
8076 Some(16117378),
8077 Some(16117379),
8078 Some(16117380),
8079 Some(16117381),
8080 Some(16117382),
8081 Some(16117383),
8082 Some(16117384),
8083 Some(16117385),
8084 Some(16117386),
8085 Some(16117387),
8086 Some(16117388),
8087 Some(16117389),
8088 Some(16117390),
8089 Some(16117391),
8090 Some(16117392),
8091 Some(16117393),
8092 Some(16117394),
8093 Some(16117395),
8094 Some(16117396),
8095 Some(16117397),
8096 Some(16117398),
8097 Some(16117399),
8098 Some(16117400)
8099 ]
8100 );
8101 let rp: Vec<_> = it
8102 .next()
8103 .unwrap()
8104 .unwrap()
8105 .reference_positions_full()
8106 .collect();
8107 assert_eq!(
8108 rp,
8109 vec![
8110 Some(16118483),
8111 Some(16118484),
8112 Some(16118485),
8113 Some(16118486),
8114 Some(16118487),
8115 Some(16118488),
8116 Some(16118489),
8117 Some(16118490),
8118 Some(16118491),
8119 Some(16118492),
8120 Some(16118493),
8121 Some(16118494),
8122 Some(16118495),
8123 Some(16118496),
8124 Some(16118497),
8125 Some(16118498),
8126 Some(16118499),
8127 Some(16118500),
8128 Some(16118501),
8129 Some(16118502),
8130 Some(16118503),
8131 Some(16118504),
8132 Some(16118505),
8133 Some(16118506),
8134 Some(16118507),
8135 Some(16118508),
8136 Some(16118509),
8137 Some(16118510),
8138 Some(16118511),
8139 Some(16118512),
8140 Some(16118513),
8141 Some(16118514),
8142 Some(16118515),
8143 Some(16118516),
8144 Some(16118517),
8145 Some(16118518),
8146 Some(16118519),
8147 Some(16118520),
8148 Some(16118521),
8149 Some(16118522),
8150 Some(16118523),
8151 Some(16118524),
8152 Some(16118525),
8153 Some(16118526),
8154 Some(16118527),
8155 Some(16118528),
8156 Some(16118529),
8157 Some(16118530),
8158 Some(16118531),
8159 Some(16118532),
8160 Some(16118533)
8161 ]
8162 );
8163 let rp: Vec<_> = it
8164 .next()
8165 .unwrap()
8166 .unwrap()
8167 .reference_positions_full()
8168 .collect();
8169 assert_eq!(
8170 rp,
8171 vec![
8172 Some(16118499),
8173 Some(16118500),
8174 Some(16118501),
8175 Some(16118502),
8176 Some(16118503),
8177 Some(16118504),
8178 Some(16118505),
8179 Some(16118506),
8180 Some(16118507),
8181 Some(16118508),
8182 Some(16118509),
8183 Some(16118510),
8184 Some(16118511),
8185 Some(16118512),
8186 Some(16118513),
8187 Some(16118514),
8188 Some(16118515),
8189 Some(16118516),
8190 Some(16118517),
8191 Some(16118518),
8192 Some(16118519),
8193 Some(16118520),
8194 Some(16118521),
8195 Some(16118522),
8196 Some(16118523),
8197 Some(16118524),
8198 Some(16118525),
8199 Some(16118526),
8200 Some(16118527),
8201 Some(16118528),
8202 Some(16118529),
8203 Some(16118530),
8204 Some(16118531),
8205 Some(16118532),
8206 Some(16118533),
8207 Some(16118534),
8208 Some(16118535),
8209 Some(16118536),
8210 Some(16118537),
8211 Some(16118538),
8212 Some(16118539),
8213 Some(16118540),
8214 Some(16118541),
8215 Some(16118542),
8216 Some(16118543),
8217 Some(16118544),
8218 Some(16118545),
8219 Some(16118546),
8220 Some(16118547),
8221 Some(16118548),
8222 Some(16118549)
8223 ]
8224 );
8225 let rp: Vec<_> = it
8226 .next()
8227 .unwrap()
8228 .unwrap()
8229 .reference_positions_full()
8230 .collect();
8231 assert_eq!(
8232 rp,
8233 vec![
8234 Some(16118499),
8235 Some(16118500),
8236 Some(16118501),
8237 Some(16118502),
8238 Some(16118503),
8239 Some(16118504),
8240 Some(16118505),
8241 Some(16118506),
8242 Some(16118507),
8243 Some(16118508),
8244 Some(16118509),
8245 Some(16118510),
8246 Some(16118511),
8247 Some(16118512),
8248 Some(16118513),
8249 Some(16118514),
8250 Some(16118515),
8251 Some(16118516),
8252 Some(16118517),
8253 Some(16118518),
8254 Some(16118519),
8255 Some(16118520),
8256 Some(16118521),
8257 Some(16118522),
8258 Some(16118523),
8259 Some(16118524),
8260 Some(16118525),
8261 Some(16118526),
8262 Some(16118527),
8263 Some(16118528),
8264 Some(16118529),
8265 Some(16118530),
8266 Some(16118531),
8267 Some(16118532),
8268 Some(16118533),
8269 Some(16118534),
8270 Some(16118535),
8271 Some(16118536),
8272 Some(16118537),
8273 Some(16118538),
8274 Some(16118539),
8275 Some(16118540),
8276 Some(16118541),
8277 Some(16118542),
8278 Some(16118543),
8279 Some(16118544),
8280 Some(16118545),
8281 Some(16118546),
8282 Some(16118547),
8283 Some(16118548),
8284 Some(16118549)
8285 ]
8286 );
8287 let rp: Vec<_> = it
8288 .next()
8289 .unwrap()
8290 .unwrap()
8291 .reference_positions_full()
8292 .collect();
8293 assert_eq!(
8294 rp,
8295 vec![
8296 Some(16118499),
8297 Some(16118500),
8298 Some(16118501),
8299 Some(16118502),
8300 Some(16118503),
8301 Some(16118504),
8302 Some(16118505),
8303 Some(16118506),
8304 Some(16118507),
8305 Some(16118508),
8306 Some(16118509),
8307 Some(16118510),
8308 Some(16118511),
8309 Some(16118512),
8310 Some(16118513),
8311 Some(16118514),
8312 Some(16118515),
8313 Some(16118516),
8314 Some(16118517),
8315 Some(16118518),
8316 Some(16118519),
8317 Some(16118520),
8318 Some(16118521),
8319 Some(16118522),
8320 Some(16118523),
8321 Some(16118524),
8322 Some(16118525),
8323 Some(16118526),
8324 Some(16118527),
8325 Some(16118528),
8326 Some(16118529),
8327 Some(16118530),
8328 Some(16118531),
8329 Some(16118532),
8330 Some(16118533),
8331 Some(16118534),
8332 Some(16118535),
8333 Some(16118536),
8334 Some(16118537),
8335 Some(16118538),
8336 Some(16118539),
8337 Some(16118540),
8338 Some(16118541),
8339 Some(16118542),
8340 Some(16118543),
8341 Some(16118544),
8342 Some(16118545),
8343 Some(16118546),
8344 Some(16118547),
8345 Some(16118548),
8346 Some(16118549)
8347 ]
8348 );
8349 let rp: Vec<_> = it
8350 .next()
8351 .unwrap()
8352 .unwrap()
8353 .reference_positions_full()
8354 .collect();
8355 assert_eq!(
8356 rp,
8357 vec![
8358 Some(16123411),
8359 Some(16123412),
8360 Some(16123413),
8361 Some(16123414),
8362 Some(16123415),
8363 Some(16123416),
8364 Some(16123417),
8365 Some(16123418),
8366 Some(16123419),
8367 Some(16123420),
8368 Some(16123421),
8369 Some(16123422),
8370 Some(16123423),
8371 Some(16123424),
8372 Some(16123425),
8373 Some(16123426),
8374 Some(16123427),
8375 Some(16123428),
8376 Some(16123429),
8377 Some(16123430),
8378 Some(16123431),
8379 Some(16123432),
8380 Some(16123433),
8381 Some(16123434),
8382 Some(16123435),
8383 Some(16123436),
8384 Some(16123437),
8385 Some(16123438),
8386 Some(16123439),
8387 Some(16123440),
8388 Some(16123441),
8389 Some(16123442),
8390 Some(16123443),
8391 Some(16123444),
8392 Some(16123445),
8393 Some(16123446),
8394 Some(16123447),
8395 Some(16123448),
8396 Some(16123449),
8397 Some(16123450),
8398 Some(16123451),
8399 Some(16123452),
8400 Some(16123453),
8401 Some(16123454),
8402 Some(16123455),
8403 Some(16123456),
8404 Some(16123457),
8405 Some(16123458),
8406 Some(16123459),
8407 Some(16123460),
8408 Some(16123461)
8409 ]
8410 );
8411 let rp: Vec<_> = it
8412 .next()
8413 .unwrap()
8414 .unwrap()
8415 .reference_positions_full()
8416 .collect();
8417 assert_eq!(
8418 rp,
8419 vec![
8420 None,
8421 None,
8422 None,
8423 None,
8424 None,
8425 None,
8426 Some(16123417),
8427 Some(16123418),
8428 Some(16123419),
8429 Some(16123420),
8430 Some(16123421),
8431 Some(16123422),
8432 Some(16123423),
8433 Some(16123424),
8434 Some(16123425),
8435 Some(16123426),
8436 Some(16123427),
8437 Some(16123428),
8438 Some(16123429),
8439 Some(16123430),
8440 Some(16123431),
8441 Some(16123432),
8442 Some(16123433),
8443 Some(16123434),
8444 Some(16123435),
8445 Some(16123436),
8446 Some(16123437),
8447 Some(16123438),
8448 Some(16123439),
8449 Some(16123440),
8450 Some(16123441),
8451 Some(16123442),
8452 Some(16123443),
8453 Some(16123444),
8454 Some(16123445),
8455 Some(16123446),
8456 Some(16123447),
8457 Some(16123448),
8458 Some(16123449),
8459 Some(16123450),
8460 Some(16123451),
8461 Some(16123452),
8462 Some(16123453),
8463 Some(16123454),
8464 Some(16123455),
8465 Some(16123456),
8466 Some(16123457),
8467 Some(16123458),
8468 Some(16123459),
8469 Some(16123460),
8470 Some(16123461)
8471 ]
8472 );
8473 let rp: Vec<_> = it
8474 .next()
8475 .unwrap()
8476 .unwrap()
8477 .reference_positions_full()
8478 .collect();
8479 assert_eq!(
8480 rp,
8481 vec![
8482 Some(16165860),
8483 Some(16165861),
8484 Some(16165862),
8485 Some(16165863),
8486 Some(16165864),
8487 Some(16165865),
8488 Some(16165866),
8489 Some(16165867),
8490 Some(16165868),
8491 Some(16165869),
8492 Some(16165870),
8493 Some(16165871),
8494 Some(16165872),
8495 Some(16165873),
8496 Some(16165874),
8497 Some(16165875),
8498 Some(16165876),
8499 Some(16165877),
8500 Some(16165878),
8501 Some(16165879),
8502 Some(16165880),
8503 Some(16165881),
8504 Some(16165882),
8505 Some(16165883),
8506 Some(16165884),
8507 Some(16165885),
8508 Some(16165886),
8509 Some(16165887),
8510 Some(16165888),
8511 Some(16165889),
8512 Some(16165890),
8513 Some(16165891),
8514 Some(16165892),
8515 Some(16165893),
8516 Some(16165894),
8517 Some(16165895),
8518 Some(16165896),
8519 Some(16165897),
8520 Some(16165898),
8521 Some(16165899),
8522 Some(16165900),
8523 None,
8524 None,
8525 None,
8526 None,
8527 None,
8528 None,
8529 None,
8530 None,
8531 None,
8532 None
8533 ]
8534 );
8535 let rp: Vec<_> = it
8536 .next()
8537 .unwrap()
8538 .unwrap()
8539 .reference_positions_full()
8540 .collect();
8541 assert_eq!(
8542 rp,
8543 vec![
8544 Some(16180871),
8545 Some(16180872),
8546 Some(16180873),
8547 Some(16180874),
8548 Some(16180875),
8549 Some(16180876),
8550 Some(16180877),
8551 Some(16180878),
8552 Some(16180879),
8553 Some(16180880),
8554 Some(16180881),
8555 Some(16180882),
8556 Some(16180883),
8557 Some(16180884),
8558 Some(16180885),
8559 Some(16180886),
8560 Some(16180887),
8561 Some(16180888),
8562 Some(16180889),
8563 Some(16180890),
8564 Some(16180891),
8565 Some(16180892),
8566 Some(16180893),
8567 Some(16180894),
8568 Some(16180895),
8569 Some(16180896),
8570 Some(16180897),
8571 Some(16180898),
8572 Some(16180899),
8573 Some(16180900),
8574 Some(16180901),
8575 Some(16180902),
8576 Some(16180903),
8577 Some(16180904),
8578 Some(16180905),
8579 Some(16180906),
8580 Some(16180907),
8581 Some(16180908),
8582 Some(16180909),
8583 Some(16180910),
8584 Some(16180911),
8585 Some(16180912),
8586 Some(16180913),
8587 Some(16180914),
8588 Some(16180915),
8589 Some(16180916),
8590 Some(16180917),
8591 Some(16180918),
8592 Some(16180919),
8593 Some(16180920),
8594 Some(16180921)
8595 ]
8596 );
8597 let rp: Vec<_> = it
8598 .next()
8599 .unwrap()
8600 .unwrap()
8601 .reference_positions_full()
8602 .collect();
8603 assert_eq!(
8604 rp,
8605 vec![
8606 Some(16189705),
8607 Some(16189706),
8608 Some(16189707),
8609 Some(16189708),
8610 Some(16189709),
8611 Some(16189710),
8612 Some(16189711),
8613 Some(16189712),
8614 Some(16189713),
8615 Some(16189714),
8616 Some(16189715),
8617 Some(16189716),
8618 Some(16189717),
8619 Some(16189718),
8620 Some(16189719),
8621 Some(16189720),
8622 Some(16189721),
8623 Some(16189722),
8624 Some(16189723),
8625 Some(16189724),
8626 Some(16189725),
8627 Some(16189726),
8628 Some(16189727),
8629 Some(16189728),
8630 Some(16189729),
8631 Some(16189730),
8632 Some(16189731),
8633 Some(16189732),
8634 Some(16189733),
8635 Some(16189734),
8636 Some(16189735),
8637 Some(16189736),
8638 Some(16189737),
8639 Some(16189738),
8640 Some(16189739),
8641 Some(16189740),
8642 Some(16189741),
8643 Some(16189742),
8644 Some(16189743),
8645 Some(16189744),
8646 Some(16189745),
8647 Some(16189746),
8648 Some(16189747),
8649 Some(16189748),
8650 Some(16189749),
8651 Some(16189750),
8652 Some(16189751),
8653 Some(16189752),
8654 Some(16189753),
8655 Some(16189754),
8656 Some(16189755)
8657 ]
8658 );
8659 let rp: Vec<_> = it
8660 .next()
8661 .unwrap()
8662 .unwrap()
8663 .reference_positions_full()
8664 .collect();
8665 assert_eq!(
8666 rp,
8667 vec![
8668 Some(16231271),
8669 Some(16231272),
8670 Some(16231273),
8671 Some(16231274),
8672 Some(16231275),
8673 Some(16231276),
8674 Some(16231277),
8675 Some(16231278),
8676 Some(16231279),
8677 Some(16231280),
8678 Some(16231281),
8679 Some(16231282),
8680 Some(16231283),
8681 Some(16231284),
8682 Some(16231285),
8683 Some(16231286),
8684 Some(16231287),
8685 Some(16231288),
8686 Some(16231289),
8687 Some(16231290),
8688 Some(16231291),
8689 Some(16231292),
8690 Some(16231293),
8691 Some(16231294),
8692 Some(16231295),
8693 Some(16231296),
8694 Some(16231297),
8695 Some(16231298),
8696 Some(16231299),
8697 Some(16231300),
8698 Some(16231301),
8699 Some(16231302),
8700 Some(16231303),
8701 Some(16231304),
8702 Some(16231305),
8703 Some(16231306),
8704 Some(16231307),
8705 Some(16231308),
8706 Some(16231309),
8707 Some(16231310),
8708 Some(16231311),
8709 Some(16231312),
8710 Some(16231313),
8711 Some(16231314),
8712 Some(16231315),
8713 Some(16231316),
8714 Some(16231317),
8715 Some(16231318),
8716 Some(16231319),
8717 Some(16231320),
8718 Some(16231321)
8719 ]
8720 );
8721 let rp: Vec<_> = it
8722 .next()
8723 .unwrap()
8724 .unwrap()
8725 .reference_positions_full()
8726 .collect();
8727 assert_eq!(
8728 rp,
8729 vec![
8730 Some(16237657),
8731 Some(16237658),
8732 Some(16237659),
8733 Some(16237660),
8734 Some(16237661),
8735 Some(16237662),
8736 Some(16237663),
8737 Some(16237664),
8738 Some(16237665),
8739 Some(16237666),
8740 Some(16237667),
8741 Some(16237668),
8742 Some(16237669),
8743 Some(16237670),
8744 Some(16237671),
8745 Some(16237672),
8746 Some(16237673),
8747 Some(16237674),
8748 Some(16237675),
8749 Some(16237676),
8750 Some(16237677),
8751 Some(16237678),
8752 Some(16237679),
8753 Some(16237680),
8754 Some(16237681),
8755 Some(16237682),
8756 Some(16237683),
8757 Some(16237684),
8758 Some(16237685),
8759 Some(16237686),
8760 Some(16237687),
8761 Some(16237688),
8762 Some(16237689),
8763 Some(16237690),
8764 Some(16237691),
8765 Some(16237692),
8766 Some(16237693),
8767 Some(16237694),
8768 Some(16237695),
8769 Some(16237696),
8770 Some(16237697),
8771 Some(16237698),
8772 Some(16237699),
8773 Some(16237700),
8774 Some(16237701),
8775 Some(16237702),
8776 Some(16237703),
8777 Some(16237704),
8778 Some(16237705),
8779 Some(16237706),
8780 Some(16237707)
8781 ]
8782 );
8783 let rp: Vec<_> = it
8784 .next()
8785 .unwrap()
8786 .unwrap()
8787 .reference_positions_full()
8788 .collect();
8789 assert_eq!(
8790 rp,
8791 vec![
8792 None,
8793 None,
8794 None,
8795 None,
8796 None,
8797 None,
8798 None,
8799 None,
8800 None,
8801 Some(16255012),
8802 Some(16255013),
8803 Some(16255014),
8804 Some(16255015),
8805 Some(16255016),
8806 Some(16255017),
8807 Some(16255018),
8808 Some(16255019),
8809 Some(16255020),
8810 Some(16255021),
8811 Some(16255022),
8812 Some(16255023),
8813 Some(16255024),
8814 Some(16255025),
8815 Some(16255026),
8816 Some(16255027),
8817 Some(16255028),
8818 Some(16255029),
8819 Some(16255030),
8820 Some(16255031),
8821 Some(16255032),
8822 Some(16255033),
8823 Some(16255034),
8824 Some(16255035),
8825 Some(16255036),
8826 Some(16255037),
8827 Some(16255038),
8828 Some(16255039),
8829 Some(16255040),
8830 Some(16255041),
8831 Some(16255042),
8832 Some(16255043),
8833 Some(16255044),
8834 Some(16255045),
8835 Some(16255046),
8836 Some(16255047),
8837 Some(16255048),
8838 Some(16255049),
8839 Some(16255050),
8840 Some(16255051),
8841 Some(16255052),
8842 Some(16255053)
8843 ]
8844 );
8845 let rp: Vec<_> = it
8846 .next()
8847 .unwrap()
8848 .unwrap()
8849 .reference_positions_full()
8850 .collect();
8851 assert_eq!(
8852 rp,
8853 vec![
8854 Some(16255391),
8855 Some(16255392),
8856 Some(16255393),
8857 Some(16255394),
8858 Some(16255395),
8859 Some(16255396),
8860 Some(16255397),
8861 Some(16255398),
8862 Some(16255399),
8863 Some(16255400),
8864 Some(16255401),
8865 Some(16255402),
8866 Some(16255403),
8867 Some(16255404),
8868 Some(16255405),
8869 Some(16255406),
8870 Some(16255407),
8871 Some(16255408),
8872 Some(16255409),
8873 Some(16255410),
8874 Some(16255411),
8875 Some(16255412),
8876 Some(16255413),
8877 Some(16255414),
8878 Some(16255415),
8879 Some(16255416),
8880 Some(16255417),
8881 Some(16255418),
8882 Some(16255419),
8883 Some(16255420),
8884 Some(16255421),
8885 Some(16255422),
8886 Some(16255423),
8887 Some(16255424),
8888 Some(16255425),
8889 Some(16255426),
8890 Some(16255427),
8891 Some(16255428),
8892 Some(16255429),
8893 Some(16255430),
8894 Some(16255431),
8895 Some(16255432),
8896 Some(16255433),
8897 Some(16255434),
8898 Some(16255435),
8899 Some(16255436),
8900 Some(16255437),
8901 Some(16255438),
8902 Some(16255439),
8903 Some(16255440),
8904 Some(16255441)
8905 ]
8906 );
8907 let rp: Vec<_> = it
8908 .next()
8909 .unwrap()
8910 .unwrap()
8911 .reference_positions_full()
8912 .collect();
8913 assert_eq!(
8914 rp,
8915 vec![
8916 Some(16255392),
8917 Some(16255393),
8918 Some(16255394),
8919 Some(16255395),
8920 Some(16255396),
8921 Some(16255397),
8922 Some(16255398),
8923 Some(16255399),
8924 Some(16255400),
8925 Some(16255401),
8926 Some(16255402),
8927 Some(16255403),
8928 Some(16255404),
8929 Some(16255405),
8930 Some(16255406),
8931 Some(16255407),
8932 Some(16255408),
8933 Some(16255409),
8934 Some(16255410),
8935 Some(16255411),
8936 Some(16255412),
8937 Some(16255413),
8938 Some(16255414),
8939 Some(16255415),
8940 Some(16255416),
8941 Some(16255417),
8942 Some(16255418),
8943 Some(16255419),
8944 Some(16255420),
8945 Some(16255421),
8946 Some(16255422),
8947 Some(16255423),
8948 Some(16255424),
8949 Some(16255425),
8950 Some(16255426),
8951 Some(16255427),
8952 Some(16255428),
8953 Some(16255429),
8954 Some(16255430),
8955 Some(16255431),
8956 Some(16255432),
8957 Some(16255433),
8958 Some(16255434),
8959 Some(16255435),
8960 Some(16255436),
8961 Some(16255437),
8962 Some(16255438),
8963 Some(16255439),
8964 Some(16255440),
8965 Some(16255441),
8966 None
8967 ]
8968 );
8969 let rp: Vec<_> = it
8970 .next()
8971 .unwrap()
8972 .unwrap()
8973 .reference_positions_full()
8974 .collect();
8975 assert_eq!(
8976 rp,
8977 vec![
8978 Some(16256084),
8979 Some(16256085),
8980 Some(16256086),
8981 Some(16256087),
8982 Some(16256088),
8983 Some(16256089),
8984 Some(16256090),
8985 Some(16256091),
8986 Some(16256092),
8987 Some(16256093),
8988 Some(16256094),
8989 Some(16256095),
8990 Some(16256096),
8991 Some(16256097),
8992 Some(16256098),
8993 Some(16256099),
8994 Some(16256100),
8995 Some(16256101),
8996 Some(16256102),
8997 Some(16256103),
8998 Some(16256104),
8999 Some(16256105),
9000 Some(16256106),
9001 Some(16256107),
9002 Some(16256108),
9003 Some(16256109),
9004 Some(16256110),
9005 Some(16256111),
9006 Some(16256112),
9007 Some(16256113),
9008 Some(16256114),
9009 Some(16256115),
9010 Some(16256116),
9011 Some(16256117),
9012 Some(16256118),
9013 Some(16256119),
9014 Some(16256120),
9015 Some(16256121),
9016 Some(16256122),
9017 Some(16256123),
9018 Some(16256124),
9019 Some(16256125),
9020 Some(16256126),
9021 Some(16256127),
9022 Some(16256128),
9023 None,
9024 None,
9025 None,
9026 None,
9027 None,
9028 None
9029 ]
9030 );
9031 let rp: Vec<_> = it
9032 .next()
9033 .unwrap()
9034 .unwrap()
9035 .reference_positions_full()
9036 .collect();
9037 assert_eq!(
9038 rp,
9039 vec![
9040 None,
9041 None,
9042 None,
9043 Some(16256224),
9044 Some(16256225),
9045 Some(16256226),
9046 Some(16256227),
9047 Some(16256228),
9048 Some(16256229),
9049 Some(16256230),
9050 Some(16256231),
9051 Some(16256232),
9052 Some(16256233),
9053 Some(16256234),
9054 Some(16256235),
9055 Some(16256236),
9056 Some(16256237),
9057 Some(16256238),
9058 Some(16256239),
9059 Some(16256240),
9060 Some(16256241),
9061 Some(16256242),
9062 Some(16256243),
9063 Some(16256244),
9064 Some(16256245),
9065 Some(16256246),
9066 Some(16256247),
9067 Some(16256248),
9068 Some(16256249),
9069 Some(16256250),
9070 Some(16256251),
9071 Some(16256252),
9072 Some(16256253),
9073 Some(16256254),
9074 Some(16256255),
9075 Some(16256256),
9076 Some(16256257),
9077 Some(16256258),
9078 Some(16256259),
9079 Some(16256260),
9080 Some(16256261),
9081 Some(16256262),
9082 Some(16256263),
9083 Some(16256264),
9084 Some(16256265),
9085 Some(16256266),
9086 Some(16256267),
9087 Some(16256268),
9088 Some(16256269),
9089 Some(16256270),
9090 Some(16256271)
9091 ]
9092 );
9093 let rp: Vec<_> = it
9094 .next()
9095 .unwrap()
9096 .unwrap()
9097 .reference_positions_full()
9098 .collect();
9099 assert_eq!(
9100 rp,
9101 vec![
9102 Some(16325199),
9103 Some(16325200),
9104 Some(16325201),
9105 Some(16325202),
9106 Some(16325203),
9107 Some(16325204),
9108 Some(16325205),
9109 Some(16325206),
9110 Some(16325207),
9111 Some(16325208),
9112 Some(16325209),
9113 Some(16325210),
9114 Some(16325211),
9115 Some(16325212),
9116 Some(16325213),
9117 Some(16325214),
9118 Some(16325215),
9119 Some(16325216),
9120 Some(16325217),
9121 Some(16325218),
9122 Some(16325219),
9123 Some(16325220),
9124 Some(16325221),
9125 Some(16325222),
9126 Some(16325223),
9127 Some(16325224),
9128 Some(16325225),
9129 Some(16325226),
9130 Some(16325227),
9131 Some(16325228),
9132 Some(16325229),
9133 Some(16325230),
9134 Some(16325231),
9135 Some(16325232),
9136 Some(16325233),
9137 Some(16325234),
9138 Some(16325235),
9139 Some(16325236),
9140 Some(16325237),
9141 Some(16325238),
9142 Some(16325239),
9143 Some(16325240),
9144 None,
9145 None,
9146 None,
9147 None,
9148 None,
9149 None,
9150 None,
9151 None,
9152 None
9153 ]
9154 );
9155 let rp: Vec<_> = it
9156 .next()
9157 .unwrap()
9158 .unwrap()
9159 .reference_positions_full()
9160 .collect();
9161 assert_eq!(
9162 rp,
9163 vec![
9164 None,
9165 None,
9166 None,
9167 None,
9168 None,
9169 None,
9170 None,
9171 None,
9172 None,
9173 None,
9174 None,
9175 None,
9176 None,
9177 Some(16352865),
9178 Some(16352866),
9179 Some(16352867),
9180 Some(16352868),
9181 Some(16352869),
9182 Some(16352870),
9183 Some(16352871),
9184 Some(16352872),
9185 Some(16352873),
9186 Some(16352874),
9187 Some(16352875),
9188 Some(16352876),
9189 Some(16352877),
9190 Some(16352878),
9191 Some(16352879),
9192 Some(16352880),
9193 Some(16352881),
9194 Some(16352882),
9195 Some(16352883),
9196 Some(16352884),
9197 Some(16352885),
9198 Some(16352886),
9199 Some(16352887),
9200 Some(16352888),
9201 Some(16352889),
9202 Some(16352890),
9203 Some(16352891),
9204 Some(16352892),
9205 Some(16352893),
9206 Some(16352894),
9207 Some(16352895),
9208 Some(16352896),
9209 Some(16352897),
9210 Some(16352898),
9211 Some(16352899),
9212 Some(16352900),
9213 Some(16352901),
9214 Some(16352902)
9215 ]
9216 );
9217 let rp: Vec<_> = it
9218 .next()
9219 .unwrap()
9220 .unwrap()
9221 .reference_positions_full()
9222 .collect();
9223 assert_eq!(
9224 rp,
9225 vec![
9226 Some(16352968),
9227 Some(16352969),
9228 Some(16352970),
9229 Some(16352971),
9230 Some(16352972),
9231 Some(16352973),
9232 Some(16352974),
9233 Some(16352975),
9234 Some(16352976),
9235 Some(16352977),
9236 Some(16352978),
9237 Some(16352979),
9238 Some(16352980),
9239 Some(16352981),
9240 Some(16352982),
9241 Some(16352983),
9242 Some(16352984),
9243 Some(16352985),
9244 Some(16352986),
9245 Some(16352987),
9246 Some(16352988),
9247 Some(16352989),
9248 Some(16352990),
9249 Some(16352991),
9250 Some(16352992),
9251 Some(16352993),
9252 Some(16352994),
9253 Some(16352995),
9254 Some(16352996),
9255 Some(16352997),
9256 Some(16352998),
9257 Some(16352999),
9258 Some(16353000),
9259 Some(16353001),
9260 Some(16353002),
9261 Some(16353003),
9262 Some(16353004),
9263 Some(16353005),
9264 Some(16353006),
9265 Some(16353007),
9266 Some(16353008),
9267 Some(16353009),
9268 Some(16353010),
9269 Some(16353011),
9270 None,
9271 None,
9272 None,
9273 None,
9274 None,
9275 None,
9276 None
9277 ]
9278 );
9279 let rp: Vec<_> = it
9280 .next()
9281 .unwrap()
9282 .unwrap()
9283 .reference_positions_full()
9284 .collect();
9285 assert_eq!(
9286 rp,
9287 vec![
9288 None,
9289 None,
9290 None,
9291 None,
9292 None,
9293 Some(16414998),
9294 Some(16414999),
9295 Some(16415000),
9296 Some(16415001),
9297 Some(16415002),
9298 Some(16415003),
9299 Some(16415004),
9300 Some(16415005),
9301 Some(16415006),
9302 Some(16415007),
9303 Some(16415008),
9304 Some(16415009),
9305 Some(16415010),
9306 Some(16415011),
9307 Some(16415012),
9308 Some(16415013),
9309 Some(16415014),
9310 Some(16415015),
9311 Some(16415016),
9312 Some(16415017),
9313 Some(16415018),
9314 Some(16415019),
9315 Some(16415020),
9316 Some(16415021),
9317 Some(16415022),
9318 Some(16415023),
9319 Some(16415024),
9320 Some(16415025),
9321 Some(16415026),
9322 Some(16415027),
9323 Some(16415028),
9324 Some(16415029),
9325 Some(16415030),
9326 Some(16415031),
9327 Some(16415032),
9328 Some(16415033),
9329 Some(16415034),
9330 Some(16415035),
9331 Some(16415036),
9332 Some(16415037),
9333 Some(16415038),
9334 Some(16415039),
9335 Some(16415040),
9336 Some(16415041),
9337 Some(16415042),
9338 Some(16415043)
9339 ]
9340 );
9341 let rp: Vec<_> = it
9342 .next()
9343 .unwrap()
9344 .unwrap()
9345 .reference_positions_full()
9346 .collect();
9347 assert_eq!(
9348 rp,
9349 vec![
9350 Some(17031591),
9351 Some(17031592),
9352 Some(17031593),
9353 Some(17031594),
9354 Some(17031595),
9355 Some(17031596),
9356 Some(17031597),
9357 Some(17031598),
9358 Some(17031599),
9359 Some(17031600),
9360 Some(17031601),
9361 Some(17031602),
9362 Some(17031603),
9363 Some(17031604),
9364 Some(17031605),
9365 Some(17031606),
9366 Some(17031607),
9367 Some(17031608),
9368 Some(17031609),
9369 Some(17031610),
9370 Some(17031611),
9371 Some(17031612),
9372 Some(17031613),
9373 None,
9374 None,
9375 None,
9376 None,
9377 Some(17031614),
9378 Some(17031615),
9379 Some(17031616),
9380 Some(17031617),
9381 Some(17031618),
9382 Some(17031619),
9383 Some(17031620),
9384 Some(17031621),
9385 Some(17031622),
9386 Some(17031623),
9387 Some(17031624),
9388 Some(17031625),
9389 Some(17031626),
9390 Some(17031627),
9391 Some(17031628),
9392 Some(17031629),
9393 Some(17031630),
9394 Some(17031631),
9395 Some(17031632),
9396 Some(17031633),
9397 Some(17031634),
9398 Some(17031635),
9399 Some(17031636),
9400 Some(17031637)
9401 ]
9402 );
9403 let rp: Vec<_> = it
9404 .next()
9405 .unwrap()
9406 .unwrap()
9407 .reference_positions_full()
9408 .collect();
9409 assert_eq!(
9410 rp,
9411 vec![
9412 Some(17057382),
9413 Some(17057383),
9414 Some(17057384),
9415 Some(17057385),
9416 Some(17057386),
9417 Some(17057387),
9418 Some(17057388),
9419 Some(17057389),
9420 Some(17057390),
9421 Some(17057391),
9422 Some(17057392),
9423 Some(17057393),
9424 Some(17057394),
9425 Some(17057395),
9426 Some(17057396),
9427 Some(17057397),
9428 Some(17057398),
9429 Some(17057399),
9430 None,
9431 Some(17057400),
9432 Some(17057401),
9433 Some(17057402),
9434 Some(17057403),
9435 Some(17057404),
9436 Some(17057405),
9437 Some(17057406),
9438 Some(17057407),
9439 Some(17057408),
9440 Some(17057409),
9441 Some(17057410),
9442 Some(17057411),
9443 Some(17057412),
9444 Some(17057413),
9445 Some(17057414),
9446 Some(17057415),
9447 Some(17057416),
9448 Some(17057417),
9449 Some(17057418),
9450 Some(17057419),
9451 Some(17057420),
9452 Some(17057421),
9453 Some(17057422),
9454 Some(17057423),
9455 Some(17057424),
9456 Some(17057425),
9457 Some(17057426),
9458 Some(17057427),
9459 Some(17057428),
9460 Some(17057429),
9461 Some(17057430),
9462 Some(17057431)
9463 ]
9464 );
9465 let rp: Vec<_> = it
9466 .next()
9467 .unwrap()
9468 .unwrap()
9469 .reference_positions_full()
9470 .collect();
9471 assert_eq!(
9472 rp,
9473 vec![
9474 Some(17092766),
9475 Some(17092767),
9476 Some(17092768),
9477 Some(17092769),
9478 Some(17092770),
9479 Some(17092771),
9480 Some(17092772),
9481 Some(17092773),
9482 Some(17092774),
9483 Some(17092775),
9484 Some(17092776),
9485 Some(17092777),
9486 Some(17092778),
9487 Some(17092779),
9488 Some(17092780),
9489 Some(17092781),
9490 Some(17092782),
9491 Some(17094966),
9492 Some(17094967),
9493 Some(17094968),
9494 Some(17094969),
9495 Some(17094970),
9496 Some(17094971),
9497 Some(17094972),
9498 Some(17094973),
9499 Some(17094974),
9500 Some(17094975),
9501 Some(17094976),
9502 Some(17094977),
9503 Some(17094978),
9504 Some(17094979),
9505 Some(17094980),
9506 Some(17094981),
9507 Some(17094982),
9508 Some(17094983),
9509 Some(17094984),
9510 Some(17094985),
9511 Some(17094986),
9512 Some(17094987),
9513 Some(17094988),
9514 Some(17094989),
9515 Some(17094990),
9516 Some(17094991),
9517 Some(17094992),
9518 Some(17094993),
9519 Some(17094994),
9520 Some(17094995),
9521 Some(17094996),
9522 Some(17094997),
9523 Some(17094998),
9524 Some(17094999)
9525 ]
9526 );
9527 let rp: Vec<_> = it
9528 .next()
9529 .unwrap()
9530 .unwrap()
9531 .reference_positions_full()
9532 .collect();
9533 assert_eq!(
9534 rp,
9535 vec![
9536 Some(17092782),
9537 Some(17094966),
9538 Some(17094967),
9539 Some(17094968),
9540 Some(17094969),
9541 Some(17094970),
9542 Some(17094971),
9543 Some(17094972),
9544 Some(17094973),
9545 Some(17094974),
9546 Some(17094975),
9547 Some(17094976),
9548 Some(17094977),
9549 Some(17094978),
9550 Some(17094979),
9551 Some(17094980),
9552 Some(17094981),
9553 Some(17094982),
9554 Some(17094983),
9555 Some(17094984),
9556 Some(17094985),
9557 Some(17094986),
9558 Some(17094987),
9559 Some(17094988),
9560 Some(17094989),
9561 Some(17094990),
9562 Some(17094991),
9563 Some(17094992),
9564 Some(17094993),
9565 Some(17094994),
9566 Some(17094995),
9567 Some(17094996),
9568 Some(17094997),
9569 Some(17094998),
9570 Some(17094999),
9571 Some(17095000),
9572 Some(17095001),
9573 Some(17095002),
9574 Some(17095003),
9575 Some(17095004),
9576 Some(17095005),
9577 Some(17095006),
9578 Some(17095007),
9579 Some(17095008),
9580 Some(17095009),
9581 Some(17095010),
9582 Some(17095011),
9583 Some(17095012),
9584 Some(17095013),
9585 Some(17095014),
9586 Some(17095015)
9587 ]
9588 );
9589 let rp: Vec<_> = it
9590 .next()
9591 .unwrap()
9592 .unwrap()
9593 .reference_positions_full()
9594 .collect();
9595 assert_eq!(
9596 rp,
9597 vec![
9598 Some(17092782),
9599 Some(17094966),
9600 Some(17094967),
9601 Some(17094968),
9602 Some(17094969),
9603 Some(17094970),
9604 Some(17094971),
9605 Some(17094972),
9606 Some(17094973),
9607 Some(17094974),
9608 Some(17094975),
9609 Some(17094976),
9610 Some(17094977),
9611 Some(17094978),
9612 Some(17094979),
9613 Some(17094980),
9614 Some(17094981),
9615 Some(17094982),
9616 Some(17094983),
9617 Some(17094984),
9618 Some(17094985),
9619 Some(17094986),
9620 Some(17094987),
9621 Some(17094988),
9622 Some(17094989),
9623 Some(17094990),
9624 Some(17094991),
9625 Some(17094992),
9626 Some(17094993),
9627 Some(17094994),
9628 Some(17094995),
9629 Some(17094996),
9630 Some(17094997),
9631 Some(17094998),
9632 Some(17094999),
9633 Some(17095000),
9634 Some(17095001),
9635 Some(17095002),
9636 Some(17095003),
9637 Some(17095004),
9638 Some(17095005),
9639 Some(17095006),
9640 Some(17095007),
9641 Some(17095008),
9642 Some(17095009),
9643 Some(17095010),
9644 Some(17095011),
9645 Some(17095012),
9646 Some(17095013),
9647 Some(17095014),
9648 Some(17095015)
9649 ]
9650 );
9651 let rp: Vec<_> = it
9652 .next()
9653 .unwrap()
9654 .unwrap()
9655 .reference_positions_full()
9656 .collect();
9657 assert_eq!(
9658 rp,
9659 vec![
9660 None,
9661 None,
9662 None,
9663 None,
9664 None,
9665 None,
9666 None,
9667 None,
9668 None,
9669 Some(17137287),
9670 Some(17137288),
9671 Some(17137289),
9672 Some(17137290),
9673 Some(17137291),
9674 Some(17137292),
9675 Some(17137293),
9676 Some(17137294),
9677 Some(17137295),
9678 Some(17137296),
9679 Some(17137297),
9680 Some(17137298),
9681 Some(17137299),
9682 Some(17137300),
9683 Some(17137301),
9684 Some(17137302),
9685 Some(17137303),
9686 Some(17137304),
9687 Some(17137305),
9688 Some(17137306),
9689 Some(17137307),
9690 Some(17137308),
9691 Some(17137309),
9692 Some(17137310),
9693 Some(17137311),
9694 Some(17137312),
9695 Some(17137313),
9696 Some(17137314),
9697 Some(17137315),
9698 Some(17137316),
9699 Some(17137317),
9700 Some(17137318),
9701 Some(17137319),
9702 None,
9703 None,
9704 None,
9705 None,
9706 None,
9707 None,
9708 None,
9709 None,
9710 None
9711 ]
9712 );
9713 let rp: Vec<_> = it
9714 .next()
9715 .unwrap()
9716 .unwrap()
9717 .reference_positions_full()
9718 .collect();
9719 assert_eq!(
9720 rp,
9721 vec![
9722 None,
9723 None,
9724 Some(17306238),
9725 Some(17306239),
9726 Some(17306240),
9727 Some(17306241),
9728 Some(17306242),
9729 Some(17306243),
9730 Some(17306244),
9731 Some(17306245),
9732 Some(17306246),
9733 Some(17306247),
9734 Some(17306248),
9735 Some(17306249),
9736 Some(17306250),
9737 Some(17306251),
9738 Some(17306252),
9739 Some(17306253),
9740 Some(17306254),
9741 Some(17306255),
9742 Some(17306256),
9743 Some(17306257),
9744 Some(17306258),
9745 Some(17306259),
9746 Some(17306260),
9747 Some(17306261),
9748 Some(17306262),
9749 Some(17306263),
9750 Some(17306264),
9751 Some(17306265),
9752 Some(17306266),
9753 Some(17306267),
9754 Some(17306268),
9755 Some(17306269),
9756 Some(17306270),
9757 Some(17306271),
9758 Some(17306272),
9759 Some(17306273),
9760 Some(17306274),
9761 Some(17306275),
9762 Some(17306276),
9763 Some(17306277),
9764 Some(17306278),
9765 Some(17306279),
9766 Some(17306280),
9767 Some(17306281),
9768 Some(17306282),
9769 Some(17306283),
9770 Some(17306284),
9771 Some(17306285),
9772 None
9773 ]
9774 );
9775 let rp: Vec<_> = it
9776 .next()
9777 .unwrap()
9778 .unwrap()
9779 .reference_positions_full()
9780 .collect();
9781 assert_eq!(
9782 rp,
9783 vec![
9784 None,
9785 None,
9786 None,
9787 None,
9788 Some(17561868),
9789 Some(17561869),
9790 Some(17561870),
9791 Some(17561871),
9792 Some(17561872),
9793 Some(17561873),
9794 Some(17561874),
9795 Some(17561875),
9796 Some(17561876),
9797 Some(17561877),
9798 Some(17561878),
9799 Some(17561879),
9800 Some(17561880),
9801 Some(17561881),
9802 Some(17561882),
9803 Some(17561883),
9804 Some(17561884),
9805 Some(17561885),
9806 Some(17561886),
9807 Some(17561887),
9808 Some(17561888),
9809 Some(17561889),
9810 Some(17561890),
9811 Some(17561891),
9812 Some(17561892),
9813 Some(17561893),
9814 Some(17561894),
9815 Some(17561895),
9816 Some(17561896),
9817 Some(17561897),
9818 Some(17561898),
9819 Some(17561899),
9820 Some(17561900),
9821 Some(17561901),
9822 Some(17561902),
9823 Some(17561903),
9824 Some(17561904),
9825 Some(17561905),
9826 Some(17561906),
9827 Some(17561907),
9828 Some(17561908),
9829 Some(17561909),
9830 Some(17561910),
9831 Some(17561911),
9832 Some(17561912),
9833 None,
9834 None
9835 ]
9836 );
9837 let rp: Vec<_> = it
9838 .next()
9839 .unwrap()
9840 .unwrap()
9841 .reference_positions_full()
9842 .collect();
9843 assert_eq!(
9844 rp,
9845 vec![
9846 Some(17566078),
9847 Some(17566079),
9848 Some(17566080),
9849 Some(17566081),
9850 Some(17566082),
9851 Some(17566083),
9852 Some(17566084),
9853 Some(17566085),
9854 Some(17566086),
9855 Some(17566087),
9856 Some(17566088),
9857 Some(17566089),
9858 Some(17566090),
9859 Some(17566091),
9860 Some(17566092),
9861 Some(17566093),
9862 Some(17566094),
9863 Some(17566095),
9864 Some(17566096),
9865 Some(17566097),
9866 Some(17566098),
9867 Some(17566099),
9868 Some(17566100),
9869 Some(17566101),
9870 Some(17566102),
9871 Some(17566103),
9872 Some(17566104),
9873 Some(17566105),
9874 Some(17566106),
9875 Some(17566107),
9876 Some(17566108),
9877 Some(17566109),
9878 Some(17566110),
9879 Some(17566111),
9880 Some(17566112),
9881 Some(17566113),
9882 Some(17566114),
9883 Some(17566115),
9884 Some(17566116),
9885 Some(17566117),
9886 Some(17566118),
9887 Some(17577951),
9888 Some(17577952),
9889 Some(17577953),
9890 Some(17577954),
9891 Some(17577955),
9892 Some(17577956),
9893 Some(17577957),
9894 Some(17577958),
9895 Some(17577959),
9896 Some(17577960)
9897 ]
9898 );
9899 let rp: Vec<_> = it
9900 .next()
9901 .unwrap()
9902 .unwrap()
9903 .reference_positions_full()
9904 .collect();
9905 assert_eq!(
9906 rp,
9907 vec![
9908 Some(17566108),
9909 Some(17566109),
9910 Some(17566110),
9911 Some(17566111),
9912 Some(17566112),
9913 Some(17566113),
9914 Some(17566114),
9915 Some(17566115),
9916 Some(17566116),
9917 Some(17566117),
9918 Some(17566118),
9919 Some(17577951),
9920 Some(17577952),
9921 Some(17577953),
9922 Some(17577954),
9923 Some(17577955),
9924 Some(17577956),
9925 Some(17577957),
9926 Some(17577958),
9927 Some(17577959),
9928 Some(17577960),
9929 Some(17577961),
9930 Some(17577962),
9931 Some(17577963),
9932 Some(17577964),
9933 Some(17577965),
9934 Some(17577966),
9935 Some(17577967),
9936 Some(17577968),
9937 Some(17577969),
9938 Some(17577970),
9939 Some(17577971),
9940 Some(17577972),
9941 Some(17577973),
9942 Some(17577974),
9943 Some(17577975),
9944 Some(17578686),
9945 Some(17578687),
9946 Some(17578688),
9947 Some(17578689),
9948 Some(17578690),
9949 Some(17578691),
9950 Some(17578692),
9951 Some(17578693),
9952 Some(17578694),
9953 Some(17578695),
9954 Some(17578696),
9955 Some(17578697),
9956 Some(17578698),
9957 Some(17578699),
9958 Some(17578700)
9959 ]
9960 );
9961 let rp: Vec<_> = it
9962 .next()
9963 .unwrap()
9964 .unwrap()
9965 .reference_positions_full()
9966 .collect();
9967 assert_eq!(
9968 rp,
9969 vec![
9970 Some(17566111),
9971 Some(17566112),
9972 Some(17566113),
9973 Some(17566114),
9974 Some(17566115),
9975 Some(17566116),
9976 Some(17566117),
9977 Some(17566118),
9978 Some(17577951),
9979 Some(17577952),
9980 Some(17577953),
9981 Some(17577954),
9982 Some(17577955),
9983 Some(17577956),
9984 Some(17577957),
9985 Some(17577958),
9986 Some(17577959),
9987 Some(17577960),
9988 Some(17577961),
9989 Some(17577962),
9990 Some(17577963),
9991 Some(17577964),
9992 Some(17577965),
9993 Some(17577966),
9994 Some(17577967),
9995 Some(17577968),
9996 Some(17577969),
9997 Some(17577970),
9998 Some(17577971),
9999 Some(17577972),
10000 Some(17577973),
10001 Some(17577974),
10002 Some(17577975),
10003 Some(17578686),
10004 Some(17578687),
10005 Some(17578688),
10006 Some(17578689),
10007 Some(17578690),
10008 Some(17578691),
10009 Some(17578692),
10010 Some(17578693),
10011 Some(17578694),
10012 Some(17578695),
10013 Some(17578696),
10014 Some(17578697),
10015 Some(17578698),
10016 Some(17578699),
10017 Some(17578700),
10018 Some(17578701),
10019 Some(17578702),
10020 Some(17578703)
10021 ]
10022 );
10023 let rp: Vec<_> = it
10024 .next()
10025 .unwrap()
10026 .unwrap()
10027 .reference_positions_full()
10028 .collect();
10029 assert_eq!(
10030 rp,
10031 vec![
10032 Some(17566111),
10033 Some(17566112),
10034 Some(17566113),
10035 Some(17566114),
10036 Some(17566115),
10037 Some(17566116),
10038 Some(17566117),
10039 Some(17566118),
10040 Some(17577951),
10041 Some(17577952),
10042 Some(17577953),
10043 Some(17577954),
10044 Some(17577955),
10045 Some(17577956),
10046 Some(17577957),
10047 Some(17577958),
10048 Some(17577959),
10049 Some(17577960),
10050 Some(17577961),
10051 Some(17577962),
10052 Some(17577963),
10053 Some(17577964),
10054 Some(17577965),
10055 Some(17577966),
10056 Some(17577967),
10057 Some(17577968),
10058 Some(17577969),
10059 Some(17577970),
10060 Some(17577971),
10061 Some(17577972),
10062 Some(17577973),
10063 Some(17577974),
10064 Some(17577975),
10065 Some(17578686),
10066 Some(17578687),
10067 Some(17578688),
10068 Some(17578689),
10069 Some(17578690),
10070 Some(17578691),
10071 Some(17578692),
10072 Some(17578693),
10073 Some(17578694),
10074 Some(17578695),
10075 Some(17578696),
10076 Some(17578697),
10077 Some(17578698),
10078 Some(17578699),
10079 Some(17578700),
10080 Some(17578701),
10081 Some(17578702),
10082 Some(17578703)
10083 ]
10084 );
10085 let rp: Vec<_> = it
10086 .next()
10087 .unwrap()
10088 .unwrap()
10089 .reference_positions_full()
10090 .collect();
10091 assert_eq!(
10092 rp,
10093 vec![
10094 Some(17566111),
10095 Some(17566112),
10096 Some(17566113),
10097 Some(17566114),
10098 Some(17566115),
10099 Some(17566116),
10100 Some(17566117),
10101 Some(17566118),
10102 Some(17577951),
10103 Some(17577952),
10104 Some(17577953),
10105 Some(17577954),
10106 Some(17577955),
10107 Some(17577956),
10108 Some(17577957),
10109 Some(17577958),
10110 Some(17577959),
10111 Some(17577960),
10112 Some(17577961),
10113 Some(17577962),
10114 Some(17577963),
10115 Some(17577964),
10116 Some(17577965),
10117 Some(17577966),
10118 Some(17577967),
10119 Some(17577968),
10120 Some(17577969),
10121 Some(17577970),
10122 Some(17577971),
10123 Some(17577972),
10124 Some(17577973),
10125 Some(17577974),
10126 Some(17577975),
10127 Some(17578686),
10128 Some(17578687),
10129 Some(17578688),
10130 Some(17578689),
10131 Some(17578690),
10132 Some(17578691),
10133 Some(17578692),
10134 Some(17578693),
10135 Some(17578694),
10136 Some(17578695),
10137 Some(17578696),
10138 Some(17578697),
10139 Some(17578698),
10140 Some(17578699),
10141 Some(17578700),
10142 Some(17578701),
10143 Some(17578702),
10144 Some(17578703)
10145 ]
10146 );
10147 let rp: Vec<_> = it
10148 .next()
10149 .unwrap()
10150 .unwrap()
10151 .reference_positions_full()
10152 .collect();
10153 assert_eq!(
10154 rp,
10155 vec![
10156 Some(17566111),
10157 Some(17566112),
10158 Some(17566113),
10159 Some(17566114),
10160 Some(17566115),
10161 Some(17566116),
10162 Some(17566117),
10163 Some(17566118),
10164 Some(17577951),
10165 Some(17577952),
10166 Some(17577953),
10167 Some(17577954),
10168 Some(17577955),
10169 Some(17577956),
10170 Some(17577957),
10171 Some(17577958),
10172 Some(17577959),
10173 Some(17577960),
10174 Some(17577961),
10175 Some(17577962),
10176 Some(17577963),
10177 Some(17577964),
10178 Some(17577965),
10179 Some(17577966),
10180 Some(17577967),
10181 Some(17577968),
10182 Some(17577969),
10183 Some(17577970),
10184 Some(17577971),
10185 Some(17577972),
10186 Some(17577973),
10187 Some(17577974),
10188 Some(17577975),
10189 Some(17578686),
10190 Some(17578687),
10191 Some(17578688),
10192 Some(17578689),
10193 Some(17578690),
10194 Some(17578691),
10195 Some(17578692),
10196 Some(17578693),
10197 Some(17578694),
10198 Some(17578695),
10199 Some(17578696),
10200 Some(17578697),
10201 Some(17578698),
10202 Some(17578699),
10203 Some(17578700),
10204 Some(17578701),
10205 Some(17578702),
10206 Some(17578703)
10207 ]
10208 );
10209 let rp: Vec<_> = it
10210 .next()
10211 .unwrap()
10212 .unwrap()
10213 .reference_positions_full()
10214 .collect();
10215 assert_eq!(
10216 rp,
10217 vec![
10218 Some(17566112),
10219 Some(17566113),
10220 Some(17566114),
10221 Some(17566115),
10222 Some(17566116),
10223 Some(17566117),
10224 Some(17566118),
10225 Some(17577951),
10226 Some(17577952),
10227 Some(17577953),
10228 Some(17577954),
10229 Some(17577955),
10230 Some(17577956),
10231 Some(17577957),
10232 Some(17577958),
10233 Some(17577959),
10234 Some(17577960),
10235 Some(17577961),
10236 Some(17577962),
10237 Some(17577963),
10238 Some(17577964),
10239 Some(17577965),
10240 Some(17577966),
10241 Some(17577967),
10242 Some(17577968),
10243 Some(17577969),
10244 Some(17577970),
10245 Some(17577971),
10246 Some(17577972),
10247 Some(17577973),
10248 Some(17577974),
10249 Some(17577975),
10250 Some(17578686),
10251 Some(17578687),
10252 Some(17578688),
10253 Some(17578689),
10254 Some(17578690),
10255 Some(17578691),
10256 Some(17578692),
10257 Some(17578693),
10258 Some(17578694),
10259 Some(17578695),
10260 Some(17578696),
10261 Some(17578697),
10262 Some(17578698),
10263 Some(17578699),
10264 Some(17578700),
10265 Some(17578701),
10266 Some(17578702),
10267 Some(17578703),
10268 Some(17578704)
10269 ]
10270 );
10271 let rp: Vec<_> = it
10272 .next()
10273 .unwrap()
10274 .unwrap()
10275 .reference_positions_full()
10276 .collect();
10277 assert_eq!(
10278 rp,
10279 vec![
10280 Some(17566113),
10281 Some(17566114),
10282 Some(17566115),
10283 Some(17566116),
10284 Some(17566117),
10285 Some(17566118),
10286 Some(17577951),
10287 Some(17577952),
10288 Some(17577953),
10289 Some(17577954),
10290 Some(17577955),
10291 Some(17577956),
10292 Some(17577957),
10293 Some(17577958),
10294 Some(17577959),
10295 Some(17577960),
10296 Some(17577961),
10297 Some(17577962),
10298 Some(17577963),
10299 Some(17577964),
10300 Some(17577965),
10301 Some(17577966),
10302 Some(17577967),
10303 Some(17577968),
10304 Some(17577969),
10305 Some(17577970),
10306 Some(17577971),
10307 Some(17577972),
10308 Some(17577973),
10309 Some(17577974),
10310 Some(17577975),
10311 Some(17578686),
10312 Some(17578687),
10313 Some(17578688),
10314 Some(17578689),
10315 Some(17578690),
10316 Some(17578691),
10317 Some(17578692),
10318 Some(17578693),
10319 Some(17578694),
10320 Some(17578695),
10321 Some(17578696),
10322 Some(17578697),
10323 Some(17578698),
10324 Some(17578699),
10325 Some(17578700),
10326 Some(17578701),
10327 Some(17578702),
10328 Some(17578703),
10329 Some(17578704),
10330 Some(17578705)
10331 ]
10332 );
10333 let rp: Vec<_> = it
10334 .next()
10335 .unwrap()
10336 .unwrap()
10337 .reference_positions_full()
10338 .collect();
10339 assert_eq!(
10340 rp,
10341 vec![
10342 Some(17566113),
10343 Some(17566114),
10344 Some(17566115),
10345 Some(17566116),
10346 Some(17566117),
10347 Some(17566118),
10348 Some(17577951),
10349 Some(17577952),
10350 Some(17577953),
10351 Some(17577954),
10352 Some(17577955),
10353 Some(17577956),
10354 Some(17577957),
10355 Some(17577958),
10356 Some(17577959),
10357 Some(17577960),
10358 Some(17577961),
10359 Some(17577962),
10360 Some(17577963),
10361 Some(17577964),
10362 Some(17577965),
10363 Some(17577966),
10364 Some(17577967),
10365 Some(17577968),
10366 Some(17577969),
10367 Some(17577970),
10368 Some(17577971),
10369 Some(17577972),
10370 Some(17577973),
10371 Some(17577974),
10372 Some(17577975),
10373 Some(17578686),
10374 Some(17578687),
10375 Some(17578688),
10376 Some(17578689),
10377 Some(17578690),
10378 Some(17578691),
10379 Some(17578692),
10380 Some(17578693),
10381 Some(17578694),
10382 Some(17578695),
10383 Some(17578696),
10384 Some(17578697),
10385 Some(17578698),
10386 Some(17578699),
10387 Some(17578700),
10388 Some(17578701),
10389 Some(17578702),
10390 Some(17578703),
10391 Some(17578704),
10392 Some(17578705)
10393 ]
10394 );
10395 let rp: Vec<_> = it
10396 .next()
10397 .unwrap()
10398 .unwrap()
10399 .reference_positions_full()
10400 .collect();
10401 assert_eq!(
10402 rp,
10403 vec![
10404 None,
10405 Some(17579733),
10406 Some(17579734),
10407 Some(17579735),
10408 Some(17579736),
10409 Some(17579737),
10410 Some(17579738),
10411 Some(17579739),
10412 Some(17579740),
10413 Some(17579741),
10414 Some(17579742),
10415 Some(17579743),
10416 Some(17579744),
10417 Some(17579745),
10418 Some(17579746),
10419 Some(17579747),
10420 Some(17579748),
10421 Some(17579749),
10422 Some(17579750),
10423 Some(17579751),
10424 Some(17579752),
10425 Some(17579753),
10426 Some(17579754),
10427 Some(17579755),
10428 Some(17579756),
10429 Some(17579757),
10430 Some(17579758),
10431 Some(17579759),
10432 Some(17579760),
10433 Some(17579761),
10434 Some(17579762),
10435 Some(17579763),
10436 Some(17579764),
10437 Some(17579765),
10438 Some(17579766),
10439 Some(17579767),
10440 Some(17579768),
10441 Some(17579769),
10442 Some(17579770),
10443 Some(17579771),
10444 Some(17579772),
10445 Some(17579773),
10446 Some(17579774),
10447 Some(17579775),
10448 Some(17579776),
10449 Some(17581244),
10450 Some(17581245),
10451 Some(17581246),
10452 Some(17581247),
10453 Some(17581248),
10454 Some(17581249)
10455 ]
10456 );
10457 let rp: Vec<_> = it
10458 .next()
10459 .unwrap()
10460 .unwrap()
10461 .reference_positions_full()
10462 .collect();
10463 assert_eq!(
10464 rp,
10465 vec![
10466 Some(17581369),
10467 Some(17581370),
10468 Some(17582885),
10469 Some(17582886),
10470 Some(17582887),
10471 Some(17582888),
10472 Some(17582889),
10473 Some(17582890),
10474 Some(17582891),
10475 Some(17582892),
10476 Some(17582893),
10477 Some(17582894),
10478 Some(17582895),
10479 Some(17582896),
10480 Some(17582897),
10481 Some(17582898),
10482 Some(17582899),
10483 Some(17582900),
10484 Some(17582901),
10485 Some(17582902),
10486 Some(17582903),
10487 Some(17582904),
10488 Some(17582905),
10489 Some(17582906),
10490 Some(17582907),
10491 Some(17582908),
10492 Some(17582909),
10493 Some(17582910),
10494 Some(17582911),
10495 Some(17582912),
10496 Some(17582913),
10497 Some(17582914),
10498 Some(17582915),
10499 Some(17582916),
10500 Some(17582917),
10501 Some(17582918),
10502 Some(17582919),
10503 Some(17582920),
10504 Some(17582921),
10505 Some(17582922),
10506 Some(17582923),
10507 Some(17582924),
10508 Some(17582925),
10509 Some(17582926),
10510 Some(17582927),
10511 Some(17582928),
10512 Some(17582929),
10513 Some(17582930),
10514 Some(17582931),
10515 Some(17582932),
10516 Some(17583028)
10517 ]
10518 );
10519 let rp: Vec<_> = it
10520 .next()
10521 .unwrap()
10522 .unwrap()
10523 .reference_positions_full()
10524 .collect();
10525 assert_eq!(
10526 rp,
10527 vec![
10528 Some(17581370),
10529 Some(17582885),
10530 Some(17582886),
10531 Some(17582887),
10532 Some(17582888),
10533 Some(17582889),
10534 Some(17582890),
10535 Some(17582891),
10536 Some(17582892),
10537 Some(17582893),
10538 Some(17582894),
10539 Some(17582895),
10540 Some(17582896),
10541 Some(17582897),
10542 Some(17582898),
10543 Some(17582899),
10544 Some(17582900),
10545 Some(17582901),
10546 Some(17582902),
10547 Some(17582903),
10548 Some(17582904),
10549 Some(17582905),
10550 Some(17582906),
10551 Some(17582907),
10552 Some(17582908),
10553 Some(17582909),
10554 Some(17582910),
10555 Some(17582911),
10556 Some(17582912),
10557 Some(17582913),
10558 Some(17582914),
10559 Some(17582915),
10560 Some(17582916),
10561 Some(17582917),
10562 Some(17582918),
10563 Some(17582919),
10564 Some(17582920),
10565 Some(17582921),
10566 Some(17582922),
10567 Some(17582923),
10568 Some(17582924),
10569 Some(17582925),
10570 Some(17582926),
10571 Some(17582927),
10572 Some(17582928),
10573 Some(17582929),
10574 Some(17582930),
10575 Some(17582931),
10576 Some(17582932),
10577 Some(17583028),
10578 Some(17583029)
10579 ]
10580 );
10581 let rp: Vec<_> = it
10582 .next()
10583 .unwrap()
10584 .unwrap()
10585 .reference_positions_full()
10586 .collect();
10587 assert_eq!(
10588 rp,
10589 vec![
10590 Some(17581370),
10591 Some(17582885),
10592 Some(17582886),
10593 Some(17582887),
10594 Some(17582888),
10595 Some(17582889),
10596 Some(17582890),
10597 Some(17582891),
10598 Some(17582892),
10599 Some(17582893),
10600 Some(17582894),
10601 Some(17582895),
10602 Some(17582896),
10603 Some(17582897),
10604 Some(17582898),
10605 Some(17582899),
10606 Some(17582900),
10607 Some(17582901),
10608 Some(17582902),
10609 Some(17582903),
10610 Some(17582904),
10611 Some(17582905),
10612 Some(17582906),
10613 Some(17582907),
10614 Some(17582908),
10615 Some(17582909),
10616 Some(17582910),
10617 Some(17582911),
10618 Some(17582912),
10619 Some(17582913),
10620 Some(17582914),
10621 Some(17582915),
10622 Some(17582916),
10623 Some(17582917),
10624 Some(17582918),
10625 Some(17582919),
10626 Some(17582920),
10627 Some(17582921),
10628 Some(17582922),
10629 Some(17582923),
10630 Some(17582924),
10631 Some(17582925),
10632 Some(17582926),
10633 Some(17582927),
10634 Some(17582928),
10635 Some(17582929),
10636 Some(17582930),
10637 Some(17582931),
10638 Some(17582932),
10639 Some(17583028),
10640 Some(17583029)
10641 ]
10642 );
10643 let rp: Vec<_> = it
10644 .next()
10645 .unwrap()
10646 .unwrap()
10647 .reference_positions_full()
10648 .collect();
10649 assert_eq!(
10650 rp,
10651 vec![
10652 None,
10653 Some(17582911),
10654 Some(17582912),
10655 Some(17582913),
10656 Some(17582914),
10657 Some(17582915),
10658 Some(17582916),
10659 Some(17582917),
10660 Some(17582918),
10661 Some(17582919),
10662 Some(17582920),
10663 Some(17582921),
10664 Some(17582922),
10665 Some(17582923),
10666 Some(17582924),
10667 Some(17582925),
10668 Some(17582926),
10669 Some(17582927),
10670 Some(17582928),
10671 Some(17582929),
10672 Some(17582930),
10673 Some(17582931),
10674 Some(17582932),
10675 Some(17583028),
10676 Some(17583029),
10677 Some(17583030),
10678 Some(17583031),
10679 Some(17583032),
10680 Some(17583033),
10681 Some(17583034),
10682 Some(17583035),
10683 Some(17583036),
10684 Some(17583037),
10685 Some(17583038),
10686 Some(17583039),
10687 Some(17583040),
10688 Some(17583041),
10689 Some(17583042),
10690 Some(17583043),
10691 Some(17583044),
10692 Some(17583045),
10693 Some(17583046),
10694 Some(17583047),
10695 Some(17583048),
10696 Some(17583049),
10697 Some(17583050),
10698 Some(17583051),
10699 Some(17583052),
10700 Some(17583053),
10701 Some(17583054),
10702 Some(17583055)
10703 ]
10704 );
10705 let rp: Vec<_> = it
10706 .next()
10707 .unwrap()
10708 .unwrap()
10709 .reference_positions_full()
10710 .collect();
10711 assert_eq!(
10712 rp,
10713 vec![
10714 Some(17588621),
10715 Some(17588622),
10716 Some(17588623),
10717 Some(17588624),
10718 Some(17588625),
10719 Some(17588626),
10720 Some(17588627),
10721 Some(17588628),
10722 Some(17588629),
10723 Some(17588630),
10724 Some(17588631),
10725 Some(17588632),
10726 Some(17588633),
10727 Some(17588634),
10728 Some(17588635),
10729 Some(17588636),
10730 Some(17588637),
10731 Some(17588638),
10732 Some(17588639),
10733 Some(17588640),
10734 Some(17588641),
10735 Some(17588642),
10736 Some(17588643),
10737 Some(17588644),
10738 Some(17588645),
10739 Some(17588646),
10740 Some(17588647),
10741 Some(17588648),
10742 Some(17588649),
10743 Some(17588650),
10744 Some(17588651),
10745 Some(17588652),
10746 Some(17588653),
10747 Some(17588654),
10748 Some(17588655),
10749 Some(17588656),
10750 Some(17588657),
10751 Some(17589196),
10752 Some(17589197),
10753 Some(17589198),
10754 Some(17589199),
10755 Some(17589200),
10756 Some(17589201),
10757 Some(17589202),
10758 Some(17589203),
10759 Some(17589204),
10760 Some(17589205),
10761 Some(17589206),
10762 Some(17589207),
10763 Some(17589208),
10764 None
10765 ]
10766 );
10767 let rp: Vec<_> = it
10768 .next()
10769 .unwrap()
10770 .unwrap()
10771 .reference_positions_full()
10772 .collect();
10773 assert_eq!(
10774 rp,
10775 vec![
10776 Some(17588621),
10777 Some(17588622),
10778 Some(17588623),
10779 Some(17588624),
10780 Some(17588625),
10781 Some(17588626),
10782 Some(17588627),
10783 Some(17588628),
10784 Some(17588629),
10785 Some(17588630),
10786 Some(17588631),
10787 Some(17588632),
10788 Some(17588633),
10789 Some(17588634),
10790 Some(17588635),
10791 Some(17588636),
10792 Some(17588637),
10793 Some(17588638),
10794 Some(17588639),
10795 Some(17588640),
10796 Some(17588641),
10797 Some(17588642),
10798 Some(17588643),
10799 Some(17588644),
10800 Some(17588645),
10801 Some(17588646),
10802 Some(17588647),
10803 Some(17588648),
10804 Some(17588649),
10805 Some(17588650),
10806 Some(17588651),
10807 Some(17588652),
10808 Some(17588653),
10809 Some(17588654),
10810 Some(17588655),
10811 Some(17588656),
10812 Some(17588657),
10813 Some(17589196),
10814 Some(17589197),
10815 Some(17589198),
10816 Some(17589199),
10817 Some(17589200),
10818 Some(17589201),
10819 Some(17589202),
10820 Some(17589203),
10821 Some(17589204),
10822 Some(17589205),
10823 Some(17589206),
10824 Some(17589207),
10825 Some(17589208),
10826 None
10827 ]
10828 );
10829 let rp: Vec<_> = it
10830 .next()
10831 .unwrap()
10832 .unwrap()
10833 .reference_positions_full()
10834 .collect();
10835 assert_eq!(
10836 rp,
10837 vec![
10838 Some(17588621),
10839 Some(17588622),
10840 Some(17588623),
10841 Some(17588624),
10842 Some(17588625),
10843 Some(17588626),
10844 Some(17588627),
10845 Some(17588628),
10846 Some(17588629),
10847 Some(17588630),
10848 Some(17588631),
10849 Some(17588632),
10850 Some(17588633),
10851 Some(17588634),
10852 Some(17588635),
10853 Some(17588636),
10854 Some(17588637),
10855 Some(17588638),
10856 Some(17588639),
10857 Some(17588640),
10858 Some(17588641),
10859 Some(17588642),
10860 Some(17588643),
10861 Some(17588644),
10862 Some(17588645),
10863 Some(17588646),
10864 Some(17588647),
10865 Some(17588648),
10866 Some(17588649),
10867 Some(17588650),
10868 Some(17588651),
10869 Some(17588652),
10870 Some(17588653),
10871 Some(17588654),
10872 Some(17588655),
10873 Some(17588656),
10874 Some(17588657),
10875 Some(17589196),
10876 Some(17589197),
10877 Some(17589198),
10878 Some(17589199),
10879 Some(17589200),
10880 Some(17589201),
10881 Some(17589202),
10882 Some(17589203),
10883 Some(17589204),
10884 Some(17589205),
10885 Some(17589206),
10886 Some(17589207),
10887 Some(17589208),
10888 None
10889 ]
10890 );
10891 let rp: Vec<_> = it
10892 .next()
10893 .unwrap()
10894 .unwrap()
10895 .reference_positions_full()
10896 .collect();
10897 assert_eq!(
10898 rp,
10899 vec![
10900 None,
10901 Some(17591770),
10902 Some(17591771),
10903 Some(17591772),
10904 Some(17591773),
10905 Some(17591774),
10906 Some(17591775),
10907 Some(17591776),
10908 Some(17591777),
10909 Some(17591778),
10910 Some(17591779),
10911 Some(17591780),
10912 Some(17591781),
10913 Some(17591782),
10914 Some(17591783),
10915 Some(17591784),
10916 Some(17591785),
10917 Some(17591786),
10918 Some(17591787),
10919 Some(17591788),
10920 Some(17591789),
10921 Some(17591790),
10922 Some(17591791),
10923 Some(17591792),
10924 Some(17591793),
10925 Some(17591794),
10926 Some(17591796),
10927 Some(17591797),
10928 Some(17591798),
10929 Some(17591799),
10930 Some(17591800),
10931 Some(17591801),
10932 Some(17591802),
10933 Some(17591803),
10934 Some(17591804),
10935 Some(17591805),
10936 Some(17591806),
10937 Some(17591807),
10938 Some(17591808),
10939 Some(17591809),
10940 Some(17591810),
10941 Some(17591811),
10942 Some(17591812),
10943 Some(17591813),
10944 Some(17591814),
10945 Some(17591815),
10946 Some(17591816),
10947 Some(17591817),
10948 Some(17591818),
10949 Some(17591819),
10950 Some(17591820)
10951 ]
10952 );
10953 let rp: Vec<_> = it
10954 .next()
10955 .unwrap()
10956 .unwrap()
10957 .reference_positions_full()
10958 .collect();
10959 assert_eq!(
10960 rp,
10961 vec![
10962 Some(17593855),
10963 Some(17593856),
10964 Some(17593857),
10965 Some(17593858),
10966 Some(17593859),
10967 Some(17593860),
10968 Some(17593861),
10969 Some(17593862),
10970 Some(17593863),
10971 Some(17593864),
10972 Some(17593865),
10973 Some(17593866),
10974 Some(17593867),
10975 Some(17593868),
10976 Some(17593869),
10977 Some(17593870),
10978 Some(17593871),
10979 Some(17593872),
10980 Some(17593873),
10981 Some(17593874),
10982 Some(17593875),
10983 Some(17593876),
10984 Some(17593877),
10985 Some(17593878),
10986 Some(17593880),
10987 Some(17593881),
10988 Some(17593882),
10989 Some(17593883),
10990 Some(17593884),
10991 Some(17593885),
10992 Some(17593886),
10993 Some(17593887),
10994 Some(17593888),
10995 Some(17593889),
10996 Some(17593890),
10997 Some(17593891),
10998 Some(17593892),
10999 Some(17593893),
11000 Some(17593894),
11001 Some(17593895),
11002 Some(17593896),
11003 Some(17593897),
11004 Some(17593898),
11005 Some(17593899),
11006 Some(17593900),
11007 Some(17593901),
11008 Some(17593902),
11009 Some(17593903),
11010 None,
11011 None,
11012 None
11013 ]
11014 );
11015 let rp: Vec<_> = it
11016 .next()
11017 .unwrap()
11018 .unwrap()
11019 .reference_positions_full()
11020 .collect();
11021 assert_eq!(
11022 rp,
11023 vec![
11024 Some(17593863),
11025 Some(17593864),
11026 Some(17593865),
11027 Some(17593866),
11028 Some(17593867),
11029 Some(17593868),
11030 Some(17593869),
11031 Some(17593870),
11032 Some(17593871),
11033 Some(17593872),
11034 Some(17593873),
11035 Some(17593874),
11036 Some(17593875),
11037 Some(17593876),
11038 Some(17593877),
11039 Some(17593878),
11040 Some(17593880),
11041 Some(17593881),
11042 Some(17593882),
11043 Some(17593883),
11044 Some(17593884),
11045 Some(17593885),
11046 Some(17593886),
11047 Some(17593887),
11048 Some(17593888),
11049 Some(17593889),
11050 Some(17593890),
11051 Some(17593891),
11052 Some(17593892),
11053 Some(17593893),
11054 Some(17593894),
11055 Some(17593895),
11056 Some(17593896),
11057 Some(17593897),
11058 Some(17593898),
11059 Some(17593899),
11060 Some(17593900),
11061 Some(17593901),
11062 Some(17593902),
11063 Some(17593903),
11064 Some(17593904),
11065 Some(17593905),
11066 Some(17593906),
11067 Some(17593907),
11068 None,
11069 None,
11070 None,
11071 None,
11072 None,
11073 None,
11074 None
11075 ]
11076 );
11077 let rp: Vec<_> = it
11078 .next()
11079 .unwrap()
11080 .unwrap()
11081 .reference_positions_full()
11082 .collect();
11083 assert_eq!(
11084 rp,
11085 vec![
11086 None,
11087 None,
11088 None,
11089 None,
11090 None,
11091 None,
11092 None,
11093 None,
11094 None,
11095 None,
11096 None,
11097 Some(17596476),
11098 Some(17596477),
11099 Some(17596478),
11100 Some(17596479),
11101 Some(17596480),
11102 Some(17596481),
11103 Some(17596482),
11104 None,
11105 Some(17596483),
11106 Some(17596484),
11107 Some(17596485),
11108 Some(17596486),
11109 Some(17596487),
11110 Some(17596488),
11111 Some(17596489),
11112 Some(17596490),
11113 Some(17596491),
11114 Some(17596492),
11115 Some(17596493),
11116 Some(17596494),
11117 Some(17596495),
11118 Some(17596496),
11119 Some(17596497),
11120 Some(17596498),
11121 Some(17596499),
11122 Some(17596500),
11123 Some(17596501),
11124 Some(17596502),
11125 Some(17596503),
11126 Some(17596504),
11127 Some(17596505),
11128 Some(17596506),
11129 Some(17596507),
11130 Some(17596508),
11131 Some(17596509),
11132 Some(17596510),
11133 Some(17596511),
11134 Some(17596512),
11135 Some(17596513),
11136 Some(17596514)
11137 ]
11138 );
11139 let rp: Vec<_> = it
11140 .next()
11141 .unwrap()
11142 .unwrap()
11143 .reference_positions_full()
11144 .collect();
11145 assert_eq!(
11146 rp,
11147 vec![
11148 None,
11149 None,
11150 None,
11151 None,
11152 None,
11153 Some(17624012),
11154 Some(17624013),
11155 Some(17624014),
11156 Some(17624015),
11157 Some(17624016),
11158 Some(17624017),
11159 Some(17624018),
11160 Some(17624019),
11161 Some(17624020),
11162 Some(17625913),
11163 Some(17625914),
11164 Some(17625915),
11165 Some(17625916),
11166 Some(17625917),
11167 Some(17625918),
11168 Some(17625919),
11169 Some(17625920),
11170 Some(17625921),
11171 Some(17625922),
11172 Some(17625923),
11173 Some(17625924),
11174 Some(17625925),
11175 Some(17625926),
11176 Some(17625927),
11177 Some(17625928),
11178 Some(17625929),
11179 Some(17625930),
11180 Some(17625931),
11181 Some(17625932),
11182 Some(17625933),
11183 Some(17625934),
11184 Some(17625935),
11185 Some(17625936),
11186 Some(17625937),
11187 Some(17625938),
11188 Some(17625939),
11189 Some(17625940),
11190 Some(17625941),
11191 Some(17625942),
11192 Some(17625943),
11193 Some(17625944),
11194 Some(17625945),
11195 Some(17625946),
11196 Some(17625947),
11197 Some(17625948),
11198 Some(17625949)
11199 ]
11200 );
11201 let rp: Vec<_> = it
11202 .next()
11203 .unwrap()
11204 .unwrap()
11205 .reference_positions_full()
11206 .collect();
11207 assert_eq!(
11208 rp,
11209 vec![
11210 None,
11211 None,
11212 Some(17624012),
11213 Some(17624013),
11214 Some(17624014),
11215 Some(17624015),
11216 Some(17624016),
11217 Some(17624017),
11218 Some(17624018),
11219 Some(17624019),
11220 Some(17624020),
11221 Some(17625913),
11222 Some(17625914),
11223 Some(17625915),
11224 Some(17625916),
11225 Some(17625917),
11226 Some(17625918),
11227 Some(17625919),
11228 Some(17625920),
11229 Some(17625921),
11230 Some(17625922),
11231 Some(17625923),
11232 Some(17625924),
11233 Some(17625925),
11234 Some(17625926),
11235 Some(17625927),
11236 Some(17625928),
11237 Some(17625929),
11238 Some(17625930),
11239 Some(17625931),
11240 Some(17625932),
11241 Some(17625933),
11242 Some(17625934),
11243 Some(17625935),
11244 Some(17625936),
11245 Some(17625937),
11246 Some(17625938),
11247 Some(17625939),
11248 Some(17625940),
11249 Some(17625941),
11250 Some(17625942),
11251 Some(17625943),
11252 Some(17625944),
11253 Some(17625945),
11254 Some(17625946),
11255 Some(17625947),
11256 Some(17625948),
11257 Some(17625949),
11258 Some(17625950),
11259 Some(17625951),
11260 Some(17625952)
11261 ]
11262 );
11263 let rp: Vec<_> = it
11264 .next()
11265 .unwrap()
11266 .unwrap()
11267 .reference_positions_full()
11268 .collect();
11269 assert_eq!(
11270 rp,
11271 vec![
11272 None,
11273 Some(31796700),
11274 Some(31796701),
11275 Some(31796702),
11276 Some(31796703),
11277 Some(31796704),
11278 Some(31796705),
11279 Some(31796706),
11280 Some(31796710),
11281 Some(31796711),
11282 Some(31796712),
11283 Some(31796713),
11284 Some(31796714),
11285 Some(31796715),
11286 Some(31796716),
11287 Some(31796717),
11288 Some(31796718),
11289 Some(31796719),
11290 Some(31796720),
11291 Some(31796721),
11292 Some(31796722),
11293 Some(31796723),
11294 Some(31796724),
11295 Some(31796725),
11296 Some(31796726),
11297 Some(31796727),
11298 Some(31796728),
11299 Some(31799014),
11300 Some(31799015),
11301 Some(31799016),
11302 Some(31799017),
11303 Some(31799018),
11304 Some(31799019),
11305 Some(31799020),
11306 Some(31799021),
11307 Some(31799022),
11308 Some(31799023),
11309 Some(31799024),
11310 Some(31799025),
11311 Some(31799026),
11312 Some(31799027),
11313 Some(31799028),
11314 Some(31799029),
11315 Some(31799030),
11316 Some(31799031),
11317 Some(31799032),
11318 Some(31799033),
11319 Some(31799034),
11320 Some(31799035),
11321 Some(31799036),
11322 Some(31799037)
11323 ]
11324 );
11325 let rp: Vec<_> = it
11326 .next()
11327 .unwrap()
11328 .unwrap()
11329 .reference_positions_full()
11330 .collect();
11331 assert_eq!(
11332 rp,
11333 vec![
11334 Some(36722692),
11335 Some(36722693),
11336 Some(36722694),
11337 Some(36722695),
11338 Some(36722696),
11339 Some(36722697),
11340 Some(36722698),
11341 Some(36722699),
11342 Some(36722700),
11343 Some(36722701),
11344 Some(36722702),
11345 Some(36722703),
11346 Some(36722704),
11347 Some(36722705),
11348 Some(36723505),
11349 Some(36723506),
11350 Some(36723507),
11351 Some(36723508),
11352 Some(36723509),
11353 Some(36723510),
11354 Some(36723511),
11355 Some(36723512),
11356 Some(36723513),
11357 Some(36723514),
11358 Some(36723515),
11359 Some(36723516),
11360 Some(36723517),
11361 Some(36723518),
11362 Some(36723519),
11363 Some(36723520),
11364 Some(36723521),
11365 Some(36723522),
11366 Some(36723523),
11367 Some(36723524),
11368 Some(36723525),
11369 Some(36723526),
11370 Some(36723527),
11371 Some(36723528),
11372 Some(36723529),
11373 Some(36723530),
11374 Some(36723531),
11375 Some(36723532),
11376 Some(36737414),
11377 Some(36737415),
11378 Some(36737416),
11379 Some(36737417),
11380 Some(36737418),
11381 Some(36737419),
11382 Some(36737420),
11383 None,
11384 None
11385 ]
11386 );
11387 let rp: Vec<_> = it
11388 .next()
11389 .unwrap()
11390 .unwrap()
11391 .reference_positions_full()
11392 .collect();
11393 assert_eq!(
11394 rp,
11395 vec![
11396 None,
11397 None,
11398 None,
11399 None,
11400 Some(44587963),
11401 Some(44587964),
11402 Some(44587965),
11403 Some(44587966),
11404 Some(44587967),
11405 Some(44587968),
11406 Some(44587969),
11407 Some(44587970),
11408 Some(44587971),
11409 Some(44587972),
11410 Some(44587973),
11411 Some(44587974),
11412 Some(44587975),
11413 Some(44587976),
11414 Some(44587977),
11415 Some(44587978),
11416 Some(44587979),
11417 Some(44587980),
11418 Some(44587981),
11419 Some(44587982),
11420 Some(44587983),
11421 Some(44589680),
11422 Some(44589681),
11423 Some(44589682),
11424 Some(44589683),
11425 Some(44589684),
11426 Some(44589685),
11427 Some(44589686),
11428 Some(44589687),
11429 Some(44589688),
11430 Some(44589689),
11431 Some(44589690),
11432 Some(44589691),
11433 Some(44589692),
11434 Some(44589693),
11435 Some(44589694),
11436 Some(44589695),
11437 Some(44589696),
11438 Some(44589697),
11439 Some(44589698),
11440 Some(44589699),
11441 Some(44589700),
11442 Some(44589701),
11443 Some(44589702),
11444 Some(44592034),
11445 Some(44592035),
11446 Some(44592036)
11447 ]
11448 );
11449 }
11450
11451 #[test]
11452 fn test_reference_start_end() {
11453 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
11454 let mut it = bam.records();
11455 let read = it.next().unwrap().unwrap();
11456 assert_eq!(read.reference_start(), 16050676);
11457 assert_eq!(read.reference_end(), 16050721);
11458 let read = it.next().unwrap().unwrap();
11459 assert_eq!(read.reference_start(), 16096878);
11460 assert_eq!(read.reference_end(), 16096931);
11461 let read = it.next().unwrap().unwrap();
11462 assert_eq!(read.reference_start(), 16097145);
11463 assert_eq!(read.reference_end(), 16097198);
11464 let read = it.next().unwrap().unwrap();
11465 assert_eq!(read.reference_start(), 16117350);
11466 assert_eq!(read.reference_end(), 16117401);
11467 let read = it.next().unwrap().unwrap();
11468 assert_eq!(read.reference_start(), 16118483);
11469 assert_eq!(read.reference_end(), 16118534);
11470 let read = it.next().unwrap().unwrap();
11471 assert_eq!(read.reference_start(), 16118499);
11472 assert_eq!(read.reference_end(), 16118550);
11473 let read = it.next().unwrap().unwrap();
11474 assert_eq!(read.reference_start(), 16118499);
11475 assert_eq!(read.reference_end(), 16118550);
11476 let read = it.next().unwrap().unwrap();
11477 assert_eq!(read.reference_start(), 16118499);
11478 assert_eq!(read.reference_end(), 16118550);
11479 let read = it.next().unwrap().unwrap();
11480 assert_eq!(read.reference_start(), 16123411);
11481 assert_eq!(read.reference_end(), 16123462);
11482 let read = it.next().unwrap().unwrap();
11483 assert_eq!(read.reference_start(), 16123417);
11484 assert_eq!(read.reference_end(), 16123462);
11485 let read = it.next().unwrap().unwrap();
11486 assert_eq!(read.reference_start(), 16165860);
11487 assert_eq!(read.reference_end(), 16165901);
11488 let read = it.next().unwrap().unwrap();
11489 assert_eq!(read.reference_start(), 16180871);
11490 assert_eq!(read.reference_end(), 16180922);
11491 let read = it.next().unwrap().unwrap();
11492 assert_eq!(read.reference_start(), 16189705);
11493 assert_eq!(read.reference_end(), 16189756);
11494 let read = it.next().unwrap().unwrap();
11495 assert_eq!(read.reference_start(), 16231271);
11496 assert_eq!(read.reference_end(), 16231322);
11497 let read = it.next().unwrap().unwrap();
11498 assert_eq!(read.reference_start(), 16237657);
11499 assert_eq!(read.reference_end(), 16237708);
11500 let read = it.next().unwrap().unwrap();
11501 assert_eq!(read.reference_start(), 16255012);
11502 assert_eq!(read.reference_end(), 16255054);
11503 let read = it.next().unwrap().unwrap();
11504 assert_eq!(read.reference_start(), 16255391);
11505 assert_eq!(read.reference_end(), 16255442);
11506 let read = it.next().unwrap().unwrap();
11507 assert_eq!(read.reference_start(), 16255392);
11508 assert_eq!(read.reference_end(), 16255442);
11509 let read = it.next().unwrap().unwrap();
11510 assert_eq!(read.reference_start(), 16256084);
11511 assert_eq!(read.reference_end(), 16256129);
11512 let read = it.next().unwrap().unwrap();
11513 assert_eq!(read.reference_start(), 16256224);
11514 assert_eq!(read.reference_end(), 16256272);
11515 let read = it.next().unwrap().unwrap();
11516 assert_eq!(read.reference_start(), 16325199);
11517 assert_eq!(read.reference_end(), 16325241);
11518 let read = it.next().unwrap().unwrap();
11519 assert_eq!(read.reference_start(), 16352865);
11520 assert_eq!(read.reference_end(), 16352903);
11521 let read = it.next().unwrap().unwrap();
11522 assert_eq!(read.reference_start(), 16352968);
11523 assert_eq!(read.reference_end(), 16353012);
11524 let read = it.next().unwrap().unwrap();
11525 assert_eq!(read.reference_start(), 16414998);
11526 assert_eq!(read.reference_end(), 16415044);
11527 let read = it.next().unwrap().unwrap();
11528 assert_eq!(read.reference_start(), 17031591);
11529 assert_eq!(read.reference_end(), 17031638);
11530 let read = it.next().unwrap().unwrap();
11531 assert_eq!(read.reference_start(), 17057382);
11532 assert_eq!(read.reference_end(), 17057432);
11533 let read = it.next().unwrap().unwrap();
11534 assert_eq!(read.reference_start(), 17092766);
11535 assert_eq!(read.reference_end(), 17095000);
11536 let read = it.next().unwrap().unwrap();
11537 assert_eq!(read.reference_start(), 17092782);
11538 assert_eq!(read.reference_end(), 17095016);
11539 let read = it.next().unwrap().unwrap();
11540 assert_eq!(read.reference_start(), 17092782);
11541 assert_eq!(read.reference_end(), 17095016);
11542 let read = it.next().unwrap().unwrap();
11543 assert_eq!(read.reference_start(), 17137287);
11544 assert_eq!(read.reference_end(), 17137320);
11545 let read = it.next().unwrap().unwrap();
11546 assert_eq!(read.reference_start(), 17306238);
11547 assert_eq!(read.reference_end(), 17306286);
11548 let read = it.next().unwrap().unwrap();
11549 assert_eq!(read.reference_start(), 17561868);
11550 assert_eq!(read.reference_end(), 17561913);
11551 let read = it.next().unwrap().unwrap();
11552 assert_eq!(read.reference_start(), 17566078);
11553 assert_eq!(read.reference_end(), 17577961);
11554 let read = it.next().unwrap().unwrap();
11555 assert_eq!(read.reference_start(), 17566108);
11556 assert_eq!(read.reference_end(), 17578701);
11557 let read = it.next().unwrap().unwrap();
11558 assert_eq!(read.reference_start(), 17566111);
11559 assert_eq!(read.reference_end(), 17578704);
11560 let read = it.next().unwrap().unwrap();
11561 assert_eq!(read.reference_start(), 17566111);
11562 assert_eq!(read.reference_end(), 17578704);
11563 let read = it.next().unwrap().unwrap();
11564 assert_eq!(read.reference_start(), 17566111);
11565 assert_eq!(read.reference_end(), 17578704);
11566 let read = it.next().unwrap().unwrap();
11567 assert_eq!(read.reference_start(), 17566111);
11568 assert_eq!(read.reference_end(), 17578704);
11569 let read = it.next().unwrap().unwrap();
11570 assert_eq!(read.reference_start(), 17566112);
11571 assert_eq!(read.reference_end(), 17578705);
11572 let read = it.next().unwrap().unwrap();
11573 assert_eq!(read.reference_start(), 17566113);
11574 assert_eq!(read.reference_end(), 17578706);
11575 let read = it.next().unwrap().unwrap();
11576 assert_eq!(read.reference_start(), 17566113);
11577 assert_eq!(read.reference_end(), 17578706);
11578 let read = it.next().unwrap().unwrap();
11579 assert_eq!(read.reference_start(), 17579733);
11580 assert_eq!(read.reference_end(), 17581250);
11581 let read = it.next().unwrap().unwrap();
11582 assert_eq!(read.reference_start(), 17581369);
11583 assert_eq!(read.reference_end(), 17583029);
11584 let read = it.next().unwrap().unwrap();
11585 assert_eq!(read.reference_start(), 17581370);
11586 assert_eq!(read.reference_end(), 17583030);
11587 let read = it.next().unwrap().unwrap();
11588 assert_eq!(read.reference_start(), 17581370);
11589 assert_eq!(read.reference_end(), 17583030);
11590 let read = it.next().unwrap().unwrap();
11591 assert_eq!(read.reference_start(), 17582911);
11592 assert_eq!(read.reference_end(), 17583056);
11593 let read = it.next().unwrap().unwrap();
11594 assert_eq!(read.reference_start(), 17588621);
11595 assert_eq!(read.reference_end(), 17589209);
11596 let read = it.next().unwrap().unwrap();
11597 assert_eq!(read.reference_start(), 17588621);
11598 assert_eq!(read.reference_end(), 17589209);
11599 let read = it.next().unwrap().unwrap();
11600 assert_eq!(read.reference_start(), 17588621);
11601 assert_eq!(read.reference_end(), 17589209);
11602 let read = it.next().unwrap().unwrap();
11603 assert_eq!(read.reference_start(), 17591770);
11604 assert_eq!(read.reference_end(), 17591821);
11605 let read = it.next().unwrap().unwrap();
11606 assert_eq!(read.reference_start(), 17593855);
11607 assert_eq!(read.reference_end(), 17593904);
11608 let read = it.next().unwrap().unwrap();
11609 assert_eq!(read.reference_start(), 17593863);
11610 assert_eq!(read.reference_end(), 17593908);
11611 let read = it.next().unwrap().unwrap();
11612 assert_eq!(read.reference_start(), 17596476);
11613 assert_eq!(read.reference_end(), 17596515);
11614 let read = it.next().unwrap().unwrap();
11615 assert_eq!(read.reference_start(), 17624012);
11616 assert_eq!(read.reference_end(), 17625950);
11617 let read = it.next().unwrap().unwrap();
11618 assert_eq!(read.reference_start(), 17624012);
11619 assert_eq!(read.reference_end(), 17625953);
11620 let read = it.next().unwrap().unwrap();
11621 assert_eq!(read.reference_start(), 31796700);
11622 assert_eq!(read.reference_end(), 31799038);
11623 let read = it.next().unwrap().unwrap();
11624 assert_eq!(read.reference_start(), 36722692);
11625 assert_eq!(read.reference_end(), 36737421);
11626 let read = it.next().unwrap().unwrap();
11627 assert_eq!(read.reference_start(), 44587963);
11628 assert_eq!(read.reference_end(), 44592037);
11629 }
11630
11631 #[test]
11632 fn test_infer_seq_len() {
11633 use std::convert::TryFrom;
11634 let mut bam = bam::Reader::from_path("./test/test_spliced_reads.bam").unwrap();
11635 for read in bam.records() {
11636 let read = read.unwrap();
11637 assert_eq!(read.seq_len_from_cigar(false), 51);
11638 assert_eq!(read.seq_len_from_cigar(true), 51);
11639 }
11640
11641 let mut read = bam::Record::new();
11642 for (input_cigar, supposed_length_wo_hard_clip, supposed_length_with_hard_clip) in &[
11643 ("40M", 40, 40),
11644 ("40=", 40, 40),
11645 ("40X", 40, 40),
11646 ("20M5I20M", 45, 45),
11647 ("20M5D20M", 40, 40),
11648 ("5H", 0, 5),
11649 ("5H35M", 35, 40),
11650 ("5S35M", 40, 40),
11651 ("35M5H", 35, 40),
11652 ("35M5S", 40, 40),
11653 ("", 0, 0),
11654 ] {
11655 read.set(
11656 b"test",
11657 Some(&CigarString::try_from(*input_cigar).unwrap()),
11658 b"agtc",
11659 b"BBBB",
11660 );
11661 assert_eq!(
11662 &read.seq_len_from_cigar(false),
11663 supposed_length_wo_hard_clip
11664 );
11665 assert_eq!(
11666 &read.seq_len_from_cigar(true),
11667 supposed_length_with_hard_clip
11668 );
11669 }
11670 }
11671}