klao@946: /* -*- C++ -*-
klao@946:  * src/test/map_test.h - Part of LEMON, a generic C++ optimization library
klao@946:  *
klao@946:  * Copyright (C) 2004 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
klao@946:  * (Egervary Combinatorial Optimization Research Group, EGRES).
klao@946:  *
klao@946:  * Permission to use, modify and distribute this software is granted
klao@946:  * provided that this copyright notice appears in all copies. For
klao@946:  * precise terms see the accompanying LICENSE file.
klao@946:  *
klao@946:  * This software is provided "AS IS" with no warranty of any kind,
klao@946:  * express or implied, and with no claim as to its suitability for any
klao@946:  * purpose.
klao@946:  *
klao@946:  */
klao@946: #ifndef LEMON_TEST_MAP_TEST_H
klao@946: #define LEMON_TEST_MAP_TEST_H
klao@946: 
klao@946: 
klao@946: #include <vector>
klao@946: 
klao@946: #include "test_tools.h"
klao@946: 
klao@946: 
klao@946: //! \ingroup misc
klao@946: //! \file
klao@946: //! \brief Some utility to test map classes.
klao@946: 
klao@946: namespace lemon {
klao@946: 
klao@946: 
klao@946:   template <typename Graph>
klao@946:   void checkGraphNodeMap() {
klao@946:     Graph graph;
klao@946:     const int num = 16;
klao@946:     
klao@946:     typedef typename Graph::Node Node;
klao@946: 
klao@946:     std::vector<Node> nodes;
klao@946:     for (int i = 0; i < num; ++i) {
klao@946:       nodes.push_back(graph.addNode());      
klao@946:     }
klao@946:     typedef typename Graph::template NodeMap<int> IntNodeMap;
klao@946:     IntNodeMap map(graph, 42);
klao@946:     for (int i = 0; i < (int)nodes.size(); ++i) {
klao@946:       check(map[nodes[i]] == 42, "Wrong map constructor.");      
klao@946:     }
klao@946:     for (int i = 0; i < num; ++i) {
klao@946:       nodes.push_back(graph.addNode());
klao@946:       map[nodes.back()] = 23;
klao@946:     }
klao@946:     graph.clear();
klao@946:     nodes.clear();
klao@946:   }
klao@946: 
klao@946:   template <typename Graph>
klao@946:   void checkGraphEdgeMap() {
klao@946:     Graph graph;
klao@946:     const int num = 16;
klao@946:     
klao@946:     typedef typename Graph::Node Node;
klao@946:     typedef typename Graph::Edge Edge;
klao@946:     
klao@946:     std::vector<Node> nodes;
klao@946:     for (int i = 0; i < num; ++i) {
klao@946:       nodes.push_back(graph.addNode());
klao@946:     }
klao@946:     
klao@946:     std::vector<Edge> edges;
klao@946:     for (int i = 0; i < num; ++i) {
klao@946:       for (int j = 0; j < i; ++j) {
klao@946: 	edges.push_back(graph.addEdge(nodes[i], nodes[j]));
klao@946:       }
klao@946:     }
klao@946:     
klao@946:     typedef typename Graph::template EdgeMap<int> IntEdgeMap;
klao@946:     IntEdgeMap map(graph, 42);
klao@946:     
klao@946:     for (int i = 0; i < (int)edges.size(); ++i) {
klao@946:       check(map[edges[i]] == 42, "Wrong map constructor.");      
klao@946:     }
klao@946:     
klao@946:     for (int i = 0; i < num; ++i) {
klao@946:       for (int j = i + 1; j < num; ++j) {
klao@946: 	edges.push_back(graph.addEdge(nodes[i], nodes[j]));
klao@946: 	map[edges.back()] = 23;
klao@946:       }
klao@946:     }
klao@946:     graph.clear();
klao@946:     edges.clear();    
klao@946:   }
klao@946: 
klao@946: }
klao@946: 
klao@946: #endif