COIN-OR::LEMON - Graph Library

source: lemon-main/test/digraph_test.cc @ 187:84c2a2e5cfee

Last change on this file since 187:84c2a2e5cfee was 171:02f4d5d9bfd7, checked in by Peter Kovacs <kpeter@…>, 16 years ago

Improve and redesign test programs + unify their output (ticket #25)

  • Move graph related utilities form test_tools.h to graph_test.h.
  • Move the contents of graph_utils_test.h to graph_utils_test.cc.
  • Rename map_test.h -> graph_maps_test.h.
  • Rename digraph_test.h -> graph_test.h.
  • Many improvements in the following files:
    • digraph_test.cc
    • graph_test.cc
    • graph_test.h
    • graph_maps_test.h
    • graph_utils_test.cc
    • bfs_test.cc
    • dfs_test.cc
    • counter_test.cc
  • Test programs print messages only if it really seems necessary.
  • Remove \file commands form .cc test files.
File size: 3.8 KB
RevLine 
[57]1/* -*- C++ -*-
2 *
3 * This file is a part of LEMON, a generic C++ optimization library
4 *
[107]5 * Copyright (C) 2003-2008
[57]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#include <lemon/concepts/digraph.h>
20#include <lemon/list_graph.h>
[171]21#include <lemon/smart_graph.h>
[57]22//#include <lemon/full_graph.h>
23//#include <lemon/hypercube_graph.h>
24
25#include "test_tools.h"
[171]26#include "graph_test.h"
27#include "graph_maps_test.h"
[57]28
29using namespace lemon;
30using namespace lemon::concepts;
31
[171]32void check_concepts() {
33  { // Checking digraph components
[57]34    checkConcept<BaseDigraphComponent, BaseDigraphComponent >();
35
36    checkConcept<IDableDigraphComponent<>,
37      IDableDigraphComponent<> >();
38
39    checkConcept<IterableDigraphComponent<>,
40      IterableDigraphComponent<> >();
41
42    checkConcept<MappableDigraphComponent<>,
43      MappableDigraphComponent<> >();
44  }
[171]45  { // Checking skeleton digraph
[57]46    checkConcept<Digraph, Digraph>();
47  }
[171]48  { // Checking ListDigraph
49    checkConcept<Digraph, ListDigraph>();
[57]50    checkConcept<AlterableDigraphComponent<>, ListDigraph>();
51    checkConcept<ExtendableDigraphComponent<>, ListDigraph>();
52    checkConcept<ClearableDigraphComponent<>, ListDigraph>();
53    checkConcept<ErasableDigraphComponent<>, ListDigraph>();
[171]54    checkDigraphIterators<ListDigraph>();
55  }
56  { // Checking SmartDigraph
57    checkConcept<Digraph, SmartDigraph>();
58    checkConcept<AlterableDigraphComponent<>, SmartDigraph>();
59    checkConcept<ExtendableDigraphComponent<>, SmartDigraph>();
60    checkConcept<ClearableDigraphComponent<>, SmartDigraph>();
61    checkDigraphIterators<SmartDigraph>();
62  }
63//  { // Checking FullDigraph
64//    checkConcept<Digraph, FullDigraph>();
65//    checkDigraphIterators<FullDigraph>();
66//  }
67//  { // Checking HyperCubeDigraph
68//    checkConcept<Digraph, HyperCubeDigraph>();
69//    checkDigraphIterators<HyperCubeDigraph>();
70//  }
71}
[57]72
[171]73template <typename Digraph>
74void check_graph_validity() {
75  TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
76  Digraph g;
77
78  Node
79    n1 = g.addNode(),
80    n2 = g.addNode(),
81    n3 = g.addNode();
82
83  Arc
84    e1 = g.addArc(n1, n2),
85    e2 = g.addArc(n2, n3);
86
87  check(g.valid(n1), "Wrong validity check");
88  check(g.valid(e1), "Wrong validity check");
89
90  check(!g.valid(g.nodeFromId(-1)), "Wrong validity check");
91  check(!g.valid(g.arcFromId(-1)), "Wrong validity check");
92}
93
94template <typename Digraph>
95void check_graph_validity_erase() {
96  TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
97  Digraph g;
98
99  Node
100    n1 = g.addNode(),
101    n2 = g.addNode(),
102    n3 = g.addNode();
103
104  Arc
105    e1 = g.addArc(n1, n2),
106    e2 = g.addArc(n2, n3);
107
108  check(g.valid(n1), "Wrong validity check");
109  check(g.valid(e1), "Wrong validity check");
110
111  g.erase(n1);
112
113  check(!g.valid(n1), "Wrong validity check");
114  check(g.valid(n2), "Wrong validity check");
115  check(g.valid(n3), "Wrong validity check");
116  check(!g.valid(e1), "Wrong validity check");
117  check(g.valid(e2), "Wrong validity check");
118
119  check(!g.valid(g.nodeFromId(-1)), "Wrong validity check");
120  check(!g.valid(g.arcFromId(-1)), "Wrong validity check");
121}
122
123void check_digraphs() {
124  { // Checking ListDigraph
[57]125    checkDigraph<ListDigraph>();
126    checkGraphNodeMap<ListDigraph>();
127    checkGraphArcMap<ListDigraph>();
[171]128
129    check_graph_validity_erase<ListDigraph>();
[57]130  }
[171]131  { // Checking SmartDigraph
132    checkDigraph<SmartDigraph>();
133    checkGraphNodeMap<SmartDigraph>();
134    checkGraphArcMap<SmartDigraph>();
[57]135
[171]136    check_graph_validity<SmartDigraph>();
137  }
138}
[57]139
[171]140int main() {
141  check_concepts();
142  check_digraphs();
[57]143  return 0;
144}
Note: See TracBrowser for help on using the repository browser.