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
13BOOST_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(i: 1,j: 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(i: 0,j: 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
54BOOST_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(i: 0,j: 1,t: 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(i: 0,j: 0,t: 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(i: 0,j: 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(i: 0,j: 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

source code of boost/libs/numeric/ublas/test/comp_mat_erase.cpp