1 /* -*- mode: C++; indent-tabs-mode: nil; -*-
 
     3  * This file is a part of LEMON, a generic C++ optimization library.
 
     5  * Copyright (C) 2003-2008
 
     6  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
 
     7  * (Egervary Research Group on Combinatorial Optimization, EGRES).
 
     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.
 
    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
 
    19 #include <lemon/concepts/digraph.h>
 
    20 #include <lemon/list_graph.h>
 
    21 #include <lemon/smart_graph.h>
 
    22 //#include <lemon/full_graph.h>
 
    23 //#include <lemon/hypercube_graph.h>
 
    25 #include "test_tools.h"
 
    26 #include "graph_test.h"
 
    28 using namespace lemon;
 
    29 using namespace lemon::concepts;
 
    31 template <class Digraph>
 
    33   TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
 
    36   checkGraphNodeList(G, 0);
 
    37   checkGraphArcList(G, 0);
 
    43   checkGraphNodeList(G, 3);
 
    44   checkGraphArcList(G, 0);
 
    46   Arc a1 = G.addArc(n1, n2);
 
    47   check(G.source(a1) == n1 && G.target(a1) == n2, "Wrong arc");
 
    48   checkGraphNodeList(G, 3);
 
    49   checkGraphArcList(G, 1);
 
    51   checkGraphOutArcList(G, n1, 1);
 
    52   checkGraphOutArcList(G, n2, 0);
 
    53   checkGraphOutArcList(G, n3, 0);
 
    55   checkGraphInArcList(G, n1, 0);
 
    56   checkGraphInArcList(G, n2, 1);
 
    57   checkGraphInArcList(G, n3, 0);
 
    59   checkGraphConArcList(G, 1);
 
    61   Arc a2 = G.addArc(n2, n1), a3 = G.addArc(n2, n3), a4 = G.addArc(n2, n3);
 
    62   checkGraphNodeList(G, 3);
 
    63   checkGraphArcList(G, 4);
 
    65   checkGraphOutArcList(G, n1, 1);
 
    66   checkGraphOutArcList(G, n2, 3);
 
    67   checkGraphOutArcList(G, n3, 0);
 
    69   checkGraphInArcList(G, n1, 1);
 
    70   checkGraphInArcList(G, n2, 1);
 
    71   checkGraphInArcList(G, n3, 2);
 
    73   checkGraphConArcList(G, 4);
 
    83 void checkConcepts() {
 
    84   { // Checking digraph components
 
    85     checkConcept<BaseDigraphComponent, BaseDigraphComponent >();
 
    87     checkConcept<IDableDigraphComponent<>,
 
    88       IDableDigraphComponent<> >();
 
    90     checkConcept<IterableDigraphComponent<>,
 
    91       IterableDigraphComponent<> >();
 
    93     checkConcept<MappableDigraphComponent<>,
 
    94       MappableDigraphComponent<> >();
 
    96   { // Checking skeleton digraph
 
    97     checkConcept<Digraph, Digraph>();
 
    99   { // Checking ListDigraph
 
   100     checkConcept<Digraph, ListDigraph>();
 
   101     checkConcept<AlterableDigraphComponent<>, ListDigraph>();
 
   102     checkConcept<ExtendableDigraphComponent<>, ListDigraph>();
 
   103     checkConcept<ClearableDigraphComponent<>, ListDigraph>();
 
   104     checkConcept<ErasableDigraphComponent<>, ListDigraph>();
 
   106   { // Checking SmartDigraph
 
   107     checkConcept<Digraph, SmartDigraph>();
 
   108     checkConcept<AlterableDigraphComponent<>, SmartDigraph>();
 
   109     checkConcept<ExtendableDigraphComponent<>, SmartDigraph>();
 
   110     checkConcept<ClearableDigraphComponent<>, SmartDigraph>();
 
   112 //  { // Checking FullDigraph
 
   113 //    checkConcept<Digraph, FullDigraph>();
 
   115 //  { // Checking HyperCubeDigraph
 
   116 //    checkConcept<Digraph, HyperCubeDigraph>();
 
   120 template <typename Digraph>
 
   121 void checkDigraphValidity() {
 
   122   TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
 
   131     e1 = g.addArc(n1, n2),
 
   132     e2 = g.addArc(n2, n3);
 
   134   check(g.valid(n1), "Wrong validity check");
 
   135   check(g.valid(e1), "Wrong validity check");
 
   137   check(!g.valid(g.nodeFromId(-1)), "Wrong validity check");
 
   138   check(!g.valid(g.arcFromId(-1)), "Wrong validity check");
 
   141 template <typename Digraph>
 
   142 void checkDigraphValidityErase() {
 
   143   TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
 
   152     e1 = g.addArc(n1, n2),
 
   153     e2 = g.addArc(n2, n3);
 
   155   check(g.valid(n1), "Wrong validity check");
 
   156   check(g.valid(e1), "Wrong validity check");
 
   160   check(!g.valid(n1), "Wrong validity check");
 
   161   check(g.valid(n2), "Wrong validity check");
 
   162   check(g.valid(n3), "Wrong validity check");
 
   163   check(!g.valid(e1), "Wrong validity check");
 
   164   check(g.valid(e2), "Wrong validity check");
 
   166   check(!g.valid(g.nodeFromId(-1)), "Wrong validity check");
 
   167   check(!g.valid(g.arcFromId(-1)), "Wrong validity check");
 
   170 void checkDigraphs() {
 
   171   { // Checking ListDigraph
 
   172     checkDigraph<ListDigraph>();
 
   173     checkDigraphValidityErase<ListDigraph>();
 
   175   { // Checking SmartDigraph
 
   176     checkDigraph<SmartDigraph>();
 
   177     checkDigraphValidity<SmartDigraph>();