test/test_tools.h
author Peter Kovacs <kpeter@inf.elte.hu>
Thu, 12 Nov 2009 23:26:13 +0100
changeset 806 fa6f37d7a25b
parent 440 88ed40ad0d4f
child 877 141f9c0db4a3
permissions -rw-r--r--
Entirely rework CapacityScaling (#180)

- Use the new interface similarly to NetworkSimplex.
- Rework the implementation using an efficient internal structure
for handling the residual network. This improvement made the
code much faster (up to 2-5 times faster on large graphs).
- Handle GEQ supply type (LEQ is not supported).
- Handle negative costs for arcs of finite capacity.
(Note that this algorithm cannot handle arcs of negative cost
and infinite upper bound, thus it returns UNBOUNDED if such
an arc exists.)
- Extend the documentation.
alpar@209
     1
/* -*- mode: C++; indent-tabs-mode: nil; -*-
alpar@4
     2
 *
alpar@209
     3
 * This file is a part of LEMON, a generic C++ optimization library.
alpar@4
     4
 *
alpar@440
     5
 * Copyright (C) 2003-2009
alpar@4
     6
 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
alpar@4
     7
 * (Egervary Research Group on Combinatorial Optimization, EGRES).
alpar@4
     8
 *
alpar@4
     9
 * Permission to use, modify and distribute this software is granted
alpar@4
    10
 * provided that this copyright notice appears in all copies. For
alpar@4
    11
 * precise terms see the accompanying LICENSE file.
alpar@4
    12
 *
alpar@4
    13
 * This software is provided "AS IS" with no warranty of any kind,
alpar@4
    14
 * express or implied, and with no claim as to its suitability for any
alpar@4
    15
 * purpose.
alpar@4
    16
 *
alpar@4
    17
 */
alpar@4
    18
alpar@4
    19
#ifndef LEMON_TEST_TEST_TOOLS_H
alpar@4
    20
#define LEMON_TEST_TEST_TOOLS_H
alpar@4
    21
kpeter@171
    22
///\ingroup misc
kpeter@171
    23
///\file
kpeter@171
    24
///\brief Some utilities to write test programs.
kpeter@171
    25
alpar@4
    26
#include <iostream>
alpar@184
    27
#include <stdlib.h>
alpar@100
    28
kpeter@171
    29
///If \c rc is fail, writes an error message and exits.
alpar@100
    30
kpeter@171
    31
///If \c rc is fail, writes an error message and exits.
alpar@4
    32
///The error message contains the file name and the line number of the
alpar@4
    33
///source code in a standard from, which makes it possible to go there
alpar@4
    34
///using good source browsers like e.g. \c emacs.
alpar@4
    35
///
alpar@4
    36
///For example
alpar@4
    37
///\code check(0==1,"This is obviously false.");\endcode will
kpeter@171
    38
///print something like this (and then exits).
kpeter@171
    39
///\verbatim file_name.cc:123: error: This is obviously false. \endverbatim
kpeter@763
    40
#define check(rc, msg)                                                  \
kpeter@763
    41
  {                                                                     \
kpeter@763
    42
    if(!(rc)) {                                                         \
kpeter@763
    43
      std::cerr << __FILE__ ":" << __LINE__ << ": error: "              \
kpeter@763
    44
                << msg << std::endl;                                    \
kpeter@763
    45
      abort();                                                          \
kpeter@763
    46
    } else { }                                                          \
kpeter@763
    47
  }                                                                     \
kpeter@763
    48
    
alpar@4
    49
alpar@4
    50
#endif