COIN-OR::LEMON - Graph Library

source: lemon-0.x/src/test/path_test.cc @ 823:afba7fbbb239

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

There was a little troublie with the true return statement

File size: 4.1 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#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}
Note: See TracBrowser for help on using the repository browser.