Newer
Older
#include "automaton/simplify/Trim.h"
#include "grammar/simplify/TrimCFG.h"
#include "automaton/FSM/DFA.h"
#include "grammar/Regular/RightRG.h"
#define CPPUNIT_IMPLY(x, y) CPPUNIT_ASSERT(!(x) || (y))
CPPUNIT_TEST_SUITE_REGISTRATION( trimTest );
void trimTest::setUp() {
}
void trimTest::tearDown() {
}
void trimTest::testTrimAutomaton() {
automaton.addState(automaton::State(1));
automaton.addState(automaton::State(2));
automaton.addState(automaton::State(3));
automaton.addInputSymbol(alphabet::symbolFrom("a"));
automaton.addInputSymbol(alphabet::symbolFrom("b"));
automaton.addTransition(automaton::State(1), alphabet::symbolFrom("a"), automaton::State(2));
automaton.addTransition(automaton::State(2), alphabet::symbolFrom("b"), automaton::State(1));
automaton.addTransition(automaton::State(3), alphabet::symbolFrom("b"), automaton::State(1));
CPPUNIT_ASSERT(trimed.getStates().size() == 2);
}
void trimTest::testTrimGrammar() {
grammar::RightRG rrGrammar(alphabet::symbolFrom(1));
rrGrammar.addNonterminalSymbol(alphabet::symbolFrom(1));
rrGrammar.addNonterminalSymbol(alphabet::symbolFrom(2));
rrGrammar.addNonterminalSymbol(alphabet::symbolFrom(3));
rrGrammar.addNonterminalSymbol(alphabet::symbolFrom(4));
rrGrammar.addNonterminalSymbol(alphabet::symbolFrom(5));
rrGrammar.addNonterminalSymbol(alphabet::symbolFrom(6));
rrGrammar.addTerminalSymbol(alphabet::symbolFrom("a"));
rrGrammar.addTerminalSymbol(alphabet::symbolFrom("b"));
rrGrammar.addRule(alphabet::symbolFrom(1), std::make_pair(alphabet::symbolFrom("a"), alphabet::symbolFrom(2)));
rrGrammar.addRule(alphabet::symbolFrom(2), std::make_pair(alphabet::symbolFrom("b"), alphabet::symbolFrom(3)));
rrGrammar.addRule(alphabet::symbolFrom(3), alphabet::symbolFrom("a"));
rrGrammar.addRule(alphabet::symbolFrom(4), std::make_pair(alphabet::symbolFrom("b"), alphabet::symbolFrom(5)));
rrGrammar.addRule(alphabet::symbolFrom(5), alphabet::symbolFrom("a"));
rrGrammar.addRule(alphabet::symbolFrom(5), std::make_pair(alphabet::symbolFrom("b"), alphabet::symbolFrom(2)));
rrGrammar.addRule(alphabet::symbolFrom(6), std::make_pair(alphabet::symbolFrom("b"), alphabet::symbolFrom(6)));
grammar::RightRG trimed = trim::TrimCFG::trim(rrGrammar);
CPPUNIT_ASSERT(trimed.getNonterminalAlphabet().size() == 3);
}