diff --git a/test/test_tools.h b/test/test_tools.h --- a/test/test_tools.h +++ b/test/test_tools.h @@ -20,6 +20,17 @@ #define LEMON_TEST_TEST_TOOLS_H #include +#include + +#include +#include + +#include +#include + +#include + +using namespace lemon; //! \ingroup misc //! \file @@ -36,7 +47,7 @@ ///For example ///\code check(0==1,"This is obviously false.");\endcode will ///print this (and then exits). -///\verbatim graph_test.cc:123: error: This is obviously false. \endverbatim +///\verbatim digraph_test.cc:123: error: This is obviously false. \endverbatim /// ///\todo It should be in \c error.h #define check(rc, msg) \ @@ -45,4 +56,126 @@ abort(); \ } else { } \ +///Structure returned by \ref addPetersen(). + +///Structure returned by \ref addPetersen(). +/// +template struct PetStruct +{ + ///Vector containing the outer nodes. + std::vector outer; + ///Vector containing the inner nodes. + std::vector inner; + ///Vector containing the arcs of the inner circle. + std::vector incir; + ///Vector containing the arcs of the outer circle. + std::vector outcir; + ///Vector containing the chord arcs. + std::vector chords; +}; + + + +///Adds a Petersen digraph to \c G. + +///Adds a Petersen digraph to \c G. +///\return The nodes and arcs of the generated digraph. + +template +PetStruct addPetersen(Digraph &G,int num = 5) +{ + PetStruct n; + + for(int i=0;i void bidirDigraph(Digraph &G) +{ + typedef typename Digraph::Arc Arc; + typedef typename Digraph::ArcIt ArcIt; + + std::vector ee; + + for(ArcIt e(G);e!=INVALID;++e) ee.push_back(e); + + for(typename std::vector::iterator p=ee.begin();p!=ee.end();p++) + G.addArc(G.target(*p),G.source(*p)); +} + + +/// \brief Checks the bidirectioned Petersen digraph. +/// +/// Checks the bidirectioned Petersen digraph. +/// +template void checkBidirPetersen(Digraph &G, int num = 5) +{ + typedef typename Digraph::Node Node; + + typedef typename Digraph::ArcIt ArcIt; + typedef typename Digraph::NodeIt NodeIt; + + checkDigraphNodeList(G, 2 * num); + checkDigraphArcList(G, 6 * num); + + for(NodeIt n(G);n!=INVALID;++n) { + checkDigraphInArcList(G, n, 3); + checkDigraphOutArcList(G, n, 3); + } +} + +///Structure returned by \ref addUPetersen(). + +///Structure returned by \ref addUPetersen(). +/// +template struct UPetStruct +{ + ///Vector containing the outer nodes. + std::vector outer; + ///Vector containing the inner nodes. + std::vector inner; + ///Vector containing the arcs of the inner circle. + std::vector incir; + ///Vector containing the arcs of the outer circle. + std::vector outcir; + ///Vector containing the chord arcs. + std::vector chords; +}; + +///Adds a Petersen digraph to the undirected \c G. + +///Adds a Petersen digraph to the undirected \c G. +///\return The nodes and arcs of the generated digraph. + +template +UPetStruct addUPetersen(Digraph &G,int num=5) +{ + UPetStruct n; + + for(int i=0;i