deba@909: /* -*- C++ -*- deba@909: * src/test/sym_graph_test.h - Part of HUGOlib, a generic C++ optimization library deba@909: * deba@909: * Copyright (C) 2004 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport deba@909: * (Egervary Combinatorial Optimization Research Group, EGRES). deba@909: * deba@909: * Permission to use, modify and distribute this software is granted deba@909: * provided that this copyright notice appears in all copies. For deba@909: * precise terms see the accompanying LICENSE file. deba@909: * deba@909: * This software is provided "AS IS" with no warranty of any kind, deba@909: * express or implied, and with no claim as to its suitability for any deba@909: * purpose. deba@909: * deba@909: */ deba@909: #ifndef HUGO_TEST_SYM_GRAPH_TEST_H deba@909: #define HUGO_TEST_SYM_GRAPH_TEST_H deba@909: deba@909: deba@909: #include "graph_test.h" deba@909: #include "test_tools.h" deba@909: deba@909: //! \ingroup misc deba@909: //! \file deba@909: //! \brief Some utility to test symmetric graph classes. deba@909: namespace hugo { deba@909: deba@909: template void checkCompileStaticSymGraph(Graph &G) deba@909: { deba@909: typedef typename Graph::Node Node; deba@909: typedef typename Graph::NodeIt NodeIt; deba@909: typedef typename Graph::SymEdge SymEdge; deba@909: typedef typename Graph::SymEdgeIt SymEdgeIt; deba@909: typedef typename Graph::Edge Edge; deba@909: typedef typename Graph::EdgeIt EdgeIt; deba@909: typedef typename Graph::InEdgeIt InEdgeIt; deba@909: typedef typename Graph::OutEdgeIt OutEdgeIt; deba@909: deba@909: checkCompileStaticGraph(G); deba@909: deba@909: { deba@909: SymEdge i; SymEdge j(i); SymEdge k(INVALID); deba@909: i=j; deba@909: bool b; b=true; deba@909: b=(i==INVALID); b=(i!=INVALID); deba@909: b=(i==j); b=(i!=j); b=(iSymEdgeIt conversion deba@909: SymEdgeIt ni(G,n); deba@909: } deba@909: { deba@909: Edge i, j; deba@909: j = G.opposite(i); deba@909: } deba@909: { deba@909: Node n; deba@909: SymEdge se; deba@909: se=INVALID; deba@909: n=G.tail(se); deba@909: n=G.head(se); deba@909: } deba@909: // id tests deba@909: { SymEdge n; int i=G.id(n); i=i; } deba@909: //SymEdgeMap tests deba@909: { deba@909: SymEdge k; deba@909: typename Graph::template SymEdgeMap m(G); deba@909: typename Graph::template SymEdgeMap const &cm = m; //Const map deba@909: //Inicialize with default value deba@909: typename Graph::template SymEdgeMap mdef(G,12); deba@909: typename Graph::template SymEdgeMap mm(cm); //Copy deba@909: typename Graph::template SymEdgeMap dm(cm); //Copy from another type deba@909: int v; deba@909: v=m[k]; m[k]=v; m.set(k,v); deba@909: v=cm[k]; deba@909: deba@909: m=cm; deba@909: dm=cm; //Copy from another type deba@909: { deba@909: //Check the typedef's deba@909: typename Graph::template SymEdgeMap::ValueType val; deba@909: val = 1; deba@909: typename Graph::template SymEdgeMap::KeyType key; deba@909: key = typename Graph::SymEdgeIt(G); deba@909: } deba@909: } deba@909: { //bool SymEdgeMap deba@909: SymEdge k; deba@909: typename Graph::template SymEdgeMap m(G); deba@909: typename Graph::template SymEdgeMap const &cm = m; //Const map deba@909: //Inicialize with default value deba@909: typename Graph::template SymEdgeMap mdef(G,12); deba@909: typename Graph::template SymEdgeMap mm(cm); //Copy deba@909: typename Graph::template SymEdgeMap dm(cm); //Copy from another type deba@909: bool v; deba@909: v=m[k]; m[k]=v; m.set(k,v); deba@909: v=cm[k]; deba@909: deba@909: m=cm; deba@909: dm=cm; //Copy from another type deba@909: m=dm; //Copy to another type deba@909: { deba@909: //Check the typedef's deba@909: typename Graph::template SymEdgeMap::ValueType val; deba@909: val=true; deba@909: typename Graph::template SymEdgeMap::KeyType key; deba@909: key= typename Graph::SymEdgeIt(G); deba@909: } deba@909: } deba@909: } deba@909: deba@909: template void checkCompileSymGraph(Graph &G) deba@909: { deba@909: checkCompileStaticSymGraph(G); deba@909: deba@909: typedef typename Graph::Node Node; deba@909: typedef typename Graph::NodeIt NodeIt; deba@909: typedef typename Graph::SymEdge SymEdge; deba@909: typedef typename Graph::SymEdgeIt SymEdgeIt; deba@909: typedef typename Graph::Edge Edge; deba@909: typedef typename Graph::EdgeIt EdgeIt; deba@909: typedef typename Graph::InEdgeIt InEdgeIt; deba@909: typedef typename Graph::OutEdgeIt OutEdgeIt; deba@909: deba@909: Node n,m; deba@909: n=G.addNode(); deba@909: m=G.addNode(); deba@909: SymEdge e; deba@909: e = G.addEdge(n,m); deba@909: deba@909: // G.clear(); deba@909: } deba@909: deba@909: template void checkCompileSymGraphEraseSymEdge(Graph &G) deba@909: { deba@909: typename Graph::SymEdge n; deba@909: G.erase(n); deba@909: } deba@909: deba@909: template void checkCompileErasableSymGraph(Graph &G) deba@909: { deba@909: checkCompileSymGraph(G); deba@909: checkCompileGraphEraseNode(G); deba@909: checkCompileSymGraphEraseSymEdge(G); deba@909: } deba@909: deba@909: template void checkGraphSymEdgeList(Graph &G, int nn) deba@909: { deba@909: typedef typename Graph::SymEdgeIt SymEdgeIt; deba@909: deba@909: SymEdgeIt e(G); deba@909: for(int i=0;i