add remove in PositionListWritable and test
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
index eca4a28..db9f4aa 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
@@ -118,6 +118,16 @@
@Override
public void remove() {
+// for(int cursor = currentIndex; cursor < valueCount; cursor++){
+// System.arraycopy(storage, offset + cursor * PositionWritable.LENGTH,
+// storage, offset + (cursor-1) * PositionWritable.LENGTH, PositionWritable.LENGTH);
+// }
+ if(currentIndex < valueCount - 1)
+ System.arraycopy(storage, offset + currentIndex * PositionWritable.LENGTH,
+ storage, offset + (currentIndex - 1) * PositionWritable.LENGTH,
+ (valueCount - currentIndex) * PositionWritable.LENGTH);
+ valueCount--;
+ currentIndex--;
}
};
return it;
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionListWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionListWritableTest.java
index 19f2f39..881af61 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionListWritableTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionListWritableTest.java
@@ -1,5 +1,7 @@
package edu.uci.ics.genomix.data.test;
+import java.util.Iterator;
+
import junit.framework.Assert;
import org.junit.Test;
@@ -36,4 +38,53 @@
}
}
+ @Test
+ public void TestRemove() {
+ PositionListWritable plist = new PositionListWritable();
+ Assert.assertEquals(plist.getCountOfPosition(), 0);
+
+ for (int i = 0; i < 5; i++) {
+ plist.append(i, (byte) i);
+ Assert.assertEquals(i, plist.getPosition(i).getReadID());
+ Assert.assertEquals((byte) i, plist.getPosition(i).getPosInRead());
+ Assert.assertEquals(i + 1, plist.getCountOfPosition());
+ }
+ int i = 0;
+ for (PositionWritable pos : plist) {
+ Assert.assertEquals(i, pos.getReadID());
+ Assert.assertEquals((byte) i, pos.getPosInRead());
+ i++;
+ }
+
+ i = 0;
+ PositionWritable pos = new PositionWritable();
+ Iterator<PositionWritable> iterator = plist.iterator();
+
+ PositionWritable deletePos = new PositionWritable();
+ deletePos.set(2, (byte)2);
+ while(iterator.hasNext()){
+ pos = iterator.next();
+ if(pos.equals(deletePos)){
+ iterator.remove();
+ break;
+ }
+ }
+ Assert.assertEquals(4, plist.getCountOfPosition());
+
+ while(iterator.hasNext()){
+ pos = iterator.next();
+ Assert.assertTrue(pos.getReadID() != deletePos.getReadID());
+ Assert.assertTrue(pos.getPosInRead() != deletePos.getPosInRead());
+ i++;
+ }
+
+ i = 0;
+ iterator = plist.iterator();
+ while(iterator.hasNext()){
+ pos = iterator.next();
+ iterator.remove();
+ }
+
+ Assert.assertEquals(0, plist.getCountOfPosition());
+ }
}