test/matrix_maps_test.cc
author deba
Fri, 21 Oct 2005 08:34:47 +0000
changeset 1732 edeee3cbd80c
child 1751 a2a454f1232d
permissions -rw-r--r--
Bugfix
     1 // -*- c++ -*-
     2 
     3 #include <iostream>
     4 #include <vector>
     5 
     6 #include <lemon/concept_check.h>
     7 
     8 #include <lemon/concept/matrix_maps.h>
     9 #include <lemon/concept/maps.h>
    10 #include <lemon/concept/graph.h>
    11 
    12 #include <lemon/matrix_maps.h>
    13 
    14 #include <lemon/smart_graph.h>
    15 
    16 #include "test_tools.h"
    17 #include "graph_test.h"
    18 #include "map_test.h"
    19 
    20 
    21 using namespace lemon;
    22 using namespace lemon::concept;
    23 
    24 int main() {
    25   typedef SmartGraph Graph;
    26   typedef Graph::Node Node;
    27 
    28   { // checking MatrixMap for int
    29     typedef DynamicMatrixMap<Graph, Node, int> IntMatrixMap;
    30     checkConcept<ReferenceMatrixMap<Node, Node, int, 
    31       IntMatrixMap::Reference, IntMatrixMap::ConstReference>,
    32       IntMatrixMap>();
    33 
    34   }
    35 
    36   { // checking MatrixMap for bool
    37     typedef DynamicMatrixMap<Graph, Node, bool> BoolMatrixMap;
    38     checkConcept<ReferenceMatrixMap<Node, Node, bool, 
    39       BoolMatrixMap::Reference, BoolMatrixMap::ConstReference>,
    40       BoolMatrixMap>();
    41 
    42   }
    43 
    44   {
    45     Graph graph;
    46     typedef DynamicMatrixMap<Graph, Node, int> IntMatrixMap;
    47     IntMatrixMap matrix(graph);
    48     for (int i = 0; i < 10; ++i) {
    49       graph.addNode();
    50     }
    51     for (Graph::NodeIt it(graph); it != INVALID; ++it) {
    52       for (Graph::NodeIt jt(graph); jt != INVALID; ++jt) {
    53 	int val = urandom(100);
    54 	matrix.set(it, jt, val);
    55 	check(matrix(it, jt) == val, "Wrong assign");
    56 	check(matrix(it, jt) == matrixColMap(matrix, it)[jt], "Wrong colMap");
    57 	check(matrix(it, jt) == matrixRowMap(matrix, jt)[it], "Wrong rowMap");
    58       }
    59     }
    60     const IntMatrixMap& cm = matrix;
    61     for (Graph::NodeIt it(graph); it != INVALID; ++it) {
    62       for (Graph::NodeIt jt(graph); jt != INVALID; ++jt) {
    63 	check(cm(it, jt) == matrixColMap(cm, it)[jt], "Wrong colMap");
    64 	check(cm(it, jt) == matrixRowMap(cm, jt)[it], "Wrong rowMap");
    65       }
    66     }
    67   }
    68 
    69   { // checking MatrixMap for int
    70     typedef DynamicSymMatrixMap<Graph, Node, int> IntMatrixMap;
    71     checkConcept<ReferenceMatrixMap<Node, Node, int, 
    72       IntMatrixMap::Reference, IntMatrixMap::ConstReference>,
    73       IntMatrixMap>();
    74 
    75   }
    76 
    77   { // checking MatrixMap for bool
    78     typedef DynamicSymMatrixMap<Graph, Node, bool> BoolMatrixMap;
    79     checkConcept<ReferenceMatrixMap<Node, Node, bool, 
    80       BoolMatrixMap::Reference, BoolMatrixMap::ConstReference>,
    81       BoolMatrixMap>();
    82 
    83   }
    84 
    85   {
    86     Graph graph;
    87     typedef DynamicSymMatrixMap<Graph, Node, int> IntMatrixMap;
    88     IntMatrixMap matrix(graph);
    89     for (int i = 0; i < 10; ++i) {
    90       graph.addNode();
    91     }
    92     for (Graph::NodeIt it(graph); it != INVALID; ++it) {
    93       for (Graph::NodeIt jt(graph); jt != INVALID; ++jt) {
    94 	int val = urandom(100);
    95 	matrix.set(it, jt, val);
    96 	check(matrix(it, jt) == val, "Wrong assign");
    97 	check(matrix(jt, it) == val, "Wrong assign");
    98 	check(matrix(it, jt) == matrixColMap(matrix, it)[jt], "Wrong colMap");
    99 	check(matrix(it, jt) == matrixRowMap(matrix, jt)[it], "Wrong rowMap");
   100       }
   101     }
   102     const IntMatrixMap& cm = matrix;
   103     for (Graph::NodeIt it(graph); it != INVALID; ++it) {
   104       for (Graph::NodeIt jt(graph); jt != INVALID; ++jt) {
   105 	check(cm(it, jt) == matrixColMap(cm, it)[jt], "Wrong colMap");
   106 	check(cm(it, jt) == matrixRowMap(cm, jt)[it], "Wrong rowMap");
   107       }
   108     }
   109   }
   110 
   111   std::cout << __FILE__ ": All tests passed.\n";
   112 
   113   return 0;
   114 }