Skip to content

Commit 97fb900

Browse files
committed
Test: SyncmerIterator returns canonical syncmers
1 parent 77bbb7e commit 97fb900

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

src/randstrobes.hpp

+4
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,10 @@ struct Syncmer {
109109
bool is_end() const {
110110
return hash == 0 && position == 0;
111111
}
112+
113+
bool operator==(const Syncmer& rhs) const {
114+
return this->hash == rhs.hash && this->position == rhs.position;
115+
}
112116
};
113117

114118
/*

tests/test_randstrobes.cpp

+33
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,38 @@
11
#include "doctest.h"
22
#include "randstrobes.hpp"
3+
#include "revcomp.hpp"
4+
#include "refs.hpp"
5+
6+
7+
std::vector<Syncmer> syncmers_of(std::string& seq, SyncmerParameters parameters) {
8+
SyncmerIterator iterator{seq, parameters};
9+
std::vector<Syncmer> syncmers;
10+
Syncmer syncmer;
11+
while (!(syncmer = iterator.next()).is_end()) {
12+
syncmers.push_back(syncmer);
13+
}
14+
15+
return syncmers;
16+
}
17+
18+
TEST_CASE("SyncmerIterator yields canonical syncmers") {
19+
SyncmerParameters parameters{20, 16};
20+
std::vector<std::string> seqs;
21+
seqs.push_back(References::from_fasta("tests/phix.fasta").sequences[0]);
22+
seqs.push_back("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
23+
for (std::string& seq : seqs) {
24+
std::string seq_reverse = reverse_complement(seq);
25+
std::vector<Syncmer> syncmers_forward = syncmers_of(seq, parameters);
26+
std::vector<Syncmer> syncmers_reverse = syncmers_of(seq_reverse, parameters);
27+
28+
std::reverse(syncmers_reverse.begin(), syncmers_reverse.end());
29+
for (auto& it : syncmers_reverse) {
30+
it.position = seq.size() - parameters.k - it.position;
31+
}
32+
33+
CHECK(syncmers_forward == syncmers_reverse);
34+
}
35+
}
336

437

538
TEST_CASE("RefRandstrobe constructor") {

0 commit comments

Comments
 (0)