1 | // Test cases for supporting serialization in boost::numeric::ublas::symmetrix_matrix.
|
---|
2 | // =====================================================================
|
---|
3 | // In response to https://svn.boost.org/trac/boost/ticket/10045
|
---|
4 |
|
---|
5 |
|
---|
6 | // Author
|
---|
7 | // ==============
|
---|
8 | // Shivam Mittal
|
---|
9 | // Email - 2015csb1032@iitrpr.ac.in
|
---|
10 | // Github profile - github.com/shivam5
|
---|
11 | // Date - 2nd April 2017
|
---|
12 |
|
---|
13 |
|
---|
14 | // Should be placed in ublas/test/
|
---|
15 |
|
---|
16 | // Compiling
|
---|
17 | // ==========
|
---|
18 |
|
---|
19 | // g++ -I <path to modular_boost> test_symmetric_matrix_serialization.cpp -L<path to installed libraries (stage/lib)> -static -lboost_serialization
|
---|
20 |
|
---|
21 | // Example (my computer):
|
---|
22 | // g++ -I /home/shivam/Desktop/boost/modular_boost/ test_symmetric_matrix_serialization.cpp -L/home/shivam/Desktop/boost/modular_boost/stage/lib -static -lboost_serialization
|
---|
23 |
|
---|
24 | // Running
|
---|
25 | // ==========
|
---|
26 | // ./a.out
|
---|
27 |
|
---|
28 |
|
---|
29 | #include <boost/numeric/ublas/io.hpp>
|
---|
30 | #include <boost/numeric/ublas/symmetric.hpp>
|
---|
31 | #include <iostream>
|
---|
32 | #include <fstream>
|
---|
33 | #include <string>
|
---|
34 | #include <boost/archive/text_iarchive.hpp>
|
---|
35 | #include <boost/archive/text_oarchive.hpp>
|
---|
36 | #include "common/testhelper.hpp"
|
---|
37 | #include "utils.hpp"
|
---|
38 |
|
---|
39 | using namespace boost::numeric::ublas;
|
---|
40 |
|
---|
41 | #define N 200
|
---|
42 |
|
---|
43 | template <typename T, typename U>
|
---|
44 | void save_smatrix(const symmetric_matrix<T,U> &s, const char * filename){
|
---|
45 | std::ofstream ofs(filename);
|
---|
46 | boost::archive::text_oarchive oa(ofs);
|
---|
47 | oa << s;
|
---|
48 | }
|
---|
49 |
|
---|
50 | template <typename T, typename U>
|
---|
51 | void load_smatrix(symmetric_matrix<T,U> &s, const char * filename){
|
---|
52 | std::ifstream ifs(filename);
|
---|
53 | boost::archive::text_iarchive ia(ifs);
|
---|
54 | ia >> s;
|
---|
55 | }
|
---|
56 |
|
---|
57 |
|
---|
58 | template <class T>
|
---|
59 | bool check(int size = 3) {
|
---|
60 | bool pass = true;
|
---|
61 |
|
---|
62 | std::string filename = "filename";
|
---|
63 |
|
---|
64 | symmetric_matrix<T, lower> ml (size, size);
|
---|
65 | symmetric_matrix<T, upper> mu (size, size);
|
---|
66 | symmetric_matrix<T, lower> ml2 (size, size);
|
---|
67 | symmetric_matrix<T, upper> mu2 (size, size);
|
---|
68 |
|
---|
69 | for (unsigned i = 0; i < ml.size1 (); ++ i)
|
---|
70 | for (unsigned j = 0; j <= i; ++ j)
|
---|
71 | ml (i, j) = (size * i + j);
|
---|
72 |
|
---|
73 | for (unsigned i = 0; i < mu.size1 (); ++ i)
|
---|
74 | for (unsigned j = i; j < mu.size2 (); ++ j)
|
---|
75 | mu (i, j) = (size * i + j);
|
---|
76 |
|
---|
77 |
|
---|
78 | save_smatrix <T, lower> (ml, filename.c_str());
|
---|
79 | load_smatrix <T, lower>(ml2, filename.c_str());
|
---|
80 | pass &= compare(ml, ml2);
|
---|
81 |
|
---|
82 | save_smatrix <T, upper> (mu, filename.c_str());
|
---|
83 | load_smatrix <T, upper>(mu2, filename.c_str());
|
---|
84 | pass &= compare(mu, mu2);
|
---|
85 |
|
---|
86 |
|
---|
87 | for (unsigned i = 0; i < ml.size1 (); ++ i)
|
---|
88 | for (unsigned j = 0; j <= i; ++ j)
|
---|
89 | ml (i, j) = j * i + j;
|
---|
90 |
|
---|
91 | for (unsigned i = 0; i < mu.size1 (); ++ i)
|
---|
92 | for (unsigned j = i; j < mu.size2 (); ++ j)
|
---|
93 | mu (i, j) = (j+i) * i + j;
|
---|
94 |
|
---|
95 |
|
---|
96 | save_smatrix <T, lower> (ml, filename.c_str());
|
---|
97 | load_smatrix <T, lower>(ml2, filename.c_str());
|
---|
98 | pass &= compare(ml, ml2);
|
---|
99 |
|
---|
100 | save_smatrix <T, upper> (mu, filename.c_str());
|
---|
101 | load_smatrix <T, upper>(mu2, filename.c_str());
|
---|
102 | pass &= compare(mu, mu2);
|
---|
103 |
|
---|
104 |
|
---|
105 | return pass;
|
---|
106 | }
|
---|
107 |
|
---|
108 |
|
---|
109 | BOOST_UBLAS_TEST_DEF (check_mat_int) {
|
---|
110 | BOOST_UBLAS_DEBUG_TRACE( "Checking serialization in integer symmetric matrices" );
|
---|
111 | for (int i=1; i<N; i++)
|
---|
112 | BOOST_UBLAS_TEST_CHECK(check<int> (i));
|
---|
113 | }
|
---|
114 |
|
---|
115 | BOOST_UBLAS_TEST_DEF (check_mat_uint) {
|
---|
116 | BOOST_UBLAS_DEBUG_TRACE( "Checking serialization in unsigned integer symmetric matrices" );
|
---|
117 | for (int i=1; i<N; i++)
|
---|
118 | BOOST_UBLAS_TEST_CHECK(check<unsigned int> (i));
|
---|
119 | }
|
---|
120 |
|
---|
121 | BOOST_UBLAS_TEST_DEF (check_mat_long) {
|
---|
122 | BOOST_UBLAS_DEBUG_TRACE( "Checking serialization in long symmetric matrices" );
|
---|
123 | for (int i=1; i<N; i++)
|
---|
124 | BOOST_UBLAS_TEST_CHECK(check<long> (i));
|
---|
125 | }
|
---|
126 |
|
---|
127 | BOOST_UBLAS_TEST_DEF (check_mat_ulong) {
|
---|
128 | BOOST_UBLAS_DEBUG_TRACE( "Checking serialization in unsigned integer symmetric matrices" );
|
---|
129 | for (int i=1; i<N; i++)
|
---|
130 | BOOST_UBLAS_TEST_CHECK(check<unsigned long> (i));
|
---|
131 | }
|
---|
132 |
|
---|
133 | BOOST_UBLAS_TEST_DEF (check_mat_float) {
|
---|
134 | BOOST_UBLAS_DEBUG_TRACE( "Checking serialization in float symmetric matrices" );
|
---|
135 | for (int i=1; i<N; i++)
|
---|
136 | BOOST_UBLAS_TEST_CHECK(check<float> (i));
|
---|
137 | }
|
---|
138 |
|
---|
139 | BOOST_UBLAS_TEST_DEF (check_mat_double) {
|
---|
140 | BOOST_UBLAS_DEBUG_TRACE( "Checking serialization in double symmetric matrices" );
|
---|
141 | for (int i=1; i<N; i++)
|
---|
142 | BOOST_UBLAS_TEST_CHECK(check<double> (i));
|
---|
143 | }
|
---|
144 |
|
---|
145 | BOOST_UBLAS_TEST_DEF (check_mat_size_t) {
|
---|
146 | BOOST_UBLAS_DEBUG_TRACE( "Checking serialization in size_t symmetric matrices" );
|
---|
147 | for (int i=1; i<N; i++)
|
---|
148 | BOOST_UBLAS_TEST_CHECK(check<size_t> (i));
|
---|
149 | }
|
---|
150 |
|
---|
151 | BOOST_UBLAS_TEST_DEF (check_mat_char) {
|
---|
152 | BOOST_UBLAS_DEBUG_TRACE( "Checking serialization in char symmetric matrices" );
|
---|
153 | for (int i=1; i<N; i++)
|
---|
154 | BOOST_UBLAS_TEST_CHECK(check<char> (i));
|
---|
155 | }
|
---|
156 |
|
---|
157 |
|
---|
158 | int main () {
|
---|
159 | BOOST_UBLAS_TEST_BEGIN();
|
---|
160 |
|
---|
161 | BOOST_UBLAS_TEST_DO( check_mat_int );
|
---|
162 | BOOST_UBLAS_TEST_DO( check_mat_uint );
|
---|
163 | BOOST_UBLAS_TEST_DO( check_mat_long );
|
---|
164 | BOOST_UBLAS_TEST_DO( check_mat_ulong );
|
---|
165 | BOOST_UBLAS_TEST_DO( check_mat_float );
|
---|
166 | BOOST_UBLAS_TEST_DO( check_mat_double );
|
---|
167 | BOOST_UBLAS_TEST_DO( check_mat_size_t );
|
---|
168 | BOOST_UBLAS_TEST_DO( check_mat_char );
|
---|
169 |
|
---|
170 | BOOST_UBLAS_TEST_END();
|
---|
171 |
|
---|
172 | return EXIT_SUCCESS;
|
---|
173 | }
|
---|