klao@946: /* -*- C++ -*- klao@946: * alpar@1956: * This file is a part of LEMON, a generic C++ optimization library alpar@1956: * alpar@1956: * Copyright (C) 2003-2006 alpar@1956: * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport alpar@1359: * (Egervary Research Group on Combinatorial Optimization, EGRES). klao@946: * klao@946: * Permission to use, modify and distribute this software is granted klao@946: * provided that this copyright notice appears in all copies. For klao@946: * precise terms see the accompanying LICENSE file. klao@946: * klao@946: * This software is provided "AS IS" with no warranty of any kind, klao@946: * express or implied, and with no claim as to its suitability for any klao@946: * purpose. klao@946: * klao@946: */ klao@946: klao@946: #include klao@946: #include klao@959: #include klao@959: #include klao@946: #include klao@946: #include klao@946: klao@946: #include"test_tools.h" klao@946: #include"graph_test.h" klao@946: klao@946: /** klao@946: \file klao@946: This test makes consistency checks of list graph structures. klao@946: alpar@986: G.addNode(), G.addEdge(), G.source(), G.target() klao@946: klao@946: \todo Checks for empty graphs and isolated points. klao@946: conversion. klao@946: */ klao@946: klao@946: using namespace lemon; klao@946: klao@946: template void bidirPetersen(Graph &G) klao@946: { klao@946: typedef typename Graph::Edge Edge; klao@946: typedef typename Graph::EdgeIt EdgeIt; klao@946: klao@946: checkGraphEdgeList(G,15); klao@946: klao@946: std::vector ee; klao@946: klao@946: for(EdgeIt e(G);e!=INVALID;++e) ee.push_back(e); klao@946: klao@946: for(typename std::vector::iterator p=ee.begin();p!=ee.end();p++) alpar@986: G.addEdge(G.target(*p),G.source(*p)); klao@946: } klao@946: klao@946: template void checkPetersen(Graph &G) klao@946: { klao@946: typedef typename Graph::Node Node; klao@946: klao@946: typedef typename Graph::EdgeIt EdgeIt; klao@946: typedef typename Graph::NodeIt NodeIt; klao@946: klao@946: checkGraphNodeList(G,10); klao@946: checkGraphEdgeList(G,30); klao@946: klao@946: for(NodeIt n(G);n!=INVALID;++n) { klao@946: checkGraphInEdgeList(G,n,3); klao@946: checkGraphOutEdgeList(G,n,3); klao@946: } klao@946: } klao@946: klao@946: //Compile Graph klao@959: template void lemon::concept::checkCompileStaticGraph klao@959: (concept::StaticGraph &); klao@946: klao@946: template klao@959: void lemon::concept::checkCompileExtendableGraph klao@959: (concept::ExtendableGraph &); klao@946: klao@946: template klao@959: void lemon::concept::checkCompileErasableGraph klao@959: (concept::ErasableGraph &); klao@946: klao@946: //Compile SmartGraph klao@946: template klao@959: void lemon::concept::checkCompileExtendableGraph(SmartGraph &); klao@946: template klao@959: void lemon::concept::checkCompileGraphFindEdge(SmartGraph &); klao@946: klao@946: //Compile SymSmartGraph klao@946: //template void hugo::checkCompileGraph(SymSmartGraph &); klao@946: //template void hugo::checkCompileGraphFindEdge(SymSmartGraph &); klao@946: klao@946: //Compile ListGraph klao@946: template klao@959: void lemon::concept::checkCompileExtendableGraph(ListGraph &); klao@946: template klao@959: void lemon::concept::checkCompileErasableGraph(ListGraph &); klao@946: template klao@959: void lemon::concept::checkCompileGraphFindEdge(ListGraph &); klao@946: klao@946: klao@946: //Compile SymListGraph klao@946: //template void hugo::checkCompileGraph(SymListGraph &); klao@946: //template void hugo::checkCompileErasableGraph(SymListGraph &); klao@946: //template void hugo::checkCompileGraphFindEdge(SymListGraph &); klao@946: klao@946: //Compile FullGraph klao@959: template void lemon::concept::checkCompileStaticGraph(FullGraph &); klao@946: template klao@959: void lemon::concept::checkCompileGraphFindEdge(FullGraph &); klao@946: klao@946: klao@946: int main() klao@946: { klao@946: { klao@946: SmartGraph G; klao@946: addPetersen(G); klao@946: bidirPetersen(G); klao@946: checkPetersen(G); klao@946: } klao@946: { klao@946: ListGraph G; klao@946: addPetersen(G); klao@946: bidirPetersen(G); klao@946: checkPetersen(G); klao@946: } klao@946: { klao@946: // SymSmartGraph G; klao@946: // addPetersen(G); klao@946: // checkPetersen(G); klao@946: } klao@946: { klao@946: // SymListGraph G; klao@946: // addPetersen(G); klao@946: // checkPetersen(G); klao@946: } klao@946: klao@946: ///\file klao@946: ///\todo map tests. klao@946: ///\todo copy constr tests. klao@946: klao@946: klao@946: // Some map tests. klao@946: // FIXME: These shouldn't be here. klao@959: using namespace concept; klao@946: function_requires< ReadMapConcept< ReadMap > >(); klao@946: function_requires< WriteMapConcept< WriteMap > >(); klao@946: function_requires< ReadWriteMapConcept< ReadWriteMap > >(); klao@946: function_requires< ReferenceMapConcept< ReferenceMap > >(); klao@946: klao@946: klao@946: std::cout << __FILE__ ": All tests passed.\n"; klao@946: klao@946: return 0; klao@946: }