Ticket #10045: test_symmetric_matrix_serialization.cpp

File test_symmetric_matrix_serialization.cpp, 5.0 KB (added by 2015csb1032@…, 6 years ago)

Test for symmetrix matrix serialization

Line 
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
39using namespace boost::numeric::ublas;
40
41#define N 200
42
43template <typename T, typename U>
44void 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
50template <typename T, typename U>
51void 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
58template <class T>
59bool 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
109BOOST_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
115BOOST_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
121BOOST_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
127BOOST_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
133BOOST_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
139BOOST_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
145BOOST_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
151BOOST_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
158int 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}