alpar@209: /* -*- mode: C++; indent-tabs-mode: nil; -*-
kpeter@171:  *
alpar@209:  * This file is a part of LEMON, a generic C++ optimization library.
kpeter@171:  *
kpeter@171:  * Copyright (C) 2003-2008
kpeter@171:  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
kpeter@171:  * (Egervary Research Group on Combinatorial Optimization, EGRES).
kpeter@171:  *
kpeter@171:  * Permission to use, modify and distribute this software is granted
kpeter@171:  * provided that this copyright notice appears in all copies. For
kpeter@171:  * precise terms see the accompanying LICENSE file.
kpeter@171:  *
kpeter@171:  * This software is provided "AS IS" with no warranty of any kind,
kpeter@171:  * express or implied, and with no claim as to its suitability for any
kpeter@171:  * purpose.
kpeter@171:  *
kpeter@171:  */
kpeter@171: 
kpeter@171: #ifndef LEMON_TEST_MAP_TEST_H
kpeter@171: #define LEMON_TEST_MAP_TEST_H
kpeter@171: 
kpeter@171: #include <vector>
kpeter@171: #include <lemon/maps.h>
kpeter@171: 
kpeter@171: #include "test_tools.h"
kpeter@171: 
kpeter@171: namespace lemon {
kpeter@171: 
kpeter@171:   template <typename Graph>
kpeter@171:   void checkGraphNodeMap() {
kpeter@171:     Graph graph;
kpeter@171:     const int num = 16;
kpeter@171: 
kpeter@171:     typedef typename Graph::Node Node;
kpeter@171: 
kpeter@171:     std::vector<Node> nodes;
kpeter@171:     for (int i = 0; i < num; ++i) {
kpeter@171:       nodes.push_back(graph.addNode());
kpeter@171:     }
kpeter@171:     typedef typename Graph::template NodeMap<int> IntNodeMap;
kpeter@171:     IntNodeMap map(graph, 42);
kpeter@171:     for (int i = 0; i < int(nodes.size()); ++i) {
kpeter@171:       check(map[nodes[i]] == 42, "Wrong map constructor.");
kpeter@171:     }
kpeter@171:     for (int i = 0; i < num; ++i) {
kpeter@171:       nodes.push_back(graph.addNode());
kpeter@171:       map[nodes.back()] = 23;
kpeter@171:       check(map[nodes.back()] == 23, "Wrong operator[].");
kpeter@171:     }
kpeter@171:     map = constMap<Node>(12);
kpeter@171:     for (int i = 0; i < int(nodes.size()); ++i) {
kpeter@171:       check(map[nodes[i]] == 12, "Wrong map constructor.");
kpeter@171:     }
kpeter@171:     graph.clear();
kpeter@171:     nodes.clear();
kpeter@171:   }
kpeter@171: 
kpeter@171:   template <typename Graph>
kpeter@171:   void checkGraphArcMap() {
kpeter@171:     Graph graph;
kpeter@171:     const int num = 16;
kpeter@171: 
kpeter@171:     typedef typename Graph::Node Node;
kpeter@171:     typedef typename Graph::Arc Arc;
kpeter@171: 
kpeter@171:     std::vector<Node> nodes;
kpeter@171:     for (int i = 0; i < num; ++i) {
kpeter@171:       nodes.push_back(graph.addNode());
kpeter@171:     }
kpeter@171: 
kpeter@171:     std::vector<Arc> arcs;
kpeter@171:     for (int i = 0; i < num; ++i) {
kpeter@171:       for (int j = 0; j < i; ++j) {
alpar@209:         arcs.push_back(graph.addArc(nodes[i], nodes[j]));
kpeter@171:       }
kpeter@171:     }
kpeter@171: 
kpeter@171:     typedef typename Graph::template ArcMap<int> IntArcMap;
kpeter@171:     IntArcMap map(graph, 42);
kpeter@171: 
kpeter@171:     for (int i = 0; i < int(arcs.size()); ++i) {
kpeter@171:       check(map[arcs[i]] == 42, "Wrong map constructor.");
kpeter@171:     }
kpeter@171: 
kpeter@171:     for (int i = 0; i < num; ++i) {
kpeter@171:       for (int j = i + 1; j < num; ++j) {
alpar@209:         arcs.push_back(graph.addArc(nodes[i], nodes[j]));
alpar@209:         map[arcs.back()] = 23;
kpeter@171:         check(map[arcs.back()] == 23, "Wrong operator[].");
kpeter@171:       }
kpeter@171:     }
kpeter@171:     map = constMap<Arc>(12);
kpeter@171:     for (int i = 0; i < int(arcs.size()); ++i) {
kpeter@171:       check(map[arcs[i]] == 12, "Wrong map constructor.");
kpeter@171:     }
kpeter@171:     graph.clear();
kpeter@171:     arcs.clear();
kpeter@171:   }
kpeter@171: 
kpeter@171:   template <typename Graph>
kpeter@171:   void checkGraphEdgeMap() {
kpeter@171:     Graph graph;
kpeter@171:     const int num = 16;
kpeter@171: 
kpeter@171:     typedef typename Graph::Node Node;
kpeter@171:     typedef typename Graph::Edge Edge;
kpeter@171: 
kpeter@171:     std::vector<Node> nodes;
kpeter@171:     for (int i = 0; i < num; ++i) {
kpeter@171:       nodes.push_back(graph.addNode());
kpeter@171:     }
kpeter@171: 
kpeter@171:     std::vector<Edge> edges;
kpeter@171:     for (int i = 0; i < num; ++i) {
kpeter@171:       for (int j = 0; j < i; ++j) {
alpar@209:         edges.push_back(graph.addEdge(nodes[i], nodes[j]));
kpeter@171:       }
kpeter@171:     }
kpeter@171: 
kpeter@171:     typedef typename Graph::template EdgeMap<int> IntEdgeMap;
kpeter@171:     IntEdgeMap map(graph, 42);
kpeter@171: 
kpeter@171:     for (int i = 0; i < int(edges.size()); ++i) {
kpeter@171:       check(map[edges[i]] == 42, "Wrong map constructor.");
kpeter@171:     }
kpeter@171: 
kpeter@171:     for (int i = 0; i < num; ++i) {
kpeter@171:       for (int j = i + 1; j < num; ++j) {
alpar@209:         edges.push_back(graph.addEdge(nodes[i], nodes[j]));
alpar@209:         map[edges.back()] = 23;
kpeter@171:         check(map[edges.back()] == 23, "Wrong operator[].");
kpeter@171:       }
kpeter@171:     }
kpeter@171:     map = constMap<Edge>(12);
kpeter@171:     for (int i = 0; i < int(edges.size()); ++i) {
kpeter@171:       check(map[edges[i]] == 12, "Wrong map constructor.");
kpeter@171:     }
kpeter@171:     graph.clear();
kpeter@171:     edges.clear();
kpeter@171:   }
kpeter@171: 
kpeter@171: }
kpeter@171: 
kpeter@171: #endif