meatier test case and tweaks for PositionWritable
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionWritable.java
index ae02982..593ed65 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionWritable.java
@@ -16,6 +16,12 @@
protected int offset;
public static final int LENGTH = 8;
+ public static final int totalBits = 64;
+ private static final int bitsForMate = 1;
+ private static final int bitsForPosition = 16;
+ private static final int readIdShift = bitsForPosition + bitsForMate;
+ private static final int positionIdShift = bitsForMate;
+
public PositionWritable() {
storage = new byte[LENGTH];
offset = 0;
@@ -35,7 +41,7 @@
}
public void set(byte mateId, long readId, int posId){
- long uuid = (readId << 17) + ((posId & 0xFFFF) << 1) + (mateId & 0b1);
+ long uuid = (readId << readIdShift) + ((posId & 0xFFFF) << positionIdShift) + (mateId & 0b1);
Marshal.putLong(uuid, storage, offset);
}
@@ -57,11 +63,11 @@
}
public long getReadId(){
- return Marshal.getLong(storage, offset) >> 17;
+ return Marshal.getLong(storage, offset) >>> readIdShift;
}
public int getPosId(){
- return (int) ((Marshal.getLong(storage, offset) >> 1) & 0xffff);
+ return (int) ((Marshal.getLong(storage, offset) >>> positionIdShift) & 0xffff);
}
public byte[] getByteArray() {
@@ -104,8 +110,11 @@
return (this.getUUID() < other.getUUID()) ? -1 : ((this.getUUID() == other.getUUID()) ? 0 : 1);
}
+ /*
+ * String of form "(readId-posID_mate)" where mate is _1 or _2
+ */
@Override
public String toString() {
- return "(" + Long.toString(this.getUUID()) + ")";
+ return "(" + this.getReadId() + "-" + this.getPosId() + "_" + (this.getMateId() + 1) + ")";
}
}
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionWritableTest.java
index f7e634b..540c6eb 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionWritableTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionWritableTest.java
@@ -1,4 +1,6 @@
package edu.uci.ics.genomix.data.test;
+import java.util.Random;
+
import junit.framework.Assert;
import org.junit.Test;
@@ -15,11 +17,12 @@
byte mateId;
long readId;
int posId;
- byte[] start = new byte[8];
- for (int i = 0; i < 65535; i++) {
- mateId = (byte)1;//0
- readId = (long)i;
- posId = i;
+ Random gen = new Random();
+ byte[] start = new byte[15];
+ for (long i = 0; i < (1 << 47); i++) {
+ mateId = (byte) (gen.nextBoolean() ? 1 : 0);
+ readId = i;
+ posId = (int) (i % (1 << 16));
pos = new PositionWritable(mateId, readId, posId);
Assert.assertEquals(pos.getMateId(), mateId);
Assert.assertEquals(pos.getReadId(), readId);
@@ -36,6 +39,9 @@
Assert.assertEquals(pos.getMateId(), mateId);
Assert.assertEquals(pos.getReadId(), readId + 1);
Assert.assertEquals(pos.getPosId(), posId);
+
+ Assert.assertEquals(pos1.toString(), pos.toString());
+ String out = pos.toString();
}
}
}