diff --git a/java/test/org/broadinstitute/sting/utils/RefHangerTest.java b/java/test/org/broadinstitute/sting/utils/RefHangerTest.java new file mode 100755 index 000000000..6c4faf504 --- /dev/null +++ b/java/test/org/broadinstitute/sting/utils/RefHangerTest.java @@ -0,0 +1,213 @@ +// our package +package org.broadinstitute.sting.utils; + + +// the imports for unit testing. + +import org.junit.*; +import static org.junit.Assert.assertTrue; +import org.broadinstitute.sting.BaseTest; +import org.broadinstitute.sting.utils.fasta.FastaSequenceFile2; +import org.broadinstitute.sting.utils.RefHanger; + +import java.io.File; +import java.util.Arrays; +import java.util.List; + +/** + * Basic unit test for RefHanger + * + * interface functions: + public RefHanger(); + public void clear(); + protected int getLeftOffset(); + protected int getRightOffset(); + protected int getOffset(GenomeLoc loc); + public GenomeLoc getLeftLoc(); + public GenomeLoc getRightLoc(); + public boolean hasLocation(GenomeLoc loc); + public boolean isEmpty(); + public boolean hasHangers(); + public Hanger popLeft(); + public void dropLeft(); + public Hanger getLeft(); + public Hanger getHanger(int relativePos); + public Hanger getHanger(GenomeLoc pos); + public int size(); + public void pushLeft(GenomeLoc pos); + public void pushLeft(GenomeLoc pos, T datum); + public void pushLeft(GenomeLoc pos, ArrayList data); + public void pushRight(GenomeLoc pos); + public void pushRight(GenomeLoc pos, T datum); + public void pushRight(GenomeLoc pos, ArrayList data); + public boolean ensurePos(GenomeLoc pos); + public void extendData(GenomeLoc pos, T datum); + public void addData(List positions, List dataByPos); + public void expandingPut1(final GenomeLoc loc, T datum); + public void printState(); + public void expandingPut(GenomeLoc pos, T datum); + + */ +public class RefHangerTest extends BaseTest { + private static FastaSequenceFile2 seq; + private GenomeLoc startLoc; + private RefHanger emptyHanger; + + /** + * chrM:1 is the start. + * 1: 1 2 3 + * 2: 4 5 + * 3: 6 + * 4: 7 8 + * 5: 9 10 + */ + private static RefHanger filledHanger; + private static List l1, l2, l3, l4, l5; + private static GenomeLoc p1, p2, p3, p4, p5; + + @BeforeClass + public static void init() { + // sequence + seq = new FastaSequenceFile2(new File(seqLocation + "/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta")); + GenomeLoc.setupRefContigOrdering(seq); + + System.out.printf("Filled hanger is %n%s%n", makeFilledHanger()); + } + + private static RefHanger makeFilledHanger() { + RefHanger filledHanger = new RefHanger(); + l1 = Arrays.asList(1, 2, 3); + l2 = Arrays.asList(4, 5); + l3 = Arrays.asList(6); + l4 = Arrays.asList(7, 8); + l5 = Arrays.asList(9, 10); + p1 = new GenomeLoc(0, 1, 1); + p2 = new GenomeLoc(p1).nextLoc(); + p3 = new GenomeLoc(p2).nextLoc(); + p4 = new GenomeLoc(p3).nextLoc(); + p5 = new GenomeLoc(p4).nextLoc(); + + filledHanger.addDataList(Arrays.asList(p1, p2, p3, p4, p5), + Arrays.asList(l1, l2, l3, l4, l5)); + return filledHanger; + } + + @Before + public void setupHanger() { + startLoc = new GenomeLoc(0, 1, 1); // chrM 1 + emptyHanger = new RefHanger(); + filledHanger = makeFilledHanger(); + + //System.out.printf("Filled hanger is %n%s%n", filledHanger); + + //GenomeLoc two = new GenomeLoc(); + } + + /** + * Tests that we got a string parameter in correctly + */ + @Test + public void testEmpty() { + logger.warn("Executing testEmpty"); + assertTrue(emptyHanger.size() == 0); + assertTrue(emptyHanger.getLeftOffset() == 0); + assertTrue(emptyHanger.getRightOffset() == 0); + } + + @Test (expected=IndexOutOfBoundsException.class ) + public void testEmptyGet() { + logger.warn("Executing testEmptyGet"); + emptyHanger.getHanger(0); + } + + @Test + public void testFilledFilling() { + logger.warn("Executing testFilledFilling"); + testBaseFilledHanger(); + } + + private void testBaseFilledHanger() { + assertTrue(filledHanger.size() == 5); + assertTrue(! filledHanger.isEmpty()); + assertTrue(filledHanger.hasHangers()); + assertTrue(filledHanger.getLeftOffset() == 0); + assertTrue(filledHanger.getRightOffset() == 4); + assertTrue(filledHanger.getOffset(p1) == 0); + assertTrue(filledHanger.getOffset(p2) == 1); + assertTrue(filledHanger.getOffset(p3) == 2); + assertTrue(filledHanger.getOffset(p4) == 3); + assertTrue(filledHanger.getOffset(p5) == 4); + assertTrue(filledHanger.getLeftLoc().compareTo(p1) == 0); + assertTrue(filledHanger.getRightLoc().compareTo(p5) == 0); + assertTrue(filledHanger.getLoc(2).compareTo(p3) == 0); + assertTrue(filledHanger.hasLocation(p1)); + assertTrue(filledHanger.hasLocation(p2)); + assertTrue(filledHanger.hasLocation(p3)); + assertTrue(filledHanger.hasLocation(p4)); + assertTrue(filledHanger.hasLocation(p5)); + assertTrue(! filledHanger.hasLocation(new GenomeLoc(0, 6, 6))); + + assertTrue(filledHanger.getHanger(0) != null); + assertTrue(filledHanger.getHanger(1) != null); + assertTrue((int)(Integer)filledHanger.getHanger(0).data.get(0) == 1); + assertTrue((int)(Integer)filledHanger.getHanger(1).data.get(0) == 4); + assertTrue((int)(Integer)filledHanger.getHanger(p1).data.get(0) == 1); + assertTrue((int)(Integer)filledHanger.getHanger(p2).data.get(0) == 4); + } + + @Test + public void testClear() { + logger.warn("Executing testClear"); + assertTrue(filledHanger.size() == 5); + assertTrue(! filledHanger.isEmpty()); + assertTrue(filledHanger.hasHangers()); + + filledHanger.clear(); + + assertTrue(filledHanger.size() == 0); + assertTrue(filledHanger.isEmpty()); + assertTrue(! filledHanger.hasHangers()); + } + + @Test + public void testPopLeft() { + logger.warn("Executing testPopLeft"); + filledHanger.popLeft(); + assertTrue(filledHanger.size() == 4); + assertTrue(filledHanger.getRightOffset() == 3); + assertTrue(filledHanger.getOffset(p2) == 0); + assertTrue(filledHanger.getOffset(p3) == 1); + assertTrue(filledHanger.getOffset(p4) == 2); + assertTrue(filledHanger.getOffset(p5) == 3); + assertTrue(! filledHanger.hasLocation(p1)); + assertTrue(filledHanger.hasLocation(p2)); + assertTrue(filledHanger.hasLocation(p3)); + assertTrue(filledHanger.hasLocation(p4)); + assertTrue(filledHanger.hasLocation(p5)); + } + + @Test + public void testDoublePopLeft() { + logger.warn("Executing testDoublePopLeft"); + filledHanger.popLeft(); + filledHanger.popLeft(); + assertTrue(filledHanger.size() == 3); + assertTrue(filledHanger.getRightOffset() == 2); + assertTrue(filledHanger.getOffset(p3) == 0); + assertTrue(filledHanger.getOffset(p4) == 1); + assertTrue(filledHanger.getOffset(p5) == 2); + assertTrue(! filledHanger.hasLocation(p1)); + assertTrue(! filledHanger.hasLocation(p2)); + assertTrue(filledHanger.hasLocation(p3)); + assertTrue(filledHanger.hasLocation(p4)); + assertTrue(filledHanger.hasLocation(p5)); + } + + @Test + public void testPopPushLeft() { + logger.warn("Executing testPopPushLeft"); + filledHanger.popLeft(); + filledHanger.pushLeft(p1, l1); + testBaseFilledHanger(); + } +} \ No newline at end of file