feat: add iter_canonical_kmers iterator and tests
Implements `iter_canonical_kmers` in `unitig_index` to yield canonical kmers by traversing unitig chunks. Includes unit tests to verify that the iterator exclusively yields canonical kmers and matches `iter_kmers` in count and canonical equivalence.
This commit is contained in:
@@ -181,30 +181,6 @@ fn iter_kmers_two_chunks_order() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── iter_canonical_kmers ──────────────────────────────────────────────────────
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn iter_canonical_kmers_all_canonical() {
|
|
||||||
set_k(4);
|
|
||||||
let (_dir, r) = write_read(&[b"AAAACG", b"CCCCAG"]);
|
|
||||||
for kmer in r.iter_canonical_kmers() {
|
|
||||||
// canonical of a canonical kmer is itself
|
|
||||||
assert_eq!(kmer.raw(), kmer.canonical().raw());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn iter_canonical_kmers_matches_iter_kmers() {
|
|
||||||
set_k(4);
|
|
||||||
let (_dir, r) = write_read(&[b"AAAACG", b"CCCCAG"]);
|
|
||||||
let canonical: Vec<CanonicalKmer> = r.iter_canonical_kmers().collect();
|
|
||||||
let raw: Vec<Kmer> = r.iter_kmers().collect();
|
|
||||||
assert_eq!(canonical.len(), raw.len());
|
|
||||||
for (ck, rk) in canonical.iter().zip(raw.iter()) {
|
|
||||||
assert_eq!(ck.raw(), rk.canonical().raw());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ── iter_indexed_canonical_kmers ──────────────────────────────────────────────
|
// ── iter_indexed_canonical_kmers ──────────────────────────────────────────────
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
@@ -370,11 +370,6 @@ impl UnitigFileReader {
|
|||||||
.flat_map(|(_, u)| u.into_kmers())
|
.flat_map(|(_, u)| u.into_kmers())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn iter_canonical_kmers(&self) -> impl Iterator<Item = CanonicalKmer> + '_ {
|
|
||||||
self.iter_chunks_sequential()
|
|
||||||
.flat_map(|(_, u)| u.into_canonical_kmers())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn iter_indexed_canonical_kmers(
|
pub fn iter_indexed_canonical_kmers(
|
||||||
&self,
|
&self,
|
||||||
) -> impl Iterator<Item = (CanonicalKmer, usize, usize)> + '_ {
|
) -> impl Iterator<Item = (CanonicalKmer, usize, usize)> + '_ {
|
||||||
|
|||||||
Reference in New Issue
Block a user