COIN-OR::LEMON - Graph Library

source: lemon-0.x/src/test/path_test.cc @ 820:a9b6a7f73895

Last change on this file since 820:a9b6a7f73895 was 820:a9b6a7f73895, checked in by Hegyi Péter, 16 years ago

path_test is getting under construction

File size: 4.0 KB
Line 
1#include <string>
2#include <iostream>
3//#include <hugo/path.h>
4#include <hugo/skeletons/path.h>
5#include <hugo/list_graph.h>
6
7using namespace std;
8using namespace hugo;
9#ifdef SKELETON
10using namespace skeleton;
11#endif
12
13bool passed = true;
14
15void check(bool rc) {
16  passed = passed && rc;
17  if(!rc) {
18    cout << "Test failed!" << endl;
19  }
20}
21
22#ifdef DEBUG
23const bool debug = true;
24#else
25const bool debug = false;
26#endif
27
28
29int 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}
Note: See TracBrowser for help on using the repository browser.