COIN-OR::LEMON - Graph Library

source: lemon-0.x/test/graph_utils_test.h @ 2229:4dbb6dd2dd4b

Last change on this file since 2229:4dbb6dd2dd4b was 2229:4dbb6dd2dd4b, checked in by Balazs Dezso, 17 years ago

Mersenne Twister random number generator

The code is based on the official MT19937 implementation
It is fully rewritten:

http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html

todo: fixing copyright information

File size: 2.5 KB
Line 
1/* -*- C++ -*-
2 *
3 * This file is a part of LEMON, a generic C++ optimization library
4 *
5 * Copyright (C) 2003-2006
6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7 * (Egervary Research Group on Combinatorial Optimization, EGRES).
8 *
9 * Permission to use, modify and distribute this software is granted
10 * provided that this copyright notice appears in all copies. For
11 * precise terms see the accompanying LICENSE file.
12 *
13 * This software is provided "AS IS" with no warranty of any kind,
14 * express or implied, and with no claim as to its suitability for any
15 * purpose.
16 *
17 */
18
19#ifndef LEMON_TEST_GRAPH_UTILS_TEST_H
20#define LEMON_TEST_GRAPH_UTILS_TEST_H
21
22
23#include "test_tools.h"
24#include <cstdlib>
25#include <ctime>
26
27//! \ingroup misc
28//! \file
29//! \brief Test cases for graph utils.
30namespace lemon {
31 
32  template <typename Graph>
33  void checkGraphCounters() {
34    const int num = 5;
35    Graph graph;
36    addPetersen(graph, num);
37    bidirGraph(graph);
38    check(countNodes(graph) == 2*num, "Wrong node number.");
39    check(countEdges(graph) == 6*num, "Wrong edge number.");   
40    for (typename Graph::NodeIt it(graph); it != INVALID; ++it) {
41      check(countOutEdges(graph, it) == 3, "Wrong out degree number.");
42      check(countInEdges(graph, it) == 3, "Wrong in degree number.");
43    }
44  }
45
46  template <typename Graph>
47  void checkFindEdge() {
48    typedef typename Graph::Node Node;
49    typedef typename Graph::Edge Edge;
50    typedef typename Graph::NodeIt NodeIt;
51    typedef typename Graph::EdgeIt EdgeIt;
52    Graph graph;
53    for (int i = 0; i < 10; ++i) {
54      graph.addNode();
55    }
56    DescriptorMap<Graph, Node> nodes(graph);
57    typename DescriptorMap<Graph, Node>::InverseMap invNodes(nodes);
58    for (int i = 0; i < 100; ++i) {
59      int src = rnd.getInt(invNodes.size());
60      int trg = rnd.getInt(invNodes.size());
61      graph.addEdge(invNodes[src], invNodes[trg]);
62    }
63    typename Graph::template EdgeMap<bool> found(graph, false);
64    DescriptorMap<Graph, Edge> edges(graph);
65    for (NodeIt src(graph); src != INVALID; ++src) {
66      for (NodeIt trg(graph); trg != INVALID; ++trg) {
67        for (ConEdgeIt<Graph> con(graph, src, trg); con != INVALID; ++con) {
68          check(graph.source(con) == src, "Wrong source.");
69          check(graph.target(con) == trg, "Wrong target.");
70          check(found[con] == false, "The edge found already.");
71          found[con] = true;
72        }
73      }
74    }
75    for (EdgeIt it(graph); it != INVALID; ++it) {
76      check(found[it] == true, "The edge is not found.");
77    }
78  }
79 
80} //namespace lemon
81
82
83#endif
Note: See TracBrowser for help on using the repository browser.