test/matrix_maps_test.cc
changeset 1728 eb8bb91ba9e2
child 1751 a2a454f1232d
equal deleted inserted replaced
-1:000000000000 0:2a8c2b9f8a52
       
     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 }