src/test/path_test.cc
author deba
Wed, 08 Sep 2004 12:06:45 +0000
changeset 822 88226d9fe821
child 823 afba7fbbb239
permissions -rw-r--r--
The MapFactories have been removed from the code because
if we use macros then they increases only the complexity.

The pair iterators of the maps are separeted from the maps.

Some macros and comments has been changed.
     1 #include <string>
     2 #include <iostream>
     3 //#include <hugo/path.h>
     4 #include <hugo/skeletons/path.h>
     5 #include <hugo/list_graph.h>
     6 
     7 using namespace std;
     8 using namespace hugo;
     9 #ifdef SKELETON
    10 using namespace skeleton;
    11 #endif
    12 
    13 bool passed = true;
    14 
    15 void check(bool rc) {
    16   passed = passed && rc;
    17   if(!rc) {
    18     cout << "Test failed!" << endl;
    19   }
    20 }
    21 
    22 #ifdef DEBUG
    23 const bool debug = true;
    24 #else
    25 const bool debug = false;
    26 #endif
    27 
    28 
    29 int main() {
    30 
    31   try {
    32 
    33     typedef ListGraph::Node Node;
    34     typedef ListGraph::Edge Edge;
    35 
    36     ListGraph G;
    37 
    38     Node s=G.addNode();
    39     Node v1=G.addNode();
    40     Node v2=G.addNode();
    41     Node v3=G.addNode();
    42     Node v4=G.addNode();
    43     Node t=G.addNode();
    44   
    45     Edge e1 = G.addEdge(s, v1);
    46     Edge e2 = G.addEdge(s, v2);
    47     Edge e3 = G.addEdge(v1, v2);
    48     Edge e4 = G.addEdge(v2, v1);
    49     Edge e5 = G.addEdge(v1, v3);
    50     Edge e6 = G.addEdge(v3, v2);
    51     Edge e7 = G.addEdge(v2, v4);
    52     Edge e8 = G.addEdge(v4, v3);
    53     Edge e9 = G.addEdge(v3, t);
    54     Edge e10 = G.addEdge(v4, t);
    55 
    56 #ifdef DEBUG
    57     bool rc;
    58 #endif
    59 
    60     {
    61       cout << "\n\n\nDirPath tesztelese...\n";
    62 
    63 
    64       cout << "Ures path letrehozasa" << endl;
    65 #ifdef SKELETON
    66       typedef Path <ListGraph> DPath;
    67 #else
    68       typedef DirPath<ListGraph> DPath;
    69 #endif
    70       DPath P(G);
    71 
    72       cout << "P.length() == " << P.length() << endl;
    73       check(P.length() == 0);
    74 
    75 #ifdef SKELETON
    76       cout << "P.tail() valid? " << (P.tail()!=INVALID) << endl;
    77       check(! (P.tail()!=INVALID));
    78 #else
    79       cout << "P.tail() valid? " << (P.from()!=INVALID) << endl;
    80       check(! (P.to()!=INVALID));
    81 #endif
    82       {
    83 	cout << "Builder objektum letrehozasa" << endl;
    84 	DPath::Builder B(P);
    85 
    86 	cout << "Hozzaadunk az elejehez ket elet..." << endl;
    87 	B.pushFront(e6);
    88 	B.pushFront(e5);
    89 	cout << "P.length() == " << P.length() << endl;
    90 	check(P.length() == 0);
    91       
    92 	cout << "Commitolunk..." << endl;
    93 	B.commit();
    94 
    95 	cout << "P.length() == " << P.length() << endl;
    96 	check(P.length() == 2);
    97 
    98 #ifdef SKELETON
    99 	cout << "P.tail() valid? " << (P.tail()!=INVALID) << endl;
   100 	check(P.tail()!=INVALID);
   101 	cout << "P.tail()==v1 ? " << (P.tail()==v1) << endl;
   102 	check(P.tail() == v1);
   103 #else
   104 	cout << "P.tail() valid? " << (P.from()!=INVALID) << endl;
   105 	check(P.from()!=INVALID);
   106 	cout << "P.tail()==v1 ? " << (P.from()==v1) << endl;
   107 	check(P.from() == v1);
   108 #endif
   109 
   110 	// Na ja, ez igy nem igazi, mindket esetet le kene tesztelni,
   111 	// de legalabb valami:
   112 #ifdef DEBUG
   113 	cout << "Hozzaadunk az elejehez egy nem illeszkedo elet..." << endl;
   114 	rc = false;
   115 	try {
   116 	  B.pushFront(e3);
   117 	}
   118 	catch(const Exception &e) {
   119 	  cout << "E: " << e.what() << endl;
   120 	  rc = true;
   121 	}
   122 	check(rc);
   123 #endif
   124 
   125 	cout << "Hozzaadunk a vegehez ket elet..." << endl;
   126 	B.pushBack(e7);
   127 	B.pushBack(e8);
   128 	cout << "P.length() == " << P.length() << endl;
   129 	check(P.length() == 2);
   130       
   131 	cout << "Es commitolunk...\n";
   132 	B.commit();
   133       }
   134       cout << "P.length() == " << P.length() << endl;
   135       check(P.length() == 4);
   136 
   137 #ifdef SKELETON
   138       cout << "P.head()==v3 ? " << (P.head()==v3) << endl;
   139       check(P.head() == v3);
   140 #else
   141       cout << "P.head()==v3 ? " << (P.to()==v3) << endl;
   142       check(P.to() == v3);
   143 #endif
   144 
   145       cout << "Vegigiteralunk az eleken." << endl;
   146       typedef DPath::NodeIt NodeIt;
   147       typedef DPath::EdgeIt EdgeIt;
   148       EdgeIt e;
   149       int i=1;
   150       for(P.first(e); e!=INVALID; ++e, ++i) {
   151 	cout << i << ". el: " <</* e << */endl;
   152       }
   153 
   154 
   155       // Na ja, ez igy nem igazi, mindket esetet le kene tesztelni,
   156       // de legalabb valami:
   157 
   158 #ifdef DEBUG
   159       rc = false;
   160       try {
   161 	cout << "Setting an edgeiter to a nonexistant edge." << endl;
   162 	//P.nth(e,134);
   163 	rc = !debug;
   164       }
   165       catch(const Exception &e) {
   166 	cout << "E: " << e.what() << endl;
   167 	rc = debug;
   168       }
   169       check(rc);
   170 #endif
   171     }
   172 
   173   }
   174   catch(const std::exception &e) {
   175     cout << "Uncaught exception: " << e.what() << endl;
   176     return 1;
   177   }
   178   catch(...) {
   179     cout << "Something horrible happened: an exception which isn't "
   180 	 << "std::exception" << endl;
   181     return 2;
   182   }
   183 
   184 
   185   cout << (passed ? "All tests passed." : "Some of the tests failed!!!")
   186        << endl;
   187 
   188   return passed ? 0 : 1;
   189 }