Changes in / [205:436fe75092b7:204:77d56a21c3ab] in lemon-main
- Files:
-
- 1 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/concepts/heap.h
r203 r113 182 182 Item item; 183 183 Prio prio; 184 State state; 184 185 item=Item(); 185 186 prio=Prio(); 186 187 ignore_unused_variable_warning(item); 187 188 ignore_unused_variable_warning(prio); 189 ignore_unused_variable_warning(state); 188 190 189 191 OwnItem own_item; … … 202 204 203 205 int s = heap.size(); 204 ignore_unused_variable_warning(s);205 206 bool e = heap.empty(); 206 ignore_unused_variable_warning(e);207 207 208 208 prio = heap.prio(); … … 228 228 heap.clear(); 229 229 230 own_state = heap.state(own_item); 230 state = heap.state(item); 231 heap.state(item, state); 232 state = heap.state(own_item); 231 233 heap.state(own_item, own_state); 232 234 235 state = _Heap::PRE_HEAP; 236 state = _Heap::IN_HEAP; 237 state = _Heap::POST_HEAP; 233 238 own_state = _Heap::PRE_HEAP; 234 239 own_state = _Heap::IN_HEAP; -
test/CMakeLists.txt
r203 r200 14 14 graph_test 15 15 graph_utils_test 16 heap_test17 16 kruskal_test 18 17 maps_test -
test/Makefile.am
r203 r200 4 4 noinst_HEADERS += \ 5 5 test/graph_test.h \ 6 test/heap_test.h \ 6 7 test/graph_maps_test.h \ 7 8 test/test_tools.h … … 18 19 test/graph_test \ 19 20 test/graph_utils_test \ 20 test/heap_test \21 21 test/kruskal_test \ 22 22 test/maps_test \ … … 41 41 test_graph_test_SOURCES = test/graph_test.cc 42 42 test_graph_utils_test_SOURCES = test/graph_utils_test.cc 43 test_heap_test_SOURCES = test/heap_test.cc43 # test_heap_test_SOURCES = test/heap_test.cc 44 44 test_kruskal_test_SOURCES = test/kruskal_test.cc 45 45 test_maps_test_SOURCES = test/maps_test.cc -
test/heap_test.cc
r203 r171 25 25 #include <lemon/concepts/heap.h> 26 26 27 #include <lemon/ smart_graph.h>27 #include <lemon/list_graph.h> 28 28 29 #include <lemon/lgf_reader.h> 30 #include <lemon/dijkstra.h> 31 #include <lemon/maps.h> 29 #include <lemon/digraph_reader.h> 32 30 33 31 #include <lemon/bin_heap.h> 32 #include <lemon/fib_heap.h> 33 #include <lemon/radix_heap.h> 34 #include <lemon/bucket_heap.h> 34 35 35 36 #include "test_tools.h" 36 37 38 #include "heap_test.h" 39 40 #include <lemon/time_measure.h> 41 37 42 using namespace lemon; 38 43 using namespace lemon::concepts; 39 40 typedef ListDigraph Digraph;41 DIGRAPH_TYPEDEFS(Digraph);42 43 char test_lgf[] =44 "@nodes\n"45 "label\n"46 "0\n"47 "1\n"48 "2\n"49 "3\n"50 "4\n"51 "5\n"52 "6\n"53 "7\n"54 "8\n"55 "9\n"56 "@arcs\n"57 " label capacity\n"58 "0 5 0 94\n"59 "3 9 1 11\n"60 "8 7 2 83\n"61 "1 2 3 94\n"62 "5 7 4 35\n"63 "7 4 5 84\n"64 "9 5 6 38\n"65 "0 4 7 96\n"66 "6 7 8 6\n"67 "3 1 9 27\n"68 "5 2 10 77\n"69 "5 6 11 69\n"70 "6 5 12 41\n"71 "4 6 13 70\n"72 "3 2 14 45\n"73 "7 9 15 93\n"74 "5 9 16 50\n"75 "9 0 17 94\n"76 "9 6 18 67\n"77 "0 9 19 86\n"78 "@attributes\n"79 "source 3\n";80 81 int test_seq[] = { 2, 28, 19, 27, 33, 25, 13, 41, 10, 26, 1, 9, 4, 34};82 int test_inc[] = {20, 28, 34, 16, 0, 46, 44, 0, 42, 32, 14, 8, 6, 37};83 84 int test_len = sizeof(test_seq) / sizeof(test_seq[0]);85 86 template <typename Heap>87 void heapSortTest() {88 RangeMap<int> map(test_len, -1);89 90 Heap heap(map);91 92 std::vector<int> v(test_len);93 94 for (int i = 0; i < test_len; ++i) {95 v[i] = test_seq[i];96 heap.push(i, v[i]);97 }98 std::sort(v.begin(), v.end());99 for (int i = 0; i < test_len; ++i) {100 check(v[i] == heap.prio() ,"Wrong order in heap sort.");101 heap.pop();102 }103 }104 105 template <typename Heap>106 void heapIncreaseTest() {107 RangeMap<int> map(test_len, -1);108 109 Heap heap(map);110 111 std::vector<int> v(test_len);112 113 for (int i = 0; i < test_len; ++i) {114 v[i] = test_seq[i];115 heap.push(i, v[i]);116 }117 for (int i = 0; i < test_len; ++i) {118 v[i] += test_inc[i];119 heap.increase(i, v[i]);120 }121 std::sort(v.begin(), v.end());122 for (int i = 0; i < test_len; ++i) {123 check(v[i] == heap.prio() ,"Wrong order in heap increase test.");124 heap.pop();125 }126 }127 128 129 130 template <typename Heap>131 void dijkstraHeapTest(const Digraph& digraph, const IntArcMap& length,132 Node source) {133 134 typename Dijkstra<Digraph, IntArcMap>::template DefStandardHeap<Heap>::135 Create dijkstra(digraph, length);136 137 dijkstra.run(source);138 139 for(ArcIt a(digraph); a != INVALID; ++a) {140 Node s = digraph.source(a);141 Node t = digraph.target(a);142 if (dijkstra.reached(s)) {143 check( dijkstra.dist(t) - dijkstra.dist(s) <= length[a],144 "Error in a shortest path tree!");145 }146 }147 148 for(NodeIt n(digraph); n != INVALID; ++n) {149 if ( dijkstra.reached(n) && dijkstra.predArc(n) != INVALID ) {150 Arc a = dijkstra.predArc(n);151 Node s = digraph.source(a);152 check( dijkstra.dist(n) - dijkstra.dist(s) == length[a],153 "Error in a shortest path tree!");154 }155 }156 157 }158 44 159 45 int main() { … … 161 47 typedef int Item; 162 48 typedef int Prio; 163 typedef RangeMap<int> ItemIntMap; 49 typedef IntIntMap ItemIntMap; 50 51 typedef ListDigraph Digraph; 52 53 typedef Digraph::Arc Arc; 54 typedef Digraph::Node Node; 55 typedef Digraph::ArcIt ArcIt; 56 typedef Digraph::NodeIt NodeIt; 57 typedef Digraph::ArcMap<int> LengthMap; 58 59 Digraph digraph; 60 LengthMap length(digraph); 61 Node start; 62 63 /// \todo create own test digraph 64 65 std::string f_name; 66 if( getenv("srcdir") ) 67 f_name = std::string(getenv("srcdir")); 68 else f_name = "."; 69 f_name += "/test/dijkstra_test.lgf"; 164 70 165 Digraph digraph; 166 IntArcMap length(digraph); 167 Node source; 168 169 std::istringstream input(test_lgf); 170 digraphReader(input, digraph). 171 arcMap("capacity", length). 172 node("source", source). 71 std::ifstream input(f_name.c_str()); 72 check(input, "Input file '" << f_name << "' not found."); 73 DigraphReader<Digraph>(input, digraph). 74 readArcMap("capacity", length). 75 readNode("source", start). 173 76 run(); 174 77 175 78 { 79 std::cout << "Checking Bin Heap" << std::endl; 80 176 81 typedef BinHeap<Prio, ItemIntMap> IntHeap; 177 82 checkConcept<Heap<Prio, ItemIntMap>, IntHeap>(); 178 heapSortTest<IntHeap>( );179 heapIncreaseTest<IntHeap>( );83 heapSortTest<IntHeap>(100); 84 heapIncreaseTest<IntHeap>(100); 180 85 181 typedef BinHeap<Prio, IntNodeMap > NodeHeap; 182 checkConcept<Heap<Prio, IntNodeMap >, NodeHeap>(); 183 dijkstraHeapTest<NodeHeap>(digraph, length, source); 86 typedef FibHeap<Prio, Digraph::NodeMap<int> > NodeHeap; 87 checkConcept<Heap<Prio, Digraph::NodeMap<int> >, NodeHeap>(); 88 Timer timer; 89 dijkstraHeapTest<Digraph, LengthMap, NodeHeap>(digraph, length, start); 90 std::cout << timer << std::endl; 91 } 92 { 93 std::cout << "Checking Fib Heap" << std::endl; 94 95 typedef FibHeap<Prio, ItemIntMap> IntHeap; 96 checkConcept<Heap<Prio, ItemIntMap>, IntHeap>(); 97 heapSortTest<IntHeap>(100); 98 heapIncreaseTest<IntHeap>(100); 99 100 typedef FibHeap<Prio, Digraph::NodeMap<int> > NodeHeap; 101 checkConcept<Heap<Prio, Digraph::NodeMap<int> >, NodeHeap>(); 102 Timer timer; 103 dijkstraHeapTest<Digraph, LengthMap, NodeHeap>(digraph, length, start); 104 std::cout << timer << std::endl; 105 } 106 { 107 std::cout << "Checking Radix Heap" << std::endl; 108 109 typedef RadixHeap<ItemIntMap> IntHeap; 110 checkConcept<Heap<Prio, ItemIntMap>, IntHeap>(); 111 heapSortTest<IntHeap>(100); 112 heapIncreaseTest<IntHeap>(100); 113 114 typedef RadixHeap<Digraph::NodeMap<int> > NodeHeap; 115 checkConcept<Heap<Prio, Digraph::NodeMap<int> >, NodeHeap>(); 116 Timer timer; 117 dijkstraHeapTest<Digraph, LengthMap, NodeHeap>(digraph, length, start); 118 std::cout << timer << std::endl; 119 } 120 121 { 122 std::cout << "Checking Bucket Heap" << std::endl; 123 124 typedef BucketHeap<ItemIntMap> IntHeap; 125 checkConcept<Heap<Prio, ItemIntMap>, IntHeap>(); 126 heapSortTest<IntHeap>(100); 127 heapIncreaseTest<IntHeap>(100); 128 129 typedef BucketHeap<Digraph::NodeMap<int> > NodeHeap; 130 checkConcept<Heap<Prio, Digraph::NodeMap<int> >, NodeHeap>(); 131 Timer timer; 132 dijkstraHeapTest<Digraph, LengthMap, NodeHeap>(digraph, length, start); 133 std::cout << timer << std::endl; 184 134 } 185 135
Note: See TracChangeset
for help on using the changeset viewer.