diag_2_languagediagnosis.cpp

Go to the documentation of this file.
00001 /** @file diag_2_languagediagnosis.cpp
00002 Illustrate diagnosability with respect to a specification language. 
00003 @ingroup Tutorials 
00004 @include diag_2_languagediagnosis.cpp
00005 */
00006 
00007 #include "libfaudes.h"
00008 
00009 using namespace faudes;
00010 
00011 
00012 int main(void) {
00013 
00014   // **********************************************************************
00015   //
00016   // Language-Diagnosability Verification 
00017   //
00018   
00019   // Declare common variables
00020   System gen, specGen;
00021   EventSet highEvents;
00022   Diagnoser diagnoser;
00023   std::string reportString;
00024   
00025   // Report to console
00026   std::cout << "################################\n";
00027   std::cout << "# languag-diagnosability, system_2_language, specifiation_2_language \n";
00028   std::cout << "# a) read data \n";
00029   
00030   // Read input generators for plant and specification
00031   gen.Read("data/diag_system_2_language.gen");
00032   specGen.Read("data/diag_specification_2_language.gen"); 
00033 
00034   // Write input generator to gen file for html docu
00035   gen.Write("tmp_diag_system_2_language.gen"); 
00036   specGen.Write("tmp_diag_specification_2_language.gen");
00037 
00038   // Report to console
00039   std::cout << "run language-diagnosability test (expect result FAIL)\n";
00040   
00041   // Test generator gen for diagnosability with respect to failure partition failureTypes
00042   bool isdiag = IsLanguageDiagnosable(gen,specGen,reportString);
00043   if(isdiag){
00044     std::cout << "System is diagnosable." << std::endl;
00045   } 
00046   else {
00047     std::cout << "System is not diagnosable." << std::endl;
00048     std::cout << reportString << std::endl;
00049   }
00050 
00051   // Record test case
00052   FAUDES_TEST_DUMP("test lang diag",isdiag);
00053 
00054   // **********************************************************************
00055   //
00056   // Language-Diagnoser Computation 
00057   //
00058 
00059   // Report to console
00060   std::cout << "# language-diagnoser, system_2_language, specifiation_2_language \n";
00061 
00062   // Synthesis
00063   LanguageDiagnoser(gen,specGen,diagnoser);
00064 
00065   // Write diagnoser to gen file for html docu
00066   diagnoser.Write("tmp_diag_diagnoser_2.gen");
00067   
00068   // Record test case
00069   FAUDES_TEST_DUMP("test lang diag",diagnoser);
00070 
00071   // **********************************************************************
00072   //
00073   // Abstraction-based Diagnosis - Loop-Preserving Observer
00074   //
00075 
00076   // Report to console
00077   std::cout << "################################\n";
00078   std::cout << "# language-diagnoser, abstraction based diagnosis\n";
00079 
00080   // Read input generator and abstraction alphabet
00081   gen.Read("data/diag_system_2_abstraction_fails.gen");
00082   highEvents.Read("data/diag_abstrAlph_2_abstraction_fails.alph","Alphabet"); 
00083 
00084   // Write input generator to gen file for html docu
00085   gen.Write("tmp_diag_system_2_abstraction_fails.gen");
00086 
00087   // Test
00088   std::cout << "# test loop-preserving observer property (expect FAIL)\n";
00089   bool islpo = IsLoopPreservingObserver(gen,highEvents);
00090   if(islpo){
00091     std::cout << "Abstraction is loop-preserving observer." << std::endl;
00092   } 
00093   else {
00094     std::cout << "Abstraction is not a loop-preserving observer." << std::endl;
00095   }
00096 
00097   std::cout << "################################\n";
00098   std::cout << "# compute loop-preserving observer, system_2_abstraction_fails \n"; 
00099   EventSet highAlph;
00100   LoopPreservingObserver(gen,highEvents,highAlph);
00101   std::cout << "# Abstraction Alphabet \n"; 
00102   highAlph.Write();  
00103 
00104   // Record test case
00105   FAUDES_TEST_DUMP("observer fail",islpo);
00106   FAUDES_TEST_DUMP("observer pass",highAlph);
00107 
00108   return 0;
00109 }

libFAUDES 2.23h --- 2014.04.03 --- c++ api documentaion by doxygen