/**
   * Test the parsing of sequence variations from Last MAF file.
   *
   * @throws IOException
   */
  @Test
  public void testLastToCompactVariations() throws IOException {

    // test LastToCompact convert+filtering

    // read fake data and convert+filter
    final LastToCompactMode processor = new LastToCompactMode();
    final int LAST_TO_COMPACT_M_PARAM = 2;
    processor.setAmbiguityThreshold(LAST_TO_COMPACT_M_PARAM);
    processor.setInputFile("test-results/alignments/last-to-compact/last-103-variations.maf");
    processor.setOutputFile("test-results/alignments/last-to-compact/last-103-variations");
    processor.setTargetReferenceIdsFilename(
        "test-results/alignments/last-to-compact/last-reference.compact-reads");
    processor.setOnlyMafFile(true);
    processor.setNumberOfReads(2857822);
    processor.setLargestQueryIndex(2857822);
    processor.setSmallestQueryIndex(0);
    processor.setPropagateQueryIds(false);
    processor.setPropagateTargetIds(true);
    processor.setQualityFilterParameters(
        "threshold=1"); // allow everything to pass through, important to detect all variations in
    // this test.
    processor.execute();

    // read compact alignment results
    final AlignmentReaderImpl reader = new AlignmentReaderImpl(processor.getOutputFile());
    reader.readHeader();
    assertEquals(2857822, reader.getNumberOfQueries());
    assertEquals(1, reader.getNumberOfTargets());
    int entryIndex = 0;
    while (reader.hasNext()) {
      final Alignments.AlignmentEntry alignmentEntry = reader.next();

      System.out.println(entryIndex + " entry : " + alignmentEntry);
      switch (entryIndex) {
        case 0:
          assertEquals(2, alignmentEntry.getSequenceVariationsCount());
          final Alignments.SequenceVariation var1 = alignmentEntry.getSequenceVariations(0);
          assertEquals("C", var1.getTo());
          assertEquals("G", var1.getFrom());
          assertEquals(1, var1.getPosition());

          final Alignments.SequenceVariation var2 = alignmentEntry.getSequenceVariations(1);
          assertEquals("C", var2.getTo());
          assertEquals("A", var2.getFrom());
          assertEquals(11, var2.getPosition());
          break;

        case 1:
          assertEquals(1, alignmentEntry.getSequenceVariationsCount());
          final Alignments.SequenceVariation var1_0 = alignmentEntry.getSequenceVariations(0);
          assertEquals("---", var1_0.getTo());
          assertEquals("TTT", var1_0.getFrom());
          assertEquals(3, var1_0.getPosition());
          break;

        case 2:
          assertEquals(2, alignmentEntry.getSequenceVariationsCount());
          final Alignments.SequenceVariation var2_1 = alignmentEntry.getSequenceVariations(0);
          assertEquals("A", var2_1.getTo());
          assertEquals("G", var2_1.getFrom());
          assertEquals(2, var2_1.getPosition());

          final Alignments.SequenceVariation var2_2 = alignmentEntry.getSequenceVariations(1);
          assertEquals("A", var2_2.getTo());
          assertEquals("-", var2_2.getFrom());
          assertEquals(29, var2_2.getPosition());
          break;
        default:
          break;
      }
      entryIndex++;
    }
    assertEquals(4, entryIndex);
  }