2 * src/test/test_tools.h - Part of HUGOlib, a generic C++ optimization library
4 * Copyright (C) 2004 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
17 #ifndef HUGO_TEST_TEST_TOOLS_H
18 #define HUGO_TEST_TEST_TOOLS_H
22 //! \brief Some utility to write test programs.
28 ///If \c rc is fail, writes an error message end exit.
30 ///If \c rc is fail, writes an error message end exit.
31 ///The error message contains the file name and the line number of the
32 ///source code in a standard from, which makes it possible to go there
33 ///using good source browsers like e.g. \c emacs.
36 ///\code check(0==1,"This is obviously false.");\endcode will
37 ///print this (and then exits).
38 ///\verbatim graph_test.cc:123: error: This is obviously false. \endverbatim
40 ///\todo It should be in \c error.h
41 #define check(rc, msg) \
43 std::cerr << __FILE__ ":" << __LINE__ << ": error: " << msg << std::endl; \
47 ///Structure returned by \ref addPetersen().
49 ///Structure returned by \ref addPetersen().
51 template<class Graph> struct PetStruct
53 ///Vector containing the outer nodes.
54 std::vector<typename Graph::Node> outer;
55 ///Vector containing the inner nodes.
56 std::vector<typename Graph::Node> inner;
57 ///Vector containing the edges of the inner circle.
58 std::vector<typename Graph::Edge> incir;
59 ///Vector containing the edges of the outer circle.
60 std::vector<typename Graph::Edge> outcir;
61 ///Vector containing the chord edges.
62 std::vector<typename Graph::Edge> chords;
67 ///Adds a Petersen graph to \c G.
69 ///Adds a Petersen graph to \c G.
70 ///\return The nodes end edges og the generated graph.
72 template<typename Graph>
73 PetStruct<Graph> addPetersen(Graph &G,int num=5)
77 for(int i=0;i<num;i++) {
78 n.outer.push_back(G.addNode());
79 n.inner.push_back(G.addNode());
82 for(int i=0;i<num;i++) {
83 n.chords.push_back(G.addEdge(n.outer[i],n.inner[i]));
84 n.outcir.push_back(G.addEdge(n.outer[i],n.outer[(i+1)%5]));
85 n.incir.push_back(G.addEdge(n.inner[i],n.inner[(i+2)%5]));