src/test/graph_test.cc
author alpar
Tue, 05 Oct 2004 09:41:05 +0000
changeset 938 70e2886211d5
parent 937 d4e911acef3d
child 946 c94ef40a22ce
permissions -rw-r--r--
Many of ckeckCompileXYZ()'s are now in the corresponding skeleton headers.
(Tests for Symmetric Graphs are still to be moved)
     1 /* -*- C++ -*-
     2  * src/test/graph_test.cc - Part of LEMON, a generic C++ optimization library
     3  *
     4  * Copyright (C) 2004 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
     5  * (Egervary Combinatorial Optimization Research Group, EGRES).
     6  *
     7  * Permission to use, modify and distribute this software is granted
     8  * provided that this copyright notice appears in all copies. For
     9  * precise terms see the accompanying LICENSE file.
    10  *
    11  * This software is provided "AS IS" with no warranty of any kind,
    12  * express or implied, and with no claim as to its suitability for any
    13  * purpose.
    14  *
    15  */
    16 
    17 #include<iostream>
    18 #include<lemon/smart_graph.h>
    19 #include<lemon/skeletons/graph.h>
    20 #include<lemon/list_graph.h>
    21 #include<lemon/full_graph.h>
    22 
    23 #include"test_tools.h"
    24 #include"graph_test.h"
    25 
    26 /**
    27 \file
    28 This test makes consistency checks of list graph structures.
    29 
    30 G.addNode(), G.addEdge(), G.tail(), G.head()
    31 
    32 \todo Checks for empty graphs and isolated points.
    33 conversion.
    34 */
    35 
    36 using namespace lemon;
    37 
    38 template<class Graph> void bidirPetersen(Graph &G)
    39 {
    40   typedef typename Graph::Edge Edge;
    41   typedef typename Graph::EdgeIt EdgeIt;
    42   
    43   checkGraphEdgeList(G,15);
    44   
    45   std::vector<Edge> ee;
    46   
    47   for(EdgeIt e(G);e!=INVALID;++e) ee.push_back(e);
    48 
    49   for(typename std::vector<Edge>::iterator p=ee.begin();p!=ee.end();p++)
    50     G.addEdge(G.head(*p),G.tail(*p));
    51 }
    52 
    53 template<class Graph> void checkPetersen(Graph &G)
    54 {
    55   typedef typename Graph::Node Node;
    56 
    57   typedef typename Graph::EdgeIt EdgeIt;
    58   typedef typename Graph::NodeIt NodeIt;
    59 
    60   checkGraphNodeList(G,10);
    61   checkGraphEdgeList(G,30);
    62 
    63   for(NodeIt n(G);n!=INVALID;++n) {
    64     checkGraphInEdgeList(G,n,3);
    65     checkGraphOutEdgeList(G,n,3);
    66   }  
    67 }
    68 
    69 //Compile Graph
    70 template void lemon::skeleton::checkCompileStaticGraph<skeleton::StaticGraph>
    71 (skeleton::StaticGraph &);
    72 
    73 template
    74 void lemon::skeleton::checkCompileExtendableGraph<skeleton::ExtendableGraph>
    75 (skeleton::ExtendableGraph &);
    76 
    77 template
    78 void lemon::skeleton::checkCompileErasableGraph<skeleton::ErasableGraph>
    79 (skeleton::ErasableGraph &);
    80 
    81 //Compile SmartGraph
    82 template
    83 void lemon::skeleton::checkCompileExtendableGraph<SmartGraph>(SmartGraph &);
    84 template
    85 void lemon::skeleton::checkCompileGraphFindEdge<SmartGraph>(SmartGraph &);
    86 
    87 //Compile SymSmartGraph
    88 //template void hugo::checkCompileGraph<SymSmartGraph>(SymSmartGraph &);
    89 //template void hugo::checkCompileGraphFindEdge<SymSmartGraph>(SymSmartGraph &);
    90 
    91 //Compile ListGraph
    92 template
    93 void lemon::skeleton::checkCompileExtendableGraph<ListGraph>(ListGraph &);
    94 template
    95 void lemon::skeleton::checkCompileErasableGraph<ListGraph>(ListGraph &);
    96 template
    97 void lemon::skeleton::checkCompileGraphFindEdge<ListGraph>(ListGraph &);
    98 
    99 
   100 //Compile SymListGraph
   101 //template void hugo::checkCompileGraph<SymListGraph>(SymListGraph &);
   102 //template void hugo::checkCompileErasableGraph<SymListGraph>(SymListGraph &);
   103 //template void hugo::checkCompileGraphFindEdge<SymListGraph>(SymListGraph &);
   104 
   105 //Compile FullGraph
   106 template void lemon::skeleton::checkCompileStaticGraph<FullGraph>(FullGraph &);
   107 template
   108 void lemon::skeleton::checkCompileGraphFindEdge<FullGraph>(FullGraph &);
   109 
   110 //Compile EdgeSet <ListGraph>
   111 template void lemon::skeleton::checkCompileExtendableGraph<EdgeSet <ListGraph> >
   112 (EdgeSet <ListGraph> &);
   113 template void lemon::skeleton::checkCompileGraphEraseEdge<EdgeSet <ListGraph> >
   114 (EdgeSet <ListGraph> &);
   115 template void lemon::skeleton::checkCompileGraphFindEdge<EdgeSet <ListGraph> >
   116 (EdgeSet <ListGraph> &);
   117 
   118 //Compile EdgeSet <NodeSet>
   119 template void lemon::skeleton::checkCompileExtendableGraph<EdgeSet <NodeSet> >
   120 (EdgeSet <NodeSet> &);
   121 template void lemon::skeleton::checkCompileGraphEraseEdge<EdgeSet <NodeSet> >
   122 (EdgeSet <NodeSet> &);
   123 template void lemon::skeleton::checkCompileGraphFindEdge<EdgeSet <NodeSet> >
   124 (EdgeSet <NodeSet> &);
   125 
   126 
   127 int main() 
   128 {
   129   {
   130     SmartGraph G;
   131     addPetersen(G);
   132     bidirPetersen(G);
   133     checkPetersen(G);
   134   }
   135   {
   136     ListGraph G;
   137     addPetersen(G);
   138     bidirPetersen(G);
   139     checkPetersen(G);
   140   }
   141   {
   142     //    SymSmartGraph G;
   143     //    addPetersen(G);
   144     //    checkPetersen(G);
   145   }
   146   {
   147     //    SymListGraph G;
   148     //    addPetersen(G);
   149     //    checkPetersen(G);
   150   }
   151 
   152   ///\file
   153   ///\todo map tests.
   154   ///\todo copy constr tests.
   155 
   156   std::cout << __FILE__ ": All tests passed.\n";
   157 
   158   return 0;
   159 }