public void testAbababcAbbbabc() {
    GeneralizedSuffixTree gst = new GeneralizedSuffixTree("abababc", "abbbabc", '#', '$');
    assertEquals("babc", gst.getLcsAsString());
    assertEquals(3, gst.getSuffixTree().indexOf("babc"));
    assertEquals(5, gst.getSuffixTree().indexOf("bc"));

    GeneralizedSuffixTree.CommonSubstr commonSubstr = gst.getLcs();
    assertNotNull(commonSubstr);
    assertEquals(3, commonSubstr.getBeginIndexes()[0]);
    assertEquals(6, commonSubstr.getEndIndexes()[0]);

    commonSubstr = gst.getLcs(gst.getDefaultBeginIndexes(), commonSubstr.getBeginIndexes());
    assertNotNull(commonSubstr);
    assertEquals(0, commonSubstr.getBeginIndexes()[0]);
    assertEquals(1, commonSubstr.getEndIndexes()[0]);
  }
  public void testDefaultTerminators() {
    char[] terminators = GeneralizedSuffixTree.getDefaultTerminators(2);
    assertEquals(2, terminators.length);
    assertEquals('\ud800', terminators[0]);
    assertEquals('\ud801', terminators[1]);

    GeneralizedSuffixTree gst = new GeneralizedSuffixTree(new String[] {"abab", "baba"});
    TestHelper.dumpEdges(gst.getSuffixTree());
    assertEquals("aba", gst.getLcsAsString());

    gst = new GeneralizedSuffixTree(new String[] {"abababcdab", "abbbabceab"});

    GeneralizedSuffixTree.CommonSubstr commonSubstr = gst.getLcs();
    assertNotNull(commonSubstr);
    assertEquals(3, commonSubstr.getBeginIndexes()[0]);
    assertEquals(6, commonSubstr.getEndIndexes()[0]);
    assertEquals(14, commonSubstr.getBeginIndexes()[1]);
    assertEquals(17, commonSubstr.getEndIndexes()[1]);

    int[] beginIndexes = gst.incIndexes(commonSubstr.getEndIndexes());
    commonSubstr = gst.getLcs(gst.getDefaultBeginIndexes(), commonSubstr.getBeginIndexes());
    assertNotNull(commonSubstr);
    assertEquals(0, commonSubstr.getBeginIndexes()[0]);
    assertEquals(1, commonSubstr.getEndIndexes()[0]);
    assertEquals(11, commonSubstr.getBeginIndexes()[1]);
    assertEquals(12, commonSubstr.getEndIndexes()[1]);

    commonSubstr = gst.getLcs(beginIndexes, gst.getDefaultEndIndexes());
    assertNotNull(commonSubstr);
    assertEquals(8, commonSubstr.getBeginIndexes()[0]);
    assertEquals(9, commonSubstr.getEndIndexes()[0]);
    assertEquals(19, commonSubstr.getBeginIndexes()[1]);
    assertEquals(20, commonSubstr.getEndIndexes()[1]);

    List<GeneralizedSuffixTree.CommonSubstr> list = gst.diff();
    assertEquals(3, list.size());

    for (GeneralizedSuffixTree.CommonSubstr cs : list) {
      System.out.print(
          "abababcdab".substring(cs.getBeginIndexes()[0], cs.getEndIndexes()[0]) + " ");
    }
    System.out.println();
  }
 public void testAbabBabaBa() {
   GeneralizedSuffixTree gst =
       new GeneralizedSuffixTree(new String[] {"abab", "baba", "ba"}, new char[] {'#', '$', '%'});
   TestHelper.dumpEdges(gst.getSuffixTree());
   assertEquals("ba", gst.getLcsAsString());
 }
 public void testXabxaBabxba() {
   GeneralizedSuffixTree gst = new GeneralizedSuffixTree("xabxa", "babxba", '#', '$');
   TestHelper.dumpEdges(gst.getSuffixTree());
   assertEquals("abx", gst.getLcsAsString());
 }