2  * src/test/sym_graph_test.h - Part of LEMON, a generic C++ optimization library
 
     4  * Copyright (C) 2005 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
 
     5  * (Egervary Combinatorial Optimization Research Group, EGRES).
 
     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.
 
    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
 
    16 #ifndef LEMON_TEST_SYM_GRAPH_TEST_H
 
    17 #define LEMON_TEST_SYM_GRAPH_TEST_H
 
    20 #include "graph_test.h"
 
    21 #include "test_tools.h"
 
    25 //! \brief Some utility to test symmetric graph classes.
 
    30   /// \todo This should go to lemon/concept/symgraph.h
 
    32   template<class Graph> void checkCompileStaticSymGraph(Graph &G) 
 
    34       typedef typename Graph::Node Node;
 
    35       typedef typename Graph::NodeIt NodeIt;
 
    36       typedef typename Graph::SymEdge SymEdge;
 
    37       typedef typename Graph::SymEdgeIt SymEdgeIt;
 
    38       typedef typename Graph::Edge Edge;
 
    39       typedef typename Graph::EdgeIt EdgeIt;
 
    40       typedef typename Graph::InEdgeIt InEdgeIt;
 
    41       typedef typename Graph::OutEdgeIt OutEdgeIt;
 
    43       lemon::concept::checkCompileStaticGraph(G);
 
    46 	SymEdge i; SymEdge j(i); SymEdge k(INVALID);
 
    49 	b=(i==INVALID); b=(i!=INVALID);
 
    50 	b=(i==j); b=(i!=j); b=(i<j);
 
    56 	SymEdgeIt i; SymEdgeIt j(i); SymEdgeIt k(INVALID); SymEdgeIt l(G);
 
    61 	b=(i==INVALID); b=(i!=INVALID);
 
    64 	b=(i==j); b=(i!=j); b=(i<j);
 
    65 	//SymEdge ->SymEdgeIt conversion
 
    80       { SymEdge n; int i=G.id(n); i=i; }
 
    84 	typename Graph::template SymEdgeMap<int> m(G);
 
    85 	typename Graph::template SymEdgeMap<int> const &cm = m;  //Const map
 
    86 	//Inicialize with default value
 
    87 	typename Graph::template SymEdgeMap<int> mdef(G,12);
 
    88 	typename Graph::template SymEdgeMap<int> mm(cm);   //Copy
 
    89 	typename Graph::template SymEdgeMap<double> dm(cm); //Copy from another type
 
    91 	v=m[k]; m[k]=v; m.set(k,v);
 
    95 	dm=cm; //Copy from another type
 
    98 	  typename Graph::template SymEdgeMap<int>::Value val;
 
   100 	  typename Graph::template SymEdgeMap<int>::Key key;
 
   101 	  key = typename Graph::SymEdgeIt(G);
 
   106 	typename Graph::template SymEdgeMap<bool> m(G);
 
   107 	typename Graph::template SymEdgeMap<bool> const &cm = m;  //Const map
 
   108 	//Inicialize with default value
 
   109 	typename Graph::template SymEdgeMap<bool> mdef(G,12);
 
   110 	typename Graph::template SymEdgeMap<bool> mm(cm);   //Copy
 
   111 	typename Graph::template SymEdgeMap<int> dm(cm); //Copy from another type
 
   113 	v=m[k]; m[k]=v; m.set(k,v);
 
   117 	dm=cm; //Copy from another type
 
   118 	m=dm; //Copy to another type
 
   120 	  //Check the typedef's
 
   121 	  typename Graph::template SymEdgeMap<bool>::Value val;
 
   123 	  typename Graph::template SymEdgeMap<bool>::Key key;
 
   124 	  key= typename Graph::SymEdgeIt(G);
 
   129   template<class Graph> void checkCompileSymGraph(Graph &G) 
 
   131       checkCompileStaticSymGraph(G);
 
   133       typedef typename Graph::Node Node;
 
   134       typedef typename Graph::NodeIt NodeIt;
 
   135       typedef typename Graph::SymEdge SymEdge;
 
   136       typedef typename Graph::SymEdgeIt SymEdgeIt;
 
   137       typedef typename Graph::Edge Edge;
 
   138       typedef typename Graph::EdgeIt EdgeIt;
 
   139       typedef typename Graph::InEdgeIt InEdgeIt;
 
   140       typedef typename Graph::OutEdgeIt OutEdgeIt;
 
   151   template<class Graph> void checkCompileSymGraphEraseSymEdge(Graph &G) 
 
   153       typename Graph::SymEdge n;
 
   157   template<class Graph> void checkCompileErasableSymGraph(Graph &G) 
 
   159       checkCompileSymGraph(G);
 
   160       lemon::concept::checkCompileGraphEraseNode(G);
 
   161       checkCompileSymGraphEraseSymEdge(G);
 
   164   template<class Graph> void checkGraphSymEdgeList(Graph &G, int nn)
 
   166       typedef typename Graph::SymEdgeIt SymEdgeIt;
 
   169       for(int i=0;i<nn;i++) {
 
   170 	check(e!=INVALID,"Wrong SymEdge list linking.");
 
   173       check(e==INVALID,"Wrong SymEdge list linking.");
 
   177   ///\todo Check target(), source() as well;