diff -r e825655c24a4 -r 4f8b9cee576b test/undir_graph_test.cc --- a/test/undir_graph_test.cc Mon Sep 12 09:15:59 2005 +0000 +++ b/test/undir_graph_test.cc Mon Sep 12 09:19:52 2005 +0000 @@ -5,6 +5,7 @@ #include #include #include +#include #include @@ -43,12 +44,35 @@ checkConcept(); checkConcept(); + + checkConcept(); } template void check_item_counts(Graph &g, int n, int e) { - check(countNodes(g)==n, "Wrong node number."); - check(countEdges(g)==2*e, "Wrong edge number."); + int nn = 0; + for (typename Graph::NodeIt it(g); it != INVALID; ++it) { + ++nn; + } + + check(nn == n, "Wrong node number."); + check(countNodes(g) == n, "Wrong node number."); + + int ee = 0; + for (typename Graph::EdgeIt it(g); it != INVALID; ++it) { + ++ee; + } + + check(ee == 2*e, "Wrong edge number."); + check(countEdges(g) == 2*e, "Wrong edge number."); + + int uee = 0; + for (typename Graph::UndirEdgeIt it(g); it != INVALID; ++it) { + ++uee; + } + + check(uee == e, "Wrong undir edge number."); + check(countUndirEdges(g) == e, "Wrong undir edge number."); } template @@ -108,8 +132,50 @@ // print_items(g); check_item_counts(g,3,2); +} +void checkGridGraph(const GridGraph& g, int w, int h) { + check(g.width() == w, "Wrong width"); + check(g.height() == h, "Wrong height"); + for (int i = 0; i < w; ++i) { + for (int j = 0; j < h; ++j) { + check(g.col(g(i, j)) == i, "Wrong col"); + check(g.row(g(i, j)) == j, "Wrong row"); + } + } + + for (int i = 0; i < w; ++i) { + for (int j = 0; j < h - 1; ++j) { + check(g.source(g.down(g(i, j))) == g(i, j), "Wrong down"); + check(g.target(g.down(g(i, j))) == g(i, j + 1), "Wrong down"); + } + check(g.down(g(i, h - 1)) == INVALID, "Wrong down"); + } + + for (int i = 0; i < w; ++i) { + for (int j = 1; j < h; ++j) { + check(g.source(g.up(g(i, j))) == g(i, j), "Wrong up"); + check(g.target(g.up(g(i, j))) == g(i, j - 1), "Wrong up"); + } + check(g.up(g(i, 0)) == INVALID, "Wrong up"); + } + + for (int j = 0; j < h; ++j) { + for (int i = 0; i < w - 1; ++i) { + check(g.source(g.right(g(i, j))) == g(i, j), "Wrong right"); + check(g.target(g.right(g(i, j))) == g(i + 1, j), "Wrong right"); + } + check(g.right(g(w - 1, j)) == INVALID, "Wrong right"); + } + + for (int j = 0; j < h; ++j) { + for (int i = 1; i < w; ++i) { + check(g.source(g.left(g(i, j))) == g(i, j), "Wrong left"); + check(g.target(g.left(g(i, j))) == g(i - 1, j), "Wrong left"); + } + check(g.left(g(0, j)) == INVALID, "Wrong left"); + } } int main() { @@ -123,5 +189,13 @@ check_item_counts(g, 5, 10); } + { + GridGraph g(5, 6); + check_item_counts(g, 30, 49); + checkGridGraph(g, 5, 6); + } + + std::cout << __FILE__ ": All tests passed.\n"; + return 0; }