src/test/path_test.cc
author deba
Sun, 12 Sep 2004 19:32:21 +0000
changeset 830 89dfa3bece81
parent 820 a9b6a7f73895
child 831 b6ae3446098a
permissions -rw-r--r--
KeySet and ValueSet are inserted into the map structures.
They makes possible the iterating on the keys or values only.
     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 #ifndef SKELETON
   146       cout << "Vegigiteralunk az eleken." << endl;
   147       typedef DPath::NodeIt NodeIt;
   148       typedef DPath::EdgeIt EdgeIt;
   149       EdgeIt e;
   150       int i=1;
   151       for(P.first(e); e!=INVALID; ++e, ++i) {
   152 	cout << i << ". el: " <</* e << */endl;
   153       }
   154 #endif
   155 
   156       // Na ja, ez igy nem igazi, mindket esetet le kene tesztelni,
   157       // de legalabb valami:
   158 
   159 #ifdef DEBUG
   160       rc = false;
   161       try {
   162 	cout << "Setting an edgeiter to a nonexistant edge." << endl;
   163 	//P.nth(e,134);
   164 	rc = !debug;
   165       }
   166       catch(const Exception &e) {
   167 	cout << "E: " << e.what() << endl;
   168 	rc = debug;
   169       }
   170       check(rc);
   171 #endif
   172     }
   173 
   174   }
   175   catch(const std::exception &e) {
   176     cout << "Uncaught exception: " << e.what() << endl;
   177     return 1;
   178   }
   179   catch(...) {
   180     cout << "Something horrible happened: an exception which isn't "
   181 	 << "std::exception" << endl;
   182     return 2;
   183   }
   184 
   185 
   186   cout << (passed ? "All tests passed." : "Some of the tests failed!!!")
   187        << endl;
   188 
   189   return passed ? 0 : 1;
   190 }