mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 04:50:34 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			781 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			781 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //
 | |
| //  Copyright (c) 2010 Athanasios Iliopoulos
 | |
| //
 | |
| //  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 <boost/numeric/ublas/assignment.hpp>
 | |
| #include <boost/numeric/ublas/vector.hpp>
 | |
| #include <boost/numeric/ublas/vector_proxy.hpp>
 | |
| #include <boost/numeric/ublas/vector_sparse.hpp>
 | |
| #include <boost/numeric/ublas/matrix_sparse.hpp>
 | |
| #include <boost/numeric/ublas/io.hpp>
 | |
| #include <boost/numeric/ublas/matrix.hpp>
 | |
| #include <boost/timer.hpp>
 | |
| #include <ctime>
 | |
| #include "common/testhelper.hpp"
 | |
| #include "utils.hpp"
 | |
| 
 | |
| using namespace boost::numeric::ublas;
 | |
| 
 | |
| template <class V>
 | |
| bool test_vector() {
 | |
|     bool pass = true;
 | |
| 
 | |
|     V a(3), ra(3);
 | |
|     a <<=  1, 2, 3;
 | |
|     ra(0) = 1; ra(1) = 2; ra(2) = 3;
 | |
|     pass &= compare_to(a, ra);
 | |
| 
 | |
|     V b(7), rb(7);
 | |
|     b<<= a, 10, a;
 | |
|     rb(0) = 1; rb(1) = 2; rb(2) = 3; rb(3)=10, rb(4)= 1; rb(5)=2; rb(6)=3;
 | |
|     pass &= compare_to(b, rb);
 | |
| 
 | |
|     {
 | |
|     V c(6), rc(6);
 | |
|     c <<= 1, move(2), 3 ,4, 5, move(-5), 10, 10;
 | |
|     rc(0) = 1; rc(1) = 10; rc(2) = 10; rc(3) = 3; rc(4) = 4; rc(5) = 5;
 | |
|     pass &= compare_to(c, rc);
 | |
| 
 | |
|     V d(6), rd(6);
 | |
|     d <<= 1, move_to(3), 3 ,4, 5, move_to(1), 10, 10;
 | |
|     rd(0) = 1; rd(1) = 10; rd(2) = 10; rd(3) = 3; rd(4) = 4; rd(5) = 5;
 | |
|     pass &= compare_to(d, rd);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V c(6), rc(6);
 | |
|     c <<= 1, move<2>(), 3 ,4, 5, move<-5>(), 10, 10;
 | |
|     rc(0) = 1; rc(1) = 10; rc(2) = 10; rc(3) = 3; rc(4) = 4; rc(5) = 5;
 | |
|     pass &= compare_to(c, rc);
 | |
| 
 | |
|     V d(6), rd(6);
 | |
|     d <<= 1, move_to<3>(), 3 ,4, 5, move_to<1>(), 10, 10;
 | |
|     rd(0) = 1; rd(1) = 10; rd(2) = 10; rd(3) = 3; rd(4) = 4; rd(5) = 5;
 | |
|     pass &= compare_to(d, rd);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     {
 | |
|     V f(6), rf(6);
 | |
|     f <<= 5, 5, 5, 5, 5, 5;
 | |
|     V fa(3); fa<<= 1, 2, 3;
 | |
|     f <<= fill_policy::index_plus_assign(), fa;
 | |
|     rf <<= 6,7,8, 5, 5, 5;
 | |
|     pass &= compare_to(f, rf);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V f(6), rf(6);
 | |
|     f <<= 5, 5, 5, 5, 5, 5;
 | |
|     V fa(3); fa<<= 1, 2, 3;
 | |
|     f <<= fill_policy::index_minus_assign(), fa;
 | |
|     rf <<= 4,3,2, 5, 5, 5;
 | |
|     pass &= compare_to(f, rf);
 | |
|     }
 | |
| 
 | |
|     return pass;
 | |
| }
 | |
| 
 | |
| template <class V>
 | |
| bool test_vector_sparse_push_back() {
 | |
|     bool pass = true;
 | |
| 
 | |
|     V a(3), ra(3);
 | |
|     a <<= fill_policy::sparse_push_back(), 1, 2, 3;
 | |
|     ra(0) = 1; ra(1) = 2; ra(2) = 3;
 | |
|     pass &= compare_to(a, ra);
 | |
| 
 | |
|     V b(7), rb(7);
 | |
|     b<<= fill_policy::sparse_push_back(), a, 10, a;
 | |
|     rb(0) = 1; rb(1) = 2; rb(2) = 3; rb(3)=10, rb(4)= 1; rb(5)=2; rb(6)=3;
 | |
|     pass &= compare_to(b, rb);
 | |
| 
 | |
|     V c(6), rc(6);
 | |
|     c <<= fill_policy::sparse_push_back(), 1, move(2), 3 ,4, 5; // Move back (i.e. negative is dangerous for push_back)
 | |
|     rc(0) = 1; rc(1) = 0; rc(2) = 0; rc(3) = 3; rc(4) = 4; rc(5) = 5;
 | |
|     pass &= compare_to(c, rc);
 | |
| 
 | |
|     V d(6), rd(6);
 | |
|     d <<= fill_policy::sparse_push_back(), 1, move_to(3), 3 ,4, 5; // Move back (i.e. before current index is dangerous for push_back)
 | |
|     rd(0) = 1; rd(1) = 0; rd(2) = 0; rd(3) = 3; rd(4) = 4; rd(5) = 5;
 | |
|     pass &= compare_to(d, rd);
 | |
| 
 | |
|     V e(6), re(6);
 | |
|     e <<= fill_policy::sparse_push_back(), 1, move_to(3), 3 ,4, 5, fill_policy::sparse_insert(), move_to(1), 10, 10; // If you want to move back, use this
 | |
|     re(0) = 1; re(1) = 10; re(2) = 10; re(3) = 3; re(4) = 4; re(5) = 5;
 | |
|     pass &= compare_to(e, re);
 | |
| 
 | |
|     return pass;
 | |
| }
 | |
| 
 | |
| 
 | |
| template <class V>
 | |
| bool test_vector_sparse_insert() {
 | |
|     bool pass = true;
 | |
| 
 | |
|     V a(3), ra(3);
 | |
|     a <<= fill_policy::sparse_insert(), 1, 2, 3;
 | |
|     ra(0) = 1; ra(1) = 2; ra(2) = 3;
 | |
|     pass &= compare_to(a, ra);
 | |
| 
 | |
|     V b(7), rb(7);
 | |
|     b<<= fill_policy::sparse_insert(), a, 10, a;
 | |
|     rb(0) = 1; rb(1) = 2; rb(2) = 3; rb(3)=10, rb(4)= 1; rb(5)=2; rb(6)=3;
 | |
|     pass &= compare_to(b, rb);
 | |
| 
 | |
|     V c(6), rc(6);
 | |
|     c <<= fill_policy::sparse_insert(), 1, move(2), 3 ,4, 5, move(-5), 10, 10; // Move back (i.e. negative is dangerous for sparse)
 | |
|     rc(0) = 1; rc(1) = 10; rc(2) = 10; rc(3) = 3; rc(4) = 4; rc(5) = 5;
 | |
|     pass &= compare_to(c, rc);
 | |
| 
 | |
| 
 | |
|     V d(6), rd(6);
 | |
|     d <<= fill_policy::sparse_insert(), 1, move_to(3), 3 ,4, 5, move_to(1), 10, 10; // Move back (i.e.before is dangerous for sparse)
 | |
|     rd(0) = 1; rd(1) = 10; rd(2) = 10; rd(3) = 3; rd(4) = 4; rd(5) = 5;
 | |
|     pass &= compare_to(d, rd);
 | |
| 
 | |
| 
 | |
|     return pass;
 | |
| }
 | |
| 
 | |
| 
 | |
| template <class V>
 | |
| bool test_matrix() {
 | |
|     bool pass = true;
 | |
| 
 | |
|     V A(3,3), RA(3,3);
 | |
|     A <<= 1, 2, 3, 4, 5, 6, 7, 8, 9;
 | |
|     RA(0,0)= 1; RA(0,1)=2; RA(0,2)=3;
 | |
|     RA(1,0)= 4; RA(1,1)=5; RA(1,2)=6;
 | |
|     RA(2,0)= 7; RA(2,1)=8; RA(2,2)=9;
 | |
|     pass &= compare_to(A, RA);
 | |
| 
 | |
|     {
 | |
|     V B(3,3), RB(3,3);
 | |
|     vector<typename V::value_type>  b(3);
 | |
|     b<<= 4,5,6;
 | |
|     B<<= 1, 2, 3, b, 7, project(b, range(1,3));
 | |
|     RB<<=1, 2, 3, 4, 5, 6, 7, 5, 6; // If the first worked we can now probably use it.
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(3,3), RB(3,3);
 | |
|     vector<typename V::value_type>  b(3);
 | |
|     b<<= 4,5,6;
 | |
|     B<<= move(1,0), b, move_to(0,0), 1, 2, 3, move(1,0), 7, project(b, range(1,3));
 | |
|     RB<<=1, 2, 3, 4, 5, 6, 7, 5, 6;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(3,3), RB(3,3);
 | |
|     vector<typename V::value_type>  b(9);
 | |
|     b<<= 1, 2, 3, 4, 5, 6, 7, 8, 9;
 | |
|     B<<=b;
 | |
|     RB<<=1, 2, 3, 4, 5, 6, 7, 8, 9;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     V C(2,2);
 | |
|     C <<=    2, 3,
 | |
|             4, 5;
 | |
|     B<<= C,C,
 | |
|         C,C;
 | |
|     RB <<=   2,3,2,3,
 | |
|             4,5,4,5,
 | |
|             2,3,2,3,
 | |
|             4,5,4,5;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     V C(2,2);
 | |
|     C <<= 2, 3, 4, 5;
 | |
|     B<<= C, zero_matrix<typename V::value_type>(2,2),
 | |
|         zero_matrix<typename V::value_type>(2,2), C;
 | |
|     RB<<=    2,3,0,0,
 | |
|             4,5,0,0,
 | |
|             0,0,2,3,
 | |
|             0,0,4,5;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     V C(2,2);
 | |
|     C <<= 2, 3, 4, 5;
 | |
|     B<<= C, zero_matrix<typename V::value_type>(2,2),
 | |
|         zero_matrix<typename V::value_type>(2,2), C;
 | |
|     RB<<=    2,3,0,0,
 | |
|             4,5,0,0,
 | |
|             0,0,2,3,
 | |
|             0,0,4,5;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = zero_matrix<typename V::value_type>(4,4); // We need that because of the non-zero instatiation of dense types.
 | |
|     V C(2,2);
 | |
|     C <<= 2, 3, 4, 5;
 | |
|     B<<= move(1,1), C;
 | |
|     RB<<=    0,0,0,0,
 | |
|             0,2,3,0,
 | |
|             0,4,5,0,
 | |
|             0,0,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = zero_matrix<typename V::value_type>(4,4);
 | |
|     B<<= move_to(0,1), 2, 3, next_row(), 1, 2, next_row(), 4, 5;
 | |
|     RB<<=    0,2,3,0,
 | |
|             1,2,0,0,
 | |
|             4,5,0,0,
 | |
|             0,0,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = zero_matrix<typename V::value_type>(4,4);
 | |
|     B<<=traverse_policy::by_column(), move_to(0,1), 2, 3, 6, next_column(), 4, 5;
 | |
|     RB<<=    0,2,4,0,
 | |
|             0,3,5,0,
 | |
|             0,6,0,0,
 | |
|             0,0,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = zero_matrix<typename V::value_type>(4,4);
 | |
|     B<<=traverse_policy::by_column(), move_to(0,1), 2, 3, next_row(), traverse_policy::by_row(), 4, 5;
 | |
|     RB<<=    0,2,0,0,
 | |
|             0,3,0,0,
 | |
|             0,0,0,0,
 | |
|             4,5,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = zero_matrix<typename V::value_type>(4,4);
 | |
|     B<<=traverse_policy::by_column(), move_to(0,1), 2, 3, begin2(), traverse_policy::by_row(), 4, 5, 6, 7, 8;
 | |
|     RB<<=    0,2,0,0,
 | |
|             0,3,0,0,
 | |
|             4,5,6,7,
 | |
|             8,0,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = zero_matrix<typename V::value_type>(4,4);
 | |
|     B<<=traverse_policy::by_column(), move_to(0,1), 2, 3, begin2(), traverse_policy::by_row(), 4, 5, 6, 7, 8,9, begin1(), 1, 2;
 | |
|     RB<<=    0,2,1,2,
 | |
|             0,3,0,0,
 | |
|             4,5,6,7,
 | |
|             8,9,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = scalar_matrix<typename V::value_type>(4,4,1);
 | |
|     V C(2,2);
 | |
|     C <<= 1, 2, 3, 4;
 | |
|     B<<= fill_policy::index_plus_assign(), move(1,1), C;
 | |
|     RB<<=    1,1,1,1,
 | |
|             1,2,3,1,
 | |
|             1,4,5,1,
 | |
|             1,1,1,1;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = scalar_matrix<typename V::value_type>(4,4,5);
 | |
|     V C(2,2);
 | |
|     C <<= 1, 2, 3, 4;
 | |
|     B<<= fill_policy::index_minus_assign(), move(1,1), C;
 | |
|     RB<<=    5,5,5,5,
 | |
|             5,4,3,5,
 | |
|             5,2,1,5,
 | |
|             5,5,5,5;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     return pass;
 | |
| }
 | |
| 
 | |
| template <class V>
 | |
| bool test_matrix_sparse_push_back() {
 | |
|     bool pass = true;
 | |
| 
 | |
|     V A(3,3), RA(3,3);
 | |
|     A <<= fill_policy::sparse_push_back(), 1, 2, 3, 4, 5, 6, 7, 8, 9;
 | |
|     RA(0,0)= 1; RA(0,1)=2; RA(0,2)=3;
 | |
|     RA(1,0)= 4; RA(1,1)=5; RA(1,2)=6;
 | |
|     RA(2,0)= 7; RA(2,1)=8; RA(2,2)=9;
 | |
|     pass &= compare_to(A, RA);
 | |
| 
 | |
|     {
 | |
|     V B(3,3), RB(3,3);
 | |
|     vector<typename V::value_type>  b(3);
 | |
|     b<<= 4,5,6;
 | |
|     B<<=fill_policy::sparse_push_back(), 1, 2, 3, b, 7, project(b, range(1,3));
 | |
|     RB<<= 1, 2, 3, 4, 5, 6, 7, 5, 6; // If the first worked we can now probably use it.
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(3,3), RB(3,3);
 | |
|     vector<typename V::value_type>  b(3);
 | |
|     b<<= 4,5,6;
 | |
|     B<<=fill_policy::sparse_push_back(), move(1,0), b, fill_policy::sparse_insert(), move_to(0,0), 1, 2, 3, move(1,0), 7, project(b, range(1,3));
 | |
|     RB<<=1, 2, 3, 4, 5, 6, 7, 5, 6;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(3,3), RB(3,3);
 | |
|     vector<typename V::value_type>  b(9);
 | |
|     b<<= 1, 2, 3, 4, 5, 6, 7, 8, 9;
 | |
|     B<<=b;
 | |
|     RB<<=1, 2, 3, 4, 5, 6, 7, 8, 9;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     V C(2,2);
 | |
|     C <<=    2, 3,
 | |
|             4, 5;
 | |
|     // It might get complicated for sparse push_back, this must go into the tutorial. (This way is not convient nor fast)
 | |
|     B<<=fill_policy::sparse_push_back(), C, move_to(2,2), C, fill_policy::sparse_insert(), move_to(0,2), C, C;
 | |
|     RB <<=   2,3,2,3,
 | |
|             4,5,4,5,
 | |
|             2,3,2,3,
 | |
|             4,5,4,5;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     V C(2,2);
 | |
|     C <<= 2, 3, 4, 5;
 | |
|     B<<=fill_policy::sparse_push_back(), C, move_to(2,2), C;
 | |
|     RB<<=    2,3,0,0,
 | |
|             4,5,0,0,
 | |
|             0,0,2,3,
 | |
|             0,0,4,5;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     V C(2,2);
 | |
|     C <<= 2, 3, 4, 5;
 | |
|     B<<=fill_policy::sparse_push_back(), move(1,1), C;
 | |
|     RB<<=    0,0,0,0,
 | |
|             0,2,3,0,
 | |
|             0,4,5,0,
 | |
|             0,0,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = zero_matrix<typename V::value_type>(4,4);
 | |
|     B<<=fill_policy::sparse_push_back(), move_to(0,1), 2, 3, next_row(), 1, 2, next_row(), 4, 5;
 | |
|     RB<<=    0,2,3,0,
 | |
|             1,2,0,0,
 | |
|             4,5,0,0,
 | |
|             0,0,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
|     // The next will not work with sparse push_back because elements that are prior to the ones already in are attempted to be added
 | |
| /*
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = zero_matrix<typename V::value_type>(4,4);
 | |
|     B<<=fill_policy::sparse_push_back(),traverse_policy::by_column(), move_to(0,1), 2, 3, 6, next_column(), 4, 5;
 | |
|     RB<<=    0,2,4,0,
 | |
|             0,3,5,0,
 | |
|             0,6,0,0,
 | |
|             0,0,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| */
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = zero_matrix<typename V::value_type>(4,4);
 | |
|     B<<=fill_policy::sparse_push_back(),traverse_policy::by_column(), move_to(0,1), 2, 3, next_row(), traverse_policy::by_row(), 4, 5;
 | |
|     RB<<=    0,2,0,0,
 | |
|             0,3,0,0,
 | |
|             0,0,0,0,
 | |
|             4,5,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = zero_matrix<typename V::value_type>(4,4);
 | |
|     B<<=fill_policy::sparse_push_back(),traverse_policy::by_column(), move_to(0,1), 2, 3, begin2(), traverse_policy::by_row(), 4, 5, 6, 7, 8;
 | |
|     RB<<=    0,2,0,0,
 | |
|             0,3,0,0,
 | |
|             4,5,6,7,
 | |
|             8,0,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     // The next will not work with sparse push_back because elements that are prior to the ones already in are attempted to be added
 | |
| /*
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = zero_matrix<typename V::value_type>(4,4);
 | |
|     B<<=fill_policy::sparse_push_back(),traverse_policy::by_column(), move_to(0,1), 2, 3, begin2(), traverse_policy::by_row(), 4, 5, 6, 7, 8,9, begin1(), 1, 2;
 | |
|     RB<<=    0,2,1,2,
 | |
|             0,3,0,0,
 | |
|             4,5,6,7,
 | |
|             8,9,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| */
 | |
|     return pass;
 | |
| }
 | |
| 
 | |
| template <class V>
 | |
| bool test_matrix_sparse_insert() {
 | |
|     bool pass = true;
 | |
| 
 | |
|     V A(3,3), RA(3,3);
 | |
|     A <<= fill_policy::sparse_insert(), 1, 2, 3, 4, 5, 6, 7, 8, 9;
 | |
|     RA(0,0)= 1; RA(0,1)=2; RA(0,2)=3;
 | |
|     RA(1,0)= 4; RA(1,1)=5; RA(1,2)=6;
 | |
|     RA(2,0)= 7; RA(2,1)=8; RA(2,2)=9;
 | |
|     pass &= compare_to(A, RA);
 | |
| 
 | |
|     {
 | |
|     V B(3,3), RB(3,3);
 | |
|     vector<typename V::value_type>  b(3);
 | |
|     b<<= 4,5,6;
 | |
|     B<<=fill_policy::sparse_insert(), 1, 2, 3, b, 7, project(b, range(1,3));
 | |
|     RB<<=1, 2, 3, 4, 5, 6, 7, 5, 6; // If the first worked we can now probably use it.
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(3,3), RB(3,3);
 | |
|     vector<typename V::value_type>  b(3);
 | |
|     b<<= 4,5,6;
 | |
|     B<<=fill_policy::sparse_insert(), move(1,0), b, fill_policy::sparse_insert(), move_to(0,0), 1, 2, 3, move(1,0), 7, project(b, range(1,3));
 | |
|     RB<<=1, 2, 3, 4, 5, 6, 7, 5, 6;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(3,3), RB(3,3);
 | |
|     vector<typename V::value_type>  b(9);
 | |
|     b<<= 1, 2, 3, 4, 5, 6, 7, 8, 9;
 | |
|     B<<=b;
 | |
|     RB<<=1, 2, 3, 4, 5, 6, 7, 8, 9;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     V C(2,2);
 | |
|     C <<=    2, 3,
 | |
|             4, 5;
 | |
|     B<<=fill_policy::sparse_insert(), C, C, C, C;
 | |
|     RB <<=   2,3,2,3,
 | |
|             4,5,4,5,
 | |
|             2,3,2,3,
 | |
|             4,5,4,5;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     V C(2,2);
 | |
|     C <<= 2, 3, 4, 5;
 | |
|     B<<=fill_policy::sparse_insert(), C, move_to(2,2), C;
 | |
|     RB<<=    2,3,0,0,
 | |
|             4,5,0,0,
 | |
|             0,0,2,3,
 | |
|             0,0,4,5;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     V C(2,2);
 | |
|     C <<= 2, 3, 4, 5;
 | |
|     B<<=fill_policy::sparse_insert(), move(1,1), C;
 | |
|     RB<<=    0,0,0,0,
 | |
|             0,2,3,0,
 | |
|             0,4,5,0,
 | |
|             0,0,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = zero_matrix<typename V::value_type>(4,4);
 | |
|     B<<=fill_policy::sparse_insert(), move_to(0,1), 2, 3, next_row(), 1, 2, next_row(), 4, 5;
 | |
|     RB<<=    0,2,3,0,
 | |
|             1,2,0,0,
 | |
|             4,5,0,0,
 | |
|             0,0,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = zero_matrix<typename V::value_type>(4,4);
 | |
|     B<<=fill_policy::sparse_insert(),traverse_policy::by_column(), move_to(0,1), 2, 3, 6, next_column(), 4, 5;
 | |
|     RB<<=    0,2,4,0,
 | |
|             0,3,5,0,
 | |
|             0,6,0,0,
 | |
|             0,0,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = zero_matrix<typename V::value_type>(4,4);
 | |
|     B<<=fill_policy::sparse_insert(),traverse_policy::by_column(), move_to(0,1), 2, 3, next_row(), traverse_policy::by_row(), 4, 5;
 | |
|     RB<<=    0,2,0,0,
 | |
|             0,3,0,0,
 | |
|             0,0,0,0,
 | |
|             4,5,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = zero_matrix<typename V::value_type>(4,4);
 | |
|     B<<=fill_policy::sparse_insert(),traverse_policy::by_column(), move_to(0,1), 2, 3, begin2(), traverse_policy::by_row(), 4, 5, 6, 7, 8;
 | |
|     RB<<=    0,2,0,0,
 | |
|             0,3,0,0,
 | |
|             4,5,6,7,
 | |
|             8,0,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     {
 | |
|     V B(4,4), RB(4,4);
 | |
|     B = zero_matrix<typename V::value_type>(4,4);
 | |
|     B<<=fill_policy::sparse_insert(),traverse_policy::by_column(), move_to(0,1), 2, 3, begin2(), traverse_policy::by_row(), 4, 5, 6, 7, 8,9, begin1(), 1, 2;
 | |
|     RB<<=    0,2,1,2,
 | |
|             0,3,0,0,
 | |
|             4,5,6,7,
 | |
|             8,9,0,0;
 | |
|     pass &= compare_to(B, RB);
 | |
|     }
 | |
| 
 | |
|     return pass;
 | |
| }
 | |
| 
 | |
| 
 | |
| BOOST_UBLAS_TEST_DEF (test_vector) {
 | |
| 
 | |
|     BOOST_UBLAS_DEBUG_TRACE( "Starting operator \"<<= \" vector assignment tests" );
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<vector<double> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<vector<float> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<vector<long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<vector<unsigned long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<vector<int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<vector<unsigned int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<vector<std::size_t> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<vector<char> >());
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK((test_vector<bounded_vector<double,7> >()));
 | |
|     BOOST_UBLAS_TEST_CHECK((test_vector<bounded_vector<float,7> >()));
 | |
|     BOOST_UBLAS_TEST_CHECK((test_vector<bounded_vector<long,7> >()));
 | |
|     BOOST_UBLAS_TEST_CHECK((test_vector<bounded_vector<unsigned long,7> >()));
 | |
|     BOOST_UBLAS_TEST_CHECK((test_vector<bounded_vector<int,7> >()));
 | |
|     BOOST_UBLAS_TEST_CHECK((test_vector<bounded_vector<unsigned int,7> >()));
 | |
|     BOOST_UBLAS_TEST_CHECK((test_vector<bounded_vector<std::size_t,7> >()));
 | |
|     BOOST_UBLAS_TEST_CHECK((test_vector<bounded_vector<char,7> >()));
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<mapped_vector<double> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<mapped_vector<float> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<mapped_vector<long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<mapped_vector<unsigned long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<mapped_vector<int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<mapped_vector<unsigned int> >())
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<mapped_vector<std::size_t> >())
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<mapped_vector<char> >());
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<compressed_vector<double> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<compressed_vector<float> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<compressed_vector<long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<compressed_vector<unsigned long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<compressed_vector<int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<compressed_vector<unsigned int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<compressed_vector<std::size_t> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<compressed_vector<char> >());
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<coordinate_vector<double> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<coordinate_vector<float> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<coordinate_vector<long> >())
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<coordinate_vector<unsigned long> >())
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<coordinate_vector<int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<coordinate_vector<unsigned int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<coordinate_vector<std::size_t> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector<coordinate_vector<char> >());
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_push_back<compressed_vector<double> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_push_back<compressed_vector<float> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_push_back<compressed_vector<long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_push_back<compressed_vector<unsigned long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_push_back<compressed_vector<int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_push_back<compressed_vector<unsigned int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_push_back<compressed_vector<std::size_t> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_push_back<compressed_vector<char> >());
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_push_back<coordinate_vector<double> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_push_back<coordinate_vector<float> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_push_back<coordinate_vector<long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_push_back<coordinate_vector<unsigned long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_push_back<coordinate_vector<int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_push_back<coordinate_vector<unsigned int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_push_back<coordinate_vector<std::size_t> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_push_back<coordinate_vector<char> >());
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_insert<compressed_vector<double> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_insert<compressed_vector<float> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_insert<compressed_vector<long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_insert<compressed_vector<unsigned long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_insert<compressed_vector<int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_insert<compressed_vector<unsigned int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_insert<compressed_vector<std::size_t> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_insert<compressed_vector<char> >());
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_insert<coordinate_vector<double> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_insert<coordinate_vector<float> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_insert<coordinate_vector<long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_insert<coordinate_vector<unsigned long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_insert<coordinate_vector<int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_insert<coordinate_vector<unsigned int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_insert<coordinate_vector<std::size_t> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_vector_sparse_insert<coordinate_vector<char> >());
 | |
| }
 | |
| 
 | |
| BOOST_UBLAS_TEST_DEF (test_matrix) {
 | |
| 
 | |
|     BOOST_UBLAS_DEBUG_TRACE( "Starting operator \"<<= \" matrix assignment tests" );
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<matrix<double> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<matrix<float> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<matrix<long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<matrix<unsigned long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<matrix<int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<matrix<unsigned int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<matrix<std::size_t> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<matrix<char> >());
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK((test_matrix<bounded_matrix<double,7, 7> >()));
 | |
|     BOOST_UBLAS_TEST_CHECK((test_matrix<bounded_matrix<float,7, 7> >()));
 | |
|     BOOST_UBLAS_TEST_CHECK((test_matrix<bounded_matrix<long,7, 7> >()));
 | |
|     BOOST_UBLAS_TEST_CHECK((test_matrix<bounded_matrix<unsigned long,7, 7> >()));
 | |
|     BOOST_UBLAS_TEST_CHECK((test_matrix<bounded_matrix<int,7,7 > >()));
 | |
|     BOOST_UBLAS_TEST_CHECK((test_matrix<bounded_matrix<unsigned int,7, 7> >()));
 | |
|     BOOST_UBLAS_TEST_CHECK((test_matrix<bounded_matrix<char,7, 7> >()));
 | |
|     BOOST_UBLAS_TEST_CHECK((test_matrix<bounded_matrix<std::size_t,7, 7> >()));
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<mapped_matrix<double> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<mapped_matrix<float> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<mapped_matrix<long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<mapped_matrix<unsigned long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<mapped_matrix<int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<mapped_matrix<unsigned int> >())
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<mapped_matrix<std::size_t> >())
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<mapped_matrix<char> >());
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<compressed_matrix<double> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<compressed_matrix<float> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<compressed_matrix<long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<compressed_matrix<unsigned long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<compressed_matrix<int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<compressed_matrix<unsigned int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<compressed_matrix<std::size_t> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<compressed_matrix<char> >());
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<coordinate_matrix<double> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<coordinate_matrix<float> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<coordinate_matrix<long> >())
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<coordinate_matrix<unsigned long> >())
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<coordinate_matrix<int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<coordinate_matrix<unsigned int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<coordinate_matrix<std::size_t> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix<coordinate_matrix<char> >());
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_push_back<compressed_matrix<double> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_push_back<compressed_matrix<float> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_push_back<compressed_matrix<long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_push_back<compressed_matrix<unsigned long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_push_back<compressed_matrix<int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_push_back<compressed_matrix<unsigned int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_push_back<compressed_matrix<std::size_t> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_push_back<compressed_matrix<char> >());
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_push_back<coordinate_matrix<double> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_push_back<coordinate_matrix<float> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_push_back<coordinate_matrix<long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_push_back<coordinate_matrix<unsigned long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_push_back<coordinate_matrix<int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_push_back<coordinate_matrix<unsigned int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_push_back<coordinate_matrix<std::size_t> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_push_back<coordinate_matrix<char> >());
 | |
| 
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_insert<compressed_matrix<double> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_insert<compressed_matrix<float> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_insert<compressed_matrix<long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_insert<compressed_matrix<unsigned long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_insert<compressed_matrix<int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_insert<compressed_matrix<unsigned int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_insert<compressed_matrix<std::size_t> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_insert<compressed_matrix<char> >());
 | |
| 
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_insert<coordinate_matrix<double> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_insert<coordinate_matrix<float> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_insert<coordinate_matrix<long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_insert<coordinate_matrix<unsigned long> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_insert<coordinate_matrix<int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_insert<coordinate_matrix<unsigned int> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_insert<coordinate_matrix<std::size_t> >());
 | |
|     BOOST_UBLAS_TEST_CHECK(test_matrix_sparse_insert<coordinate_matrix<char> >());
 | |
| }
 | |
| 
 | |
| 
 | |
| int main () {
 | |
|     BOOST_UBLAS_TEST_BEGIN();
 | |
| 
 | |
|     BOOST_UBLAS_TEST_DO( test_vector );
 | |
|     BOOST_UBLAS_TEST_DO( test_matrix );
 | |
| 
 | |
|     BOOST_UBLAS_TEST_END();
 | |
| 
 | |
|     return EXIT_SUCCESS;
 | |
| }
 |