/* This file is part of the Joshua Machine Translation System.
*
* Joshua is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package joshua.prefix_tree;
import joshua.corpus.CorpusArray;
import joshua.corpus.alignment.AlignmentArray;
import joshua.corpus.alignment.Alignments;
import joshua.corpus.suffix_array.ParallelCorpusGrammarFactory;
import joshua.corpus.suffix_array.SuffixArray;
import joshua.corpus.vocab.Vocabulary;
import joshua.decoder.JoshuaConfiguration;
import joshua.util.BotMap;
import org.testng.Assert;
import org.testng.annotations.Test;
/**
*
*
* @author Lane Schwartz
*/
public class PrefixTreeTest {
private int it, persuades, him, and, disheartens;
private int[] sentence;
private int maxPhraseSpan = 5;
private int maxPhraseLength = 5;
private int maxNonterminals = 2;
Vocabulary vocab;
PrefixTree tree;
@Test(dependsOnMethods = {"prefixTreeNodes","suffixLinks"})
public void setup() {
vocab = new Vocabulary();
it = vocab.addTerminal("it");
persuades = vocab.addTerminal("persuades");
him = vocab.addTerminal("him");
and = vocab.addTerminal("and");
disheartens = vocab.addTerminal("disheartens");
int itF, persuadesF, himF, andF, disheartensF;
itF = vocab.addTerminal("itF");
persuadesF = vocab.addTerminal("persuadesF");
himF = vocab.addTerminal("himF");
andF = vocab.addTerminal("andF");
disheartensF = vocab.addTerminal("disheartensF");
// vocab.fixVocabulary();
// String testSentence = "it persuades him and it disheartens him";
// create the suffix array...
int[] sentenceStartPositions = {0};
sentence = new int[]{it, persuades, him, and, it, disheartens, him};
int[] sentenceF = new int[]{itF, persuadesF, himF, andF, itF, disheartensF, himF};
int[][] alignedTargetIndices = new int[sentence.length][];
int[][] alignedSourceIndices = new int[sentenceF.length][];
{
for (int i=0; i<sentence.length; i++) {
alignedTargetIndices[i] = new int[1];
alignedTargetIndices[i][0] = i;
alignedSourceIndices[i] = new int[1];
alignedSourceIndices[i][0] = i;
}
}
Alignments alignments = new AlignmentArray(alignedTargetIndices, alignedSourceIndices, 1);
CorpusArray targetCorpus = new CorpusArray(sentenceF, sentenceStartPositions, vocab);
SuffixArray targetSuffixes = new SuffixArray(targetCorpus);
CorpusArray sourceCorpus = new CorpusArray(sentence, sentenceStartPositions, vocab);
SuffixArray sourceSuffixes = new SuffixArray(sourceCorpus);
ParallelCorpusGrammarFactory parallelCorpus = new ParallelCorpusGrammarFactory(sourceSuffixes, targetSuffixes, alignments, null, Integer.MAX_VALUE, maxPhraseSpan, maxPhraseLength, maxNonterminals, 2, Float.MIN_VALUE, JoshuaConfiguration.phrase_owner, JoshuaConfiguration.default_non_terminal, JoshuaConfiguration.oovFeatureCost);
// tree = new PrefixTree(vocab, maxPhraseSpan, maxPhraseLength, maxNonterminals);
tree = new PrefixTree(parallelCorpus);
Assert.assertNotNull(tree);
tree.add(sentence);
}
@Test(dependsOnMethods = {"setup"})
public void toStringTest() {
String actualString = tree.getTrieRoot().toString(); //tree.root.toString(vocab)
// Remove *
actualString = actualString.replaceAll("\\*", "");
String expectedString = "[id1 ROOT (0) [id2 X (1) [id13 persuades (5) [id14 X (6) [id54 and (32) [id103 it (82) ] ] [id55 it (34) ] ] [id52 him (30) [id53 X (31) [id102 it (79) ] ] [id100 and (77) [id101 X (78) ] [id129 it (118) ] ] ] ] [id15 him (7) [id16 X (8) [id58 it (39) [id107 disheartens (91) ] ] [id59 disheartens (41) ] ] [id56 and (37) [id57 X (38) [id106 disheartens (88) ] ] [id104 it (86) [id105 X (87) ] [id130 disheartens (123) ] ] ] ] [id17 and (9) [id18 X (10) [id62 disheartens (46) [id111 him (98) ] ] [id63 him (48) ] ] [id60 it (44) [id61 X (45) [id110 him (97) ] ] [id108 disheartens (95) [id109 X (96) ] [id131 him (128) ] ] ] ] [id19 it (3) [id20 X (4) [id66 him (25) ] ] [id64 disheartens (49) [id65 X (50) ] [id112 him (99) ] ] ] [id21 disheartens (11) [id22 X (12) ] [id67 him (51) ] ] ] [id3 it (1) [id4 X (2) [id25 him (15) [id26 X (16) [id75 it (58) ] ] [id73 and (56) [id74 X (57) ] [id117 it (104) ] ] ] [id27 and (17) [id28 X (18) ] [id76 it (60) ] ] [id29 it (19) ] ] [id23 persuades (5) [id24 X (6) [id70 and (32) [id71 X (33) ] [id116 it (82) ] ] [id72 it (34) ] ] [id68 him (30) [id69 X (31) [id115 it (79) ] ] [id113 and (77) [id114 X (78) ] [id132 it (118) ] ] ] ] [id49 disheartens (11) [id50 X (12) ] [id99 him (51) ] ] ] [id5 persuades (1) [id6 X (2) [id32 and (17) [id33 X (18) [id84 disheartens (62) ] ] [id82 it (60) [id83 X (61) ] [id122 disheartens (108) ] ] ] [id34 it (19) [id35 X (20) ] [id85 disheartens (64) ] ] [id36 disheartens (21) ] ] [id30 him (7) [id31 X (8) [id79 it (39) [id80 X (40) ] [id121 disheartens (91) ] ] [id81 disheartens (41) ] ] [id77 and (37) [id78 X (38) [id120 disheartens (88) ] ] [id118 it (86) [id119 X (87) ] [id133 disheartens (123) ] ] ] ] ] [id7 him (1) [id8 X (2) [id39 it (19) [id40 X (20) [id93 him (66) ] ] [id91 disheartens (64) [id92 X (65) ] [id127 him (112) ] ] ] [id41 disheartens (21) [id42 X (22) ] [id94 him (67) ] ] [id43 him (15) ] ] [id37 and (9) [id38 X (10) [id88 disheartens (46) [id89 X (47) ] [id126 him (98) ] ] [id90 him (48) ] ] [id86 it (44) [id87 X (45) [id125 him (97) ] ] [id123 disheartens (95) [id124 X (96) ] [id134 him (128) ] ] ] ] ] [id9 and (1) [id10 X (2) [id46 disheartens (21) [id47 X (22) ] [id98 him (67) ] ] [id48 him (15) ] ] [id44 it (3) [id45 X (4) [id97 him (25) ] ] [id95 disheartens (49) [id96 X (50) ] [id128 him (99) ] ] ] ] [id11 disheartens (1) [id12 X (2) ] [id51 him (7) ] ] ]";
Assert.assertEquals(actualString, expectedString);
}
@Test(dependsOnMethods = {"setup"})
public void size() {
Assert.assertEquals(tree.size(), 134);
}
@Test(dependsOnMethods = {"prefixTreeNodes"})
public void suffixLinks() {
// PrefixTree tree = PrefixTree.getDummyPrefixTree();
Node bot = new Node(null,true);
Assert.assertNotNull(bot);
Node root = new Node(null,true);
Assert.assertNotNull(root);
bot.children = new BotMap<Integer,Node>(root);//PrefixTree.botMap(root);
root.linkToSuffix(bot);
Assert.assertNotNull(root.suffixLink);
Assert.assertEquals(root.suffixLink, bot);
Node root_x = root.addChild(PrefixTree.X);
Assert.assertNotNull(root_x);
Node root_x_him = root_x.addChild(him);
Assert.assertNotNull(root_x_him);
Node root_x_him_x = root_x_him.addChild(PrefixTree.X);
Assert.assertNotNull(root_x_him_x);
Node root_him = root.addChild(him);
Assert.assertNotNull(root_him);
Node root_him_x = root_him.addChild(PrefixTree.X);
Assert.assertNotNull(root_him_x);
Node root_him_suffixLink = root.calculateSuffixLink(him);
Assert.assertNotNull(root_him_suffixLink);
Assert.assertEquals(root_him_suffixLink, root);
root_him.linkToSuffix(root_him_suffixLink);
Assert.assertNotNull(root_him.suffixLink);
Assert.assertEquals(root_him.suffixLink, root_him_suffixLink);
Node root_x_suffixLink = root.calculateSuffixLink(PrefixTree.X);
Assert.assertNotNull(root_x_suffixLink);
Assert.assertEquals(root_x_suffixLink, root);
root_x.linkToSuffix(root_x_suffixLink);
Assert.assertNotNull(root_x.suffixLink);
Assert.assertEquals(root_x.suffixLink, root_x_suffixLink);
Node root_x_him_suffixLink = root_x.calculateSuffixLink(him);
Assert.assertNotNull(root_x_him_suffixLink);
Assert.assertEquals(root_x_him_suffixLink, root_him);
root_x_him.linkToSuffix(root_x_him_suffixLink);
Assert.assertNotNull(root_x_him);
Assert.assertEquals(root_x_him.suffixLink, root_x_him_suffixLink);
Node root_x_him_x_suffixLink = root_x_him.calculateSuffixLink(PrefixTree.X);
Assert.assertNotNull(root_x_him_x_suffixLink);
Assert.assertEquals(root_x_him_x_suffixLink, root_him_x);
root_x_him_x.linkToSuffix(root_x_him_x_suffixLink);
Assert.assertNotNull(root_x_him_x.suffixLink);
Assert.assertEquals(root_x_him_x.suffixLink, root_x_him_x_suffixLink);
Node.resetNodeCounter();
}
private Node root_X, root_it, root_persuades, root_him, root_and, root_disheartens;
@Test(dependsOnMethods = {"setup"})
public void rootChildren() {
// The root node should have 6 children
Assert.assertEquals(tree.root.children.size(), 6); // 5 terminals plus X
Assert.assertTrue(tree.root.hasChild(it));
Assert.assertTrue(tree.root.hasChild(persuades));
Assert.assertTrue(tree.root.hasChild(him));
Assert.assertTrue(tree.root.hasChild(and));
Assert.assertTrue(tree.root.hasChild(disheartens));
Assert.assertTrue(tree.root.hasChild(PrefixTree.X));
root_it = tree.root.getChild(it);
root_persuades = tree.root.getChild(persuades);
root_him = tree.root.getChild(him);
root_and = tree.root.getChild(and);
root_disheartens = tree.root.getChild(disheartens);
root_X = tree.root.getChild(PrefixTree.X);
}
Node root_it_persuades, root_persuades_him, root_him_and, root_and_it, root_it_disheartens, root_disheartens_him;
Node root_it_X, root_persuades_X, root_him_X, root_and_X, root_disheartens_X;
@Test(dependsOnMethods = {"rootChildren"})
public void rootOtherGrandchildren() {
Assert.assertEquals(root_it.children.size(), 3);
Assert.assertTrue(root_it.hasChild(persuades));
Assert.assertTrue(root_it.hasChild(disheartens));
Assert.assertTrue(root_it.hasChild(PrefixTree.X));
root_it_persuades = root_it.getChild(persuades);
root_it_disheartens = root_it.getChild(disheartens);
root_it_X = root_it.getChild(PrefixTree.X);
Assert.assertEquals(root_persuades.children.size(), 2);
Assert.assertTrue(root_persuades.hasChild(him));
Assert.assertTrue(root_persuades.hasChild(PrefixTree.X));
root_persuades_him = root_persuades.getChild(him);
root_persuades_X = root_persuades.getChild(PrefixTree.X);
Assert.assertEquals(root_him.children.size(), 2);
Assert.assertTrue(root_him.hasChild(and));
Assert.assertTrue(root_him.hasChild(PrefixTree.X));
root_him_and = root_him.getChild(and);
root_him_X = root_him.getChild(PrefixTree.X);
Assert.assertEquals(root_and.children.size(), 2);
Assert.assertTrue(root_and.hasChild(it));
Assert.assertTrue(root_and.hasChild(PrefixTree.X));
root_and_it = root_and.getChild(it);
root_and_X = root_and.getChild(PrefixTree.X);
Assert.assertEquals(root_disheartens.children.size(), 2);
Assert.assertTrue(root_disheartens.hasChild(him));
Assert.assertTrue(root_disheartens.hasChild(PrefixTree.X));
root_disheartens_him = root_disheartens.getChild(him);
root_disheartens_X = root_disheartens.getChild(PrefixTree.X);
}
Node root_it_persuades_him, root_it_persuades_X;
Node root_it_disheartens_him, root_it_disheartens_X;
Node root_it_X_him, root_it_X_and, root_it_X_it;
Node root_persuades_him_and, root_persuades_him_X;
Node root_persuades_X_and, root_persuades_X_it, root_persuades_X_disheartens;
Node root_him_and_it, root_him_and_X;
Node root_him_X_it, root_him_X_disheartens, root_him_X_him;
Node root_and_it_disheartens, root_and_it_X;
Node root_and_X_disheartens, root_and_X_him;
@Test(dependsOnMethods = {"rootOtherGrandchildren"})
public void rootOtherGreatGrandchildren() {
// Node root_it_persuades_him, root_it_persuades_X;
Assert.assertEquals(root_it_persuades.children.size(), 2);
Assert.assertTrue(root_it_persuades.hasChild(him));
Assert.assertTrue(root_it_persuades.hasChild(PrefixTree.X));
root_it_persuades_him = root_it_persuades.getChild(him);
Assert.assertNotNull(root_it_persuades_him);
root_it_persuades_X = root_it_persuades.getChild(PrefixTree.X);
Assert.assertNotNull(root_it_persuades_X);
// Node root_it_disheartens_him, root_it_disheartens_X;
Assert.assertEquals(root_it_disheartens.children.size(), 2);
Assert.assertTrue(root_it_disheartens.hasChild(him));
Assert.assertTrue(root_it_disheartens.hasChild(PrefixTree.X));
root_it_disheartens_him = root_it_disheartens.getChild(him);
Assert.assertNotNull(root_it_disheartens_him);
root_it_disheartens_X = root_it_disheartens.getChild(PrefixTree.X);
Assert.assertNotNull(root_it_disheartens_X);
// Node root_it_X_him, root_it_X_and, root_it_X_it;
Assert.assertEquals(root_it_X.children.size(), 3);
Assert.assertTrue(root_it_X.hasChild(him));
Assert.assertTrue(root_it_X.hasChild(and));
Assert.assertTrue(root_it_X.hasChild(it));
root_it_X_him = root_it_X.getChild(him);
Assert.assertNotNull(root_it_X_him);
root_it_X_and = root_it_X.getChild(and);
Assert.assertNotNull(root_it_X_and);
root_it_X_it = root_it_X.getChild(it);
Assert.assertNotNull(root_it_X_it);
// Node root_persuades_him_and, root_persuades_him_X;
Assert.assertEquals(root_persuades_him.children.size(), 2);
Assert.assertTrue(root_persuades_him.hasChild(and));
Assert.assertTrue(root_persuades_him.hasChild(PrefixTree.X));
root_persuades_him_and = root_persuades_him.getChild(and);
Assert.assertNotNull(root_persuades_him_and);
root_persuades_him_X = root_persuades_him.getChild(PrefixTree.X);
Assert.assertNotNull(root_persuades_him_X);
// Node root_persuades_X_and, root_persuades_X_it, root_persuades_X_disheartens;
Assert.assertEquals(root_persuades_X.children.size(), 3);
Assert.assertTrue(root_persuades_X.hasChild(and));
Assert.assertTrue(root_persuades_X.hasChild(it));
Assert.assertTrue(root_persuades_X.hasChild(disheartens));
root_persuades_X_and = root_persuades_X.getChild(and);
Assert.assertNotNull(root_persuades_X_and);
root_persuades_X_it = root_persuades_X.getChild(it);
Assert.assertNotNull(root_persuades_X_it);
root_persuades_X_disheartens = root_persuades_X.getChild(disheartens);
Assert.assertNotNull(root_persuades_X_disheartens);
// Node root_him_and_it, root_him_and_X;
Assert.assertEquals(root_him_and.children.size(), 2);
Assert.assertTrue(root_him_and.hasChild(it));
Assert.assertTrue(root_him_and.hasChild(PrefixTree.X));
root_him_and_it = root_him_and.getChild(it);
Assert.assertNotNull(root_him_and_it);
root_him_and_X = root_him_and.getChild(PrefixTree.X);
Assert.assertNotNull(root_him_and_X);
// Node root_him_X_it, root_him_X_disheartens, root_him_X_him;
Assert.assertEquals(root_him_X.children.size(), 3);
Assert.assertTrue(root_him_X.hasChild(it));
Assert.assertTrue(root_him_X.hasChild(disheartens));
Assert.assertTrue(root_him_X.hasChild(him));
root_him_X_it = root_him_X.getChild(it);
Assert.assertNotNull(root_him_X_it);
root_him_X_disheartens = root_him_X.getChild(disheartens);
Assert.assertNotNull(root_him_X_disheartens);
root_him_X_him = root_him_X.getChild(him);
Assert.assertNotNull(root_him_X_him);
// Node root_and_it_disheartens, root_and_it_X;
Assert.assertEquals(root_and_it.children.size(), 2);
Assert.assertTrue(root_and_it.hasChild(disheartens));
Assert.assertTrue(root_and_it.hasChild(PrefixTree.X));
root_and_it_disheartens = root_and_it.getChild(disheartens);
Assert.assertNotNull(root_and_it_disheartens);
root_and_it_X = root_and_it.getChild(PrefixTree.X);
Assert.assertNotNull(root_and_it_X);
// Node root_and_X_disheartens, root_and_X_him;
Assert.assertEquals(root_and_X.children.size(), 2);
Assert.assertTrue(root_and_X.hasChild(disheartens));
Assert.assertTrue(root_and_X.hasChild(him));
root_and_X_disheartens = root_and_X.getChild(disheartens);
Assert.assertNotNull(root_and_X_disheartens);
root_and_X_him = root_and_X.getChild(him);
Assert.assertNotNull(root_and_X_him);
}
Node root_it_persuades_him_and, root_it_persuades_him_X;
Node root_it_persuades_X_and, root_it_persuades_X_it;
Node root_it_X_him_and, root_it_X_him_X;
Node root_it_X_and_it, root_it_X_and_X;
Node root_persuades_him_and_it, root_persuades_him_and_X;
Node root_persuades_him_X_it, root_persuades_him_X_disheartens;
Node root_persuades_X_and_it, root_persuades_X_and_X;
Node root_persuades_X_it_disheartens, root_persuades_X_it_X;
Node root_him_and_it_disheartens, root_him_and_it_X;
Node root_him_and_X_disheartens, root_him_and_X_him;
Node root_him_X_it_disheartens, root_him_X_it_X;
Node root_him_X_disheartens_him;
Node root_and_it_disheartens_him;
Node root_and_it_X_him;
Node root_and_X_disheartens_him;
Node root_him_X_disheartens_X, root_and_it_disheartens_X, root_and_X_disheartens_X;
@Test(dependsOnMethods = {"rootOtherGreatGrandchildren"})
public void rootOtherGreatGreatGrandchildren() {
// Node root_it_persuades_him_and, root_it_persuades_him_X;
Assert.assertEquals(root_it_persuades_him.children.size(), 2);
Assert.assertTrue(root_it_persuades_him.hasChild(and));
Assert.assertTrue(root_it_persuades_him.hasChild(PrefixTree.X));
root_it_persuades_him_and = root_it_persuades_him.getChild(and);
root_it_persuades_him_X = root_it_persuades_him.getChild(PrefixTree.X);
// Node root_it_persuades_X_and, root_it_persuades_X_it;
Assert.assertEquals(root_it_persuades_X.children.size(), 2);
Assert.assertTrue(root_it_persuades_X.hasChild(and));
Assert.assertTrue(root_it_persuades_X.hasChild(it));
root_it_persuades_X_and = root_it_persuades_X.getChild(and);
root_it_persuades_X_it = root_it_persuades_X.getChild(it);
// Node root_it_disheartens_him_and, root_it_disheartens_him_X;
Assert.assertEquals(root_it_disheartens_him.children.size(), 0);
// Node root_it_disheartens_X_and, root_it_disheartens_X_it;
Assert.assertEquals(root_it_disheartens_X.children.size(), 0);
// Node root_it_X_him_and, root_it_X_him_X;
Assert.assertEquals(root_it_X_him.children.size(), 2);
Assert.assertTrue(root_it_X_him.hasChild(and));
Assert.assertTrue(root_it_X_him.hasChild(PrefixTree.X));
root_it_X_him_and = root_it_X_him.getChild(and);
root_it_X_him_X = root_it_X_him.getChild(PrefixTree.X);
// Node root_it_X_and_it, root_it_X_and_X;
Assert.assertEquals(root_it_X_and.children.size(), 2);
Assert.assertTrue(root_it_X_and.hasChild(it));
Assert.assertTrue(root_it_X_and.hasChild(PrefixTree.X));
root_it_X_and_it = root_it_X_and.getChild(it);
root_it_X_and_X = root_it_X_and.getChild(PrefixTree.X);
// Node root_persuades_him_and_it, root_persuades_him_and_X;
Assert.assertEquals(root_persuades_him_and.children.size(), 2);
Assert.assertTrue(root_persuades_him_and.hasChild(it));
Assert.assertTrue(root_persuades_him_and.hasChild(PrefixTree.X));
root_persuades_him_and_it = root_persuades_him_and.getChild(it);
root_persuades_him_and_X = root_persuades_him_and.getChild(PrefixTree.X);
// Node root_persuades_him_X_it, root_persuades_him_X_disheartens;
Assert.assertEquals(root_persuades_him_X.children.size(), 2);
Assert.assertTrue(root_persuades_him_X.hasChild(it));
Assert.assertTrue(root_persuades_him_X.hasChild(disheartens));
root_persuades_him_X_it = root_persuades_him_X.getChild(it);
root_persuades_him_X_disheartens = root_persuades_him_X.getChild(disheartens);
// Node root_persuades_X_and_it, root_persuades_X_and_X;
Assert.assertEquals(root_persuades_X_and.children.size(), 2);
Assert.assertTrue(root_persuades_X_and.hasChild(it));
Assert.assertTrue(root_persuades_X_and.hasChild(PrefixTree.X));
root_persuades_X_and_it = root_persuades_X_and.getChild(it);
root_persuades_X_and_X = root_persuades_X_and.getChild(PrefixTree.X);
// Node root_persuades_X_it_disheartens, root_persuades_X_it_X;
Assert.assertEquals(root_persuades_X_it.children.size(), 2);
Assert.assertTrue(root_persuades_X_it.hasChild(disheartens));
Assert.assertTrue(root_persuades_X_it.hasChild(PrefixTree.X));
root_persuades_X_it_disheartens = root_persuades_X_it.getChild(disheartens);
root_persuades_X_it_X = root_persuades_X_it.getChild(PrefixTree.X);
// Node root_him_and_it_disheartens, root_him_and_it_X;
Assert.assertEquals(root_him_and_it.children.size(), 2);
Assert.assertTrue(root_him_and_it.hasChild(disheartens));
Assert.assertTrue(root_him_and_it.hasChild(PrefixTree.X));
root_him_and_it_disheartens = root_him_and_it.getChild(disheartens);
root_him_and_it_X = root_him_and_it.getChild(PrefixTree.X);
// Node root_him_and_X_disheartens, root_him_and_X_him;
Assert.assertEquals(root_him_and_X.children.size(), 2);
Assert.assertTrue(root_him_and_X.hasChild(disheartens));
Assert.assertTrue(root_him_and_X.hasChild(him));
root_him_and_X_disheartens = root_him_and_X.getChild(disheartens);
root_him_and_X_him = root_him_and_X.getChild(him);
// Node root_him_X_it_disheartens, root_him_X_it_X;
Assert.assertEquals(root_him_X_it.children.size(), 2);
Assert.assertTrue(root_him_X_it.hasChild(disheartens));
Assert.assertTrue(root_him_X_it.hasChild(PrefixTree.X));
root_him_X_it_disheartens = root_him_X_it.getChild(disheartens);
root_him_X_it_X = root_him_X_it.getChild(PrefixTree.X);
// Node root_him_X_disheartens_him, root_him_X_disheartens_X;
Assert.assertEquals(root_him_X_disheartens.children.size(), 2);
Assert.assertTrue(root_him_X_disheartens.hasChild(him));
Assert.assertTrue(root_him_X_disheartens.hasChild(PrefixTree.X));
root_him_X_disheartens_him = root_him_X_disheartens.getChild(him);
root_him_X_disheartens_X = root_him_X_disheartens.getChild(PrefixTree.X);
// Node root_and_it_disheartens_him, root_and_it_disheartens_X;
Assert.assertEquals(root_and_it_disheartens.children.size(), 2);
Assert.assertTrue(root_and_it_disheartens.hasChild(him));
Assert.assertTrue(root_and_it_disheartens.hasChild(PrefixTree.X));
root_and_it_disheartens_him = root_and_it_disheartens.getChild(him);
root_and_it_disheartens_X = root_and_it_disheartens.getChild(PrefixTree.X);
// Node root_and_it_X_him;
Assert.assertEquals(root_and_it_X.children.size(), 1);
Assert.assertTrue(root_and_it_X.hasChild(him));
root_and_it_X_him = root_and_it_X.getChild(him);
// Node root_and_X_disheartens_him, root_and_X_disheartens_X;
Assert.assertEquals(root_and_X_disheartens.children.size(), 2);
Assert.assertTrue(root_and_X_disheartens.hasChild(him));
Assert.assertTrue(root_and_X_disheartens.hasChild(PrefixTree.X));
root_and_X_disheartens_him = root_and_X_disheartens.getChild(him);
root_and_X_disheartens_X = root_and_X_disheartens.getChild(PrefixTree.X);
}
Node root_it_persuades_him_and_it, root_it_persuades_him_and_X;
Node root_it_persuades_him_X_it;
Node root_it_persuades_X_and_it, root_it_persuades_X_and_X;
Node root_it_X_him_and_it, root_it_X_him_and_X;
Node root_it_X_him_X_it;
Node root_persuades_him_and_it_disheartens, root_persuades_him_and_it_X;
Node root_persuades_him_and_X_disheartens;
Node root_persuades_him_X_it_disheartens, root_persuades_him_X_it_X;
Node root_persuades_X_and_it_disheartens, root_persuades_X_and_it_X;
Node root_persuades_X_and_X_disheartens;
Node root_him_and_it_disheartens_him, root_him_and_it_disheartens_X;
Node root_him_and_it_X_him;
Node root_him_and_X_disheartens_him, root_him_and_X_disheartens_X;
Node root_him_X_it_disheartens_him, root_him_X_it_disheartens_X;
Node root_him_X_it_X_him;
@Test(dependsOnMethods = {"rootOtherGreatGreatGrandchildren"})
public void rootOtherGreatGreatGreatGrandchildren() {
// Node root_it_persuades_him_and_it, root_it_persuades_him_and_X;
Assert.assertEquals(root_it_persuades_him_and.children.size(), 2);
Assert.assertTrue(root_it_persuades_him_and.hasChild(it));
Assert.assertTrue(root_it_persuades_him_and.hasChild(PrefixTree.X));
root_it_persuades_him_and_it = root_it_persuades_him_and.getChild(it);
root_it_persuades_him_and_X = root_it_persuades_him_and.getChild(PrefixTree.X);
Assert.assertEquals(root_it_persuades_him_and_it.children.size(), 0);
Assert.assertEquals(root_it_persuades_him_and_X.children.size(), 0);
// Node root_it_persuades_him_X_and, root_it_persuades_him_X_it;
Assert.assertEquals(root_it_persuades_him_X.children.size(), 1);
Assert.assertTrue(root_it_persuades_him_X.hasChild(it));
root_it_persuades_him_X_it = root_it_persuades_him_X.getChild(it);
Assert.assertEquals(root_it_persuades_him_X_it.children.size(), 0);
// Node root_it_persuades_X_and_it, root_it_persuades_X_and_X;
Assert.assertEquals(root_it_persuades_X_and.children.size(), 2);
Assert.assertTrue(root_it_persuades_X_and.hasChild(it));
Assert.assertTrue(root_it_persuades_X_and.hasChild(PrefixTree.X));
root_it_persuades_X_and_it = root_it_persuades_X_and.getChild(it);
root_it_persuades_X_and_X = root_it_persuades_X_and.getChild(PrefixTree.X);
Assert.assertEquals(root_it_persuades_X_and_it.children.size(), 0);
Assert.assertEquals(root_it_persuades_X_and_X.children.size(), 0);
// Node root_it_X_him_and_it, root_it_X_him_and_X;
Assert.assertEquals(root_it_X_him_and.children.size(), 2);
Assert.assertTrue(root_it_X_him_and.hasChild(it));
Assert.assertTrue(root_it_X_him_and.hasChild(PrefixTree.X));
root_it_X_him_and_it = root_it_X_him_and.getChild(it);
root_it_X_him_and_X = root_it_X_him_and.getChild(PrefixTree.X);
Assert.assertEquals(root_it_X_him_and_it.children.size(), 0);
Assert.assertEquals(root_it_X_him_and_X.children.size(), 0);
// Node root_it_X_him_X_it;
Assert.assertEquals(root_it_X_him_X.children.size(), 1);
Assert.assertTrue(root_it_X_him_X.hasChild(it));
root_it_X_him_X_it = root_it_X_him_X.getChild(it);
Assert.assertEquals(root_it_X_him_X_it.children.size(), 0);
// Node root_persuades_him_and_it_disheartens, root_persuades_him_and_it_X;
Assert.assertEquals(root_persuades_him_and_it.children.size(), 2);
Assert.assertTrue(root_persuades_him_and_it.hasChild(disheartens));
Assert.assertTrue(root_persuades_him_and_it.hasChild(PrefixTree.X));
root_persuades_him_and_it_disheartens = root_persuades_him_and_it.getChild(disheartens);
root_persuades_him_and_it_X = root_persuades_him_and_it.getChild(PrefixTree.X);
Assert.assertEquals(root_persuades_him_and_it_disheartens.children.size(), 0);
Assert.assertEquals(root_persuades_him_and_it_X.children.size(), 0);
// Node root_persuades_him_and_X_disheartens;
Assert.assertEquals(root_persuades_him_and_X.children.size(), 1);
Assert.assertTrue(root_persuades_him_and_X.hasChild(disheartens));
root_persuades_him_and_X_disheartens = root_persuades_him_and_X.getChild(disheartens);
Assert.assertEquals(root_persuades_him_and_X_disheartens.children.size(), 0);
// Node root_persuades_him_X_it_disheartens, root_persuades_him_X_it_X;
Assert.assertEquals(root_persuades_him_X_it.children.size(), 2);
Assert.assertTrue(root_persuades_him_X_it.hasChild(disheartens));
Assert.assertTrue(root_persuades_him_X_it.hasChild(PrefixTree.X));
root_persuades_him_X_it_disheartens = root_persuades_him_X_it.getChild(disheartens);
root_persuades_him_X_it_X = root_persuades_him_X_it.getChild(PrefixTree.X);
Assert.assertEquals(root_persuades_him_X_it_disheartens.children.size(), 0);
Assert.assertEquals(root_persuades_him_X_it_X.children.size(), 0);
// Node root_persuades_X_and_it_disheartens, root_persuades_X_and_it_X;
Assert.assertEquals(root_persuades_X_and_it.children.size(), 2);
Assert.assertTrue(root_persuades_X_and_it.hasChild(disheartens));
Assert.assertTrue(root_persuades_X_and_it.hasChild(PrefixTree.X));
root_persuades_X_and_it_disheartens = root_persuades_X_and_it.getChild(disheartens);
root_persuades_X_and_it_X = root_persuades_X_and_it.getChild(PrefixTree.X);
Assert.assertEquals(root_persuades_X_and_it_disheartens.children.size(), 0);
Assert.assertEquals(root_persuades_X_and_it_X.children.size(), 0);
// Node root_persuades_X_and_X_disheartens;
Assert.assertEquals(root_persuades_X_and_X.children.size(), 1);
Assert.assertTrue(root_persuades_X_and_X.hasChild(disheartens));
root_persuades_X_and_X_disheartens = root_persuades_X_and_X.getChild(disheartens);
Assert.assertEquals(root_persuades_X_and_X_disheartens.children.size(), 0);
// Node root_him_and_it_disheartens_him, root_him_and_it_disheartens_X;
Assert.assertEquals(root_him_and_it_disheartens.children.size(), 2);
Assert.assertTrue(root_him_and_it_disheartens.hasChild(him));
Assert.assertTrue(root_him_and_it_disheartens.hasChild(PrefixTree.X));
root_him_and_it_disheartens_him = root_him_and_it_disheartens.getChild(him);
root_him_and_it_disheartens_X = root_him_and_it_disheartens.getChild(PrefixTree.X);
Assert.assertEquals(root_him_and_it_disheartens_him.children.size(), 0);
Assert.assertEquals(root_him_and_it_disheartens_X.children.size(), 0);
// Node root_him_and_it_X_him;
Assert.assertEquals(root_him_and_it_X.children.size(), 1);
Assert.assertTrue(root_him_and_it_X.hasChild(him));
root_him_and_it_X_him = root_him_and_it_X.getChild(him);
Assert.assertEquals(root_him_and_it_X_him.children.size(), 0);
// Node root_him_and_X_disheartens_him, root_him_and_X_disheartens_X;
Assert.assertEquals(root_him_and_X_disheartens.children.size(), 2);
Assert.assertTrue(root_him_and_X_disheartens.hasChild(him));
Assert.assertTrue(root_him_and_X_disheartens.hasChild(PrefixTree.X));
root_him_and_X_disheartens_him = root_him_and_X_disheartens.getChild(him);
root_him_and_X_disheartens_X = root_him_and_X_disheartens.getChild(PrefixTree.X);
Assert.assertEquals(root_him_and_X_disheartens_him.children.size(), 0);
Assert.assertEquals(root_him_and_X_disheartens_X.children.size(), 0);
// Node root_him_X_it_disheartens_him, root_him_X_it_disheartens_X;
Assert.assertEquals(root_him_X_it_disheartens.children.size(), 2);
Assert.assertTrue(root_him_X_it_disheartens.hasChild(him));
Assert.assertTrue(root_him_X_it_disheartens.hasChild(PrefixTree.X));
root_him_X_it_disheartens_him = root_him_X_it_disheartens.getChild(him);
root_him_X_it_disheartens_X = root_him_X_it_disheartens.getChild(PrefixTree.X);
Assert.assertEquals(root_him_X_it_disheartens_him.children.size(), 0);
Assert.assertEquals(root_him_X_it_disheartens_X.children.size(), 0);
// Node root_him_X_it_X_him;
Assert.assertEquals(root_him_X_it_X.children.size(), 1);
Assert.assertTrue(root_him_X_it_X.hasChild(him));
root_him_X_it_X_him = root_him_X_it_X.getChild(him);
Assert.assertEquals(root_him_X_it_X_him.children.size(), 0);
}
@Test(dependsOnMethods = {"rootChildren"})
public void rootChildrenSuffixLinks() {
// The suffixLink of each child of root should point back to root
Assert.assertEquals(root_it.suffixLink, tree.root);
Assert.assertEquals(root_persuades.suffixLink, tree.root);
Assert.assertEquals(root_him.suffixLink, tree.root);
Assert.assertEquals(root_and.suffixLink, tree.root);
Assert.assertEquals(root_disheartens.suffixLink, tree.root);
Assert.assertEquals(root_X.suffixLink, tree.root);
}
@Test(dependsOnMethods = {"rootOtherGrandchildren"})
public void rootOtherGrandchildrenSuffixLinks() {
Assert.assertEquals(root_him.getChild(PrefixTree.X).suffixLink, root_X);
Assert.assertEquals(root_it_persuades.suffixLink, root_persuades);
Assert.assertEquals(root_it_disheartens.suffixLink, root_disheartens);
Assert.assertEquals(root_it_X.suffixLink, root_X);
Assert.assertEquals(root_persuades_him.suffixLink, root_him);
Assert.assertEquals(root_persuades_X.suffixLink, root_X);
Assert.assertEquals(root_him_and.suffixLink, root_and);
Assert.assertEquals(root_him_X.suffixLink, root_X);
Assert.assertEquals(root_and_it.suffixLink, root_it);
Assert.assertEquals(root_and_X.suffixLink, root_X);
Assert.assertEquals(root_disheartens_him.suffixLink, root_him);
Assert.assertEquals(root_disheartens_X.suffixLink, root_X);
}
@Test(dependsOnMethods = {"rootXChildren","rootOtherGreatGrandchildren"})
public void rootOtherGreatGrandchildrenSuffixLinks() {
Assert.assertNotNull(root_persuades_him);
Assert.assertNotNull(root_it_persuades_him.suffixLink);
Assert.assertEquals(root_it_persuades_him.suffixLink, root_persuades_him);
Assert.assertNotNull(root_persuades_X);
Assert.assertNotNull(root_it_persuades_X.suffixLink);
Assert.assertEquals(root_it_persuades_X.suffixLink, root_persuades_X);
Assert.assertNotNull(root_disheartens_him);
Assert.assertNotNull(root_it_disheartens_him.suffixLink);
Assert.assertEquals(root_it_disheartens_him.suffixLink, root_disheartens_him);
Assert.assertNotNull(root_disheartens_X);
Assert.assertNotNull(root_it_disheartens_X.suffixLink);
Assert.assertEquals(root_it_disheartens_X.suffixLink, root_disheartens_X);
Assert.assertNotNull(root_X_him);
Assert.assertNotNull(root_it_X_him.suffixLink);
Assert.assertEquals(root_it_X_him.suffixLink, root_X_him);
Assert.assertNotNull(root_X_and);
Assert.assertNotNull(root_it_X_and.suffixLink);
Assert.assertEquals(root_it_X_and.suffixLink, root_X_and);
Assert.assertNotNull(root_X_it);
Assert.assertNotNull(root_it_X_it.suffixLink);
Assert.assertEquals(root_it_X_it.suffixLink, root_X_it);
Assert.assertNotNull(root_him_and);
Assert.assertNotNull(root_persuades_him_and.suffixLink);
Assert.assertEquals(root_persuades_him_and.suffixLink, root_him_and);
Assert.assertNotNull(root_him_X);
Assert.assertNotNull(root_persuades_him_X.suffixLink);
Assert.assertEquals(root_persuades_him_X.suffixLink, root_him_X);
Assert.assertNotNull(root_X_and);
Assert.assertNotNull(root_persuades_X_and.suffixLink);
Assert.assertEquals(root_persuades_X_and.suffixLink, root_X_and);
Assert.assertNotNull(root_X_it);
Assert.assertNotNull(root_persuades_X_it.suffixLink);
Assert.assertEquals(root_persuades_X_it.suffixLink, root_X_it);
Assert.assertNotNull(root_X_disheartens);
Assert.assertNotNull(root_persuades_X_disheartens.suffixLink);
Assert.assertEquals(root_persuades_X_disheartens.suffixLink, root_X_disheartens);
Assert.assertNotNull(root_and_it);
Assert.assertNotNull(root_him_and_it.suffixLink);
Assert.assertEquals(root_him_and_it.suffixLink, root_and_it);
Assert.assertNotNull(root_and_X);
Assert.assertNotNull(root_him_and_X.suffixLink);
Assert.assertEquals(root_him_and_X.suffixLink, root_and_X);
Assert.assertNotNull(root_X_it);
Assert.assertNotNull(root_him_X_it.suffixLink);
Assert.assertEquals(root_him_X_it.suffixLink, root_X_it);
Assert.assertNotNull(root_X_disheartens);
Assert.assertNotNull(root_him_X_disheartens.suffixLink);
Assert.assertEquals(root_him_X_disheartens.suffixLink, root_X_disheartens);
Assert.assertNotNull(root_X_him);
Assert.assertNotNull(root_him_X_him.suffixLink);
Assert.assertEquals(root_him_X_him.suffixLink, root_X_him);
Assert.assertNotNull(root_it_disheartens);
Assert.assertNotNull(root_and_it_disheartens.suffixLink);
Assert.assertEquals(root_and_it_disheartens.suffixLink, root_it_disheartens);
Assert.assertNotNull(root_it_X);
Assert.assertNotNull(root_and_it_X.suffixLink);
Assert.assertEquals(root_and_it_X.suffixLink, root_it_X);
Assert.assertNotNull(root_X_disheartens);
Assert.assertNotNull(root_and_X_disheartens.suffixLink);
Assert.assertEquals(root_and_X_disheartens.suffixLink, root_X_disheartens);
Assert.assertNotNull(root_X_him);
Assert.assertNotNull(root_and_X_him.suffixLink);
Assert.assertEquals(root_and_X_him.suffixLink, root_X_him);
}
@Test(dependsOnMethods = {"rootXGrandchildren","rootOtherGreatGreatGrandchildren"})
public void rootOtherGreatGreatGrandchildrenSuffixLinks() {
Assert.assertEquals(root_it_persuades_him_and.suffixLink, root_persuades_him_and);
Assert.assertEquals(root_it_persuades_him_X.suffixLink, root_persuades_him_X);
Assert.assertEquals(root_it_persuades_X_and.suffixLink, root_persuades_X_and);
Assert.assertEquals(root_it_persuades_X_it.suffixLink, root_persuades_X_it);
Assert.assertEquals(root_it_X_him_and.suffixLink, root_X_him_and);
Assert.assertEquals(root_it_X_him_X.suffixLink, root_X_him_X);
Assert.assertEquals(root_it_X_and_it.suffixLink, root_X_and_it);
Assert.assertEquals(root_it_X_and_X.suffixLink, root_X_and_X);
Assert.assertEquals(root_persuades_him_and_it.suffixLink, root_him_and_it);
Assert.assertEquals(root_persuades_him_and_X.suffixLink, root_him_and_X);
Assert.assertEquals(root_persuades_him_X_it.suffixLink, root_him_X_it);
Assert.assertEquals(root_persuades_him_X_disheartens.suffixLink, root_him_X_disheartens);
Assert.assertEquals(root_persuades_X_and_it.suffixLink, root_X_and_it);
Assert.assertEquals(root_persuades_X_and_X.suffixLink, root_X_and_X);
Assert.assertEquals(root_persuades_X_it_disheartens.suffixLink, root_X_it_disheartens);
Assert.assertEquals(root_persuades_X_it_X.suffixLink, root_X_it_X);
Assert.assertEquals(root_him_and_it_disheartens.suffixLink, root_and_it_disheartens);
Assert.assertEquals(root_him_and_it_X.suffixLink, root_and_it_X);
Assert.assertEquals(root_him_and_X_disheartens.suffixLink, root_and_X_disheartens);
Assert.assertEquals(root_him_and_X_him.suffixLink, root_and_X_him);
Assert.assertEquals(root_him_X_it_disheartens.suffixLink, root_X_it_disheartens);
Assert.assertEquals(root_him_X_it_X.suffixLink, root_X_it_X);
Assert.assertEquals(root_him_X_disheartens_him.suffixLink, root_X_disheartens_him);
Assert.assertEquals(root_him_X_disheartens_X.suffixLink, root_X_disheartens_X);
Assert.assertEquals(root_and_it_disheartens_him.suffixLink, root_it_disheartens_him);
Assert.assertEquals(root_and_it_disheartens_X.suffixLink, root_it_disheartens_X);
Assert.assertEquals(root_and_it_X_him.suffixLink, root_it_X_him);
Assert.assertEquals(root_and_X_disheartens_him.suffixLink, root_X_disheartens_him);
Assert.assertEquals(root_and_X_disheartens_X.suffixLink, root_X_disheartens_X);
}
@Test(dependsOnMethods = {"rootXGreatGrandchildren", "rootOtherGreatGreatGreatGrandchildren"})
public void rootOtherGreatGreatGreatGrandchildrenSuffixLinks() {
Assert.assertEquals(root_it_persuades_him_and_it.suffixLink, root_persuades_him_and_it);
Assert.assertEquals(root_it_persuades_him_and_X.suffixLink, root_persuades_him_and_X);
Assert.assertEquals(root_it_persuades_him_X_it.suffixLink, root_persuades_him_X_it);
Assert.assertEquals(root_it_persuades_X_and_it.suffixLink, root_persuades_X_and_it);
Assert.assertEquals(root_it_persuades_X_and_X.suffixLink, root_persuades_X_and_X);
Assert.assertEquals(root_it_X_him_and_it.suffixLink, root_X_him_and_it);
Assert.assertEquals(root_it_X_him_and_X.suffixLink, root_X_him_and_X);
Assert.assertEquals(root_it_X_him_X_it.suffixLink, root_X_him_X_it);
Assert.assertEquals(root_persuades_him_and_it_disheartens.suffixLink, root_him_and_it_disheartens);
Assert.assertEquals(root_persuades_him_and_it_X.suffixLink, root_him_and_it_X);
Assert.assertEquals(root_persuades_him_and_X_disheartens.suffixLink, root_him_and_X_disheartens);
Assert.assertEquals(root_persuades_him_X_it_disheartens.suffixLink, root_him_X_it_disheartens);
Assert.assertEquals(root_persuades_him_X_it_X.suffixLink, root_him_X_it_X);
Assert.assertEquals(root_persuades_X_and_it_disheartens.suffixLink, root_X_and_it_disheartens);
Assert.assertEquals(root_persuades_X_and_it_X.suffixLink, root_X_and_it_X);
Assert.assertEquals(root_persuades_X_and_X_disheartens.suffixLink, root_X_and_X_disheartens);
Assert.assertEquals(root_him_and_it_disheartens_him.suffixLink, root_and_it_disheartens_him);
Assert.assertEquals(root_him_and_it_disheartens_X.suffixLink, root_and_it_disheartens_X);
Assert.assertEquals(root_him_and_it_X_him.suffixLink, root_and_it_X_him);
Assert.assertEquals(root_him_and_X_disheartens_him.suffixLink, root_and_X_disheartens_him);
Assert.assertEquals(root_him_and_X_disheartens_X.suffixLink, root_and_X_disheartens_X);
Assert.assertEquals(root_him_X_it_disheartens_him.suffixLink, root_X_it_disheartens_him);
Assert.assertEquals(root_him_X_it_disheartens_X.suffixLink, root_X_it_disheartens_X);
Assert.assertEquals(root_him_X_it_X_him.suffixLink, root_X_it_X_him);
}
Node root_X_persuades, root_X_him, root_X_and, root_X_it, root_X_disheartens;
@Test(dependsOnMethods = {"rootChildren"})
public void rootXChildren() {
Assert.assertTrue(root_X.hasChild(persuades));
Assert.assertTrue(root_X.hasChild(him));
Assert.assertTrue(root_X.hasChild(and));
Assert.assertTrue(root_X.hasChild(it));
Assert.assertTrue(root_X.hasChild(disheartens));
Assert.assertFalse(root_X.hasChild(PrefixTree.X));
Assert.assertEquals(root_X.children.size(), 5);
root_X_persuades = root_X.getChild(persuades);
Assert.assertNotNull(root_X_persuades);
root_X_him = root_X.getChild(him);
Assert.assertNotNull(root_X_him);
root_X_and = root_X.getChild(and);
Assert.assertNotNull(root_X_and);
root_X_it = root_X.getChild(it);
Assert.assertNotNull(root_X_it);
root_X_disheartens = root_X.getChild(disheartens);
Assert.assertNotNull(root_X_disheartens);
}
Node root_X_persuades_him, root_X_him_and, root_X_and_it, root_X_it_disheartens, root_X_disheartens_him;
Node root_X_persuades_X, root_X_him_X, root_X_and_X, root_X_it_X, root_X_disheartens_X;
@Test(dependsOnMethods = {"rootXChildren"})
public void rootXGrandchildren() {
Assert.assertEquals(root_X_persuades.children.size(), 2);
Assert.assertTrue(root_X_persuades.hasChild(him));
Assert.assertTrue(root_X_persuades.hasChild(PrefixTree.X));
root_X_persuades_him = root_X_persuades.getChild(him);
root_X_persuades_X = root_X_persuades.getChild(PrefixTree.X);
Assert.assertEquals(root_X_him.children.size(), 2);
Assert.assertTrue(root_X_him.hasChild(and));
Assert.assertTrue(root_X_him.hasChild(PrefixTree.X));
root_X_him_and = root_X_him.getChild(and);
root_X_him_X = root_X_him.getChild(PrefixTree.X);
Assert.assertEquals(root_X_and.children.size(), 2);
Assert.assertTrue(root_X_and.hasChild(it));
Assert.assertTrue(root_X_and.hasChild(PrefixTree.X));
root_X_and_it = root_X_and.getChild(it);
root_X_and_X = root_X_and.getChild(PrefixTree.X);
Assert.assertEquals(root_X_it.children.size(), 2);
Assert.assertTrue(root_X_it.hasChild(disheartens));
Assert.assertTrue(root_X_it.hasChild(PrefixTree.X));
root_X_it_disheartens = root_X_it.getChild(disheartens);
root_X_it_X = root_X_it.getChild(PrefixTree.X);
Assert.assertEquals(root_X_disheartens.children.size(), 2);
Assert.assertTrue(root_X_disheartens.hasChild(him));
Assert.assertTrue(root_X_disheartens.hasChild(PrefixTree.X));
root_X_disheartens_him = root_X_disheartens.getChild(him);
root_X_disheartens_X = root_X_disheartens.getChild(PrefixTree.X);
}
Node root_X_persuades_him_and, root_X_him_and_it, root_X_and_it_disheartens, root_X_it_disheartens_him;
Node root_X_persuades_him_X, root_X_him_and_X, root_X_and_it_X, root_X_it_disheartens_X;
Node root_X_persuades_X_and, root_X_him_X_it, root_X_and_X_disheartens, root_X_it_X_him;
Node root_X_persuades_X_it, root_X_him_X_disheartens, root_X_and_X_him;
@Test(dependsOnMethods = {"rootXGrandchildren"})
public void rootXGreatGrandchildren() {
Assert.assertEquals(root_X_persuades_him.children.size(), 2);
Assert.assertTrue(root_X_persuades_him.hasChild(and));
Assert.assertTrue(root_X_persuades_him.hasChild(PrefixTree.X));
root_X_persuades_him_and = root_X_persuades_him.getChild(and);
Assert.assertNotNull(root_X_persuades_him_and);
root_X_persuades_him_X = root_X_persuades_him.getChild(PrefixTree.X);
Assert.assertEquals(root_X_him_and.children.size(), 2);
Assert.assertTrue(root_X_him_and.hasChild(it));
Assert.assertTrue(root_X_him_and.hasChild(PrefixTree.X));
root_X_him_and_it = root_X_him_and.getChild(it);
root_X_him_and_X = root_X_him_and.getChild(PrefixTree.X);
Assert.assertEquals(root_X_and_it.children.size(), 2);
Assert.assertTrue(root_X_and_it.hasChild(disheartens));
Assert.assertTrue(root_X_and_it.hasChild(PrefixTree.X));
root_X_and_it_disheartens = root_X_and_it.getChild(disheartens);
root_X_and_it_X = root_X_and_it.getChild(PrefixTree.X);
Assert.assertEquals(root_X_it_disheartens.children.size(), 2);
Assert.assertTrue(root_X_it_disheartens.hasChild(him));
Assert.assertTrue(root_X_it_disheartens.hasChild(PrefixTree.X));
root_X_it_disheartens_him = root_X_it_disheartens.getChild(him);
root_X_it_disheartens_X = root_X_it_disheartens.getChild(PrefixTree.X);
///////
Assert.assertEquals(root_X_persuades_X.children.size(), 2);
Assert.assertTrue(root_X_persuades_X.hasChild(and));
Assert.assertTrue(root_X_persuades_X.hasChild(it));
root_X_persuades_X_and = root_X_persuades_X.getChild(and);
root_X_persuades_X_it = root_X_persuades_X.getChild(it);
Assert.assertEquals(root_X_him_X.children.size(), 2);
Assert.assertTrue(root_X_him_X.hasChild(it));
Assert.assertTrue(root_X_him_X.hasChild(disheartens));
root_X_him_X_it = root_X_him_X.getChild(it);
root_X_him_X_disheartens = root_X_him_X.getChild(disheartens);
Assert.assertEquals(root_X_and_X.children.size(), 2);
Assert.assertTrue(root_X_and_X.hasChild(disheartens));
Assert.assertTrue(root_X_and_X.hasChild(him));
root_X_and_X_disheartens = root_X_and_X.getChild(disheartens);
root_X_and_X_him = root_X_and_X.getChild(him);
Assert.assertEquals(root_X_it_X.children.size(), 1);
Assert.assertTrue(root_X_it_X.hasChild(him));
root_X_it_X_him = root_X_it_X.getChild(him);
Assert.assertEquals(root_X_disheartens.children.size(), 2);
Assert.assertTrue(root_X_disheartens.hasChild(him));
Assert.assertTrue(root_X_disheartens.hasChild(PrefixTree.X));
root_X_disheartens_him = root_X_disheartens.getChild(him);
root_X_disheartens_X = root_X_disheartens.getChild(PrefixTree.X);
}
Node root_X_persuades_him_and_it, root_X_persuades_him_and_X;
Node root_X_him_and_it_disheartens, root_X_him_and_it_X;
Node root_X_and_it_disheartens_him, root_X_and_it_disheartens_X;
Node root_X_persuades_him_X_it, root_X_him_and_X_disheartens, root_X_and_it_X_him;
Node root_X_persuades_X_and_it, root_X_him_X_it_disheartens, root_X_and_X_disheartens_him;
@Test(dependsOnMethods = {"rootXGreatGrandchildren"})
public void rootXGreatGreatGrandchildren() {
Assert.assertEquals(root_X_persuades_him_and.children.size(), 2);
Assert.assertTrue(root_X_persuades_him_and.hasChild(it));
Assert.assertTrue(root_X_persuades_him_and.hasChild(PrefixTree.X));
root_X_persuades_him_and_it = root_X_persuades_him_and.getChild(it);
root_X_persuades_him_and_X = root_X_persuades_him_and.getChild(PrefixTree.X);
Assert.assertEquals(root_X_persuades_him_and_it.children.size(), 0);
Assert.assertEquals(root_X_persuades_him_and_X.children.size(), 0);
Assert.assertEquals(root_X_him_and_it.children.size(), 2);
Assert.assertTrue(root_X_him_and_it.hasChild(disheartens));
Assert.assertTrue(root_X_him_and_it.hasChild(PrefixTree.X));
root_X_him_and_it_disheartens = root_X_him_and_it.getChild(disheartens);
root_X_him_and_it_X = root_X_him_and_it.getChild(PrefixTree.X);
Assert.assertEquals(root_X_him_and_it_disheartens.children.size(), 0);
Assert.assertEquals(root_X_him_and_it_X.children.size(), 0);
Assert.assertEquals(root_X_and_it_disheartens.children.size(), 2);
Assert.assertTrue(root_X_and_it_disheartens.hasChild(him));
Assert.assertTrue(root_X_and_it_disheartens.hasChild(PrefixTree.X));
root_X_and_it_disheartens_him = root_X_and_it_disheartens.getChild(him);
root_X_and_it_disheartens_X = root_X_and_it_disheartens.getChild(PrefixTree.X);
Assert.assertEquals(root_X_and_it_disheartens_him.children.size(), 0);
Assert.assertEquals(root_X_and_it_disheartens_X.children.size(), 0);
///////
Assert.assertEquals(root_X_persuades_him_X.children.size(), 1);
Assert.assertTrue(root_X_persuades_him_X.hasChild(it));
root_X_persuades_him_X_it = root_X_persuades_him_X.getChild(it);
Assert.assertEquals(root_X_persuades_him_X_it.children.size(), 0);
Assert.assertEquals(root_X_him_and_X.children.size(), 1);
Assert.assertTrue(root_X_him_and_X.hasChild(disheartens));
root_X_him_and_X_disheartens = root_X_him_and_X.getChild(disheartens);
Assert.assertEquals(root_X_him_and_X_disheartens.children.size(), 0);
Assert.assertEquals(root_X_and_it_X.children.size(), 1);
Assert.assertTrue(root_X_and_it_X.hasChild(him));
root_X_and_it_X_him = root_X_and_it_X.getChild(him);
Assert.assertEquals(root_X_and_it_X_him.children.size(), 0);
///////
//Node root_X_persuades_X_and_it, root_X_him_X_it_disheartens, root_X_and_X_disheartens_him;
Assert.assertEquals(root_X_persuades_X_and.children.size(), 1);
Assert.assertTrue(root_X_persuades_X_and.hasChild(it));
root_X_persuades_X_and_it = root_X_persuades_X_and.getChild(it);
Assert.assertEquals(root_X_persuades_X_and_it.children.size(), 0);
Assert.assertEquals(root_X_him_X_it.children.size(), 1);
Assert.assertTrue(root_X_him_X_it.hasChild(disheartens));
root_X_him_X_it_disheartens = root_X_him_X_it.getChild(disheartens);
Assert.assertEquals(root_X_him_X_it_disheartens.children.size(), 0);
Assert.assertEquals(root_X_and_X_disheartens.children.size(), 1);
Assert.assertTrue(root_X_and_X_disheartens.hasChild(him));
root_X_and_X_disheartens_him = root_X_and_X_disheartens.getChild(him);
Assert.assertEquals(root_X_and_X_disheartens_him.children.size(), 0);
/////
//Node root_X_persuades_X_it_disheartens, root_X_him_X_disheartens_him;
Assert.assertEquals(root_X_persuades_X_it.children.size(), 0);
Assert.assertEquals(root_X_him_X_disheartens.children.size(), 0);
}
@Test(dependsOnMethods = {"rootXChildren"})
public void rootXChildrenSuffixLinks() {
Assert.assertEquals(root_X_persuades.suffixLink, root_persuades);
Assert.assertEquals(root_X_him.suffixLink, root_him);
Assert.assertEquals(root_X_and.suffixLink, root_and);
Assert.assertEquals(root_X_it.suffixLink, root_it);
Assert.assertEquals(root_X_disheartens.suffixLink, root_disheartens);
}
@Test(dependsOnMethods = {"rootXGrandchildren","rootOtherGrandchildren"})
public void rootXGrandchildrenSuffixLinks() {
Assert.assertEquals(root_X_him.getChild(PrefixTree.X).suffixLink,root_him.getChild(PrefixTree.X));
Assert.assertEquals(root_X_persuades_him.suffixLink, root_persuades_him);
Assert.assertEquals(root_X_persuades_X.suffixLink, root_persuades_X);
Assert.assertEquals(root_X_him_and.suffixLink, root_him_and);
Assert.assertEquals(root_X_him_X.suffixLink, root_him_X);
Assert.assertEquals(root_X_and_it.suffixLink, root_and_it);
Assert.assertEquals(root_X_and_X.suffixLink, root_and_X);
Assert.assertEquals(root_X_it_disheartens.suffixLink, root_it_disheartens);
Assert.assertEquals(root_X_it_X.suffixLink, root_it_X);
Assert.assertEquals(root_X_disheartens_him.suffixLink, root_disheartens_him);
Assert.assertEquals(root_X_disheartens_X.suffixLink, root_disheartens_X);
}
@Test(dependsOnMethods = {"rootXGreatGrandchildren","rootOtherGreatGrandchildren"})
public void rootXGreatGrandchildrenSuffixLinks() {
Assert.assertNotNull(root_X_persuades_him_and);
Assert.assertEquals(root_X_persuades_him_and.suffixLink, root_persuades_him_and);
Assert.assertEquals(root_X_persuades_him_X.suffixLink, root_persuades_him_X);
Assert.assertEquals(root_X_him_and_it.suffixLink, root_him_and_it);
Assert.assertEquals(root_X_him_and_X.suffixLink, root_him_and_X);
Assert.assertEquals(root_X_and_it_disheartens.suffixLink, root_and_it_disheartens);
Assert.assertEquals(root_X_and_it_X.suffixLink, root_and_it_X);
Assert.assertEquals(root_X_it_disheartens_him.suffixLink, root_it_disheartens_him);
Assert.assertEquals(root_X_it_disheartens_X.suffixLink, root_it_disheartens_X);
///////
Assert.assertEquals(root_X_persuades_X_and.suffixLink, root_persuades_X_and);
Assert.assertEquals(root_X_persuades_X_it.suffixLink, root_persuades_X_it);
Assert.assertEquals(root_X_him_X_it.suffixLink, root_him_X_it);
Assert.assertEquals(root_X_him_X_disheartens.suffixLink, root_him_X_disheartens);
Assert.assertEquals(root_X_and_X_disheartens.suffixLink, root_and_X_disheartens);
Assert.assertEquals(root_X_and_X_him.suffixLink, root_and_X_him);
Assert.assertEquals(root_X_it_X_him.suffixLink, root_it_X_him);
Assert.assertEquals(root_X_disheartens_him.suffixLink, root_disheartens_him);
Assert.assertEquals(root_X_disheartens_X.suffixLink, root_disheartens_X);
}
@Test
public void prefixTreeNodes() {
// PrefixTree tree = PrefixTree.getDummyPrefixTree();
Node node = new Node(null,true);
Assert.assertTrue(node.active);
Assert.assertNull(node.suffixLink);
Assert.assertTrue(node.children.isEmpty());
int child = -1;
node.addChild(child);
Assert.assertTrue(node.hasChild(child));
Assert.assertFalse(node.children.isEmpty());
Assert.assertEquals(node.children.size(), 1);
Assert.assertNotNull(node.getChild(child));
Node.resetNodeCounter();
}
}