diff --git a/test/heap_test.cc b/test/heap_test.cc new file mode 100644 --- /dev/null +++ b/test/heap_test.cc @@ -0,0 +1,140 @@ +/* -*- C++ -*- + * + * 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. + * + */ + +#include +#include +#include +#include + +#include +#include + +#include + +#include + +#include +#include +#include +#include + +#include "test_tools.h" + +#include "heap_test.h" + +#include + +using namespace lemon; +using namespace lemon::concepts; + + +int main() { + + typedef int Item; + typedef int Prio; + typedef IntIntMap ItemIntMap; + + typedef ListDigraph Digraph; + + typedef Digraph::Arc Arc; + typedef Digraph::Node Node; + typedef Digraph::ArcIt ArcIt; + typedef Digraph::NodeIt NodeIt; + typedef Digraph::ArcMap LengthMap; + + Digraph digraph; + LengthMap length(digraph); + Node start; + + /// \todo create own test digraph + + std::string f_name; + if( getenv("srcdir") ) + f_name = std::string(getenv("srcdir")); + else f_name = "."; + f_name += "/test/dijkstra_test.lgf"; + + std::ifstream input(f_name.c_str()); + check(input, "Input file '" << f_name << "' not found."); + DigraphReader(input, digraph). + readArcMap("capacity", length). + readNode("source", start). + run(); + + { + std::cerr << "Checking Bin Heap" << std::endl; + + typedef BinHeap IntHeap; + checkConcept, IntHeap>(); + heapSortTest(100); + heapIncreaseTest(100); + + typedef FibHeap > NodeHeap; + checkConcept >, NodeHeap>(); + Timer timer; + dijkstraHeapTest(digraph, length, start); + std::cout << timer << std::endl; + } + { + std::cerr << "Checking Fib Heap" << std::endl; + + typedef FibHeap IntHeap; + checkConcept, IntHeap>(); + heapSortTest(100); + heapIncreaseTest(100); + + typedef FibHeap > NodeHeap; + checkConcept >, NodeHeap>(); + Timer timer; + dijkstraHeapTest(digraph, length, start); + std::cout << timer << std::endl; + } + { + std::cerr << "Checking Radix Heap" << std::endl; + + typedef RadixHeap IntHeap; + checkConcept, IntHeap>(); + heapSortTest(100); + heapIncreaseTest(100); + + typedef RadixHeap > NodeHeap; + checkConcept >, NodeHeap>(); + Timer timer; + dijkstraHeapTest(digraph, length, start); + std::cout << timer << std::endl; + } + + { + std::cerr << "Checking Bucket Heap" << std::endl; + + typedef BucketHeap IntHeap; + checkConcept, IntHeap>(); + heapSortTest(100); + heapIncreaseTest(100); + + typedef BucketHeap > NodeHeap; + checkConcept >, NodeHeap>(); + Timer timer; + dijkstraHeapTest(digraph, length, start); + std::cout << timer << std::endl; + } + + std::cout << __FILE__ ": All tests passed.\n"; + + return 0; +}