package aima.test.core.unit.nlp.parse;
import static org.junit.Assert.*;
import java.util.ArrayList;
import org.junit.Before;
import org.junit.Test;
import aima.core.nlp.data.lexicons.LexiconExamples;
import aima.core.nlp.parsing.Lexicon;
import aima.core.nlp.parsing.grammars.Rule;
public class LexiconTest {
Lexicon l;
Lexicon wumpusLex;
@Before
public void setUp() {
l = new Lexicon();
wumpusLex = LexiconExamples.buildWumpusLex();
}
@Test
public void testAddEntry() {
l.addEntry("EXAMPLE", "word", (float)0.10);
assertTrue( l.containsKey("EXAMPLE"));
assertEquals( l.get("EXAMPLE").size(), 1 );
}
@Test
public void testAddEntryExistingCategory() {
l.addEntry("EXAMPLE", "word", (float)0.10);
l.addEntry("EXAMPLE", "second", (float)0.90);
assertTrue( l.containsKey("EXAMPLE"));
assertTrue( l.keySet().size() == 1 );
assertTrue( l.get("EXAMPLE").get(1).getWord().equals("second"));
}
@Test
public void testAddLexWords() {
String key = "EXAMPLE";
l.addLexWords( key, "stench", "0.05", "breeze", "0.10", "wumpus", "0.15");
assertTrue( l.get(key).size() == 3);
assertTrue( l.get(key).get(0).getWord().equals("stench"));
}
@Test
public void testAddLexWordsWithInvalidArgs() {
String key = "EXAMPLE";
assertFalse( l.addLexWords( key, "stench", "0.05", "breeze"));
assertFalse( l.containsKey(key));
}
@Test
public void testGetTerminalRules() {
String key1 = "A"; String key2 = "B"; String key3 = "C";
l.addLexWords(key1, "apple","0.25","alpha","0.5","arrow","0.25");
l.addLexWords(key2, "ball","0.25","bench","0.25","blue","0.25","bell","0.25");
l.addLexWords(key3, "carrot","0.25","canary","0.5","caper","0.25");
ArrayList<Rule> rules1 = l.getTerminalRules(key1);
ArrayList<Rule> rules2 = l.getTerminalRules(key2);
ArrayList<Rule> rules3 = l.getTerminalRules(key3);
assertEquals( rules1.size(), 3 );
assertEquals( rules1.get(0).rhs.get(0), "apple");
assertEquals( rules2.size(), 4 );
assertEquals( rules2.get(3).rhs.get(0), "bell");
assertEquals( rules3.size(), 3);
assertEquals( rules3.get(1).lhs.get(0), "C");
}
@Test
public void testGetAllTerminalRules() {
String key1 = "A"; String key2 = "B"; String key3 = "C";
l.addLexWords(key1, "apple","0.25","alpha","0.5","arrow","0.25");
l.addLexWords(key2, "ball","0.25","bench","0.25","blue","0.25","bell","0.25");
l.addLexWords(key3, "carrot","0.25","canary","0.5","caper","0.25");
ArrayList<Rule> allRules = l.getAllTerminalRules();
assertEquals( allRules.size(), 10 );
assertTrue( allRules.get(0).rhs.get(0).equals("apple") ||
allRules.get(0).rhs.get(0).equals("ball") ||
allRules.get(0).rhs.get(0).equals("carrot"));
}
}