Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
playTest.cpp 1.35 KiB
#include <list>
#include "playTest.h"

#include "conversions/re2fa/Glushkov.h"
#include "conversions/fa2re/BrzozowskiAlgebraic.h"
#include "determinize/nfa/NFADeterminizer.h"
#include "minimize/dfa/MinimizeDFA.h"

#include "regexp/unbounded/UnboundedRegExp.h"
#include "regexp/RegExpFromStringParser.h"

#include "automaton/FSM/NFA.h"

#define CPPUNIT_IMPLY(x, y) CPPUNIT_ASSERT(!(x) || (y))

CPPUNIT_TEST_SUITE_REGISTRATION( playTest );

void playTest::setUp() {
}

void playTest::tearDown() {
}

void playTest::testPlay() {
	{
		std::string input = "a+a* b*";
		std::stringstream inputs(input);

		regexp::RegExpFromStringParser parser(inputs);
		regexp::UnboundedRegExp regexp1( static_cast<const regexp::UnboundedRegExp &>( parser.parseValue().getData() ) );

		re2fa::Glushkov glushkov1(regexp1);
		automaton::NFA nfa1 = glushkov1.convert();


		regexp::UnboundedRegExp regexp2( static_cast<const regexp::UnboundedRegExp &>( fa2re::BrzozowskiAlgebraic::convert(nfa1) ) );

		re2fa::Glushkov glushkov2(regexp2);
		automaton::NFA nfa2 = glushkov2.convert();

		automaton::DFA dfa1 = determinize::NFADeterminizer::determinize(nfa1);
		automaton::DFA dfa2 = determinize::NFADeterminizer::determinize(nfa2);

		automaton::DFA mdfa1 = minimize::MinimizeDFA::minimize(dfa1);
		automaton::DFA mdfa2 = minimize::MinimizeDFA::minimize(dfa2);

		CPPUNIT_ASSERT( mdfa1 == mdfa2);
	}
}