hegyi@815: #include <string> hegyi@815: #include <iostream> hegyi@815: //#include <path.h> hegyi@815: #include <path_skeleton.h> hegyi@815: #include <list_graph.h> hegyi@815: hegyi@815: using namespace std; alpar@921: using namespace lemon; klao@959: using namespace concept; hegyi@815: hegyi@815: bool passed = true; hegyi@815: hegyi@815: void check(bool rc) { hegyi@815: passed = passed && rc; hegyi@815: if(!rc) { hegyi@815: cout << "Test failed!" << endl; hegyi@815: } hegyi@815: } hegyi@815: hegyi@815: #ifdef DEBUG hegyi@815: const bool debug = true; hegyi@815: #else hegyi@815: const bool debug = false; hegyi@815: #endif hegyi@815: hegyi@815: hegyi@815: int main() { hegyi@815: hegyi@815: try { hegyi@815: hegyi@815: typedef ListGraph::Node Node; hegyi@815: typedef ListGraph::Edge Edge; hegyi@815: hegyi@815: ListGraph G; hegyi@815: hegyi@815: Node s=G.addNode(); hegyi@815: Node v1=G.addNode(); hegyi@815: Node v2=G.addNode(); hegyi@815: Node v3=G.addNode(); hegyi@815: Node v4=G.addNode(); hegyi@815: Node t=G.addNode(); hegyi@815: hegyi@815: Edge e1 = G.addEdge(s, v1); hegyi@815: Edge e2 = G.addEdge(s, v2); hegyi@815: Edge e3 = G.addEdge(v1, v2); hegyi@815: Edge e4 = G.addEdge(v2, v1); hegyi@815: Edge e5 = G.addEdge(v1, v3); hegyi@815: Edge e6 = G.addEdge(v3, v2); hegyi@815: Edge e7 = G.addEdge(v2, v4); hegyi@815: Edge e8 = G.addEdge(v4, v3); hegyi@815: Edge e9 = G.addEdge(v3, t); hegyi@815: Edge e10 = G.addEdge(v4, t); hegyi@815: hegyi@815: bool rc; hegyi@815: hegyi@815: { hegyi@815: cout << "\n\n\nDirPath tesztelese...\n"; hegyi@815: hegyi@815: hegyi@815: cout << "Ures path letrehozasa" << endl; hegyi@815: //typedef DirPath<ListGraph> DPath; hegyi@815: typedef Path <ListGraph> DPath; hegyi@815: DPath P(G); hegyi@815: hegyi@815: cout << "P.length() == " << P.length() << endl; hegyi@815: check(P.length() == 0); hegyi@815: hegyi@815: #ifdef SKELETON alpar@986: cout << "P.source() valid? " << (P.source()!=INVALID) << endl; alpar@986: check(! (P.source()!=INVALID)); hegyi@815: #else alpar@986: cout << "P.source() valid? " << (P.from()!=INVALID) << endl; hegyi@815: check(! (P.to()!=INVALID)); hegyi@815: #endif hegyi@815: { hegyi@815: cout << "Builder objektum letrehozasa" << endl; hegyi@815: DPath::Builder B(P); hegyi@815: hegyi@815: cout << "Hozzaadunk az elejehez ket elet..." << endl; hegyi@815: B.pushFront(e6); hegyi@815: B.pushFront(e5); hegyi@815: cout << "P.length() == " << P.length() << endl; hegyi@815: check(P.length() == 0); hegyi@815: hegyi@815: cout << "Commitolunk..." << endl; hegyi@815: B.commit(); hegyi@815: hegyi@815: cout << "P.length() == " << P.length() << endl; hegyi@815: check(P.length() == 2); hegyi@815: hegyi@815: #ifdef SKELETON alpar@986: cout << "P.source() valid? " << (P.source()!=INVALID) << endl; alpar@986: check(P.source()!=INVALID); alpar@986: cout << "P.source()==v1 ? " << (P.source()==v1) << endl; alpar@986: check(P.source() == v1); hegyi@815: #else alpar@986: cout << "P.source() valid? " << (P.from()!=INVALID) << endl; hegyi@815: check(P.from()!=INVALID); alpar@986: cout << "P.source()==v1 ? " << (P.from()==v1) << endl; hegyi@815: check(P.from() == v1); hegyi@815: #endif hegyi@815: hegyi@815: // Na ja, ez igy nem igazi, mindket esetet le kene tesztelni, hegyi@815: // de legalabb valami: hegyi@815: #ifdef DEBUG hegyi@815: cout << "Hozzaadunk az elejehez egy nem illeszkedo elet..." << endl; hegyi@815: rc = false; hegyi@815: try { hegyi@815: B.pushFront(e3); hegyi@815: } hegyi@815: catch(const Exception &e) { hegyi@815: cout << "E: " << e.what() << endl; hegyi@815: rc = true; hegyi@815: } hegyi@815: check(rc); hegyi@815: #endif hegyi@815: hegyi@815: cout << "Hozzaadunk a vegehez ket elet..." << endl; hegyi@815: B.pushBack(e7); hegyi@815: B.pushBack(e8); hegyi@815: cout << "P.length() == " << P.length() << endl; hegyi@815: check(P.length() == 2); hegyi@815: hegyi@815: cout << "Es commitolunk...\n"; hegyi@815: B.commit(); hegyi@815: } hegyi@815: cout << "P.length() == " << P.length() << endl; hegyi@815: check(P.length() == 4); hegyi@815: hegyi@815: #ifdef SKELETON alpar@986: cout << "P.target()==v3 ? " << (P.target()==v3) << endl; alpar@986: check(P.target() == v3); hegyi@815: #else alpar@986: cout << "P.target()==v3 ? " << (P.to()==v3) << endl; hegyi@815: check(P.to() == v3); hegyi@815: #endif hegyi@815: hegyi@815: cout << "Vegigiteralunk az eleken." << endl; hegyi@815: typedef DPath::NodeIt NodeIt; hegyi@815: typedef DPath::EdgeIt EdgeIt; hegyi@815: EdgeIt e; hegyi@815: int i=1; hegyi@815: for(P.first(e); e!=INVALID; ++e, ++i) { hegyi@815: cout << i << ". el: " <</* e << */endl; hegyi@815: } hegyi@815: hegyi@815: hegyi@815: // Na ja, ez igy nem igazi, mindket esetet le kene tesztelni, hegyi@815: // de legalabb valami: hegyi@815: hegyi@815: #ifdef DEBUG hegyi@815: rc = false; hegyi@815: try { hegyi@815: cout << "Setting an edgeiter to a nonexistant edge." << endl; hegyi@815: //P.nth(e,134); hegyi@815: rc = !debug; hegyi@815: } hegyi@815: catch(const Exception &e) { hegyi@815: cout << "E: " << e.what() << endl; hegyi@815: rc = debug; hegyi@815: } hegyi@815: check(rc); hegyi@815: #endif hegyi@815: } hegyi@815: hegyi@815: } hegyi@815: catch(const std::exception &e) { hegyi@815: cout << "Uncaught exception: " << e.what() << endl; hegyi@815: return 1; hegyi@815: } hegyi@815: catch(...) { hegyi@815: cout << "Something horrible happened: an exception which isn't " hegyi@815: << "std::exception" << endl; hegyi@815: return 2; hegyi@815: } hegyi@815: hegyi@815: hegyi@815: cout << (passed ? "All tests passed." : "Some of the tests failed!!!") hegyi@815: << endl; hegyi@815: hegyi@815: return passed ? 0 : 1; hegyi@815: }