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");
 
  155   Generator boolean_g1(
"data/boolean_g1.gen");
 
  156   Generator boolean_g2(
"data/boolean_g2.gen");
 
  157   Generator lequal_g1(
"data/lequal_g1.gen");
 
  158   Generator lequal_g2(
"data/lequal_g2.gen");
 
  171   Generator boolean_complement_g1=boolean_g1; 
 
  174   Generator boolean_complement2_g1=boolean_complement_g1;
 
  178   boolean_g1.
Write(
"tmp_boolean_g1.gen");
 
  179   boolean_g2.
Write(
"tmp_boolean_g2.gen");
 
  180   boolean_union.
Write(
"tmp_union_g1g2.gen");
 
  181   boolean_intersection.
Write(
"tmp_intersection_g1g2.gen");
 
  182   boolean_complement_g1.
Write(
"tmp_complement_g1.gen");
 
  183   boolean_complement2_g1.
Write(
"tmp_complement2_g1.gen");
 
  186   std::cout << 
"################################\n";
 
  187   std::cout << 
"# boolean language operations\n";
 
  189   boolean_intersection.
DWrite();
 
  190   boolean_complement_g1.
DWrite();
 
  191   std::cout << 
"################################\n";
 
  194   std::cout << 
"################################\n";
 
  195   std::cout << 
"# boolean language operations\n";
 
  197     std::cout << 
"Lm(g1) <= Lm(g1) v Lm(g2): OK\n";
 
  199     std::cout << 
"Lm(g1) <= Lm(g1) v Lm(g2): ERR\n";
 
  201     std::cout << 
"Lm(g1) ^ ~Lm(g1) = empty: OK\n";
 
  203     std::cout << 
"(Lm(g1) v Lm(g2)) ^ ~(Lm(g1) v Lm(g2)) != empty: ERR\n";
 
  205     std::cout << 
"Lm(g1) = ~~Lm(g1) : OK\n";
 
  207     std::cout << 
"Lm(g1) != ~~Lm(g1) : ERR\n";
 
  208   std::cout << 
"################################\n";
 
  211   std::cout << 
"################################\n";
 
  212   std::cout << 
"# boolean language operations for empty Lm(g1)\n";
 
  214     std::cout << 
"Lm(g1) <= Lm(g2): OK\n";
 
  216     std::cout << 
"Lm(g1) <= Lm(g2): ERR\n";
 
  218     std::cout << 
"Lm(g2) <= Lm(g1): ERR\n";
 
  220     std::cout << 
"~(Lm(g2) <= Lm(g1)): OK\n";
 
  223     std::cout << 
"Lm(g1) == Lm(g2): ERR\n";
 
  225     std::cout << 
"Lm(g1) != Lm(g2): OK\n";
 
  240   Generator difference_g1(
"data/difference_g1.gen");
 
  241   difference_g1.
Write(
"tmp_difference_g1.gen");
 
  243   Generator difference_g2(
"data/difference_g2.gen");
 
  244   difference_g2.
Write(
"tmp_difference_g2.gen");
 
  250   difference_g1minusg2.
Write(
"tmp_difference_g1minusg2.gen");
 
  253   std::cout << 
"################################\n";
 
  254   std::cout << 
"# language difference Lm(g1)-Lm(g2) \n";
 
  255   difference_g1minusg2.
DWrite();
 
  256   std::cout << 
"################################\n";
 
  268   Generator automaton_g(
"data/automaton_g.gen");
 
  269   automaton_g.
Write(
"tmp_automaton_g.gen");
 
  273   automaton_g.
Write(
"tmp_automaton_gRes.gen");
 
  276   std::cout << 
"################################\n";
 
  277   std::cout << 
"# automaton from generator \n";
 
  279   std::cout << 
"################################\n";
 
  291   Generator concat_g1(
"data/concat_g1.gen");
 
  292   Generator concat_g2(
"data/concat_g2.gen");
 
  293   Generator concat_g3(
"data/concat_g3.gen");
 
  294   Generator concat_g4(
"data/concat_g4.gen");
 
  295   Generator concat_g5(
"data/concat_g5.gen");
 
  296   Generator concat_g6(
"data/concat_g6.gen");
 
  297   concat_g1.
Write(
"tmp_concat_g1.gen");
 
  298   concat_g2.
Write(
"tmp_concat_g2.gen");
 
  299   concat_g3.
Write(
"tmp_concat_g3.gen");
 
  300   concat_g4.
Write(
"tmp_concat_g4.gen");
 
  301   concat_g5.
Write(
"tmp_concat_g5.gen");
 
  302   concat_g6.
Write(
"tmp_concat_g6.gen");
 
  306   std::cout << 
"################################\n";
 
  307   std::cout << 
"# language concatenation\n";
 
  311   concat.
Write(
"tmp_concat_g1g3.gen");
 
  314   concat.
Write(
"tmp_concat_g1g4.gen");
 
  317   concat.
Write(
"tmp_concat_g2g3.gen");
 
  320   concat.
Write(
"tmp_concat_g2g4.gen");
 
  323   concat.
Write(
"tmp_concat_g5g6.gen");
 
  325   std::cout << 
"################################\n";
 
  337   languages_alphabet.
Insert(
"a");
 
  338   languages_alphabet.
Insert(
"b");
 
  345   languages_g.
Write(
"tmp_languagesFull_result.gen");
 
  348   std::cout << 
"################################\n";
 
  349   std::cout << 
"# full language \n";
 
  354   languages_g.
Write(
"tmp_languagesAlphabet_result.gen");
 
  355   std::cout << 
"# alphabet language \n";
 
  360   languages_g.
Write(
"tmp_languagesEmptyString_result.gen");
 
  361   std::cout << 
"# empty string language \n";
 
  366   languages_g.
Write(
"tmp_languagesEmpty_result.gen");
 
  367   std::cout << 
"# empty language \n";
 
  369   std::cout << 
"################################\n";
 
  379   Generator kleene_g1(
"data/kleene_g1.gen");
 
  380   kleene_g1.
Write(
"tmp_kleene_g1.gen");
 
  385   kleene_g1.
Write(
"tmp_kleene_g1Res.gen");
 
  388   std::cout << 
"################################\n";
 
  389   std::cout << 
"# Kleene closure \n";
 
  391   std::cout << 
"################################\n";
 
  398   Generator kleene_g2(
"data/kleene_g2.gen");
 
  399   kleene_g2.
Write(
"tmp_kleene_g2.gen");
 
  404   kleene_g2.
Write(
"tmp_kleene_g2Res.gen");
 
  407   std::cout << 
"################################\n";
 
  408   std::cout << 
"# Kleene closure \n";
 
  410   std::cout << 
"################################\n";
 
  421   Generator prefixclosure_g(
"data/prefixclosure_g.gen");
 
  422   prefixclosure_g.
Write(
"tmp_prefixclosure_g.gen");
 
  425   bool isprefixclosed_g = 
IsClosed(prefixclosure_g);
 
  429   prefixclosure_g.
Write(
"tmp_prefixclosure_gRes.gen");
 
  432   bool isprefixclosed_gRes = 
IsClosed(prefixclosure_g);
 
  435   std::cout << 
"################################\n";
 
  436   std::cout << 
"# prefix closure \n";
 
  438      std::cout << 
"# argument was prefix closed (test case error!)\n";
 
  440      std::cout << 
"# argument was not prefix closed (expected)\n";
 
  441   if(isprefixclosed_gRes) 
 
  442      std::cout << 
"# result is prefix closed (expected)\n";
 
  444      std::cout << 
"# result is not prefix closed (test case error!)\n";
 
  446   std::cout << 
"################################\n";
 
  458   Generator selfloop_g(
"data/selfloop_g.gen");
 
  459   selfloop_g.
Write(
"tmp_selfloop_g.gen");
 
  463   selfloop_alphabet.
Insert(
"e");
 
  464   selfloop_alphabet.
Insert(
"f");
 
  470   SelfLoop(selfloop_gRes,selfloop_alphabet);
 
  471   selfloop_gRes.
Write(
"tmp_selfloop_gRes.gen");
 
  474   std::cout << 
"################################\n";
 
  475   std::cout << 
"# selfloop, each state \n";
 
  479   selfloop_gRes=selfloop_g;
 
  481   selfloop_gRes.
Write(
"tmp_selfloopMarked_gRes.gen");
 
  482   std::cout << 
"# selfloop, marked states \n";
 
  486   selfloop_gRes=selfloop_g;
 
  488   selfloop_gRes.
Write(
"tmp_selfloopInit_gRes.gen");
 
  489   std::cout << 
"# selfloop, init state(s) \n";
 
  491   std::cout << 
"################################\n";
 
  500   std::cout << 
"################################\n";
 
  501   std::cout << 
"# non-blocking test \n";
 
  504   std::cout << 
"# conflict equiv. abstract test 1 \n";
 
  508   nonblocking_g.
Read(
"data/noblo_gae2.gen");
 
  510   nonblocking_g.
Write();
 
  520   nonblocking_gv.
PushBack(
"data/noblo_g2.gen");
 
  521   nonblocking_gv.
PushBack(
"data/noblo_g3.gen");
 
  522   nonblocking_gv.
PushBack(
"data/noblo_g4.gen");
 
  523   nonblocking_gv.
PushBack(
"data/noblo_g5.gen");
 
  525   std::cout << 
"# non-blocking exec test 1\n";
 
  526   bool nonblocking_ok1;
 
  529      std::cout << 
"# non-blocking test: passed (expected)\n";
 
  531      std::cout << 
"# non-blocking test: failed (test case error!)\n";
 
  536   nonblocking_gv.
Clear();
 
  537   nonblocking_gv.
PushBack(
"data/noblo_g5.gen");
 
  538   nonblocking_gv.
PushBack(
"data/noblo_g6.gen");
 
  539   nonblocking_gv.
PushBack(
"data/noblo_g7.gen");
 
  540   nonblocking_gv.
PushBack(
"data/noblo_g8.gen");
 
  541   nonblocking_gv.
PushBack(
"data/noblo_g9.gen");
 
  543   std::cout << 
"# non-blocking exec test 2\n";
 
  544   bool nonblocking_ok2;
 
  547      std::cout << 
"# non-blocking test: passed (expected)\n";
 
  549      std::cout << 
"# non-blocking test: failed (test case error!)\n";
 
  554   nonblocking_gv.
Clear();
 
  555   nonblocking_gv.
PushBack(
"data/noblo_g3.gen");
 
  556   nonblocking_gv.
PushBack(
"data/noblo_g4.gen");
 
  557   nonblocking_gv.
PushBack(
"data/noblo_g5.gen");
 
  558   nonblocking_gv.
PushBack(
"data/noblo_g6.gen");
 
  559   nonblocking_gv.
PushBack(
"data/noblo_g7.gen");
 
  561   std::cout << 
"# non-blocking exec test 3\n";
 
  562   bool nonblocking_ok3;
 
  565      std::cout << 
"# non-blocking test: passed (test case error!)\n";
 
  567      std::cout << 
"# non-blocking test: failed (expected)\n";
 
  572   nonblocking_gv.
Clear();
 
  573   nonblocking_gv.
PushBack(
"data/noblo_g1.gen");
 
  574   nonblocking_gv.
PushBack(
"data/noblo_g3.gen");
 
  575   nonblocking_gv.
PushBack(
"data/noblo_g5.gen");
 
  576   nonblocking_gv.
PushBack(
"data/noblo_g7.gen");
 
  578   std::cout << 
"# non-blocking exec test 4\n";
 
  579   bool nonblocking_ok4;
 
  582     std::cout << 
"# non-blocking test: passed (test case error!)\n";
 
  584     std::cout << 
"# non-blocking test: failed (expected)\n";
 
  589   nonblocking_gv.
Clear();
 
  590   nonblocking_gv.
PushBack(
"data/noblo_g1.gen");
 
  591   nonblocking_gv.
PushBack(
"data/noblo_g2.gen");
 
  592   nonblocking_gv.
PushBack(
"data/noblo_g3.gen");
 
  593   nonblocking_gv.
PushBack(
"data/noblo_g6.gen");
 
  594   nonblocking_gv.
PushBack(
"data/noblo_g7.gen");
 
  596   std::cout << 
"# non-blocking exec test 5\n";
 
  597   bool nonblocking_ok5;
 
  600      std::cout << 
"# non-blocking test: passed (expected)\n";
 
  602      std::cout << 
"# non-blocking test: failed (test case error!)\n";
 
  605   nonblocking_gv.
Clear();
 
  606   nonblocking_gv.
PushBack(
"data/noblo_g1.gen");
 
  607   nonblocking_gv.
PushBack(
"data/noblo_g2.gen");
 
  608   nonblocking_gv.
PushBack(
"data/noblo_g3.gen");
 
  609   nonblocking_gv.
PushBack(
"data/noblo_g4.gen");
 
  610   nonblocking_gv.
PushBack(
"data/noblo_g5.gen");
 
  611   nonblocking_gv.
PushBack(
"data/noblo_g6.gen");
 
  612   nonblocking_gv.
PushBack(
"data/noblo_g7.gen");
 
  614   std::cout << 
"# non-blocking exec test 6\n";
 
  615   bool nonblocking_ok6;
 
  618      std::cout << 
"# non-blocking test: passed (expected)\n";
 
  620      std::cout << 
"# non-blocking test: failed (test case error!)\n";
 
  623   nonblocking_gv.
Clear();
 
  624   nonblocking_gv.
PushBack(
"data/noblo_g1.gen");
 
  625   nonblocking_gv.
PushBack(
"data/noblo_g2.gen");
 
  626   nonblocking_gv.
PushBack(
"data/noblo_g3.gen");
 
  627   nonblocking_gv.
PushBack(
"data/noblo_g4.gen");
 
  628   nonblocking_gv.
PushBack(
"data/noblo_g5.gen");
 
  629   nonblocking_gv.
PushBack(
"data/noblo_g6.gen");
 
  631   std::cout << 
"# non-blocking exec test 7\n";
 
  632   bool nonblocking_ok7;
 
  635      std::cout << 
"# non-blocking test: passed (expected)\n";
 
  637      std::cout << 
"# non-blocking test: failed (test case error!)\n";
 
  640   nonblocking_gv.
Clear();
 
  641   nonblocking_gv.
PushBack(
"data/noblo_g2.gen");
 
  642   nonblocking_gv.
PushBack(
"data/noblo_g4.gen");
 
  643   nonblocking_gv.
PushBack(
"data/noblo_g6.gen");
 
  644   nonblocking_gv.
PushBack(
"data/noblo_g8.gen");
 
  646   std::cout << 
"# non-blocking exec test 8\n";
 
  647   bool nonblocking_ok8;
 
  650      std::cout << 
"# non-blocking test: passed (expected)\n";
 
  652      std::cout << 
"# non-blocking test: failed (test case error!)\n";
 
  656   nonblocking_gv.
Clear();
 
  657   nonblocking_gv.
PushBack(
"data/noblo_yt1.gen");
 
  658   nonblocking_gv.
PushBack(
"data/noblo_yt2.gen");
 
  661   std::cout << 
"# non-blocking exec test 9a\n";
 
  663   Parallel(nonblocking_gv.
At(0),nonblocking_gv.
At(1),parallel12);
 
  664   bool nonblocking_ok9;
 
  667     std::cout << 
"# non-blocking test: passed (test case error!)\n";
 
  669     std::cout << 
"# non-blocking test: failed (expected)\n";
 
  674   std::cout << 
"# non-blocking exec test 9b\n";
 
  677      std::cout << 
"# non-blocking test: passed (test case error!)\n";
 
  679      std::cout << 
"# non-blocking test: failed (expected)\n";
 
  687   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
 
bool IsClosed(const Generator &rGen)
 
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)
 
Idx Automaton(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 AlphabetLanguage(const EventSet &rAlphabet, Generator &rResGen)
 
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)
 
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)