src/test/heap_test.cc
author alpar
Sun, 06 Mar 2005 20:44:29 +0000
changeset 1199 19eae67d97d5
child 1206 9c398137c2cb
permissions -rw-r--r--
Missing #ifndef-#define
deba@1187
     1
// -*- c++ -*-
deba@1187
     2
deba@1187
     3
#include <iostream>
deba@1187
     4
#include <fstream>
deba@1187
     5
#include <vector>
deba@1187
     6
deba@1187
     7
#include <lemon/concept_check.h>
deba@1187
     8
deba@1187
     9
#include <lemon/bin_heap.h>
deba@1187
    10
#include <lemon/fib_heap.h>
deba@1187
    11
#include <lemon/radix_heap.h>
deba@1187
    12
deba@1187
    13
#include <lemon/dimacs.h>
deba@1187
    14
deba@1187
    15
#include "test_tools.h"
deba@1187
    16
#include "heap_test.h"
deba@1187
    17
#include "map_test.h"
deba@1187
    18
deba@1187
    19
deba@1187
    20
using namespace lemon;
deba@1187
    21
deba@1187
    22
template <typename Item, typename Prio, typename ItemIntMap>
deba@1187
    23
class HeapConcept {
deba@1187
    24
public:  
deba@1187
    25
deba@1187
    26
  template <typename _Heap>
deba@1187
    27
  struct Constraints {
deba@1187
    28
  public:
deba@1187
    29
    
deba@1187
    30
    void constraints() {
deba@1187
    31
      Item item;
deba@1187
    32
      Prio prio;
deba@1187
    33
deba@1187
    34
      typedef typename _Heap::state_enum state_enum;
deba@1187
    35
      state_enum state;
deba@1187
    36
      
deba@1187
    37
      _Heap heap1 = _Heap(map);
deba@1187
    38
      
deba@1187
    39
      heap.push(item, prio);
deba@1187
    40
deba@1187
    41
      prio = heap.prio();
deba@1187
    42
      item = heap.top();
deba@1187
    43
deba@1187
    44
      heap.pop();
deba@1187
    45
deba@1187
    46
      heap.set(item, prio);
deba@1187
    47
      heap.decrease(item, prio);
deba@1187
    48
      heap.increase(item, prio);
deba@1187
    49
      prio = heap[item];
deba@1187
    50
deba@1187
    51
      heap.erase(item);
deba@1187
    52
deba@1187
    53
      state = heap.state(item);
deba@1187
    54
deba@1187
    55
      state = _Heap::PRE_HEAP;
deba@1187
    56
      state = _Heap::IN_HEAP;
deba@1187
    57
      state = _Heap::POST_HEAP;
deba@1187
    58
    }
deba@1187
    59
    
deba@1187
    60
    _Heap& heap;
deba@1187
    61
    ItemIntMap& map;
deba@1187
    62
  };
deba@1187
    63
};
deba@1187
    64
deba@1187
    65
int main() {
deba@1187
    66
deba@1187
    67
  typedef int Item;
deba@1187
    68
  typedef int Prio;
deba@1187
    69
  typedef IntIntMap ItemIntMap;
deba@1187
    70
deba@1187
    71
  typedef ListGraph Graph;
deba@1187
    72
deba@1187
    73
  typedef Graph::Edge Edge;
deba@1187
    74
  typedef Graph::Node Node;
deba@1187
    75
  typedef Graph::EdgeIt EdgeIt;
deba@1187
    76
  typedef Graph::NodeIt NodeIt;
deba@1187
    77
  typedef Graph::EdgeMap<int> LengthMap;
deba@1187
    78
deba@1187
    79
  Graph graph;
deba@1187
    80
  LengthMap length(graph);
deba@1187
    81
  Node start;
deba@1187
    82
deba@1187
    83
  std::ifstream input("preflow_graph.dim");
deba@1187
    84
  readDimacs(input, graph, length, start);  
deba@1187
    85
 
deba@1187
    86
  {
deba@1187
    87
    std::cerr << "Checking Bin Heap" << std::endl;
deba@1187
    88
deba@1187
    89
    typedef BinHeap<Item, Prio, ItemIntMap> IntHeap;
deba@1187
    90
    checkConcept<HeapConcept<Item, Prio, ItemIntMap>, IntHeap>();
deba@1187
    91
    heapSortTest<IntHeap>(20);
deba@1187
    92
    
deba@1187
    93
    typedef FibHeap<Node, Prio, Graph::NodeMap<int> > NodeHeap;
deba@1187
    94
    checkConcept<HeapConcept<Node, Prio, Graph::NodeMap<int> >, NodeHeap>();
deba@1187
    95
    dijkstraHeapTest<Graph, LengthMap, NodeHeap>(graph, length, start);
deba@1187
    96
  }
deba@1187
    97
  {
deba@1187
    98
    std::cerr << "Checking Fib Heap" << std::endl;
deba@1187
    99
deba@1187
   100
    typedef FibHeap<Item, Prio, ItemIntMap> IntHeap;
deba@1187
   101
    checkConcept<HeapConcept<Item, Prio, ItemIntMap>, IntHeap>();
deba@1187
   102
    heapSortTest<IntHeap>(20);
deba@1187
   103
deba@1187
   104
    typedef FibHeap<Node, Prio, Graph::NodeMap<int> > NodeHeap;
deba@1187
   105
    checkConcept<HeapConcept<Node, Prio, Graph::NodeMap<int> >, NodeHeap>();
deba@1187
   106
    dijkstraHeapTest<Graph, LengthMap, NodeHeap>(graph, length, start);
deba@1187
   107
  }
deba@1187
   108
  {
deba@1187
   109
    std::cerr << "Checking Radix Heap" << std::endl;
deba@1187
   110
deba@1187
   111
    typedef RadixHeap<Item, ItemIntMap> IntHeap;
deba@1187
   112
    checkConcept<HeapConcept<Item, Prio, ItemIntMap>, IntHeap>();
deba@1187
   113
    heapSortTest<IntHeap>(20);
deba@1187
   114
deba@1187
   115
    typedef RadixHeap<Node, Graph::NodeMap<int> > NodeHeap;
deba@1187
   116
    checkConcept<HeapConcept<Node, Prio, Graph::NodeMap<int> >, NodeHeap>();
deba@1187
   117
    dijkstraHeapTest<Graph, LengthMap, NodeHeap>(graph, length, start);
deba@1187
   118
  }
deba@1187
   119
deba@1187
   120
  std::cout << __FILE__ ": All tests passed.\n";
deba@1187
   121
deba@1187
   122
  return 0;
deba@1187
   123
}