Imported Upstream version 1.57.0
[platform/upstream/boost.git] / libs / numeric / ublas / test / comp_mat_erase.cpp
1 //  Copyright (c) 2011 David Bellot
2 //
3 //  Distributed under the Boost Software License, Version 1.0. (See
4 //  accompanying file LICENSE_1_0.txt or copy at
5 //  http://www.boost.org/LICENSE_1_0.txt)
6
7 #include "boost/numeric/ublas/matrix_sparse.hpp"
8
9 #define BOOST_TEST_MODULE SparseMatrixErasureTest
10 #include <boost/test/included/unit_test.hpp>
11
12
13 BOOST_AUTO_TEST_CASE( compressed_matrix_erase_after_end )
14 {
15     boost::numeric::ublas::compressed_matrix<int, boost::numeric::ublas::row_major > A(2, 2);
16
17     BOOST_CHECK_EQUAL( A.filled1(), (std::size_t) 1 );
18     BOOST_CHECK_EQUAL( A.index1_data()[0], (std::size_t) 0 );
19
20     A(0,0) = 1;
21
22     BOOST_CHECK_EQUAL( A.nnz(), (std::size_t) 1 );
23     BOOST_CHECK_EQUAL( A.filled1(), (std::size_t) 2 );
24
25     // check new element
26     BOOST_CHECK_EQUAL( A.index1_data()[0], (std::size_t) 0 );
27     BOOST_CHECK_EQUAL( A.index2_data()[0], (std::size_t) 0 );
28     BOOST_CHECK_EQUAL( A.value_data()[0], 1 );
29     // check end of list marker
30     BOOST_CHECK_EQUAL( A.index1_data()[1], (std::size_t) 1 );
31
32     A.erase_element(1,0);
33
34     BOOST_CHECK_EQUAL( A.nnz(), (std::size_t) 1 );
35     BOOST_CHECK_EQUAL( A.filled1(), (std::size_t) 2 );
36     BOOST_CHECK_EQUAL( A.filled2(), (std::size_t) 1 );
37
38     // check new element
39     BOOST_CHECK_EQUAL( A.index1_data()[0], (std::size_t) 0 );
40     BOOST_CHECK_EQUAL( A.index2_data()[0], (std::size_t) 0 );
41     BOOST_CHECK_EQUAL( A.value_data()[0], 1 );
42     // check end of list marker
43     BOOST_CHECK_EQUAL( A.index1_data()[1], (std::size_t) 1 );
44
45     A.erase_element(0,0);
46
47     BOOST_CHECK_EQUAL( A.nnz(), (std::size_t) 0 );
48     BOOST_CHECK_EQUAL( A.filled1(), (std::size_t) 2 );
49     BOOST_CHECK_EQUAL( A.filled2(),(std::size_t) 0 );
50     BOOST_CHECK_EQUAL( A.index1_data()[0], (std::size_t) 0 );
51
52 }
53
54 BOOST_AUTO_TEST_CASE( compressed_matrix_erase_in_the_middle )
55 {
56     boost::numeric::ublas::compressed_matrix<int, boost::numeric::ublas::row_major > A(2, 2);
57
58     BOOST_CHECK_EQUAL( A.filled1(), (std::size_t) 1 );
59     BOOST_CHECK_EQUAL( A.filled2(), (std::size_t) 0 );
60     BOOST_CHECK_EQUAL( A.index1_data()[0], (std::size_t) 0 );
61
62     A.insert_element(0,1,5);
63
64     BOOST_CHECK_EQUAL( A.filled1(), (std::size_t) 2 );
65     BOOST_CHECK_EQUAL( A.filled2(), (std::size_t) 1 );
66
67     // check new element
68     BOOST_CHECK_EQUAL( A.index1_data()[0], (std::size_t) 0 );
69     BOOST_CHECK_EQUAL( A.index2_data()[0], (std::size_t) 1 );
70     BOOST_CHECK_EQUAL( A.value_data()[0], 5 );
71     // check end of list marker
72     BOOST_CHECK_EQUAL( A.index1_data()[1], (std::size_t) 1 );
73
74     A.insert_element(0,0,4);
75
76     BOOST_CHECK_EQUAL( A.filled1(), (std::size_t) 2 );
77     BOOST_CHECK_EQUAL( A.filled2(), (std::size_t) 2 );
78
79     // check new element
80     BOOST_CHECK_EQUAL( A.index2_data()[0], (std::size_t) 0 );
81     BOOST_CHECK_EQUAL( A.value_data()[0], 4 );
82     // check previous element
83     BOOST_CHECK_EQUAL( A.index2_data()[1], (std::size_t) 1 );
84     BOOST_CHECK_EQUAL( A.value_data()[1], 5 );
85     // check end of list marker
86     BOOST_CHECK_EQUAL( A.index1_data()[1], (std::size_t) 2 );
87
88     A.erase_element(0,0);
89
90     BOOST_CHECK_EQUAL( A.filled1(), (std::size_t) 2 );
91     BOOST_CHECK_EQUAL( A.filled2(), (std::size_t) 1 );
92
93     BOOST_CHECK_EQUAL( A.index2_data()[0], (std::size_t) 1 );
94     BOOST_CHECK_EQUAL( A.value_data()[0], 5 );
95
96     BOOST_CHECK_EQUAL( A.index1_data()[0], (std::size_t) 0 );
97     BOOST_CHECK_EQUAL( A.index1_data()[1], (std::size_t) 1 );
98
99     A.erase_element(0,1);
100
101     BOOST_CHECK_EQUAL( A.filled1(), (std::size_t) 2 );
102     BOOST_CHECK_EQUAL( A.filled2(), (std::size_t) 0 );
103     BOOST_CHECK_EQUAL( A.index1_data()[0], (std::size_t) 0 );
104     BOOST_CHECK_EQUAL( A.index1_data()[1], (std::size_t) 0 );
105
106 }