@Test(dataProvider = "testOpticalDuplicateDetectionDataProvider")
 public void testOpticalDuplicateDetection(
     final File sam, final long expectedNumOpticalDuplicates) {
   final File outputDir = IOUtil.createTempDir(TEST_BASE_NAME + ".", ".tmp");
   outputDir.deleteOnExit();
   final File outputSam = new File(outputDir, TEST_BASE_NAME + ".sam");
   outputSam.deleteOnExit();
   final File metricsFile = new File(outputDir, TEST_BASE_NAME + ".duplicate_metrics");
   metricsFile.deleteOnExit();
   // Run MarkDuplicates, merging the 3 input files, and either enabling or suppressing PG header
   // record creation according to suppressPg.
   final MarkDuplicates markDuplicates = new MarkDuplicates();
   markDuplicates.setupOpticalDuplicateFinder();
   markDuplicates.INPUT = CollectionUtil.makeList(sam.getAbsolutePath());
   markDuplicates.OUTPUT = outputSam;
   markDuplicates.METRICS_FILE = metricsFile;
   markDuplicates.TMP_DIR = CollectionUtil.makeList(outputDir);
   // Needed to suppress calling CommandLineProgram.getVersion(), which doesn't work for code not
   // in a jar
   markDuplicates.PROGRAM_RECORD_ID = null;
   Assert.assertEquals(markDuplicates.doWork(), 0);
   Assert.assertEquals(markDuplicates.numOpticalDuplicates(), expectedNumOpticalDuplicates);
   TestUtil.recursiveDelete(outputDir);
 }