From 8b57c91ab7ba80f097c947e6efa748371ea68db1 Mon Sep 17 00:00:00 2001 From: Eric Coissac Date: Sat, 30 May 2026 16:27:32 +0200 Subject: [PATCH] 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. --- src/obiskio/src/tests/unitig_index.rs | 24 ------------------------ src/obiskio/src/unitig_index.rs | 5 ----- 2 files changed, 29 deletions(-) diff --git a/src/obiskio/src/tests/unitig_index.rs b/src/obiskio/src/tests/unitig_index.rs index 5553357..f4f1ffb 100644 --- a/src/obiskio/src/tests/unitig_index.rs +++ b/src/obiskio/src/tests/unitig_index.rs @@ -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 = r.iter_canonical_kmers().collect(); - let raw: Vec = 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] diff --git a/src/obiskio/src/unitig_index.rs b/src/obiskio/src/unitig_index.rs index fd46892..3320500 100644 --- a/src/obiskio/src/unitig_index.rs +++ b/src/obiskio/src/unitig_index.rs @@ -370,11 +370,6 @@ impl UnitigFileReader { .flat_map(|(_, u)| u.into_kmers()) } - pub fn iter_canonical_kmers(&self) -> impl Iterator + '_ { - self.iter_chunks_sequential() - .flat_map(|(_, u)| u.into_canonical_kmers()) - } - pub fn iter_indexed_canonical_kmers( &self, ) -> impl Iterator + '_ {