package htsjdk.tribble.index; import htsjdk.tribble.TestUtils; import htsjdk.tribble.index.linear.LinearIndex; import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class IndexTest { private final static String CHR = "1"; private final static File MassiveIndexFile = new File(TestUtils.DATA_DIR + "Tb.vcf.idx"); @DataProvider(name = "StartProvider") public Object[][] makeStartProvider() { List<Object[]> tests = new ArrayList<Object[]>(); // for ( int mid = 0; mid <= end; mid += 1000000 ) { // tests.add(new Object[]{0, mid, mid+1000000, end}); // } tests.add(new Object[]{1226943, 1226943, 1226943, 2000000}); return tests.toArray(new Object[][]{}); } @Test(dataProvider = "StartProvider") public void testMassiveQuery(final int start, final int mid, final int mid2, final int end) throws IOException { LinearIndex index = (LinearIndex)IndexFactory.loadIndex(MassiveIndexFile.getAbsolutePath()); final List<Block> leftBlocks = index.getBlocks(CHR, start, mid); final List<Block> rightBlocks = index.getBlocks(CHR, mid2, end); // gap must be big to avoid overlaps final List<Block> allBlocks = index.getBlocks(CHR, start, end); final long leftSize = leftBlocks.isEmpty() ? 0 : leftBlocks.get(0).getSize(); final long rightSize = rightBlocks.isEmpty() ? 0 : rightBlocks.get(0).getSize(); final long allSize = allBlocks.isEmpty() ? 0 : allBlocks.get(0).getSize(); Assert.assertTrue(leftSize >= 0, "Expected leftSize to be positive " + leftSize); Assert.assertTrue(rightSize >= 0, "Expected rightSize to be positive " + rightSize); Assert.assertTrue(allSize >= 0, "Expected allSize to be positive " + allSize); Assert.assertTrue(allSize >= Math.max(leftSize,rightSize), "Expected size of joint query " + allSize + " to be at least >= max of left " + leftSize + " and right queries " + rightSize); } }