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