Newer
Older
#include <list>
#include "RegExpTest.h"
#include "sax/SaxParseInterface.h"
#include "sax/SaxComposeInterface.h"
#include "regexp/unbounded/UnboundedRegExp.h"
#include "regexp/RegExpFromStringParser.h"
#include "regexp/GlushkovTraversal.h"
#include <factory/StringDataFactory.hpp>
#define CPPUNIT_IMPLY(x, y) CPPUNIT_ASSERT(!(x) || (y))
#define CPPUNIT_EXCLUSIVE_OR(x, y) CPPUNIT_ASSERT((!(x) && (y)) || ((x) && !(y)))
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( static_cast<const regexp::UnboundedRegExp &>( alib::StringDataFactory::fromString<regexp::RegExp>(input).getData() ) );
std::set<regexp::GlushkovSymbol> first = regexp::GlushkovTraversal::first(regexp);
CPPUNIT_ASSERT(first.size() == 0);
}
{
std::string input = "#E* a";
regexp::UnboundedRegExp regexp( static_cast<const regexp::UnboundedRegExp &>( alib::StringDataFactory::fromString<regexp::RegExp>(input).getData() ) );
std::set<regexp::GlushkovSymbol> first = regexp::GlushkovTraversal::first(regexp);
CPPUNIT_ASSERT(first.size() == 1);
}
}
void RegExpTest::testLast() {
{
std::string input = "a+a";
regexp::UnboundedRegExp regexp( static_cast<const regexp::UnboundedRegExp &>( alib::StringDataFactory::fromString<regexp::RegExp>(input).getData() ) );
std::set<regexp::GlushkovSymbol> last = regexp::GlushkovTraversal::last(regexp);
CPPUNIT_ASSERT(last.size() == 2);
}
{
std::string input = "(a+a)b";
regexp::UnboundedRegExp regexp( static_cast<const regexp::UnboundedRegExp &>( alib::StringDataFactory::fromString<regexp::RegExp>(input).getData() ) );
std::set<regexp::GlushkovSymbol> last = regexp::GlushkovTraversal::last(regexp);
CPPUNIT_ASSERT(last.size() == 1);
}
}
void RegExpTest::testFollow() {
{
std::string input = "(a+a)b";
regexp::UnboundedRegExp regexp( static_cast<const regexp::UnboundedRegExp &>( alib::StringDataFactory::fromString<regexp::RegExp>(input).getData() ) );
std::set<regexp::GlushkovSymbol> symbols = regexp::GlushkovTraversal::getSymbols(regexp);
auto symbolsIter = symbols.begin();
std::set<regexp::GlushkovSymbol> follow1 = regexp::GlushkovTraversal::follow(regexp, *symbolsIter);
CPPUNIT_ASSERT(follow1.size() == 1);
symbolsIter++;
std::set<regexp::GlushkovSymbol> follow2 = regexp::GlushkovTraversal::follow(regexp, *symbolsIter);
CPPUNIT_ASSERT(follow2.size() == 1);
symbolsIter++;
std::set<regexp::GlushkovSymbol> follow3 = regexp::GlushkovTraversal::follow(regexp, *symbolsIter);
CPPUNIT_ASSERT(follow3.size() == 0);
}
{
std::string input = "a+a* (b+a)* c";
regexp::UnboundedRegExp regexp( static_cast<const regexp::UnboundedRegExp &>( alib::StringDataFactory::fromString<regexp::RegExp>(input).getData() ) );
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
std::set<regexp::GlushkovSymbol> symbols = regexp::GlushkovTraversal::getSymbols(regexp);
auto symbolsIter = symbols.begin();
std::set<regexp::GlushkovSymbol> follow1 = regexp::GlushkovTraversal::follow(regexp, *symbolsIter);
CPPUNIT_ASSERT(follow1.size() == 0);
symbolsIter++;
std::set<regexp::GlushkovSymbol> follow2 = regexp::GlushkovTraversal::follow(regexp, *symbolsIter);
CPPUNIT_ASSERT(follow2.size() == 4);
symbolsIter++;
std::set<regexp::GlushkovSymbol> follow3 = regexp::GlushkovTraversal::follow(regexp, *symbolsIter);
CPPUNIT_ASSERT(follow3.size() == 3);
symbolsIter++;
std::set<regexp::GlushkovSymbol> follow4 = regexp::GlushkovTraversal::follow(regexp, *symbolsIter);
CPPUNIT_ASSERT(follow4.size() == 3);
symbolsIter++;
std::set<regexp::GlushkovSymbol> follow5 = regexp::GlushkovTraversal::follow(regexp, *symbolsIter);
CPPUNIT_ASSERT(follow5.size() == 0);
}
}