COIN-OR::LEMON - Graph Library

Changeset 377:a12eef1f82b2 in lemon for test/graph_test.cc


Ignore:
Timestamp:
11/06/08 15:16:37 (11 years ago)
Author:
Peter Kovacs <kpeter@…>
Branch:
default
Phase:
public
Message:

Rework hypercube graph implementation to be undirected (#57)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • test/graph_test.cc

    r368 r377  
    2222#include <lemon/full_graph.h>
    2323#include <lemon/grid_graph.h>
     24#include <lemon/hypercube_graph.h>
    2425
    2526#include "test_tools.h"
     
    105106
    106107  for (NodeIt n(G); n != INVALID; ++n) {
    107     checkGraphOutArcList(G, n, num - 1);   
    108     checkGraphInArcList(G, n, num - 1);   
    109     checkGraphIncEdgeList(G, n, num - 1);   
     108    checkGraphOutArcList(G, n, num - 1);
     109    checkGraphInArcList(G, n, num - 1);
     110    checkGraphIncEdgeList(G, n, num - 1);
    110111  }
    111112
     
    122123  checkGraphEdgeMap(G);
    123124
    124  
     125
    125126  for (int i = 0; i < G.nodeNum(); ++i) {
    126127    check(G.index(G(i)) == i, "Wrong index");
     
    178179    checkConcept<Graph, GridGraph>();
    179180  }
     181  { // Checking HypercubeGraph
     182    checkConcept<Graph, HypercubeGraph>();
     183  }
    180184}
    181185
     
    313317}
    314318
     319void checkHypercubeGraph(int dim) {
     320  GRAPH_TYPEDEFS(HypercubeGraph);
     321
     322  HypercubeGraph G(dim);
     323  checkGraphNodeList(G, 1 << dim);
     324  checkGraphEdgeList(G, dim * (1 << dim-1));
     325  checkGraphArcList(G, dim * (1 << dim));
     326
     327  Node n = G.nodeFromId(dim);
     328
     329  for (NodeIt n(G); n != INVALID; ++n) {
     330    checkGraphIncEdgeList(G, n, dim);
     331    for (IncEdgeIt e(G, n); e != INVALID; ++e) {
     332      check( (G.u(e) == n &&
     333              G.id(G.v(e)) == G.id(n) ^ (1 << G.dimension(e))) ||
     334             (G.v(e) == n &&
     335              G.id(G.u(e)) == G.id(n) ^ (1 << G.dimension(e))),
     336             "Wrong edge or wrong dimension");
     337    }
     338
     339    checkGraphOutArcList(G, n, dim);
     340    for (OutArcIt a(G, n); a != INVALID; ++a) {
     341      check(G.source(a) == n &&
     342            G.id(G.target(a)) == G.id(n) ^ (1 << G.dimension(a)),
     343            "Wrong arc or wrong dimension");
     344    }
     345
     346    checkGraphInArcList(G, n, dim);
     347    for (InArcIt a(G, n); a != INVALID; ++a) {
     348      check(G.target(a) == n &&
     349            G.id(G.source(a)) == G.id(n) ^ (1 << G.dimension(a)),
     350            "Wrong arc or wrong dimension");
     351    }
     352  }
     353
     354  checkGraphConArcList(G, (1 << dim) * dim);
     355  checkGraphConEdgeList(G, dim * (1 << dim-1));
     356
     357  checkArcDirections(G);
     358
     359  checkNodeIds(G);
     360  checkArcIds(G);
     361  checkEdgeIds(G);
     362  checkGraphNodeMap(G);
     363  checkGraphArcMap(G);
     364  checkGraphEdgeMap(G);
     365}
     366
    315367void checkGraphs() {
    316368  { // Checking ListGraph
     
    322374    checkGraphValidity<SmartGraph>();
    323375  }
    324   { // Checking FullGraph   
     376  { // Checking FullGraph
    325377    checkFullGraph(7);
    326378    checkFullGraph(8);
     
    333385    checkGridGraph(1, 1);
    334386  }
     387  { // Checking HypercubeGraph
     388    checkHypercubeGraph(1);
     389    checkHypercubeGraph(2);
     390    checkHypercubeGraph(3);
     391    checkHypercubeGraph(4);
     392  }
    335393}
    336394
Note: See TracChangeset for help on using the changeset viewer.