[Lemon-commits] Alpar Juttner: Transform circulation demo to test
Lemon HG
hg at lemon.cs.elte.hu
Mon Dec 1 15:32:25 CET 2008
details: http://lemon.cs.elte.hu/hg/lemon/rev/fa341dd6ab23
changeset: 415:fa341dd6ab23
user: Alpar Juttner <alpar [at] cs.elte.hu>
date: Mon Dec 01 14:11:31 2008 +0000
description:
Transform circulation demo to test
diffstat:
5 files changed, 120 insertions(+), 142 deletions(-)
demo/Makefile.am | 3 -
demo/circulation-input.lgf | 32 -----------
demo/circulation_demo.cc | 107 ---------------------------------------
test/Makefile.am | 2
test/circulation_test.cc | 118 ++++++++++++++++++++++++++++++++++++++++++++
diffs (truncated from 311 to 300 lines):
diff -r 5a7dbeaed70e -r fa341dd6ab23 demo/Makefile.am
--- a/demo/Makefile.am Fri Nov 21 14:42:47 2008 +0000
+++ b/demo/Makefile.am Mon Dec 01 14:11:31 2008 +0000
@@ -1,19 +1,16 @@
EXTRA_DIST += \
demo/CMakeLists.txt \
- demo/circulation-input.lgf \
demo/digraph.lgf
if WANT_DEMO
noinst_PROGRAMS += \
demo/arg_parser_demo \
- demo/circulation_demo \
demo/graph_to_eps_demo \
demo/lgf_demo
endif WANT_DEMO
demo_arg_parser_demo_SOURCES = demo/arg_parser_demo.cc
-demo_circulation_demo_SOURCES = demo/circulation_demo.cc
demo_graph_to_eps_demo_SOURCES = demo/graph_to_eps_demo.cc
demo_lgf_demo_SOURCES = demo/lgf_demo.cc
diff -r 5a7dbeaed70e -r fa341dd6ab23 demo/circulation-input.lgf
--- a/demo/circulation-input.lgf Fri Nov 21 14:42:47 2008 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
- at nodes
-coordinates_x coordinates_y delta label
--396.638 -311.798 0 0
-154.409 -214.714 13 1
--378.119 -135.808 0 2
--138.182 -58.0452 0 3
-55 -76.1018 0 4
--167.302 169.88 0 5
-71.6876 38.7452 0 6
--328.784 257.777 0 7
-354.242 67.9628 -13 8
-147 266 0 9
- at edges
- label lo_cap up_cap
-0 1 0 0 20
-0 2 1 0 0
-1 1 2 0 3
-1 2 3 0 8
-1 3 4 0 8
-2 5 5 0 5
-3 2 6 0 5
-3 5 7 0 5
-3 6 8 0 5
-4 3 9 0 3
-5 7 10 0 3
-5 6 11 0 10
-5 8 12 0 10
-6 8 13 0 8
-8 9 14 0 20
-8 1 15 0 5
-9 5 16 0 5
- at end
diff -r 5a7dbeaed70e -r fa341dd6ab23 demo/circulation_demo.cc
--- a/demo/circulation_demo.cc Fri Nov 21 14:42:47 2008 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-/* -*- mode: C++; indent-tabs-mode: nil; -*-
- *
- * This file is a part of LEMON, a generic C++ optimization library.
- *
- * Copyright (C) 2003-2008
- * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
- * (Egervary Research Group on Combinatorial Optimization, EGRES).
- *
- * Permission to use, modify and distribute this software is granted
- * provided that this copyright notice appears in all copies. For
- * precise terms see the accompanying LICENSE file.
- *
- * This software is provided "AS IS" with no warranty of any kind,
- * express or implied, and with no claim as to its suitability for any
- * purpose.
- *
- */
-
-///\ingroup demos
-///\file
-///\brief Demonstrating the usage of LEMON's General Flow algorithm
-///
-/// This demo program reads a general network circulation problem from the
-/// file 'circulation-input.lgf', runs the preflow based algorithm for
-/// finding a feasible solution and writes the output
-/// to 'circulation-input.lgf'
-///
-/// \include circulation_demo.cc
-
-#include <iostream>
-
-#include <lemon/list_graph.h>
-#include <lemon/circulation.h>
-#include <lemon/lgf_reader.h>
-#include <lemon/lgf_writer.h>
-
-using namespace lemon;
-
-
-int main (int, char*[])
-{
-
- typedef ListDigraph Digraph;
- typedef Digraph::Node Node;
- typedef Digraph::NodeIt NodeIt;
- typedef Digraph::Arc Arc;
- typedef Digraph::ArcIt ArcIt;
- typedef Digraph::ArcMap<int> ArcMap;
- typedef Digraph::NodeMap<int> NodeMap;
- typedef Digraph::NodeMap<double> DNodeMap;
-
- Digraph g;
- ArcMap lo(g);
- ArcMap up(g);
- NodeMap delta(g);
- NodeMap nid(g);
- ArcMap eid(g);
- DNodeMap cx(g);
- DNodeMap cy(g);
-
- DigraphReader<Digraph>(g,"circulation-input.lgf").
- arcMap("lo_cap", lo).
- arcMap("up_cap", up).
- nodeMap("delta", delta).
- arcMap("label", eid).
- nodeMap("label", nid).
- nodeMap("coordinates_x", cx).
- nodeMap("coordinates_y", cy).
- run();
-
- Circulation<Digraph> gen(g,lo,up,delta);
- bool ret=gen.run();
- if(ret)
- {
- std::cout << "\nA feasible flow has been found.\n";
- if(!gen.checkFlow()) std::cerr << "Oops!!!\n";
- DigraphWriter<Digraph>(g, "circulation-output.lgf").
- arcMap("lo_cap", lo).
- arcMap("up_cap", up).
- arcMap("flow", gen.flowMap()).
- nodeMap("delta", delta).
- arcMap("label", eid).
- nodeMap("label", nid).
- nodeMap("coordinates_x", cx).
- nodeMap("coordinates_y", cy).
- run();
- }
- else {
- std::cout << "\nThere is no such a flow\n";
- Digraph::NodeMap<int> bar(g);
- gen.barrierMap(bar);
- if(!gen.checkBarrier()) std::cerr << "Dual Oops!!!\n";
-
- DigraphWriter<Digraph>(g, "circulation-output.lgf").
- arcMap("lo_cap", lo).
- arcMap("up_cap", up).
- nodeMap("barrier", bar).
- nodeMap("delta", delta).
- arcMap("label", eid).
- nodeMap("label", nid).
- nodeMap("coordinates_x", cx).
- nodeMap("coordinates_y", cy).
- run();
- }
- std::cout << "The output is written to file 'circulation-output.lgf'\n\n";
-
-}
diff -r 5a7dbeaed70e -r fa341dd6ab23 test/Makefile.am
--- a/test/Makefile.am Fri Nov 21 14:42:47 2008 +0000
+++ b/test/Makefile.am Mon Dec 01 14:11:31 2008 +0000
@@ -8,6 +8,7 @@
check_PROGRAMS += \
test/bfs_test \
+ test/circulation_test \
test/counter_test \
test/dfs_test \
test/digraph_test \
@@ -33,6 +34,7 @@
XFAIL_TESTS += test/test_tools_fail$(EXEEXT)
test_bfs_test_SOURCES = test/bfs_test.cc
+test_circulation_test_SOURCES = test/circulation_test.cc
test_counter_test_SOURCES = test/counter_test.cc
test_dfs_test_SOURCES = test/dfs_test.cc
test_digraph_test_SOURCES = test/digraph_test.cc
diff -r 5a7dbeaed70e -r fa341dd6ab23 test/circulation_test.cc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/circulation_test.cc Mon Dec 01 14:11:31 2008 +0000
@@ -0,0 +1,118 @@
+/* -*- mode: C++; indent-tabs-mode: nil; -*-
+ *
+ * This file is a part of LEMON, a generic C++ optimization library.
+ *
+ * Copyright (C) 2003-2008
+ * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
+ * (Egervary Research Group on Combinatorial Optimization, EGRES).
+ *
+ * Permission to use, modify and distribute this software is granted
+ * provided that this copyright notice appears in all copies. For
+ * precise terms see the accompanying LICENSE file.
+ *
+ * This software is provided "AS IS" with no warranty of any kind,
+ * express or implied, and with no claim as to its suitability for any
+ * purpose.
+ *
+ */
+
+///\ingroup demos
+///\file
+///\brief Demonstrating the usage of LEMON's General Flow algorithm
+///
+/// This demo program reads a general network circulation problem from the
+/// file 'circulation-input.lgf', runs the preflow based algorithm for
+/// finding a feasible solution and writes the output
+/// to 'circulation-input.lgf'
+///
+/// \include circulation_demo.cc
+
+#include <iostream>
+
+#include "test_tools.h"
+#include <lemon/list_graph.h>
+#include <lemon/circulation.h>
+#include <lemon/lgf_reader.h>
+
+using namespace lemon;
+
+char test_lgf[] =
+ "@nodes\n"
+ "label delta\n"
+ "0 0\n"
+ "1 13\n"
+ "2 0\n"
+ "3 0\n"
+ "4 0\n"
+ "5 0\n"
+ "6 0\n"
+ "7 0\n"
+ "8 -13\n"
+ "9 0\n"
+ "@edges\n"
+ " label lo_cap up_cap\n"
+ "0 1 0 0 20\n"
+ "0 2 1 0 0\n"
+ "1 1 2 0 3\n"
+ "1 2 3 0 8\n"
+ "1 3 4 0 8\n"
+ "2 5 5 0 5\n"
+ "3 2 6 0 5\n"
+ "3 5 7 0 5\n"
+ "3 6 8 0 5\n"
+ "4 3 9 0 3\n"
+ "5 7 10 0 3\n"
+ "5 6 11 0 10\n"
+ "5 8 12 0 10\n"
+ "6 8 13 0 8\n"
+ "8 9 14 0 20\n"
+ "8 1 15 0 5\n"
+ "9 5 16 0 5\n"
+ "@attributes\n"
+ "source 1\n"
+ "sink 8\n";
+
+int main (int, char*[])
+{
+
+ typedef ListDigraph Digraph;
+ typedef Digraph::Node Node;
+ typedef Digraph::NodeIt NodeIt;
+ typedef Digraph::Arc Arc;
+ typedef Digraph::ArcIt ArcIt;
+ typedef Digraph::ArcMap<int> ArcMap;
+ typedef Digraph::NodeMap<int> NodeMap;
+ typedef Digraph::NodeMap<double> DNodeMap;
+
+ Digraph g;
+ ArcMap lo(g);
+ ArcMap up(g);
+ NodeMap delta(g);
+ NodeMap nid(g);
+ ArcMap eid(g);
+ Node source, sink;
+
+ std::istringstream input(test_lgf);
+ DigraphReader<Digraph>(g,input).
+ arcMap("lo_cap", lo).
+ arcMap("up_cap", up).
+ nodeMap("delta", delta).
+ arcMap("label", eid).
+ nodeMap("label", nid).
+ node("source",source).
+ node("sink",sink).
+ run();
+
+ Circulation<Digraph> gen(g,lo,up,delta);
+ bool ret=gen.run();
More information about the Lemon-commits
mailing list