package pl.edu.amu.wmi.daut.re;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import junit.framework.TestCase;
/**
* Test klasy Cyl.
*/
public class TestCyk extends TestCase {
private HashMap<String, GrammarNonterminalSymbol> ntSymbol = new HashMap<String,
GrammarNonterminalSymbol>();
private HashMap<String, GrammarTerminalSymbol> tSymbol = new HashMap<String,
GrammarTerminalSymbol>();
private List<GrammarRule> rules = new ArrayList<GrammarRule>();
/**
* Generowanie symobli terminalnych i nieterminalnych.
*/
private void generateSymobols() {
ntSymbol.put("S", new GrammarNonterminalSymbol('S'));
ntSymbol.put("A", new GrammarNonterminalSymbol('A'));
ntSymbol.put("B", new GrammarNonterminalSymbol('B'));
ntSymbol.put("C", new GrammarNonterminalSymbol('C'));
tSymbol.put("a", new GrammarTerminalSymbol('a'));
tSymbol.put("b", new GrammarTerminalSymbol('b'));
}
/**
* Pierwszy test klasy Cyk.
*/
public final void testCyk1() {
generateSymobols();
rules.clear();
rules.add(new GrammarRule(ntSymbol.get("S"), ntSymbol.get("A"), ntSymbol.get("C")));
rules.add(new GrammarRule(ntSymbol.get("C"), ntSymbol.get("S"), ntSymbol.get("B")));
rules.add(new GrammarRule(ntSymbol.get("S"), ntSymbol.get("A"), ntSymbol.get("B")));
rules.add(new GrammarRule(ntSymbol.get("A"), tSymbol.get("a")));
rules.add(new GrammarRule(ntSymbol.get("B"), tSymbol.get("b")));
Cyk cyk = new Cyk(new Grammar(rules, ntSymbol.get("S")));
assertTrue(cyk.accepts(Arrays.<GrammarTerminalSymbol>asList(tSymbol.get("a"),
tSymbol.get("a"), tSymbol.get("b"), tSymbol.get("b"))));
assertFalse(cyk.accepts(Arrays.<GrammarTerminalSymbol>asList(tSymbol.get("a"),
tSymbol.get("a"), tSymbol.get("b"), tSymbol.get("b"), tSymbol.get("b"))));
}
/**
* Drugi test klasy Cyk.
*/
public final void testCyk2() {
generateSymobols();
rules.clear();
rules.add(new GrammarRule(ntSymbol.get("S"), ntSymbol.get("A"), ntSymbol.get("B")));
rules.add(new GrammarRule(ntSymbol.get("S"), ntSymbol.get("B"), ntSymbol.get("C")));
rules.add(new GrammarRule(ntSymbol.get("A"), ntSymbol.get("B"), ntSymbol.get("A")));
rules.add(new GrammarRule(ntSymbol.get("A"), tSymbol.get("a")));
rules.add(new GrammarRule(ntSymbol.get("B"), ntSymbol.get("C"), ntSymbol.get("C")));
rules.add(new GrammarRule(ntSymbol.get("B"), tSymbol.get("b")));
rules.add(new GrammarRule(ntSymbol.get("C"), ntSymbol.get("A"), ntSymbol.get("B")));
rules.add(new GrammarRule(ntSymbol.get("C"), tSymbol.get("a")));
Cyk cyk = new Cyk(new Grammar(rules, ntSymbol.get("S")));
assertFalse(cyk.accepts(Arrays.<GrammarTerminalSymbol>asList(tSymbol.get("a"),
tSymbol.get("b"), tSymbol.get("a"), tSymbol.get("b"))));
assertTrue(cyk.accepts(Arrays.<GrammarTerminalSymbol>asList(tSymbol.get("b"),
tSymbol.get("a"))));
}
}