17 std::string name =
"RenQ Renaming";
18 std::cout <<
"Testing " << name <<
" ..." << std::endl;
20 std::string renameString =
"old";
26 StateSet::Iterator its;
32 throw Exception(name,
"MergeStateAnnotation not set.", 1003);
33 if(msa->
Annotation().compare(renameString) != 0){
34 std::stringstream errstr;
35 errstr <<
"Annotation incorrect, was " << msa->
Annotation() <<
", but " << renameString <<
" was expected." << std::endl;
36 throw Exception(name, errstr.str(), 1003);
42 std::cout <<
"Finished " << name << std::endl;
49 std::string name =
"RenQ Number of States";
50 std::cout <<
"Testing " << name <<
" ..." << std::endl;
52 std::string renameString =
"old";
59 std::stringstream errstr;
60 errstr <<
"Incorrect, number of states, was " << g1.
Size() <<
", but " << g2.
Size() <<
" was expected." << std::endl;
61 throw Exception(name, errstr.str(), 1003);
66 std::cout <<
"Finished " << name << std::endl;
73 std::string name =
"RenG Renaming Stack Symbols";
74 std::cout <<
"Testing " << name <<
" ..." <<std::endl;
76 std::string renameString =
"old";
82 StackSymbolSet::Iterator it;
87 std::stringstream errstr;
88 errstr <<
"Annotation incorrect, " << g2.
StackSymbolName(*it) <<
" was expected, but not found in the stack symbol list:\n" ;
89 StackSymbolSet::Iterator iterr;
94 throw Exception(name, errstr.str(), 1003);
100 std::stringstream errstr;
101 errstr <<
"Annotation incorrect, " << renameString <<
"-" << g2.
StackSymbolName(*it) <<
" was expected, but not found in the stack symbol list:\n" ;
102 StackSymbolSet::Iterator iterr;
107 throw Exception(name, errstr.str(), 1003);
115 std::cout <<
"Finished " << name << std::endl;
122 std::string name =
"RenG Number of Stack Symbols";
123 std::cout <<
"Testing " << name <<
" ..." << std::endl;
125 std::string renameString =
"old";
132 std::stringstream errstr;
134 throw Exception(name, errstr.str(), 1003);
139 std::cout <<
"Finished " << name << std::endl;
149 std::string name =
"RenG Renaming Transitions";
150 std::cout <<
"Testing " << name <<
" ..." << std::endl;
152 std::string renameString =
"old";
158 std::vector<Idx> oldPush, oldPop, push, pop;
159 std::vector<Idx>::const_iterator pushit, popit;
161 PopPushSet::const_iterator ppit;
167 for(ppit = popPush.begin(); ppit != popPush.end(); ppit++){
170 oldPop = ppit->first;
171 for(popit = oldPop.begin(); popit != oldPop.end(); popit++){
175 std::string annotation = g2.
StackSymbolName(*popit).substr(0, renameString.size() + 1);
176 if(annotation.compare(renameString +
"-") != 0){
177 std::stringstream errstr;
178 errstr <<
"Annotation incorrect, " << renameString <<
"- was expected, but symbol was " << g2.
StackSymbolName(*popit) << std::endl;
179 throw Exception(name, errstr.str(), 1003);
185 oldPush = ppit->second;
186 for(pushit = oldPush.begin(); pushit != oldPush.end(); pushit++){
190 std::string annotation = g2.
StackSymbolName(*pushit).substr(0, renameString.size() + 1);
191 if(annotation.compare(renameString +
"-") != 0){
192 std::stringstream errstr;
193 errstr <<
"Annotation incorrect, " << renameString <<
"- was expected, but symbol was " << g2.
StackSymbolName(*pushit) << std::endl;
194 throw Exception(name, errstr.str(), 1003);
205 std::cout <<
"Finished " << name << std::endl;
212 std::string name =
"Rep0 No Lambda Pop";
213 std::cout <<
"Testing " << name <<
" ..." << std::endl;
222 PopPushSet::const_iterator ppsit;
227 for(ppsit = g2.
PopPush(*tit).begin(); ppsit != g2.
PopPush(*tit).end(); ppsit++){
229 std::stringstream errstr;
230 errstr <<
"Lambda popping edges not removed, Lambda pop found in transition" << g2.
TransRel().
Str(*tit) << std::endl;
231 throw Exception(name, errstr.str(), 1003);
238 std::cout <<
"Finished " << name << std::endl;
245 std::string name =
"Rep0 All Expecting Transition";
246 std::cout <<
"Testing " << name <<
" ..." << std::endl;
253 PopPushSet::const_iterator ppsit;
259 for(ppsit = g1.
PopPush(*tit).begin(); ppsit != g1.
PopPush(*tit).end(); ppsit++){
269 std::cout <<
"warning: cannot perform test, because there is no lambda pop in the original generator" << std::endl;
278 std::vector<Idx> pop, push;
279 std::vector<Idx>::const_iterator popit, pushit;
280 StackSymbolSet::Iterator ssit;
281 bool transFound, symbolFound;
294 for(ppsit = g2.
PopPush(*tit).begin(); ppsit != g2.
PopPush(*tit).end(); ppsit++){
297 push = ppsit->second;
299 if(pop.front() == *ssit && *push.rbegin() == *ssit){
311 if(transFound)
break;
315 std::stringstream errstr;
316 errstr <<
"Original generator has lambda popping edge, but result generator has no edge that accepts all stack symbols" << std::endl;
317 throw Exception(name, errstr.str(), 1003);
322 std::cout <<
"Finished " << name << std::endl;
330 std::string name =
"Rep2 Number of States and Transitions";
336 Idx expectedNumberTransitions = 7;
337 Idx expectedNumberStates = 6;
344 if(g2.
Size() != expectedNumberStates){
345 std::stringstream errstr;
346 errstr <<
"Number of states was " << g2.
Size() <<
", but " << expectedNumberStates <<
" was expected." << std::endl;
347 throw Exception(name, errstr.str(), 1003);
352 std::stringstream errstr;
353 errstr <<
"Number of transitions incorrect" << g2.
TransRelSize() <<
", but " << expectedNumberTransitions <<
" was expected." << std::endl;
354 throw Exception(name, errstr.str(), 1003);
367 std::string name =
"Rep2 Renaming";
370 std::string renameString =
"old";
377 StateSet::Iterator stateit;
383 throw Exception(name,
"MergeStateAnnotation not set.", 1003);
384 if(msa->
Annotation().compare(renameString) != 0){
385 std::stringstream errstr;
386 errstr <<
"Annotation incorrect, was " << msa->
Annotation() <<
", but " << renameString <<
" was expected." << std::endl;
387 throw Exception(name, errstr.str(), 1003);
438 std::string name =
"Rpp Read Pop Push Only";
446 PopPushSet::const_iterator ppit;
447 std::vector<Idx> pop, push;
448 std::vector<Idx>::const_iterator ssit;
472 pop.front() == push.back()){
477 std::stringstream errstr;
478 errstr <<
"Transition (" << transit->X1 <<
", " << g2.
EventName(transit->Ev) <<
", " << transit->X2 <<
") with pop [";
479 for(ssit = pop.begin(); ssit != pop.end(); ssit++){
482 errstr <<
"] and push [";
483 for(ssit = push.begin(); ssit != push.end(); ssit++){
486 errstr <<
"] was neither read nor pop nor push." << std::endl;
487 throw Exception(name, errstr.str(), 1003);
501 std::string name =
"Nda Active Passive";
510 std::stringstream errstr;
511 errstr <<
"Number of states incorrect, was" << g2.
States().Size() <<
", but " << 2*g1.
States().Size() <<
" was expected." << std::endl;
512 throw Exception(name, errstr.str(), 1003);
515 StateSet::Iterator stateit;
524 throw Exception(name,
"MergeStateAnnotation not set.", 1003);
529 else if(msa->
Annotation().compare(
"passive") == 0){
533 std::stringstream errstr;
534 errstr <<
"Annotation incorrect, was " << msa->
Annotation() <<
", but either active or passive was expected." << std::endl;
535 throw Exception(name, errstr.str(), 1003);
538 if(active != passive){
539 std::stringstream errstr;
540 errstr <<
"There were " << active <<
" active states and " << passive <<
" passive states, but equal numbers were expected." << std::endl;
541 throw Exception(name, errstr.str(), 1003);
554 std::string name =
"Nda Transitions";
561 std::set<std::pair<Idx,Idx> > expectedTransitions;
562 expectedTransitions.insert(std::make_pair(1,3));
563 expectedTransitions.insert(std::make_pair(1,5));
564 expectedTransitions.insert(std::make_pair(2,3));
565 expectedTransitions.insert(std::make_pair(2,6));
566 expectedTransitions.insert(std::make_pair(3,8));
567 expectedTransitions.insert(std::make_pair(4,8));
568 expectedTransitions.insert(std::make_pair(5,3));
569 expectedTransitions.insert(std::make_pair(6,4));
570 expectedTransitions.insert(std::make_pair(7,6));
571 expectedTransitions.insert(std::make_pair(8,6));
577 if(expectedTransitions.erase(std::make_pair(transit->X1, transit->X2)) == 0){
578 std::stringstream errstr;
579 errstr <<
"Transition from state " << transit->X1 <<
" to state " << transit->X2 <<
" found, but was not expected." << std::endl;
580 throw Exception(name, errstr.str(), 1003);
584 if(expectedTransitions.size() != 0){
585 std::stringstream errstr;
586 errstr <<
"Not all expected transitions were found." << std::endl;
587 throw Exception(name, errstr.str(), 1003);