catch too-short kmers when trying to merge
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
index d6fa8bd..35241a2 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
@@ -505,8 +505,8 @@
* : the next kmer
*/
public void mergeWithFFKmer(int initialKmerSize, VKmerBytesWritable kmer) {
- if (lettersInKmer == 0 || kmer.lettersInKmer == 0) {
- throw new IllegalStateException("Trying to merge an empty kmer! merge: '" + this + "' with '" + kmer + "'.");
+ if (lettersInKmer < initialKmerSize - 1 || kmer.lettersInKmer < initialKmerSize - 1) {
+ throw new IllegalArgumentException("Not enough letters in the kmers to perform a merge! Tried K=" + initialKmerSize + ", merge '" + this + "' with '" + kmer + "'.");
}
int preKmerLength = lettersInKmer;
int preSize = bytesUsed;
@@ -541,8 +541,8 @@
* : the next kmer
*/
public void mergeWithFRKmer(int initialKmerSize, VKmerBytesWritable kmer) {
- if (lettersInKmer == 0 || kmer.lettersInKmer == 0) {
- throw new IllegalStateException("Trying to merge an empty kmer! merge: '" + this + "' with '" + kmer + "'.");
+ if (lettersInKmer < initialKmerSize - 1 || kmer.lettersInKmer < initialKmerSize - 1) {
+ throw new IllegalArgumentException("Not enough letters in the kmers to perform a merge! Tried K=" + initialKmerSize + ", merge '" + this + "' with '" + kmer + "'.");
}
int preSize = bytesUsed;
int preKmerLength = lettersInKmer;
@@ -611,8 +611,8 @@
* : the previous kmer
*/
public void mergeWithRRKmer(int initialKmerSize, VKmerBytesWritable preKmer) {
- if (lettersInKmer == 0 || preKmer.lettersInKmer == 0) {
- throw new IllegalStateException("Trying to merge an empty kmer! merge: '" + this + "' with '" + preKmer + "'.");
+ if (lettersInKmer < initialKmerSize - 1 || preKmer.lettersInKmer < initialKmerSize - 1) {
+ throw new IllegalArgumentException("Not enough letters in the kmers to perform a merge! Tried K=" + initialKmerSize + ", merge '" + this + "' with '" + preKmer + "'.");
}
int preKmerLength = lettersInKmer;
int preSize = bytesUsed;