tests/circulation.cc
author Alpar Juttner <alpar@cs.elte.hu>
Sun, 11 Dec 2011 18:43:33 +0100
changeset 13 0ab493e5250e
parent 11 cf6519daa7fa
permissions -rw-r--r--
Add build id field to running time logs

Configurable by BENCHMARK_BUILD_ID cmake variable,
which defaults to the last component of the build directory.
     1 /* -*- mode: C++; indent-tabs-mode: nil; -*-
     2  *
     3  * This file is a part of LEMON, a generic C++ optimization library.
     4  *
     5  * Copyright (C) 2003-2011
     6  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
     7  * (Egervary Research Group on Combinatorial Optimization, EGRES).
     8  *
     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.
    12  *
    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
    15  * purpose.
    16  *
    17  */
    18 
    19 #include <benchmark_tools.h>
    20 #include <lemon/circulation.h>
    21 #include <lemon/smart_graph.h>
    22 #include <lemon/lgf_reader.h>
    23 #include <lemon/dimacs.h>
    24 #include <lemon/error.h>
    25 #include <istream>
    26 
    27 std::string test_name = "circulation";
    28 
    29 using namespace lemon;
    30 
    31 int testMain(std::istream &input)
    32 {
    33   typedef int Value;
    34   
    35   SmartDigraph g;
    36   
    37   SmartDigraph::ArcMap<Value> lo_cap(g);
    38   SmartDigraph::ArcMap<Value> up_cap(g);
    39   SmartDigraph::ArcMap<Value> cost(g);
    40   SmartDigraph::NodeMap<Value> sup(g);
    41   
    42   Timer ti;
    43   try {
    44     readDimacsMin(input, g, lo_cap, up_cap, cost, sup);
    45   } catch (FormatError& error) {
    46     std::cerr << error.what() << std::endl;
    47     return 1;
    48   }
    49   logTime("fread",ti);
    50 
    51   Timer tf;
    52   ti.restart();
    53   Circulation<SmartDigraph,
    54     SmartDigraph::ArcMap<Value>,SmartDigraph::ArcMap<Value>,
    55     SmartDigraph::NodeMap<Value> > circ(g,lo_cap,up_cap,sup);
    56   logTime("setup",ti);
    57   ti.restart();
    58   bool res = circ.run();
    59   logTime("alg",ti);
    60   logTime("full",tf);
    61   if(res)
    62     {
    63       std::cerr << "A feasible circulation is found\n";
    64       std::cerr << "Checking...\n";
    65       ti.restart();
    66       bool res2 = circ.checkFlow();
    67       logTime("check",ti);
    68       if(res2)
    69         std::cerr << "Success!\n";
    70       else
    71         std::cerr << "Oops!!!!\n";
    72     }
    73   else
    74     {
    75       std::cerr << "A dual solution is found\n";
    76       std::cerr << "Checking...\n";
    77       ti.restart();
    78       bool res2 = circ.checkBarrier();
    79       logTime("check",ti);
    80       if(res2)
    81         std::cerr << "Success!\n";
    82       else
    83         std::cerr << "Dual-Oops!!!!\n";
    84 
    85     }
    86 }
    87