Skip to content
Snippets Groups Projects
trimTest.cpp 2.49 KiB
Newer Older
  • Learn to ignore specific revisions
  • #include <list>
    #include "trimTest.h"
    
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    #include "automaton/simplify/Trim.h"
    
    #include "grammar/simplify/Trim.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() {
    
    Jan Trávníček's avatar
    Jan Trávníček committed
      automaton::DFA automaton(automaton::State(1));
    
    Jan Trávníček's avatar
    Jan Trávníček committed
      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"));
    
    Jan Trávníček's avatar
    Jan Trávníček committed
      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));
    
    Jan Trávníček's avatar
    Jan Trávníček committed
      automaton.addFinalState(automaton::State(1));
    
      automaton::DFA trimed = automaton::simplify::Trim::trim(automaton);
    
    
      CPPUNIT_ASSERT(trimed.getStates().size() == 2);
    }
    
    void trimTest::testTrimGrammar() {
    
    Jan Trávníček's avatar
    Jan Trávníček committed
      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"));
    
    Jan Trávníček's avatar
    Jan Trávníček committed
      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 = grammar::simplify::Trim::trim(rrGrammar);
    
    
      CPPUNIT_ASSERT(trimed.getNonterminalAlphabet().size() == 3);
    }