diag_2_languagediagnosis.cppGo 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 |