test/suurballe_test.cc
author hegyi
Thu, 05 Jan 2006 12:30:09 +0000
changeset 1878 409a31271efd
parent 1435 8e85e6bbefdf
child 1956 a055123339d5
permissions -rw-r--r--
Several changes. \n If new map is added to mapstorage it emits signal with the name of the new map. This was important, because from now on not only tha mapwin should be updated. \n Furthermore algobox gets a pointer to mapstorage instead of only the mapnames from it. This is important because without it it would be complicated to pass all of the required maps to algobox.
alpar@906
     1
/* -*- C++ -*-
ladanyi@1435
     2
 * test/suurballe_test.cc - Part of LEMON, a generic C++ optimization library
alpar@906
     3
 *
alpar@1875
     4
 * Copyright (C) 2006 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
alpar@1359
     5
 * (Egervary Research Group on Combinatorial Optimization, EGRES).
alpar@906
     6
 *
alpar@906
     7
 * Permission to use, modify and distribute this software is granted
alpar@906
     8
 * provided that this copyright notice appears in all copies. For
alpar@906
     9
 * precise terms see the accompanying LICENSE file.
alpar@906
    10
 *
alpar@906
    11
 * This software is provided "AS IS" with no warranty of any kind,
alpar@906
    12
 * express or implied, and with no claim as to its suitability for any
alpar@906
    13
 * purpose.
alpar@906
    14
 *
alpar@906
    15
 */
alpar@906
    16
alpar@899
    17
#include <iostream>
alpar@921
    18
#include <lemon/list_graph.h>
alpar@921
    19
#include <lemon/suurballe.h>
alpar@899
    20
//#include <path.h>
alpar@899
    21
#include "test_tools.h"
alpar@899
    22
alpar@921
    23
using namespace lemon;
alpar@899
    24
alpar@899
    25
alpar@899
    26
bool passed = true;
alpar@899
    27
alpar@899
    28
alpar@899
    29
int main()
alpar@899
    30
{
marci@941
    31
  typedef ListGraph Graph;
marci@941
    32
  typedef Graph::Node Node;
marci@941
    33
  typedef Graph::Edge Edge;
alpar@899
    34
marci@941
    35
  Graph graph;
alpar@899
    36
alpar@899
    37
  //Ahuja könyv példája
alpar@899
    38
alpar@899
    39
  Node s=graph.addNode();
alpar@899
    40
  Node v1=graph.addNode();  
alpar@899
    41
  Node v2=graph.addNode();
alpar@899
    42
  Node v3=graph.addNode();
alpar@899
    43
  Node v4=graph.addNode();
alpar@899
    44
  Node v5=graph.addNode();
alpar@899
    45
  Node t=graph.addNode();
alpar@899
    46
alpar@899
    47
  Edge s_v1=graph.addEdge(s, v1);
alpar@899
    48
  Edge v1_v2=graph.addEdge(v1, v2);
alpar@899
    49
  Edge s_v3=graph.addEdge(s, v3);
alpar@899
    50
  Edge v2_v4=graph.addEdge(v2, v4);
alpar@899
    51
  Edge v2_v5=graph.addEdge(v2, v5);
alpar@899
    52
  Edge v3_v5=graph.addEdge(v3, v5);
alpar@899
    53
  Edge v4_t=graph.addEdge(v4, t);
alpar@899
    54
  Edge v5_t=graph.addEdge(v5, t);
alpar@899
    55
  
alpar@899
    56
marci@941
    57
  Graph::EdgeMap<int> length(graph);
alpar@899
    58
alpar@899
    59
  length.set(s_v1, 6);
alpar@899
    60
  length.set(v1_v2, 4);
alpar@899
    61
  length.set(s_v3, 10);
alpar@899
    62
  length.set(v2_v4, 5);
alpar@899
    63
  length.set(v2_v5, 1);
alpar@899
    64
  length.set(v3_v5, 5);
alpar@899
    65
  length.set(v4_t, 8);
alpar@899
    66
  length.set(v5_t, 8);
alpar@899
    67
alpar@899
    68
  std::cout << "Minlengthpaths algorithm test..." << std::endl;
alpar@899
    69
alpar@899
    70
  
alpar@899
    71
  int k=3;
marci@941
    72
  Suurballe< Graph, Graph::EdgeMap<int> >
marci@941
    73
    surb_test(graph, length, s, t);
alpar@899
    74
marci@941
    75
  check(  surb_test.run(k) == 2 && surb_test.totalLength() == 46,
alpar@899
    76
	  "Two paths, total length should be 46");
alpar@899
    77
alpar@899
    78
  check(  surb_test.checkComplementarySlackness(),
alpar@899
    79
	  "Complementary slackness conditions are not met.");
alpar@899
    80
marci@941
    81
  //  typedef DirPath<Graph> DPath;
alpar@899
    82
  //  DPath P(graph);
alpar@899
    83
alpar@899
    84
  /*
alpar@899
    85
  surb_test.getPath(P,0);
alpar@899
    86
  check(P.length() == 4, "First path should contain 4 edges.");  
marci@941
    87
  std::cout<<P.length()<<std::endl;
alpar@899
    88
  surb_test.getPath(P,1);
alpar@899
    89
  check(P.length() == 3, "Second path: 3 edges.");
marci@941
    90
  std::cout<<P.length()<<std::endl;
alpar@899
    91
  */  
alpar@899
    92
alpar@899
    93
  k=1;
marci@941
    94
  check(  surb_test.run(k) == 1 && surb_test.totalLength() == 19,
alpar@899
    95
	  "One path, total length should be 19");
alpar@899
    96
alpar@899
    97
  check(  surb_test.checkComplementarySlackness(),
alpar@899
    98
	  "Complementary slackness conditions are not met.");
alpar@899
    99
 
alpar@899
   100
  //  surb_test.getPath(P,0);
alpar@899
   101
  //  check(P.length() == 4, "First path should contain 4 edges.");  
alpar@899
   102
marci@941
   103
  std::cout << (passed ? "All tests passed." : "Some of the tests failed!!!")
marci@941
   104
	    << std::endl;
alpar@899
   105
alpar@899
   106
  return passed ? 0 : 1;
alpar@899
   107
alpar@899
   108
}