diff options
Diffstat (limited to 'src/boost/libs/numeric/ublas/test/triangular_layout.cpp')
-rw-r--r-- | src/boost/libs/numeric/ublas/test/triangular_layout.cpp | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/src/boost/libs/numeric/ublas/test/triangular_layout.cpp b/src/boost/libs/numeric/ublas/test/triangular_layout.cpp new file mode 100644 index 000000000..f4da9752b --- /dev/null +++ b/src/boost/libs/numeric/ublas/test/triangular_layout.cpp @@ -0,0 +1,139 @@ +// Copyright 2008 Gunter Winkler <guwi17@gmx.de> +// Thanks to Tiago Requeijo for providing this test +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include <iostream> +#include <boost/numeric/ublas/symmetric.hpp> +#include <boost/numeric/ublas/triangular.hpp> +#include <boost/cstdlib.hpp> + +using namespace std; +namespace ublas = boost::numeric::ublas; + +int main() +{ + int sz = 4; + ublas::symmetric_matrix<int, ublas::upper, ublas::column_major> UpCol (sz, sz); + ublas::symmetric_matrix<int, ublas::upper, ublas::row_major> UpRow (sz, sz); + ublas::symmetric_matrix<int, ublas::lower, ublas::column_major> LoCol (sz, sz); + ublas::symmetric_matrix<int, ublas::lower, ublas::row_major> LoRow (sz, sz); + + ublas::triangular_matrix<int, ublas::upper, ublas::column_major> TrUpCol (sz, sz); + ublas::triangular_matrix<int, ublas::upper, ublas::row_major> TrUpRow (sz, sz); + ublas::triangular_matrix<int, ublas::lower, ublas::column_major> TrLoCol (sz, sz); + ublas::triangular_matrix<int, ublas::lower, ublas::row_major> TrLoRow (sz, sz); + + for(int i=0; i<sz; ++i) + for(int j=i; j<sz; ++j) + { + // Symmetric + UpCol(i,j) = 10*i + j; + UpRow(i,j) = 10*i + j; + LoCol(i,j) = 10*i + j; + LoRow(i,j) = 10*i + j; + // Triangular + TrUpCol(i,j) = 10*i + j; + TrUpRow(i,j) = 10*i + j; + TrLoCol(j,i) = 10*i + j; + TrLoRow(j,i) = 10*i + j; + } + + //get pointers to data + int* uc = &(UpCol.data()[0]); + int* ur = &(UpRow.data()[0]); + int* lc = &(LoCol.data()[0]); + int* lr = &(LoRow.data()[0]); + int* tuc = &(TrUpCol.data()[0]); + int* tur = &(TrUpRow.data()[0]); + int* tlc = &(TrLoCol.data()[0]); + int* tlr = &(TrLoRow.data()[0]); + + // upper, column_major + // storage should be: 0 1 11 2 12 22 3 13 23 33 + int uc_correct[] = {0, 1, 11, 2, 12, 22, 3, 13, 23, 33}; + + // upper, row_major + // storage should be: 0 1 2 3 11 12 13 22 23 33 + int ur_correct[] = {0, 1, 2, 3, 11, 12, 13, 22, 23, 33}; + + // lower, column_major + // storage should be: 0 1 2 3 11 12 13 22 23 33 + int lc_correct[] = {0, 1, 2, 3, 11, 12, 13, 22, 23, 33}; + + // lower, row_major + // storage should be: 0 1 11 2 12 22 3 13 23 33 + int lr_correct[] = {0, 1, 11, 2, 12, 22, 3, 13, 23, 33}; + + bool success = true; + + // Test Symmetric + for(int i=0; i<sz*(sz+1)/2; ++i) + if(uc[i] != uc_correct[i]) + { + cout << "Storage error (Symmetric, Upper, Column major)" << endl; + success = false; + break; + } + + for(int i=0; i<sz*(sz+1)/2; ++i) + if(ur[i] != ur_correct[i]) + { + cout << "Storage error (Symmetric, Upper, Row major)" << endl; + success = false; + break; + } + + for(int i=0; i<sz*(sz+1)/2; ++i) + if(lc[i] != lc_correct[i]) + { + cout << "Storage error (Symmetric, Lower, Column major)" << endl; + success = false; + break; + } + + for(int i=0; i<sz*(sz+1)/2; ++i) + if(lr[i] != lr_correct[i]) + { + cout << "Storage error (Symmetric, Lower, Row major)" << endl; + success = false; + break; + } + + // Test Triangular + for(int i=0; i<sz*(sz+1)/2; ++i) + if(tuc[i] != uc_correct[i]) + { + cout << "Storage error (Triangular, Upper, Column major)" << endl; + success = false; + break; + } + + for(int i=0; i<sz*(sz+1)/2; ++i) + if(tur[i] != ur_correct[i]) + { + cout << "Storage error (Triangular, Upper, Row major)" << endl; + success = false; + break; + } + + for(int i=0; i<sz*(sz+1)/2; ++i) + if(tlc[i] != lc_correct[i]) + { + cout << "Storage error (Triangular, Lower, Column major)" << endl; + success = false; + break; + } + + for(int i=0; i<sz*(sz+1)/2; ++i) + if(tlr[i] != lr_correct[i]) + { + cout << "Storage error (Triangular, Lower, Row major)" << endl; + success = false; + break; + } + + + return (success)?boost::exit_success:boost::exit_failure; +} |