2011CaoTme6: Main.cpp

File Main.cpp, 1.9 KB (added by jpc, 13 years ago)

C++ Module: Programme de Test.

Line 
1
2#include  <iostream>
3#include  "EbmVar.h"
4#include  "EbmExpr.h"
5using namespace std;
6
7
8void  printTruthTable ( Ebm* e )
9{
10  if ( e == NULL ) {
11    cerr << "[ERROR] Argument Ebm* musn't be NULL." << endl;
12    return;
13  }
14
15  cout << "  Truth Table of:\n    " << e << endl;
16  cout << "    Support is: "; e->support(cout); cout << endl;
17
18  const set<EbmVar*>& support = e->support();
19
20  cout << "    ";
21  for ( set<EbmVar*>::const_iterator ivar=support.begin() ; ivar != support.end() ; ++ivar )
22    cout << (*ivar)->getName();
23  cout << " | e" << endl;
24
25  unsigned int tableSize = 2 << (support.size()-1);
26  for ( unsigned int entries=0 ; entries < tableSize ; ++entries ) {
27    cout << "    ";
28    size_t i=support.size()-1;
29    for ( set<EbmVar*>::const_iterator ivar=support.begin() ; ivar != support.end() ; ++ivar, --i ) {
30      unsigned int entry = (entries >> i) % 2;
31      (*ivar)->setValue( entry );
32      cout << entry;
33    }
34    cout << " | " << e->eval() << endl;
35  }
36}
37
38
39int main ( int argc, char* argv[] )
40{
41  Ebm*  a  = EbmVar::create ( "a" );
42  Ebm*  b  = EbmVar::create ( "b" );
43  Ebm*  c  = EbmVar::create ( "c" );
44
45  Ebm* na = EbmExpr::Not ( a );
46  Ebm* nb = EbmExpr::Not ( b );
47  Ebm* nc = EbmExpr::Not ( c );
48
49  Ebm* e0 = EbmExpr::And ( a,  b,  c );
50  Ebm* e1 = EbmExpr::And ( a,  b, nc );
51  Ebm* e2 = EbmExpr::And ( a, nb,  c );
52  Ebm* e3 = EbmExpr::And (na,  b,  c );
53  Ebm* e4 = EbmExpr::Or  ( e0, e1, e2, e3 );
54
55  printTruthTable(e4);
56
57  Ebm* e5 = Ebm::parse("(a.b)+(a.c)+(b.c)");
58  printTruthTable(e5);
59
60#if 0
61  cout << "e10 = " << Ebm::parse ( "(a . b . c) + (a . b . c') + (a . b' . c) + (a' .b . c)" ) << endl;
62  cout << "e11 = " << Ebm::parse ( "(x1.x2) + (x1.x3)" ) << endl;
63  cout << "e12 = " << Ebm::parse ( "((var1 + var2).var3 ) + var4" ) << endl;
64  cout << "e13 = " << Ebm::parse ( "(a . b)'" ) << endl;
65  cout << "e13 = " << Ebm::parse ( "a'" ) << endl;
66#endif
67
68// This is it!
69  return 0;
70}