klao@946: /* -*- C++ -*- klao@946: * alpar@1956: * This file is a part of LEMON, a generic C++ optimization library alpar@1956: * alpar@2553: * Copyright (C) 2003-2008 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 alpar@2260: #include alpar@2260: #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 alpar@2260: template void lemon::concepts::checkCompileGraph alpar@2260: (concepts::Graph &); klao@946: klao@946: template alpar@2260: void lemon::concepts::checkCompileGraph alpar@2260: (concepts::Graph &); klao@946: klao@946: template alpar@2260: void lemon::concepts::checkCompileGraph alpar@2260: (concepts::Graph &); klao@946: klao@946: //Compile SmartGraph klao@946: template alpar@2260: void lemon::concepts::checkCompileGraph(SmartGraph &); klao@946: template alpar@2260: void lemon::concepts::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 alpar@2260: void lemon::concepts::checkCompileGraph(ListGraph &); klao@946: template alpar@2260: void lemon::concepts::checkCompileGraph(ListGraph &); klao@946: template alpar@2260: void lemon::concepts::checkCompileGraphFindEdge(ListGraph &); klao@946: klao@946: klao@946: //Compile SymListGraph klao@946: //template void hugo::checkCompileGraph(SymListGraph &); deba@2111: //template void hugo::checkCompileGraph(SymListGraph &); klao@946: //template void hugo::checkCompileGraphFindEdge(SymListGraph &); klao@946: klao@946: //Compile FullGraph alpar@2260: template void lemon::concepts::checkCompileGraph(FullGraph &); klao@946: template alpar@2260: void lemon::concepts::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. alpar@2260: using namespace concepts; 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: }