From 63ace685c90d4973c6cb144095db8502e8f602e9 Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Tue, 10 Sep 2013 10:59:27 -0400 Subject: [PATCH] add unit tests --- .../missing/QualifyMissingIntervals.java | 23 +++++------ .../QualifyMissingIntervalsUnitTest.java | 38 ++++++++++++++++++- 2 files changed, 47 insertions(+), 14 deletions(-) diff --git a/protected/java/src/org/broadinstitute/sting/gatk/walkers/diagnostics/missing/QualifyMissingIntervals.java b/protected/java/src/org/broadinstitute/sting/gatk/walkers/diagnostics/missing/QualifyMissingIntervals.java index 9fabd6a37..014ed6dcb 100644 --- a/protected/java/src/org/broadinstitute/sting/gatk/walkers/diagnostics/missing/QualifyMissingIntervals.java +++ b/protected/java/src/org/broadinstitute/sting/gatk/walkers/diagnostics/missing/QualifyMissingIntervals.java @@ -259,27 +259,24 @@ public final class QualifyMissingIntervals extends LocusWalker out.close(); } - private int getPositionInTarget(final GenomeLoc interval, final List hits) { - if (hits.size() > 0) { - final GenomeLoc hit = hits.get(0); + protected static int getPositionInTarget(final GenomeLoc interval, final List targets) { + if (targets.size() > 0) { + final GenomeLoc target = targets.get(0); // interval is larger on both ends than the target -- return the maximum distance to either side as a negative number. (min of 2 negative numbers) - if (interval.getStart() < hit.getStart() && interval.getStop() > hit.getStop()) - return Math.min(interval.getStart() - hit.getStart(), - interval.getStop() - hit.getStop()); + if (interval.getStart() < target.getStart() && interval.getStop() > target.getStop()) + return Math.min(target.getStart() - interval.getStart(), target.getStop() - interval.getStop()); // interval is a left overlap -- return a negative number representing the distance between the two starts - else if (interval.getStart() < hit.getStart()) - return hit.getStart() - interval.getStart(); + else if (interval.getStart() < target.getStart()) + return interval.getStart() - target.getStart(); // interval is a right overlap -- return a negative number representing the distance between the two stops - else if (interval.getStop() > hit.getStop()) - return hit.getStop() - interval.getStop(); + else if (interval.getStop() > target.getStop()) + return target.getStop() - interval.getStop(); // interval is fully contained -- return the smallest distance to the edge of the target (left or right) as a positive number - else - return Math.min(Math.abs(hit.getStart() - interval.getStart()), - Math.abs(hit.getStop() - interval.getStop())); + return Math.min(interval.getStart() - target.getStart(), target.getStop() - interval.getStop()); } // if there is no overlapping interval, return int min value. return Integer.MIN_VALUE; diff --git a/protected/java/test/org/broadinstitute/sting/gatk/walkers/diagnostics/missing/QualifyMissingIntervalsUnitTest.java b/protected/java/test/org/broadinstitute/sting/gatk/walkers/diagnostics/missing/QualifyMissingIntervalsUnitTest.java index 7d6d05736..7ab891bd0 100644 --- a/protected/java/test/org/broadinstitute/sting/gatk/walkers/diagnostics/missing/QualifyMissingIntervalsUnitTest.java +++ b/protected/java/test/org/broadinstitute/sting/gatk/walkers/diagnostics/missing/QualifyMissingIntervalsUnitTest.java @@ -46,6 +46,8 @@ package org.broadinstitute.sting.gatk.walkers.diagnostics.missing; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import java.util.List; import org.broadinstitute.sting.BaseTest; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.UnvalidatingGenomeLoc; @@ -57,7 +59,6 @@ import org.testng.annotations.Test; * User: carneiro * Date: 9/20/13 * Time: 3:59 PM - * To change this template use File | Settings | File Templates. */ public class QualifyMissingIntervalsUnitTest extends BaseTest { @Test(enabled = true) @@ -92,4 +93,39 @@ public class QualifyMissingIntervalsUnitTest extends BaseTest { for (Metrics m : array) Assert.assertEquals(tool.interpret(m, smallInterval), QualifyMissingIntervals.Interpretation.SMALL_INTERVAL.toString()); } + + @Test(enabled = true) + void testGetPositionInTarget () { + final UnvalidatingGenomeLoc target = new UnvalidatingGenomeLoc("a", 0, 30, 50); + final List targets = new ObjectArrayList<>(1); + targets.add(target); + + // left overlap + UnvalidatingGenomeLoc interval = new UnvalidatingGenomeLoc("a", 0, 10, 50); + Assert.assertEquals(QualifyMissingIntervals.getPositionInTarget(interval, targets), -20); + + // right overlap + interval = new UnvalidatingGenomeLoc("a", 0, 40, 60); + Assert.assertEquals(QualifyMissingIntervals.getPositionInTarget(interval, targets), -10); + + // interval > target with short right tail + interval = new UnvalidatingGenomeLoc("a", 0, 10, 60); + Assert.assertEquals(QualifyMissingIntervals.getPositionInTarget(interval, targets), -10); + + // interval > target with short left tail + interval = new UnvalidatingGenomeLoc("a", 0, 10, 80); + Assert.assertEquals(QualifyMissingIntervals.getPositionInTarget(interval, targets), -30); + + // interval < target with short right tail + interval = new UnvalidatingGenomeLoc("a", 0, 32, 40); + Assert.assertEquals(QualifyMissingIntervals.getPositionInTarget(interval, targets), 2); + + // interval < target with short left tail + interval = new UnvalidatingGenomeLoc("a", 0, 40, 42); + Assert.assertEquals(QualifyMissingIntervals.getPositionInTarget(interval, targets), 8); + + // no overlap + interval = new UnvalidatingGenomeLoc("a", 0, 40, 42); + Assert.assertEquals(QualifyMissingIntervals.getPositionInTarget(interval, new ObjectArrayList()), Integer.MIN_VALUE); + } }