Ticket #2800: main.cpp

File main.cpp, 3.3 KB (added by anonymous, 14 years ago)

C++ test file for triangular matrix storage schemes

Line 
1
2#include <iostream>
3#include <boost/numeric/ublas/symmetric.hpp>
4#include <boost/numeric/ublas/triangular.hpp>
5using namespace std;
6namespace ublas = boost::numeric::ublas;
7
8int main(int argc, char* argv[])
9{
10 int sz = 4;
11 ublas::symmetric_matrix<int, ublas::upper, ublas::column_major> UpCol (sz, sz);
12 ublas::symmetric_matrix<int, ublas::upper, ublas::row_major> UpRow (sz, sz);
13 ublas::symmetric_matrix<int, ublas::lower, ublas::column_major> LoCol (sz, sz);
14 ublas::symmetric_matrix<int, ublas::lower, ublas::row_major> LoRow (sz, sz);
15
16 ublas::triangular_matrix<int, ublas::upper, ublas::column_major> TrUpCol (sz, sz);
17 ublas::triangular_matrix<int, ublas::upper, ublas::row_major> TrUpRow (sz, sz);
18 ublas::triangular_matrix<int, ublas::lower, ublas::column_major> TrLoCol (sz, sz);
19 ublas::triangular_matrix<int, ublas::lower, ublas::row_major> TrLoRow (sz, sz);
20
21 for(int i=0; i<sz; ++i)
22 for(int j=i; j<sz; ++j)
23 {
24 // Symmetric
25 UpCol(i,j) = 10*i + j;
26 UpRow(i,j) = 10*i + j;
27 LoCol(i,j) = 10*i + j;
28 LoRow(i,j) = 10*i + j;
29 // Triangular
30 TrUpCol(i,j) = 10*i + j;
31 TrUpRow(i,j) = 10*i + j;
32 TrLoCol(j,i) = 10*i + j;
33 TrLoRow(j,i) = 10*i + j;
34 }
35
36 //get pointers to data
37 int* uc = &(UpCol.data()[0]);
38 int* ur = &(UpRow.data()[0]);
39 int* lc = &(LoCol.data()[0]);
40 int* lr = &(LoRow.data()[0]);
41 int* tuc = &(TrUpCol.data()[0]);
42 int* tur = &(TrUpRow.data()[0]);
43 int* tlc = &(TrLoCol.data()[0]);
44 int* tlr = &(TrLoRow.data()[0]);
45
46 // upper, column_major
47 // storage should be: 0 1 11 2 12 22 3 13 23 33
48 int uc_correct[] = {0, 1, 11, 2, 12, 22, 3, 13, 23, 33};
49
50 // upper, row_major
51 // storage should be: 0 1 2 3 11 12 13 22 23 33
52 int ur_correct[] = {0, 1, 2, 3, 11, 12, 13, 22, 23, 33};
53
54 // lower, column_major
55 // storage should be: 0 1 2 3 11 12 13 22 23 33
56 int lc_correct[] = {0, 1, 2, 3, 11, 12, 13, 22, 23, 33};
57
58 // lower, row_major
59 // storage should be: 0 1 11 2 12 22 3 13 23 33
60 int lr_correct[] = {0, 1, 11, 2, 12, 22, 3, 13, 23, 33};
61
62 // Test Symmetric
63 for(int i=0; i<sz*(sz+1)/2; ++i)
64 if(uc[i] != uc_correct[i])
65 {
66 cout << "Storage error (Symmetric, Upper, Column major)" << endl;
67 break;
68 }
69
70 for(int i=0; i<sz*(sz+1)/2; ++i)
71 if(ur[i] != ur_correct[i])
72 {
73 cout << "Storage error (Symmetric, Upper, Row major)" << endl;
74 break;
75 }
76
77 for(int i=0; i<sz*(sz+1)/2; ++i)
78 if(lc[i] != lc_correct[i])
79 {
80 cout << "Storage error (Symmetric, Lower, Column major)" << endl;
81 break;
82 }
83
84 for(int i=0; i<sz*(sz+1)/2; ++i)
85 if(lr[i] != lr_correct[i])
86 {
87 cout << "Storage error (Symmetric, Lower, Row major)" << endl;
88 break;
89 }
90
91 // Test Triangular
92 for(int i=0; i<sz*(sz+1)/2; ++i)
93 if(tuc[i] != uc_correct[i])
94 {
95 cout << "Storage error (Triangular, Upper, Column major)" << endl;
96 break;
97 }
98
99 for(int i=0; i<sz*(sz+1)/2; ++i)
100 if(tur[i] != ur_correct[i])
101 {
102 cout << "Storage error (Triangular, Upper, Row major)" << endl;
103 break;
104 }
105
106 for(int i=0; i<sz*(sz+1)/2; ++i)
107 if(tlc[i] != lc_correct[i])
108 {
109 cout << "Storage error (Triangular, Lower, Column major)" << endl;
110 break;
111 }
112
113 for(int i=0; i<sz*(sz+1)/2; ++i)
114 if(tlr[i] != lr_correct[i])
115 {
116 cout << "Storage error (Triangular, Lower, Row major)" << endl;
117 break;
118 }
119
120
121 return 0;
122}