COIN-OR::LEMON - Graph Library

Changeset 1680:4f8b9cee576b in lemon-0.x for test/undir_graph_test.cc


Ignore:
Timestamp:
09/12/05 11:19:52 (19 years ago)
Author:
Balazs Dezso
Branch:
default
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@2199
Message:

Fixing and improving GridGraph?

File:
1 edited

Legend:

Unmodified
Added
Removed
  • test/undir_graph_test.cc

    r1568 r1680  
    66#include <lemon/smart_graph.h>
    77#include <lemon/full_graph.h>
     8#include <lemon/grid_graph.h>
    89
    910#include <lemon/graph_utils.h>
     
    4445
    4546  checkConcept<UndirGraph, UndirGraph>();
     47
     48  checkConcept<UndirGraph, GridGraph>();
    4649}
    4750
    4851template <typename Graph>
    4952void check_item_counts(Graph &g, int n, int e) {
    50   check(countNodes(g)==n, "Wrong node number.");
    51   check(countEdges(g)==2*e, "Wrong edge number.");
     53  int nn = 0;
     54  for (typename Graph::NodeIt it(g); it != INVALID; ++it) {
     55    ++nn;
     56  }
     57
     58  check(nn == n, "Wrong node number.");
     59  check(countNodes(g) == n, "Wrong node number.");
     60
     61  int ee = 0;
     62  for (typename Graph::EdgeIt it(g); it != INVALID; ++it) {
     63    ++ee;
     64  }
     65
     66  check(ee == 2*e, "Wrong edge number.");
     67  check(countEdges(g) == 2*e, "Wrong edge number.");
     68
     69  int uee = 0;
     70  for (typename Graph::UndirEdgeIt it(g); it != INVALID; ++it) {
     71    ++uee;
     72  }
     73
     74  check(uee == e, "Wrong undir edge number.");
     75  check(countUndirEdges(g) == e, "Wrong undir edge number.");
    5276}
    5377
     
    109133
    110134  check_item_counts(g,3,2);
    111 
    112 
     135}
     136
     137void checkGridGraph(const GridGraph& g, int w, int h) {
     138  check(g.width() == w, "Wrong width");
     139  check(g.height() == h, "Wrong height");
     140
     141  for (int i = 0; i < w; ++i) {
     142    for (int j = 0; j < h; ++j) {
     143      check(g.col(g(i, j)) == i, "Wrong col");
     144      check(g.row(g(i, j)) == j, "Wrong row");
     145    }
     146  }
     147 
     148  for (int i = 0; i < w; ++i) {
     149    for (int j = 0; j < h - 1; ++j) {
     150      check(g.source(g.down(g(i, j))) == g(i, j), "Wrong down");
     151      check(g.target(g.down(g(i, j))) == g(i, j + 1), "Wrong down");
     152    }
     153    check(g.down(g(i, h - 1)) == INVALID, "Wrong down");
     154  }
     155
     156  for (int i = 0; i < w; ++i) {
     157    for (int j = 1; j < h; ++j) {
     158      check(g.source(g.up(g(i, j))) == g(i, j), "Wrong up");
     159      check(g.target(g.up(g(i, j))) == g(i, j - 1), "Wrong up");
     160    }
     161    check(g.up(g(i, 0)) == INVALID, "Wrong up");
     162  }
     163
     164  for (int j = 0; j < h; ++j) {
     165    for (int i = 0; i < w - 1; ++i) {
     166      check(g.source(g.right(g(i, j))) == g(i, j), "Wrong right");
     167      check(g.target(g.right(g(i, j))) == g(i + 1, j), "Wrong right");     
     168    }
     169    check(g.right(g(w - 1, j)) == INVALID, "Wrong right");   
     170  }
     171
     172  for (int j = 0; j < h; ++j) {
     173    for (int i = 1; i < w; ++i) {
     174      check(g.source(g.left(g(i, j))) == g(i, j), "Wrong left");
     175      check(g.target(g.left(g(i, j))) == g(i - 1, j), "Wrong left");     
     176    }
     177    check(g.left(g(0, j)) == INVALID, "Wrong left");   
     178  }
    113179}
    114180
     
    124190  }
    125191
     192  {
     193    GridGraph g(5, 6);
     194    check_item_counts(g, 30, 49);
     195    checkGridGraph(g, 5, 6);
     196  }
     197
     198  std::cout << __FILE__ ": All tests passed.\n";
     199
    126200  return 0;
    127201}
Note: See TracChangeset for help on using the changeset viewer.