mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-04 05:50:31 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			140 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// 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;
 | 
						|
}
 |