tests/circulation.cc
author Alpar Juttner <alpar@cs.elte.hu>
Sun, 11 Dec 2011 11:19:39 +0100
changeset 11 cf6519daa7fa
parent 10 d7ce0311ece2
child 12 4eab99ff2666
permissions -rw-r--r--
Refactoring and test instance in test logs
alpar@10
     1
#include <benchmark_tools.h>
alpar@9
     2
#include <lemon/circulation.h>
alpar@9
     3
#include <lemon/smart_graph.h>
alpar@9
     4
#include <lemon/lgf_reader.h>
alpar@9
     5
#include <lemon/dimacs.h>
alpar@9
     6
#include <lemon/error.h>
alpar@11
     7
#include <istream>
alpar@9
     8
alpar@11
     9
std::string test_name = "circulation";
alpar@9
    10
alpar@9
    11
using namespace lemon;
alpar@9
    12
alpar@11
    13
int testMain(std::istream &input)
alpar@9
    14
{
alpar@9
    15
  typedef int Value;
alpar@9
    16
  
alpar@9
    17
  SmartDigraph g;
alpar@9
    18
  
alpar@9
    19
  SmartDigraph::ArcMap<Value> lo_cap(g);
alpar@9
    20
  SmartDigraph::ArcMap<Value> up_cap(g);
alpar@9
    21
  SmartDigraph::ArcMap<Value> cost(g);
alpar@9
    22
  SmartDigraph::NodeMap<Value> sup(g);
alpar@9
    23
  
alpar@9
    24
  Timer ti;
alpar@9
    25
  try {
alpar@9
    26
    readDimacsMin(input, g, lo_cap, up_cap, cost, sup);
alpar@9
    27
  } catch (FormatError& error) {
alpar@9
    28
    std::cerr << error.what() << std::endl;
alpar@9
    29
    return 1;
alpar@9
    30
  }
alpar@11
    31
  logTime("fread",ti);
alpar@10
    32
alpar@10
    33
  Timer tf;
alpar@9
    34
  ti.restart();
alpar@9
    35
  Circulation<SmartDigraph,
alpar@9
    36
    SmartDigraph::ArcMap<Value>,SmartDigraph::ArcMap<Value>,
alpar@9
    37
    SmartDigraph::NodeMap<Value> > circ(g,lo_cap,up_cap,sup);
alpar@10
    38
  logTime("setup",ti);
alpar@9
    39
  ti.restart();
alpar@9
    40
  bool res = circ.run();
alpar@10
    41
  logTime("alg",ti);
alpar@10
    42
  logTime("full",tf);
alpar@9
    43
  if(res)
alpar@9
    44
    {
alpar@10
    45
      std::cerr << "A feasible circulation is found\n";
alpar@10
    46
      std::cerr << "Checking...\n";
alpar@9
    47
      ti.restart();
alpar@9
    48
      bool res2 = circ.checkFlow();
alpar@10
    49
      logTime("check",ti);
alpar@9
    50
      if(res2)
alpar@10
    51
        std::cerr << "Success!\n";
alpar@9
    52
      else
alpar@10
    53
        std::cerr << "Oops!!!!\n";
alpar@9
    54
    }
alpar@9
    55
  else
alpar@9
    56
    {
alpar@10
    57
      std::cerr << "A dual solution is found\n";
alpar@10
    58
      std::cerr << "Checking...\n";
alpar@9
    59
      ti.restart();
alpar@9
    60
      bool res2 = circ.checkBarrier();
alpar@10
    61
      logTime("check",ti);
alpar@9
    62
      if(res2)
alpar@10
    63
        std::cerr << "Success!\n";
alpar@9
    64
      else
alpar@10
    65
        std::cerr << "Dual-Oops!!!!\n";
alpar@9
    66
alpar@9
    67
    }
alpar@9
    68
}
alpar@9
    69