public void testTaxonomySDF() throws IOException {
    try (final TestDirectory dir = new TestDirectory("sdfstats")) {

      // One without tax
      final File smallSdf = ReaderTestUtils.getDNADir(dir);
      final String err =
          checkMainInitBadFlags("-i", smallSdf.getPath(), "-o", "-", "--taxons", "41431");
      TestUtils.containsAll(err, "does not contain taxonomy");

      // One with tax
      final File fullSdf = new File(dir, "sdf_full");
      final File faOut = new File(dir, "ex.fasta.gz");
      makeTestTaxonSdf(fullSdf);

      checkMainInitOk("-i", fullSdf.getPath(), "-o", faOut.getPath(), "--taxons", "41431");

      final String faout = FileHelper.gzFileToString(faOut);
      TestUtils.containsAll(
          faout,
          "gi|218169684|gb|CP001289.1|",
          "gi|218165370|gb|CP001287.1|",
          "gi|218169729|gb|CP001290.1|",
          "gi|218169631|gb|CP001288.1|");
    }
  }
 public void testFullName() throws IOException {
   try (TestDirectory dir = new TestDirectory("sdf2fasta")) {
     final File sdf = ReaderTestUtils.getDNADir(FULL_NAME_DATA, new File(dir, "sdf"));
     final File fasta = new File(dir, "fs.fasta.gz");
     checkMainInitOk("-i", sdf.getPath(), "-o", fasta.getPath());
     assertEquals(FULL_NAME_DATA, FileHelper.gzFileToString(fasta));
   }
 }
 public void testEmptyFasta() throws IOException {
   final SequencesReader reader = ReaderTestUtils.getReaderDNA("", mDir, new SdfId(0L));
   reader.close();
   final CompressedMemorySequencesReader cmsr =
       new CompressedMemorySequencesReader(
           mDir, new IndexFile(mDir), 5, true, false, new LongRange(0, 0));
   assertEquals(0, cmsr.numberSequences());
 }
  @Override
  public void testEquals() throws IOException {
    final File dir = FileHelper.createTempDirectory(mDir);
    final File otherDir = FileHelper.createTempDirectory(mDir);
    ReaderTestUtils.getReaderDNAFastq("", dir, false).close();
    ReaderTestUtils.getReaderDNAFastq("", otherDir, false).close();

    final CompressedMemorySequencesReader cmsr =
        new CompressedMemorySequencesReader(
            dir, new IndexFile(dir), 5, true, false, new LongRange(0, 0));
    final CompressedMemorySequencesReader other =
        new CompressedMemorySequencesReader(
            otherDir, new IndexFile(dir), 5, true, false, new LongRange(0, 0));
    assertTrue(cmsr.equals(cmsr));
    assertFalse(cmsr.equals(null));
    assertFalse(cmsr.equals(other));
    assertFalse(cmsr.equals("FDSA"));
  }
  public void testOverEndFastq() throws Exception {
    final SequencesReader reader = ReaderTestUtils.getReaderDNAFastq(POSITIONS_FASTQ, mDir, false);
    reader.close();

    new CompressedMemorySequencesReader(
        mDir, new IndexFile(mDir), 5, true, false, new LongRange(3, 8));
    // Now this is OK rather than Exception, since our std behaviour is to warn and clip end that
    // are too high back to the available num seqs
  }
  public static void makeTestTaxonSdf(File dest) throws IOException {
    final String sequences =
        FileHelper.resourceToString("com/rtg/reader/resources/sequences.fasta");
    ReaderTestUtils.getReaderDNA(sequences, dest, null).close();

    // cp taxonomy files to sdf
    final File taxonomy = new File(dest, "taxonomy.tsv");
    FileHelper.resourceToFile("com/rtg/reader/resources/taxonomy.tsv", taxonomy);
    final File taxonomyLookup = new File(dest, "taxonomy_lookup.tsv");
    FileHelper.resourceToFile("com/rtg/reader/resources/taxonomy_lookup.tsv", taxonomyLookup);
  }
  public void testFastqEnd() throws Exception {
    final SequencesReader reader =
        ReaderTestUtils.getReaderDNAFastq(POSITIONS_FASTQ, mDir, 20, false);
    reader.close();

    final SequencesIterator cmsr =
        new CompressedMemorySequencesReader(
                mDir, new IndexFile(mDir), 5, true, false, new LongRange(5, 6))
            .iterator();

    cmsr.nextSequence();
    checkFastq(cmsr, "r5", "ACGTAC");
    assertFalse(cmsr.nextSequence());
  }
  public void testRanges() throws Exception {
    final SequencesReader reader = ReaderTestUtils.getReaderDNAFastq(SMALL_FASTQ, mDir, 20, false);
    reader.close();

    final CompressedMemorySequencesReader cmsr =
        new CompressedMemorySequencesReader(
            mDir, new IndexFile(mDir), 5, true, false, LongRange.NONE);
    final byte[] foo = new byte[6];
    cmsr.readQuality(0, foo, 4, 6);
    final String qual = "EFGHIJ";
    for (int i = 0; i < foo.length; i++) {
      assertEquals(qual.charAt(i) - '!', foo[i]);
    }
  }