39 Generator deter_nondet(
"data/deterministic_nondet.gen");
42 deter_det.
Write(
"tmp_deterministic_det.gen");
43 deter_nondet.
Write(
"tmp_deterministic_nondet.gen");
46 std::cout <<
"################################\n";
47 std::cout <<
"# deterministic generator \n";
49 std::cout <<
"################################\n";
62 Generator minimal_nonmin(
"data/minimal_nonmin.gen");
64 StateMin(minimal_nonmin, minimal_min);
65 minimal_nonmin.
Write(
"tmp_minimal_nonmin.gen");
66 minimal_min.
Write(
"tmp_minimal_min.gen");
69 std::cout <<
"################################\n";
70 std::cout <<
"# minimal generator \n";
72 std::cout <<
"################################\n";
84 Generator project_g(
"data/project_g.gen");
91 Project(project_g, alph_proj, project_prog);
92 project_g.
Write(
"tmp_project_g.gen");
97 StateMin(project_prog,project_prog_min);
98 project_prog_min.
Write(
"tmp_project_prog.gen");
101 std::cout <<
"################################\n";
102 std::cout <<
"# projected generator \n";
103 project_prog_min.
DWrite();
104 std::cout <<
"################################\n";
116 Generator parallel_g1(
"data/parallel_g1.gen");
117 Generator parallel_g2(
"data/parallel_g2.gen");
121 Parallel(parallel_g1, parallel_g2, parallel_g1g2);
124 parallel_g1.
Write(
"tmp_parallel_g1.gen");
125 parallel_g2.
Write(
"tmp_parallel_g2.gen");
126 parallel_g1g2.
Write(
"tmp_parallel_g1g2.gen");
129 Generator parallel_m1(
"data/wparallel_g1.gen");
130 Generator parallel_m2(
"data/wparallel_g2.gen");
134 Parallel(parallel_m1, parallel_m2, parallel_m1m2);
137 parallel_m1.
Write(
"tmp_parallel_m1.gen");
138 parallel_m2.
Write(
"tmp_parallel_m2.gen");
139 parallel_m1m2.
Write(
"tmp_parallel_m1m2.gen");
142 Generator wparallel_g1(
"data/wparallel_g1.gen");
143 Generator wparallel_g2(
"data/wparallel_g2.gen");
150 wparallel_g1.
Write(
"tmp_wparallel_g1.gen");
151 wparallel_g2.
Write(
"tmp_wparallel_g2.gen");
152 wparallel_g1g2.
Write(
"tmp_wparallel_g1g2.gen");
165 Generator boolean_g1(
"data/boolean_g1.gen");
166 Generator boolean_g2(
"data/boolean_g2.gen");
167 Generator lequal_g1(
"data/lequal_g1.gen");
168 Generator lequal_g2(
"data/lequal_g2.gen");
181 Generator boolean_complement_g1=boolean_g1;
184 Generator boolean_complement2_g1=boolean_complement_g1;
188 boolean_g1.
Write(
"tmp_boolean_g1.gen");
189 boolean_g2.
Write(
"tmp_boolean_g2.gen");
190 boolean_union.
Write(
"tmp_union_g1g2.gen");
191 boolean_intersection.
Write(
"tmp_intersection_g1g2.gen");
192 boolean_complement_g1.
Write(
"tmp_complement_g1.gen");
193 boolean_complement2_g1.
Write(
"tmp_complement2_g1.gen");
196 std::cout <<
"################################\n";
197 std::cout <<
"# boolean language operations\n";
199 boolean_intersection.
DWrite();
200 boolean_complement_g1.
DWrite();
201 std::cout <<
"################################\n";
204 std::cout <<
"################################\n";
205 std::cout <<
"# boolean language operations\n";
207 std::cout <<
"Lm(g1) <= Lm(g1) v Lm(g2): OK\n";
209 std::cout <<
"Lm(g1) <= Lm(g1) v Lm(g2): ERR\n";
211 std::cout <<
"Lm(g1) ^ ~Lm(g1) = empty: OK\n";
213 std::cout <<
"(Lm(g1) v Lm(g2)) ^ ~(Lm(g1) v Lm(g2)) != empty: ERR\n";
215 std::cout <<
"Lm(g1) = ~~Lm(g1) : OK\n";
217 std::cout <<
"Lm(g1) != ~~Lm(g1) : ERR\n";
218 std::cout <<
"################################\n";
221 std::cout <<
"################################\n";
222 std::cout <<
"# boolean language operations for empty Lm(g1)\n";
224 std::cout <<
"Lm(g1) <= Lm(g2): OK\n";
226 std::cout <<
"Lm(g1) <= Lm(g2): ERR\n";
228 std::cout <<
"Lm(g2) <= Lm(g1): ERR\n";
230 std::cout <<
"~(Lm(g2) <= Lm(g1)): OK\n";
233 std::cout <<
"Lm(g1) == Lm(g2): ERR\n";
235 std::cout <<
"Lm(g1) != Lm(g2): OK\n";
250 Generator difference_g1(
"data/difference_g1.gen");
251 difference_g1.
Write(
"tmp_difference_g1.gen");
253 Generator difference_g2(
"data/difference_g2.gen");
254 difference_g2.
Write(
"tmp_difference_g2.gen");
260 difference_g1minusg2.
Write(
"tmp_difference_g1minusg2.gen");
263 std::cout <<
"################################\n";
264 std::cout <<
"# language difference Lm(g1)-Lm(g2) \n";
265 difference_g1minusg2.
DWrite();
266 std::cout <<
"################################\n";
278 Generator automaton_g(
"data/automaton_g.gen");
279 automaton_g.
Write(
"tmp_automaton_g.gen");
283 automaton_g.
Write(
"tmp_automaton_gRes.gen");
286 std::cout <<
"################################\n";
287 std::cout <<
"# automaton from generator \n";
289 std::cout <<
"################################\n";
301 Generator concat_g1(
"data/concat_g1.gen");
302 Generator concat_g2(
"data/concat_g2.gen");
303 Generator concat_g3(
"data/concat_g3.gen");
304 Generator concat_g4(
"data/concat_g4.gen");
305 Generator concat_g5(
"data/concat_g5.gen");
306 Generator concat_g6(
"data/concat_g6.gen");
307 concat_g1.
Write(
"tmp_concat_g1.gen");
308 concat_g2.
Write(
"tmp_concat_g2.gen");
309 concat_g3.
Write(
"tmp_concat_g3.gen");
310 concat_g4.
Write(
"tmp_concat_g4.gen");
311 concat_g5.
Write(
"tmp_concat_g5.gen");
312 concat_g6.
Write(
"tmp_concat_g6.gen");
316 std::cout <<
"################################\n";
317 std::cout <<
"# language concatenation\n";
321 concat.
Write(
"tmp_concat_g1g3.gen");
324 concat.
Write(
"tmp_concat_g1g4.gen");
327 concat.
Write(
"tmp_concat_g2g3.gen");
330 concat.
Write(
"tmp_concat_g2g4.gen");
333 concat.
Write(
"tmp_concat_g5g6.gen");
335 std::cout <<
"################################\n";
347 languages_alphabet.
Insert(
"a");
348 languages_alphabet.
Insert(
"b");
355 languages_g.
Write(
"tmp_languagesFull_result.gen");
358 std::cout <<
"################################\n";
359 std::cout <<
"# full language \n";
364 languages_g.
Write(
"tmp_languagesAlphabet_result.gen");
365 std::cout <<
"# alphabet language \n";
370 languages_g.
Write(
"tmp_languagesEmptyString_result.gen");
371 std::cout <<
"# empty string language \n";
376 languages_g.
Write(
"tmp_languagesEmpty_result.gen");
377 std::cout <<
"# empty language \n";
379 std::cout <<
"################################\n";
389 Generator kleene_g1(
"data/kleene_g1.gen");
390 kleene_g1.
Write(
"tmp_kleene_g1.gen");
395 kleene_g1.
Write(
"tmp_kleene_g1Res.gen");
398 std::cout <<
"################################\n";
399 std::cout <<
"# Kleene closure \n";
401 std::cout <<
"################################\n";
408 Generator kleene_g2(
"data/kleene_g2.gen");
409 kleene_g2.
Write(
"tmp_kleene_g2.gen");
414 kleene_g2.
Write(
"tmp_kleene_g2Res.gen");
417 std::cout <<
"################################\n";
418 std::cout <<
"# Kleene closure \n";
420 std::cout <<
"################################\n";
431 Generator prefixclosure_g(
"data/prefixclosure_g.gen");
432 prefixclosure_g.
Write(
"tmp_prefixclosure_g.gen");
439 prefixclosure_g.
Write(
"tmp_prefixclosure_gRes.gen");
445 std::cout <<
"################################\n";
446 std::cout <<
"# prefix closure \n";
448 std::cout <<
"# argument was prefix closed (test case error!)\n";
450 std::cout <<
"# argument was not prefix closed (expected)\n";
451 if(isprefixclosed_gRes)
452 std::cout <<
"# result is prefix closed (expected)\n";
454 std::cout <<
"# result is not prefix closed (test case error!)\n";
456 std::cout <<
"################################\n";
468 Generator omegaclosure_g(
"data/omegaclosure_g.gen");
469 omegaclosure_g.
Write(
"tmp_omegaclosure_g.gen");
476 omegaclosure_g.
Write(
"tmp_omegaclosure_gRes.gen");
482 std::cout <<
"################################\n";
483 std::cout <<
"# omega closure \n";
485 std::cout <<
"# argument was omega closed (test case error!)\n";
487 std::cout <<
"# argument was not omega closed (expected)\n";
488 if(isomegaclosed_gRes)
489 std::cout <<
"# result is omega closed (expected)\n";
491 std::cout <<
"# result is not omega closed (test case error!)\n";
493 std::cout <<
"################################\n";
505 Generator selfloop_g(
"data/selfloop_g.gen");
506 selfloop_g.
Write(
"tmp_selfloop_g.gen");
510 selfloop_alphabet.
Insert(
"e");
511 selfloop_alphabet.
Insert(
"f");
517 SelfLoop(selfloop_gRes,selfloop_alphabet);
518 selfloop_gRes.
Write(
"tmp_selfloop_gRes.gen");
521 std::cout <<
"################################\n";
522 std::cout <<
"# selfloop, each state \n";
526 selfloop_gRes=selfloop_g;
528 selfloop_gRes.
Write(
"tmp_selfloopMarked_gRes.gen");
529 std::cout <<
"# selfloop, marked states \n";
533 selfloop_gRes=selfloop_g;
535 selfloop_gRes.
Write(
"tmp_selfloopInit_gRes.gen");
536 std::cout <<
"# selfloop, init state(s) \n";
538 std::cout <<
"################################\n";
547 std::cout <<
"################################\n";
548 std::cout <<
"# non-blocking test \n";
551 std::cout <<
"# conflict equiv. abstract test 1 \n";
555 nonblocking_g.
Read(
"data/noblo_gae2.gen");
557 nonblocking_g.
Write();
567 nonblocking_gv.
PushBack(
"data/noblo_g2.gen");
568 nonblocking_gv.
PushBack(
"data/noblo_g3.gen");
569 nonblocking_gv.
PushBack(
"data/noblo_g4.gen");
570 nonblocking_gv.
PushBack(
"data/noblo_g5.gen");
572 std::cout <<
"# non-blocking exec test 1\n";
573 bool nonblocking_ok1;
576 std::cout <<
"# non-blocking test: passed (expected)\n";
578 std::cout <<
"# non-blocking test: failed (test case error!)\n";
583 nonblocking_gv.
Clear();
584 nonblocking_gv.
PushBack(
"data/noblo_g5.gen");
585 nonblocking_gv.
PushBack(
"data/noblo_g6.gen");
586 nonblocking_gv.
PushBack(
"data/noblo_g7.gen");
587 nonblocking_gv.
PushBack(
"data/noblo_g8.gen");
588 nonblocking_gv.
PushBack(
"data/noblo_g9.gen");
590 std::cout <<
"# non-blocking exec test 2\n";
591 bool nonblocking_ok2;
594 std::cout <<
"# non-blocking test: passed (expected)\n";
596 std::cout <<
"# non-blocking test: failed (test case error!)\n";
601 nonblocking_gv.
Clear();
602 nonblocking_gv.
PushBack(
"data/noblo_g3.gen");
603 nonblocking_gv.
PushBack(
"data/noblo_g4.gen");
604 nonblocking_gv.
PushBack(
"data/noblo_g5.gen");
605 nonblocking_gv.
PushBack(
"data/noblo_g6.gen");
606 nonblocking_gv.
PushBack(
"data/noblo_g7.gen");
608 std::cout <<
"# non-blocking exec test 3\n";
609 bool nonblocking_ok3;
612 std::cout <<
"# non-blocking test: passed (test case error!)\n";
614 std::cout <<
"# non-blocking test: failed (expected)\n";
619 nonblocking_gv.
Clear();
620 nonblocking_gv.
PushBack(
"data/noblo_g1.gen");
621 nonblocking_gv.
PushBack(
"data/noblo_g3.gen");
622 nonblocking_gv.
PushBack(
"data/noblo_g5.gen");
623 nonblocking_gv.
PushBack(
"data/noblo_g7.gen");
625 std::cout <<
"# non-blocking exec test 4\n";
626 bool nonblocking_ok4;
629 std::cout <<
"# non-blocking test: passed (test case error!)\n";
631 std::cout <<
"# non-blocking test: failed (expected)\n";
636 nonblocking_gv.
Clear();
637 nonblocking_gv.
PushBack(
"data/noblo_g1.gen");
638 nonblocking_gv.
PushBack(
"data/noblo_g2.gen");
639 nonblocking_gv.
PushBack(
"data/noblo_g3.gen");
640 nonblocking_gv.
PushBack(
"data/noblo_g6.gen");
641 nonblocking_gv.
PushBack(
"data/noblo_g7.gen");
643 std::cout <<
"# non-blocking exec test 5\n";
644 bool nonblocking_ok5;
647 std::cout <<
"# non-blocking test: passed (expected)\n";
649 std::cout <<
"# non-blocking test: failed (test case error!)\n";
652 nonblocking_gv.
Clear();
653 nonblocking_gv.
PushBack(
"data/noblo_g1.gen");
654 nonblocking_gv.
PushBack(
"data/noblo_g2.gen");
655 nonblocking_gv.
PushBack(
"data/noblo_g3.gen");
656 nonblocking_gv.
PushBack(
"data/noblo_g4.gen");
657 nonblocking_gv.
PushBack(
"data/noblo_g5.gen");
658 nonblocking_gv.
PushBack(
"data/noblo_g6.gen");
659 nonblocking_gv.
PushBack(
"data/noblo_g7.gen");
661 std::cout <<
"# non-blocking exec test 6\n";
662 bool nonblocking_ok6;
665 std::cout <<
"# non-blocking test: passed (expected)\n";
667 std::cout <<
"# non-blocking test: failed (test case error!)\n";
670 nonblocking_gv.
Clear();
671 nonblocking_gv.
PushBack(
"data/noblo_g1.gen");
672 nonblocking_gv.
PushBack(
"data/noblo_g2.gen");
673 nonblocking_gv.
PushBack(
"data/noblo_g3.gen");
674 nonblocking_gv.
PushBack(
"data/noblo_g4.gen");
675 nonblocking_gv.
PushBack(
"data/noblo_g5.gen");
676 nonblocking_gv.
PushBack(
"data/noblo_g6.gen");
678 std::cout <<
"# non-blocking exec test 7\n";
679 bool nonblocking_ok7;
682 std::cout <<
"# non-blocking test: passed (expected)\n";
684 std::cout <<
"# non-blocking test: failed (test case error!)\n";
687 nonblocking_gv.
Clear();
688 nonblocking_gv.
PushBack(
"data/noblo_g2.gen");
689 nonblocking_gv.
PushBack(
"data/noblo_g4.gen");
690 nonblocking_gv.
PushBack(
"data/noblo_g6.gen");
691 nonblocking_gv.
PushBack(
"data/noblo_g8.gen");
693 std::cout <<
"# non-blocking exec test 8\n";
694 bool nonblocking_ok8;
697 std::cout <<
"# non-blocking test: passed (expected)\n";
699 std::cout <<
"# non-blocking test: failed (test case error!)\n";
703 nonblocking_gv.
Clear();
704 nonblocking_gv.
PushBack(
"data/noblo_yt1.gen");
705 nonblocking_gv.
PushBack(
"data/noblo_yt2.gen");
708 std::cout <<
"# non-blocking exec test 9a\n";
710 Parallel(nonblocking_gv.
At(0),nonblocking_gv.
At(1),parallel12);
711 bool nonblocking_ok9;
714 std::cout <<
"# non-blocking test: passed (test case error!)\n";
716 std::cout <<
"# non-blocking test: failed (expected)\n";
721 std::cout <<
"# non-blocking exec test 9b\n";
724 std::cout <<
"# non-blocking test: passed (test case error!)\n";
726 std::cout <<
"# non-blocking test: failed (expected)\n";
734 std::cout <<
"done.\n";
#define FAUDES_TEST_DIFF()
#define FAUDES_TEST_DUMP(mes, dat)
bool Insert(const Idx &rIndex)
virtual const T & At(const Position &pos) const
void DWrite(const Type *pContext=0) const
void Read(const std::string &rFileName, const std::string &rLabel="", const Type *pContext=0)
void Write(const Type *pContext=0) const
virtual void PushBack(const Type &rElem)
const StateSet & InitStates(void) const
StateSet BlockingStates(void) const
bool StateNamesEnabled(void) const
void ConflictEquivalentAbstraction(vGenerator &rGen, EventSet &rSilentEvents)
void StateMin(const Generator &rGen, Generator &rResGen)
void FullLanguage(const EventSet &rAlphabet, Generator &rResGen)
void LanguageUnion(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
void SelfLoop(Generator &rGen, const EventSet &rAlphabet)
bool LanguageDisjoint(const Generator &rGen1, const Generator &rGen2)
bool LanguageInclusion(const Generator &rGen1, const Generator &rGen2)
void KleeneClosure(Generator &rGen)
void PrefixClosure(Generator &rGen)
void Deterministic(const Generator &rGen, Generator &rResGen)
void Automaton(Generator &rGen, const EventSet &rAlphabet)
bool IsOmegaClosed(const Generator &rGen)
void AlphabetLanguage(const EventSet &rAlphabet, Generator &rResGen)
void OmegaParallel(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
void OmegaClosure(Generator &rGen)
void LanguageConcatenate(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
bool LanguageEquality(const Generator &rGen1, const Generator &rGen2)
void LanguageDifference(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
void LanguageIntersection(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
bool IsPrefixClosed(const Generator &rGen)
void Project(const Generator &rGen, const EventSet &rProjectAlphabet, Generator &rResGen)
void EmptyLanguage(const EventSet &rAlphabet, Generator &rResGen)
void Parallel(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
void LanguageComplement(Generator &rGen, const EventSet &rAlphabet)
void EmptyStringLanguage(const EventSet &rAlphabet, Generator &rResGen)
void KleeneClosureNonDet(Generator &rGen)
void SelfLoopMarkedStates(Generator &rGen, const EventSet &rAlphabet)
bool IsNonblocking(const GeneratorVector &rGvec)