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: }