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:
Eric Coissac
2026-05-30 16:27:32 +02:00
parent 728476a0a6
commit 8b57c91ab7
2 changed files with 0 additions and 29 deletions
-24
View File
@@ -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 ──────────────────────────────────────────────
#[test]
-5
View File
@@ -370,11 +370,6 @@ impl UnitigFileReader {
.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(
&self,
) -> impl Iterator<Item = (CanonicalKmer, usize, usize)> + '_ {