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 
BOOST_AUTO_TEST_CASE(compressed_matrix_erase_after_end)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 
BOOST_AUTO_TEST_CASE(compressed_matrix_erase_in_the_middle)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 }
107