alpar@503: #include<iostream> ladanyi@542: #include<hugo/smart_graph.h> alpar@564: #include<hugo/skeletons/graph.h> alpar@578: #include<hugo/list_graph.h> alpar@592: #include<hugo/full_graph.h> alpar@578: alpar@567: #include"test_tools.h" alpar@800: #include"graph_test.h" alpar@567: alpar@774: /** alpar@774: \file alpar@503: This test makes consistency checks of list graph structures. alpar@503: alpar@774: G.addNode(), G.addEdge(), G.tail(), G.head() alpar@503: alpar@592: \todo Checks for empty graphs and isolated points. alpar@774: conversion. alpar@503: */ alpar@503: alpar@503: using namespace hugo; alpar@503: alpar@503: template<class Graph> void bidirPetersen(Graph &G) alpar@503: { alpar@503: typedef typename Graph::Edge Edge; alpar@503: typedef typename Graph::EdgeIt EdgeIt; alpar@503: alpar@800: checkGraphEdgeList(G,15); alpar@503: alpar@503: std::vector<Edge> ee; alpar@503: alpar@774: for(EdgeIt e(G);e!=INVALID;++e) ee.push_back(e); alpar@503: alpar@503: for(typename std::vector<Edge>::iterator p=ee.begin();p!=ee.end();p++) alpar@503: G.addEdge(G.head(*p),G.tail(*p)); alpar@503: } alpar@503: alpar@503: template<class Graph> void checkPetersen(Graph &G) alpar@503: { alpar@503: typedef typename Graph::Node Node; alpar@503: alpar@503: typedef typename Graph::EdgeIt EdgeIt; alpar@503: typedef typename Graph::NodeIt NodeIt; alpar@503: alpar@800: checkGraphNodeList(G,10); alpar@800: checkGraphEdgeList(G,30); alpar@503: alpar@774: for(NodeIt n(G);n!=INVALID;++n) { alpar@800: checkGraphInEdgeList(G,n,3); alpar@800: checkGraphOutEdgeList(G,n,3); alpar@774: ++n; alpar@503: } alpar@503: } alpar@503: alpar@774: //Compile GraphSkeleton alpar@793: template void checkCompileStaticGraph<skeleton::StaticGraphSkeleton> alpar@793: (skeleton::StaticGraphSkeleton &); alpar@793: alpar@800: template void checkCompileGraph<skeleton::GraphSkeleton> alpar@800: (skeleton::GraphSkeleton &); alpar@793: alpar@800: template void checkCompileErasableGraph<skeleton::EraseableGraphSkeleton> alpar@793: (skeleton::EraseableGraphSkeleton &); alpar@733: alpar@774: //Compile SmartGraph alpar@800: template void checkCompileGraph<SmartGraph>(SmartGraph &); alpar@800: template void checkCompileGraphFindEdge<SmartGraph>(SmartGraph &); deba@783: alpar@774: //Compile SymSmartGraph alpar@800: template void checkCompileGraph<SymSmartGraph>(SymSmartGraph &); alpar@800: template void checkCompileGraphFindEdge<SymSmartGraph>(SymSmartGraph &); alpar@774: alpar@774: //Compile ListGraph alpar@800: template void checkCompileGraph<ListGraph>(ListGraph &); alpar@800: template void checkCompileErasableGraph<ListGraph>(ListGraph &); alpar@800: template void checkCompileGraphFindEdge<ListGraph>(ListGraph &); alpar@774: deba@783: alpar@774: //Compile SymListGraph alpar@800: template void checkCompileGraph<SymListGraph>(SymListGraph &); alpar@800: template void checkCompileErasableGraph<SymListGraph>(SymListGraph &); alpar@800: template void checkCompileGraphFindEdge<SymListGraph>(SymListGraph &); alpar@774: alpar@774: //Compile FullGraph alpar@592: template void checkCompileStaticGraph<FullGraph>(FullGraph &); alpar@800: template void checkCompileGraphFindEdge<FullGraph>(FullGraph &); alpar@550: alpar@774: //Compile EdgeSet <ListGraph> alpar@800: template void checkCompileGraph<EdgeSet <ListGraph> >(EdgeSet <ListGraph> &); alpar@800: template void checkCompileGraphEraseEdge<EdgeSet <ListGraph> > alpar@800: (EdgeSet <ListGraph> &); alpar@800: template void checkCompileGraphFindEdge<EdgeSet <ListGraph> > alpar@800: (EdgeSet <ListGraph> &); alpar@774: alpar@774: //Compile EdgeSet <NodeSet> alpar@800: template void checkCompileGraph<EdgeSet <NodeSet> >(EdgeSet <NodeSet> &); alpar@800: template void checkCompileGraphEraseEdge<EdgeSet <NodeSet> > alpar@800: (EdgeSet <NodeSet> &); alpar@800: template void checkCompileGraphFindEdge<EdgeSet <NodeSet> > alpar@800: (EdgeSet <NodeSet> &); alpar@774: alpar@503: alpar@503: int main() alpar@503: { alpar@503: { alpar@503: SmartGraph G; alpar@503: addPetersen(G); alpar@503: bidirPetersen(G); alpar@503: checkPetersen(G); alpar@503: } alpar@578: { alpar@578: ListGraph G; alpar@578: addPetersen(G); alpar@578: bidirPetersen(G); alpar@578: checkPetersen(G); alpar@578: } alpar@503: { alpar@503: SymSmartGraph G; alpar@503: addPetersen(G); alpar@503: checkPetersen(G); alpar@503: } alpar@578: { alpar@578: SymListGraph G; alpar@578: addPetersen(G); alpar@578: checkPetersen(G); alpar@578: } alpar@503: alpar@774: ///\file alpar@774: ///\todo map tests. alpar@774: ///\todo copy constr tests. alpar@503: alpar@503: std::cout << __FILE__ ": All tests passed.\n"; alpar@503: alpar@579: return 0; alpar@503: }