package picard.sam.markduplicates.util; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import org.testng.Assert; import picard.sam.markduplicates.util.OpticalDuplicateFinder; /** * Tests for OpticalDuplicateFinder * * @author Nils Homer */ public class OpticalDuplicateFinderTest { /** Tests rapidParseInt for positive and negative numbers, as well as non-digit suffixes */ @Test public void testRapidParseInt() { final OpticalDuplicateFinder opticalDuplicateFinder = new OpticalDuplicateFinder(); for (int i = -100; i < 100; i++) { Assert.assertEquals(opticalDuplicateFinder.rapidParseInt(Integer.toString(i)), i); // trailing characters Assert.assertEquals(opticalDuplicateFinder.rapidParseInt(Integer.toString(i)+"A"), i); Assert.assertEquals(opticalDuplicateFinder.rapidParseInt(Integer.toString(i)+"ACGT"), i); Assert.assertEquals(opticalDuplicateFinder.rapidParseInt(Integer.toString(i)+".1"), i); } } /** Helper for testGetRapidDefaultReadNameRegexSplit */ private void doTestGetRapidDefaultReadNameRegexSplit(int numFields, final OpticalDuplicateFinder opticalDuplicateFinder) { final int[] inputFields = new int[numFields]; final int[] expectedFields = new int[numFields]; String readName = ""; for (int i = 0; i < inputFields.length; i++) { inputFields[i] = -1; expectedFields[i] = -1; if (0 < i) readName += ":"; readName += Integer.toString(i); } if (2 < numFields) expectedFields[2] = 2; if (3 < numFields) expectedFields[3] = 3; if (4 < numFields) expectedFields[4] = 4; Assert.assertEquals(opticalDuplicateFinder.getRapidDefaultReadNameRegexSplit(readName, ':', inputFields), numFields); for (int i = 0; i < inputFields.length; i++) { Assert.assertEquals(inputFields[i], expectedFields[i]); } } /** Tests that we split the string early, with the correct # of fields, and modified values */ @Test public void testGetRapidDefaultReadNameRegexSplit() { final OpticalDuplicateFinder opticalDuplicateFinder = new OpticalDuplicateFinder(); for (int i = 1; i < 10; i++) { doTestGetRapidDefaultReadNameRegexSplit((i <= 5) ? i : 5, opticalDuplicateFinder); } } // NB: these tests fails due to overflow in the duplicate finder test. This has been the behavior previously, so keep it for now. @Test(dataProvider = "testParseReadNameDataProvider", enabled = false) public void testParseReadName(final String readName, final int tile, final int x, final int y) { OpticalDuplicateFinder opticalDuplicateFinder = new OpticalDuplicateFinder(); OpticalDuplicateFinder.PhysicalLocation loc = new ReadEndsForMarkDuplicates(); Assert.assertTrue(opticalDuplicateFinder.addLocationInformation(readName, loc)); Assert.assertEquals(loc.getTile(), tile); Assert.assertEquals(loc.getX(), x); Assert.assertEquals(loc.getY(), y); } @DataProvider(name = "testParseReadNameDataProvider") public Object[][] testParseReadNameDataProvider() { return new Object[][]{ {"RUNID:7:1203:2886:82292", 1203, 2886, 82292}, {"RUNID:7:1203:2884:16834", 1203, 2884, 16834} }; } }