Skip to content
Snippets Groups Projects
RegExpTest.cpp 5.38 KiB
Newer Older
  • Learn to ignore specific revisions
  • #include "RegExpTest.h"
    
    #include <alib/list>
    
    
    #include "sax/SaxComposeInterface.h"
    
    #include "sax/SaxParseInterface.h"
    
    #include "regexp/unbounded/UnboundedRegExp.h"
    
    #include <regexp/RegExp.h>
    
    #include "regexp/glushkov/GlushkovFollow.h"
    
    #include "regexp/glushkov/GlushkovIndexate.h"
    
    #include "regexp/glushkov/GlushkovFirst.h"
    #include "regexp/glushkov/GlushkovLast.h"
    
    #include <factory/StringDataFactory.hpp>
    
    #include <regexp/string/UnboundedRegExp.h>
    
    CPPUNIT_TEST_SUITE_NAMED_REGISTRATION ( RegExpTest, "regexp" );
    CPPUNIT_TEST_SUITE_REGISTRATION ( RegExpTest );
    
    void RegExpTest::setUp ( ) {
    
    void RegExpTest::tearDown ( ) {
    
    void RegExpTest::testFirst ( ) {
    
    	{
    		std::string input = "#E* #0*";
    
    		regexp::UnboundedRegExp < > regexp = alib::StringDataFactory::fromString ( input );
    		regexp::UnboundedRegExp < ext::pair < DefaultSymbolType, int > > indexedRegExp = regexp::GlushkovIndexate::index ( regexp );
    
    		ext::set < regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > > first = regexp::GlushkovFirst::first ( indexedRegExp );
    
    		CPPUNIT_ASSERT ( first.size ( ) == 0 );
    
    	}
    	{
    		std::string input = "#E* a";
    
    		regexp::UnboundedRegExp < > regexp = alib::StringDataFactory::fromString ( input );
    		regexp::UnboundedRegExp < ext::pair < DefaultSymbolType, int > > indexedRegExp = regexp::GlushkovIndexate::index ( regexp );
    
    		ext::set < regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > > first = regexp::GlushkovFirst::first ( indexedRegExp );
    
    		CPPUNIT_ASSERT ( first.size ( ) == 1 );
    
    void RegExpTest::testLast ( ) {
    
    	{
    		std::string input = "a+a";
    
    		regexp::UnboundedRegExp < > regexp = alib::StringDataFactory::fromString ( input );
    		regexp::UnboundedRegExp < ext::pair < DefaultSymbolType, int > > indexedRegExp = regexp::GlushkovIndexate::index ( regexp );
    
    		ext::set < regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > > last = regexp::GlushkovLast::last ( indexedRegExp );
    
    		CPPUNIT_ASSERT ( last.size ( ) == 2 );
    
    	}
    	{
    		std::string input = "(a+a)b";
    
    		regexp::UnboundedRegExp < > regexp = alib::StringDataFactory::fromString ( input );
    		regexp::UnboundedRegExp < ext::pair < DefaultSymbolType, int > > indexedRegExp = regexp::GlushkovIndexate::index ( regexp );
    
    		ext::set < regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > > last = regexp::GlushkovLast::last ( indexedRegExp );
    
    		std::cout << last << std::endl;
    
    		CPPUNIT_ASSERT ( last.size ( ) == 1 );
    
    void RegExpTest::testFollow ( ) {
    
    	{
    		std::string input = "(a+a)b";
    
    		regexp::UnboundedRegExp < > regexp = alib::StringDataFactory::fromString ( input );
    		regexp::UnboundedRegExp < ext::pair < DefaultSymbolType, int > > indexedRegExp = regexp::GlushkovIndexate::index ( regexp );
    
    		auto symbolsIter = indexedRegExp.getAlphabet ( ).begin ( );
    
    		ext::set < regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > > follow1 = regexp::GlushkovFollow::follow ( indexedRegExp, regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > ( * symbolsIter ) );
    
    		CPPUNIT_ASSERT ( follow1.size ( ) == 1 );
    
    		ext::set < regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > > follow2 = regexp::GlushkovFollow::follow ( indexedRegExp, regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > ( * symbolsIter ) );
    
    		CPPUNIT_ASSERT ( follow2.size ( ) == 1 );
    
    		ext::set < regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > > follow3 = regexp::GlushkovFollow::follow ( indexedRegExp, regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > ( * symbolsIter ) );
    
    		CPPUNIT_ASSERT ( follow3.size ( ) == 0 );
    
    	}
    	{
    		std::string input = "a+a* (b+a)* c";
    
    		regexp::UnboundedRegExp < > regexp = alib::StringDataFactory::fromString ( input );
    		regexp::UnboundedRegExp < ext::pair < DefaultSymbolType, int > > indexedRegExp = regexp::GlushkovIndexate::index ( regexp );
    
    		auto symbolsIter = indexedRegExp.getAlphabet ( ).begin ( );
    
    		ext::set < regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > > follow1 = regexp::GlushkovFollow::follow ( indexedRegExp, regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > ( * symbolsIter ) );
    
    		CPPUNIT_ASSERT ( follow1.size ( ) == 0 );
    
    		ext::set < regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > > follow2 = regexp::GlushkovFollow::follow ( indexedRegExp, regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > ( * symbolsIter ) );
    
    		CPPUNIT_ASSERT ( follow2.size ( ) == 4 );
    
    		ext::set < regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > > follow3 = regexp::GlushkovFollow::follow ( indexedRegExp, regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > ( * symbolsIter ) );
    
    		CPPUNIT_ASSERT ( follow3.size ( ) == 3 );
    
    		ext::set < regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > > follow4 = regexp::GlushkovFollow::follow ( indexedRegExp, regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > ( * symbolsIter ) );
    
    		CPPUNIT_ASSERT ( follow4.size ( ) == 3 );
    
    		ext::set < regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > > follow5 = regexp::GlushkovFollow::follow ( indexedRegExp, regexp::UnboundedRegExpSymbol < ext::pair < DefaultSymbolType, int > > ( * symbolsIter ) );
    
    		CPPUNIT_ASSERT ( follow5.size ( ) == 0 );