|
|
Go to the documentation of this file.
22 std::string& rReportStr)
24 FD_DF( "IsHioConstraintForm("<< rHioConstraint. Name() << ",...)");
31 rErrEvSet. Name( "rErrEvSet");
34 rErrTrSet. Name( "rErrTrSet");
37 rErrStSet. Name( "rErrStSet");
46 bool finalResult = true;
48 bool localResult = true;
59 EventSet::Iterator evit;
60 StateSet::Iterator sit;
64 rReportStr.append( "#########################################################\n");
65 rReportStr.append( "########## IsHioConstraintForm("+rHioConstraint. Name()+ ",...) - test results:\n");
70 rReportStr.append( "##### fail: generator is not deterministic!\n");
71 if(initStates. Size()>1) {
72 rErrStSet = initStates;
73 rReportStr.append( "##### (amongst others, there is more than one initial state)\n");
78 rReportStr.append( "#####\n");
84 rReportStr.append( "########## Condition (i):\n");
88 rReportStr.append( "##### fail: empty Y alphabet.\n");
93 rReportStr.append( "##### fail: empty U alphabet.\n");
103 rReportStr.append( "##### Condition (i) passed.\n");
104 rReportStr.append( "#####\n");
110 rReportStr.append( "########## Condition (ii):\n");
113 for(sit = accessibleStates. Begin(); sit != accessibleStates. End(); ++sit) {
117 bool goodState = true;
121 if(activeEv. Empty()) {
128 evit = activeEv. Begin();
129 isY = rHioConstraint. IsY(*evit);
130 isU = rHioConstraint. IsU(*evit);
132 for(; evit != activeEv. End(); evit++) {
133 if( (isY && !rHioConstraint. IsY(*evit)) ||
134 (isU && !rHioConstraint. IsU(*evit))) {
147 if(!goodState) continue;
152 rHioConstraint. SetQY(*sit);
156 rHioConstraint. SetQU(*sit);
161 if(localResult) rReportStr.append( "##### Condition (ii) passed.\n");
164 rReportStr.append( "##### fail: found states with undecidable attribute:\n");
165 rReportStr.append(locErrStSet. ToString()+ "\n");
167 rReportStr.append( "##### Condition (ii) failed.\n");
168 rReportStr.append( "########## Termination due to crucial failure. ##########\n");
169 rReportStr.append( "###################### No success. ######################\n");
170 rReportStr.append( "#########################################################\n");
173 rReportStr.append( "#####\n");
179 rReportStr.append( "########## Condition (iii):\n");
182 if(!(initStates <= rQY)) {
183 rReportStr.append( "##### fail: some init state(s) is (are) not a QY-state:\n");
184 locErrStSet=initStates-rQY;
185 rReportStr.append(locErrStSet. ToString()+ "\n");
191 if(localResult) rReportStr.append( "##### Condition (iii) passed.\n");
192 else rReportStr.append( "##### Condition (iii) failed.\n");
193 rReportStr.append( "#####\n");
200 rReportStr.append( "########## Condition (iv):\n");
203 for(sit = rQY. Begin(); sit != rQY. End(); ++sit) {
206 if( (rHioConstraint. IsY(tit->Ev) && !rQU. Exists(tit->X2)) ) {
216 if(localResult) rReportStr.append( "##### Condition (iv) passed.\n");
218 rReportStr.append( "##### fail: found Y-transitions leading to wrong states:\n");
219 rReportStr.append(locErrTrSet. ToString()+ "\n");
221 rReportStr.append( "##### Condition (iv) failed.\n");
223 rReportStr.append( "#####\n");
229 rReportStr.append( "########## Condition (v):\n");
232 for(sit = rQU. Begin(); sit != rQU. End(); ++sit) {
234 if(!rQY. Exists(tit->X2)) {
243 if(localResult) rReportStr.append( "##### Condition (v) passed.\n");
245 rReportStr.append( "##### fail: found U-transitions leading to wrong states:\n");
246 rReportStr.append(locErrTrSet. ToString()+ "\n");
248 rReportStr.append( "##### Condition (v) failed.\n");
250 rReportStr.append( "#####\n");
256 rReportStr.append( "########## Condition (vi):\n");
259 for(sit = rQY. Begin(); sit != rQY. End(); ++sit) {
269 if(localResult) rReportStr.append( "##### Condition (vi) passed.\n");
271 rReportStr.append( "##### fail: found QY-states with inactive Y-events:\n");
272 rReportStr.append(locErrStSet. ToString()+ "\n");
274 rReportStr.append( "##### Condition (vi) failed.\n");
276 rReportStr.append( "#####\n");
282 rReportStr.append( "########## Condition (vii):\n");
285 if(!deadEnds. Empty()) {
289 rReportStr.append( "##### fail: found dead ends:\n");
290 rReportStr.append(deadEnds. ToString()+ "\n");
292 rReportStr.append( "##### Condition (vii) failed.\n");
294 rReportStr.append( "##### Condition (vii) passed.\n");
300 rReportStr.append( "########## Condition (viii):\n");
303 if(!(accessibleStates<=rHioConstraint. MarkedStates())) {
308 if(localResult) rReportStr.append( "##### Condition (viii) passed.\n");
310 rReportStr.append( "##### fail: not all accessible states are marked:\n");
311 locErrStSet=accessibleStates - rHioConstraint. MarkedStates();
313 rReportStr.append(locErrStSet. ToString()+ "\n");
315 rReportStr.append( "##### Condition (viii) failed.\n");
317 rReportStr.append( "#####\n");
322 rReportStr.append( "########## Condition (ix):\n");
327 rReportStr.append( "##### warning: non-accessible states have been removed.\n");
328 rReportStr.append( "##### Condition (ix) repaired.\n");
330 else rReportStr.append( "##### Condition (ix) passed.\n");
337 rReportStr.append( "##################### Final result: #####################\n");
339 rReportStr.append( "############ Generator is in HioConstraintForm. ###########\n");
340 rReportStr.append( "#########################################################\n");
344 rReportStr.append( "############## Generator is NOT in HioConstraintForm. ##############\n");
345 rReportStr.append( "#########################################################\n");
359 return IsHioConstraintForm(rHioConstraint, rQY, rQU, rErrEvSet, rErrTrSet, rErrStSet,rReportStr);
368 std::string rReportStr;
370 return IsHioConstraintForm(rHioConstraint, rQY, rQU, rErrEvSet, rErrTrSet, rErrStSet, rReportStr);
const std::string & Name(void) const
bool IsU(Idx index) const
bool IsY(Idx index) const
EventSet UEvents(void) const
EventSet YEvents(void) const
bool Insert(const Transition &rTransition)
std::string ToString(const std::string &rLabel="", const Type *pContext=0) const
const StateSet & MarkedStates(void) const
EventSet ActiveEventSet(Idx x1) const
const StateSet & InitStates(void) const
TransSet::Iterator TransRelBegin(void) const
bool IsAccessible(void) const
StateSet AccessibleSet(void) const
TransSet::Iterator TransRelEnd(void) const
bool IsDeterministic(void) const
bool Exists(const T &rElem) const
virtual void InsertSet(const TBaseSet &rOtherSet)
Iterator Begin(void) const
void HioStatePartition(HioConstraint &rHioConstraint)
bool IsHioConstraintForm(HioConstraint &rHioConstraint, StateSet &rQY, StateSet &rQU, EventSet &rErrEvSet, TransSet &rErrTrSet, StateSet &rErrStSet, std::string &rReportStr)
libFAUDES 2.33k
--- 2025.09.16
--- c++ api documentaion by doxygen
|