Newer
Older
#include "RegExpOptimizeTest.h"
#include "regexp/unbounded/UnboundedRegExp.h"
#include <factory/StringDataFactory.hpp>
#include <primitive/Character.h>
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( RegExpOptimizeTest, "regexp" );
CPPUNIT_TEST_SUITE_REGISTRATION( RegExpOptimizeTest );
void RegExpOptimizeTest::setUp() {
}
void RegExpOptimizeTest::tearDown() {
}
void RegExpOptimizeTest::testOptimize() {
regexp::UnboundedRegExp < > regexp = alib::StringDataFactory::fromString ( input );
regexp::UnboundedRegExp < > res = regexp::simplify::RegExpOptimize::optimize ( regexp );
regexp::UnboundedRegExp < > regexpRes = alib::StringDataFactory::fromString ( inputRes );
std::cout << res << std::endl;
std::cout << regexpRes << std::endl;
CPPUNIT_ASSERT ( regexpRes == res );
}
{
std::string input = "(a+a)b + (#0 b + (#0 a + (#0 b + a)))";
regexp::UnboundedRegExp < > regexp = alib::StringDataFactory::fromString ( input );
regexp::UnboundedRegExp < > res = regexp::simplify::RegExpOptimize::optimize ( regexp );
regexp::UnboundedRegExp < > regexpRes = alib::StringDataFactory::fromString ( inputRes );
std::cout << res << std::endl;
std::cout << regexpRes << std::endl;
CPPUNIT_ASSERT ( regexpRes == res );
regexp::UnboundedRegExp < > regexp = alib::StringDataFactory::fromString ( input );
regexp::UnboundedRegExp < > res = regexp::simplify::RegExpOptimize::optimize ( regexp );
regexp::UnboundedRegExp < > regexpRes = alib::StringDataFactory::fromString ( inputRes );
std::cout << res << std::endl;
std::cout << regexpRes << std::endl;
CPPUNIT_ASSERT ( regexpRes == res );
void RegExpOptimizeTest::testOptimizeTemplated() {
regexp::UnboundedRegExpSymbol < char > a ( 'a' );
regexp::UnboundedRegExpSymbol < char > b ( 'b' );
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
{
regexp::UnboundedRegExpAlternation < char > alt;
alt.appendElement ( a );
alt.appendElement ( a );
regexp::UnboundedRegExp < char > regexp ( regexp::UnboundedRegExpStructure < char > { alt } );
regexp::UnboundedRegExp < char > res = regexp::simplify::RegExpOptimize::optimize(regexp);
regexp::UnboundedRegExp < char > regexpRes( regexp::UnboundedRegExpStructure < char > { a } );
std::cout << res << std::endl;
std::cout << regexpRes << std::endl;
CPPUNIT_ASSERT ( regexpRes == res );
}
{
regexp::UnboundedRegExpAlternation < char > alt1;
alt1.appendElement ( a );
alt1.appendElement ( a );
regexp::UnboundedRegExpConcatenation < char > con1;
con1.appendElement ( alt1 );
con1.appendElement ( b );
regexp::UnboundedRegExpConcatenation < char > con2;
con2.appendElement ( regexp::UnboundedRegExpEmpty < char > { } );
con2.appendElement ( b );
regexp::UnboundedRegExpAlternation < char > alt2;
alt2.appendElement ( con2 );
alt2.appendElement ( a );
regexp::UnboundedRegExpConcatenation < char > con3;
con3.appendElement ( regexp::UnboundedRegExpEmpty < char > { } );
con3.appendElement ( a );
regexp::UnboundedRegExpAlternation < char > alt3;
alt3.appendElement ( con3 );
alt3.appendElement ( alt2 );
regexp::UnboundedRegExpConcatenation < char > con4;
con4.appendElement ( regexp::UnboundedRegExpEmpty < char > { } );
con4.appendElement ( b );
regexp::UnboundedRegExpAlternation < char > alt4;
alt4.appendElement ( con4 );
alt4.appendElement ( alt3 );
regexp::UnboundedRegExpAlternation < char > alt5;
alt5.appendElement ( con1 );
alt5.appendElement ( alt4 );
regexp::UnboundedRegExp < char > regexp ( regexp::UnboundedRegExpStructure < char > { alt5 } );
regexp::UnboundedRegExp < char > res = regexp::simplify::RegExpOptimize::optimize ( regexp );
regexp::UnboundedRegExpConcatenation < char > con6;
con6.appendElement ( a );
con6.appendElement ( b );
regexp::UnboundedRegExpAlternation < char > alt6;
alt6.appendElement ( a );
alt6.appendElement ( con6 );
regexp::UnboundedRegExp < char > regexpRes( regexp::UnboundedRegExpStructure < char > { alt6 } );
std::cout << regexp << std::endl;
std::cout << res << std::endl;
std::cout << regexpRes << std::endl;
CPPUNIT_ASSERT ( regexpRes == res );
}
{
regexp::UnboundedRegExpConcatenation < char > con1;
con1.appendElement ( a );
con1.appendElement ( z );
regexp::UnboundedRegExpIteration < char > iter { b };
regexp::UnboundedRegExpConcatenation < char > con2;
con2.appendElement ( a );
con2.appendElement ( iter );
con2.appendElement ( b );
con2.appendElement ( z );
regexp::UnboundedRegExpAlternation < char > alt1;
alt1.appendElement ( con1 );
alt1.appendElement ( con2);
regexp::UnboundedRegExp < char > regexp( regexp::UnboundedRegExpStructure < char > { alt1 } );
regexp::UnboundedRegExp < char > res = regexp::simplify::RegExpOptimize::optimize(regexp);
regexp::UnboundedRegExpConcatenation < char > con3;
con3.appendElement ( a );
con3.appendElement ( iter );
con3.appendElement ( z );
regexp::UnboundedRegExp < char > regexpRes( regexp::UnboundedRegExpStructure < char > { con3 } );
std::cout << res << std::endl;
std::cout << regexpRes << std::endl;
CPPUNIT_ASSERT ( regexpRes == res );