1 | #define BOOST_TEST_MODULE UBLAS_MATRIX_VECTOR_RANGE_TEST
|
---|
2 | #include <boost/test/included/unit_test.hpp>
|
---|
3 |
|
---|
4 | #include "matrix_vector_range.hpp"
|
---|
5 | #include <boost/numeric/ublas/matrix.hpp>
|
---|
6 | #include <iterator>
|
---|
7 |
|
---|
8 | using namespace boost::numeric;
|
---|
9 |
|
---|
10 | BOOST_AUTO_TEST_CASE( matrix_range_test ){
|
---|
11 | std::size_t const rows=5;
|
---|
12 | std::size_t columns=3;
|
---|
13 | ublas::matrix<int> int_matrix(rows,columns);
|
---|
14 | for(std::size_t i = 0; i != rows; ++i){
|
---|
15 | for(std::size_t j = 0; j != columns; ++j){
|
---|
16 | int_matrix(i,j)=i*rows+j;
|
---|
17 | }
|
---|
18 | }
|
---|
19 | ublas::matrix<int> const& const_int_matrix=int_matrix;
|
---|
20 |
|
---|
21 | typedef ublas::matrix_row_range<ublas::matrix<int> > RR;
|
---|
22 | typedef ublas::matrix_row_range<ublas::matrix<int> const> CRR;
|
---|
23 | typedef ublas::matrix_column_range<ublas::matrix<int> > CR;
|
---|
24 | typedef ublas::matrix_column_range<ublas::matrix<int> const > CCR;
|
---|
25 |
|
---|
26 | RR row_range = make_row_range(int_matrix);
|
---|
27 | CRR const_row_range = make_row_range(const_int_matrix);
|
---|
28 | CR column_range = make_column_range(int_matrix);
|
---|
29 | CCR const_column_range = make_column_range(const_int_matrix);
|
---|
30 |
|
---|
31 | //check whether ranges have the correct sizes
|
---|
32 | BOOST_REQUIRE_EQUAL(row_range.size(),rows);
|
---|
33 | BOOST_REQUIRE_EQUAL(const_row_range.size(),rows);
|
---|
34 | BOOST_REQUIRE_EQUAL(column_range.size(),columns);
|
---|
35 | BOOST_REQUIRE_EQUAL(const_column_range.size(),columns);
|
---|
36 |
|
---|
37 | //now test element access, this should entail everything else
|
---|
38 | std::size_t row = 0;
|
---|
39 | for(RR::iterator iter=row_range.begin(); iter != row_range.end();++iter,++row){
|
---|
40 | BOOST_REQUIRE_EQUAL(iter->size(),columns);
|
---|
41 | for(std::size_t j =0; j != columns; ++j){
|
---|
42 | BOOST_CHECK_EQUAL((*iter)(j),int_matrix(row,j));
|
---|
43 | }
|
---|
44 | }
|
---|
45 | row = 0;
|
---|
46 | for(CRR::iterator iter=const_row_range.begin(); iter != const_row_range.end();++iter,++row){
|
---|
47 | BOOST_REQUIRE_EQUAL(iter->size(),columns);
|
---|
48 | for(std::size_t j =0; j != columns; ++j){
|
---|
49 | BOOST_CHECK_EQUAL((*iter)(j),int_matrix(row,j));
|
---|
50 | }
|
---|
51 | }
|
---|
52 |
|
---|
53 | std::size_t column = 0;
|
---|
54 | for(CR::iterator iter=column_range.begin(); iter != column_range.end();++iter,++column){
|
---|
55 | BOOST_REQUIRE_EQUAL(iter->size(),rows);
|
---|
56 | for(std::size_t i =0; i != rows; ++i){
|
---|
57 | BOOST_CHECK_EQUAL((*iter)(i),int_matrix(i,column));
|
---|
58 | }
|
---|
59 | }
|
---|
60 | column = 0;
|
---|
61 | for(CCR::iterator iter=const_column_range.begin(); iter != const_column_range.end();++iter,++column){
|
---|
62 | BOOST_REQUIRE_EQUAL(iter->size(),rows);
|
---|
63 | for(std::size_t i =0; i != rows; ++i){
|
---|
64 | BOOST_CHECK_EQUAL((*iter)(i),int_matrix(i,column));
|
---|
65 | }
|
---|
66 | }
|
---|
67 | }
|
---|
68 |
|
---|
69 | //sanity test to ensure that std::iter_swap does not fail on the tested platform(burned child...)
|
---|
70 | BOOST_AUTO_TEST_CASE( matrix_range_sanity_iter_swap ){
|
---|
71 | ublas::matrix<int> int_matrix(2,2);
|
---|
72 | int_matrix(0,0) = 0; int_matrix(0,1) = 1;
|
---|
73 | int_matrix(1,0) = 2; int_matrix(1,1) = 3;
|
---|
74 |
|
---|
75 | ublas::matrix_row_range<ublas::matrix<int> > row_range(int_matrix);
|
---|
76 | ublas::matrix_column_range<ublas::matrix<int> > column_range(int_matrix);
|
---|
77 |
|
---|
78 | std::iter_swap(row_range.begin(),row_range.begin()+1);
|
---|
79 | BOOST_CHECK_EQUAL(int_matrix(0,0),2u);
|
---|
80 | BOOST_CHECK_EQUAL(int_matrix(0,1),3u);
|
---|
81 | BOOST_CHECK_EQUAL(int_matrix(1,0),0u);
|
---|
82 | BOOST_CHECK_EQUAL(int_matrix(1,1),1u);
|
---|
83 |
|
---|
84 | std::iter_swap(column_range.begin(),column_range.begin()+1);
|
---|
85 | BOOST_CHECK_EQUAL(int_matrix(0,0),3u);
|
---|
86 | BOOST_CHECK_EQUAL(int_matrix(0,1),2u);
|
---|
87 | BOOST_CHECK_EQUAL(int_matrix(1,0),1u);
|
---|
88 | BOOST_CHECK_EQUAL(int_matrix(1,1),0u);
|
---|
89 | }
|
---|