pev_2_verify.cpp
Go to the documentation of this file.
1 // @file pev_3_verify.cpp verification with std synchronous marking
2 
3 // 1) generate models via "pev_cbs_setup.lua"
4 // 2) run this executable
5 
6 
7 #include "libfaudes.h"
8 
9 using namespace faudes;
10 
11 
12 
13 // main
14 int main(int argc, char* argv[]) {
15 
16  // read number of conveyor belts from command line
17  // (defaults to 5, needs to match models prepared by pev_cbs_setup.lua)
18  int count=0;
19  if(argc==2) count=atoi(argv[1]);
20  if(count==0) count=5;
21  std::cout<<"configured for "<<count<<" conveyor belts" << std::endl;
22 
23  // prepare result
24  ConsoleOut::G()->Verb(1);
25  GeneratorVector gvoi;
26  gvoi.Clear();
27  EventPriorities prios;
28 
29  // read models
30  gvoi.Append(Generator("tmp_pev_cbs_src.gen"));
31  for(int i = 1;i<=count;i++){
32  gvoi.Append(Generator("tmp_pev_cbs_"+ToStringInteger(i)+"_cl.gen"));
33  }
34  gvoi.Append(Generator("tmp_pev_cbs_snk.gen"));
35 
36  // read priorities
37  prios.Read("tmp_pev_cbs_prios.alph");
38 
39  // do compositional verification
40  std::cout<<"starting compositional verification" << std::endl;
41  auto start = std::clock();
42  bool isnc = IsPNonblocking(gvoi,prios);
43  std::cout<<"duration in seconds: "<<ToStringFloat((std::clock()-start)/(double) CLOCKS_PER_SEC)<<std::endl;
44  if(isnc)
45  std::cout<<"p-nonconflicting test passed"<<std::endl;
46  else
47  std::cout<<"p-nonconflicting test failed"<<std::endl;
48 
49  // do monolitic verification
50  if(count<6) {
51  std::cout<<"starting monolitic verification" << std::endl;
52  start = std::clock();
53  Generator gall;
54  gall.StateNamesEnabled(false);
55  ParallelNB(gvoi,gall);
56  ShapePriorities(gall,prios);
57  isnc = IsNonblocking(gall);
58  std::cout<<"duration in seconds: "<<ToStringFloat((std::clock()-start)/(double) CLOCKS_PER_SEC)<<std::endl;
59  if(isnc)
60  std::cout<<"p-nonconflicting test passed"<<std::endl;
61  else
62  std::cout<<"p-nonconflicting test failed"<<std::endl;
63  }
64 
65  return 0;
66 
67 
68 }
static ConsoleOut * G(void)
Definition: cfl_utils.cpp:431
void Verb(int verb)
Definition: cfl_utils.h:342
virtual void Append(const Type &rElem)
virtual void Clear(void)
bool StateNamesEnabled(void) const
vGenerator Generator
void ShapePriorities(vGenerator &rGen, const EventPriorities &rPrios)
bool IsPNonblocking(const GeneratorVector &rGvec, const EventPriorities &rPrios)
void ParallelNB(const GeneratorVector &rGenVec, Generator &rResGen)
bool IsNonblocking(const GeneratorVector &rGvec)
std::string ToStringFloat(Float number)
Definition: cfl_utils.cpp:64
std::string ToStringInteger(Int number)
Definition: cfl_utils.cpp:43
int main(int argc, char *argv[])

libFAUDES 2.33b --- 2025.05.07 --- c++ api documentaion by doxygen