diff --git a/test/graph_maps_test.h b/test/graph_maps_test.h new file mode 100644 --- /dev/null +++ b/test/graph_maps_test.h @@ -0,0 +1,144 @@ +/* -*- 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. + * + */ + +#ifndef LEMON_TEST_MAP_TEST_H +#define LEMON_TEST_MAP_TEST_H + +#include +#include + +#include "test_tools.h" + +namespace lemon { + + template + void checkGraphNodeMap() { + Graph graph; + const int num = 16; + + typedef typename Graph::Node Node; + + std::vector nodes; + for (int i = 0; i < num; ++i) { + nodes.push_back(graph.addNode()); + } + typedef typename Graph::template NodeMap IntNodeMap; + IntNodeMap map(graph, 42); + for (int i = 0; i < int(nodes.size()); ++i) { + check(map[nodes[i]] == 42, "Wrong map constructor."); + } + for (int i = 0; i < num; ++i) { + nodes.push_back(graph.addNode()); + map[nodes.back()] = 23; + check(map[nodes.back()] == 23, "Wrong operator[]."); + } + map = constMap(12); + for (int i = 0; i < int(nodes.size()); ++i) { + check(map[nodes[i]] == 12, "Wrong map constructor."); + } + graph.clear(); + nodes.clear(); + } + + template + void checkGraphArcMap() { + Graph graph; + const int num = 16; + + typedef typename Graph::Node Node; + typedef typename Graph::Arc Arc; + + std::vector nodes; + for (int i = 0; i < num; ++i) { + nodes.push_back(graph.addNode()); + } + + std::vector arcs; + for (int i = 0; i < num; ++i) { + for (int j = 0; j < i; ++j) { + arcs.push_back(graph.addArc(nodes[i], nodes[j])); + } + } + + typedef typename Graph::template ArcMap IntArcMap; + IntArcMap map(graph, 42); + + for (int i = 0; i < int(arcs.size()); ++i) { + check(map[arcs[i]] == 42, "Wrong map constructor."); + } + + for (int i = 0; i < num; ++i) { + for (int j = i + 1; j < num; ++j) { + arcs.push_back(graph.addArc(nodes[i], nodes[j])); + map[arcs.back()] = 23; + check(map[arcs.back()] == 23, "Wrong operator[]."); + } + } + map = constMap(12); + for (int i = 0; i < int(arcs.size()); ++i) { + check(map[arcs[i]] == 12, "Wrong map constructor."); + } + graph.clear(); + arcs.clear(); + } + + template + void checkGraphEdgeMap() { + Graph graph; + const int num = 16; + + typedef typename Graph::Node Node; + typedef typename Graph::Edge Edge; + + std::vector nodes; + for (int i = 0; i < num; ++i) { + nodes.push_back(graph.addNode()); + } + + std::vector edges; + for (int i = 0; i < num; ++i) { + for (int j = 0; j < i; ++j) { + edges.push_back(graph.addEdge(nodes[i], nodes[j])); + } + } + + typedef typename Graph::template EdgeMap IntEdgeMap; + IntEdgeMap map(graph, 42); + + for (int i = 0; i < int(edges.size()); ++i) { + check(map[edges[i]] == 42, "Wrong map constructor."); + } + + for (int i = 0; i < num; ++i) { + for (int j = i + 1; j < num; ++j) { + edges.push_back(graph.addEdge(nodes[i], nodes[j])); + map[edges.back()] = 23; + check(map[edges.back()] == 23, "Wrong operator[]."); + } + } + map = constMap(12); + for (int i = 0; i < int(edges.size()); ++i) { + check(map[edges[i]] == 12, "Wrong map constructor."); + } + graph.clear(); + edges.clear(); + } + +} + +#endif