diff --git a/test/Jamfile b/test/Jamfile index 82cd053a..2452c037 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -117,7 +117,7 @@ test-suite numeric/uBLAS # <*>"BOOST_UBLAS_NO_ELEMENT_PROXIES" # ] - [ run test/placement_new.cpp + [ run placement_new.cpp ] [ compile concepts.cpp : # requirements diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 0d1c8bed..859d9737 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -104,7 +104,7 @@ test-suite numeric/uBLAS # vacpp:"BOOST_UBLAS_NO_ELEMENT_PROXIES" # ] - [ run test/placement_new.cpp + [ run placement_new.cpp ] [ compile concepts.cpp : # requirements diff --git a/test/common/init.hpp b/test/common/init.hpp index 914ea0fe..2a241566 100644 --- a/test/common/init.hpp +++ b/test/common/init.hpp @@ -13,14 +13,52 @@ template void initialize_vector (V &v) { typename V::size_type size = v.size (); for (typename V::size_type i = 0; i < size; ++ i) - v [i] = i + 1.f; + v [i] = typename V::value_type (i + 1); } template -void initialize_matrix (M &m) { +void initialize_matrix_impl (M &m, ublas::packed_proxy_tag) { + typename M::size_type size1 = m.size1 (); + for (typename M::iterator1 i = m.begin1(); i != m.end1(); ++ i) + for (typename M::iterator2 j = i.begin(); j != i.end(); ++ j) + *j = typename M::value_type (i.index1() * size1 + j.index2() + 1); +} + +template +void initialize_matrix_impl (M &m, ublas::sparse_proxy_tag) { typename M::size_type size1 = m.size1 (); typename M::size_type size2 = m.size2 (); for (typename M::size_type i = 0; i < size1; ++ i) for (typename M::size_type j = 0; j < size2; ++ j) - m (i, j) = i * size1 + j + 1.f; + m (i, j) = typename M::value_type (i * size1 + j + 1.f); +} + +template +void initialize_matrix (M &m) { + initialize_matrix_impl (m, typename M::storage_category()); +} + +template +void initialize_matrix (M &m, ublas::lower_tag) { + typename M::size_type size1 = m.size1 (); + typename M::size_type size2 = m.size2 (); + for (typename M::size_type i = 0; i < size1; ++ i) { + typename M::size_type j = 0; + for (; j <= i; ++ j) + m (i, j) = i * size1 + j + 1.f; + for (; j < size2; ++ j) + m (i, j) = 0.f; + } +} +template +void initialize_matrix (M &m, ublas::upper_tag) { + typename M::size_type size1 = m.size1 (); + typename M::size_type size2 = m.size2 (); + for (typename M::size_type i = 0; i < size1; ++ i) { + typename M::size_type j = 0; + for (; j < i; ++ j) + m (i, j) = 0.f; + for (; j < size2; ++ j) + m (i, j) = i * size1 + j + 1.f; + } } diff --git a/test/test1/test1.hpp b/test/test1/test1.hpp index c612c8ec..f62dc8bf 100644 --- a/test/test1/test1.hpp +++ b/test/test1/test1.hpp @@ -27,21 +27,7 @@ namespace ublas = boost::numeric::ublas; -template -void initialize_vector (V &v) { - int size = v.size (); - for (int i = 0; i < size; ++ i) - v [i] = i + 1.f; -} - -template -void initialize_matrix (M &m) { - int size1 = m.size1 (); - int size2 = m.size2 (); - for (int i = 0; i < size1; ++ i) - for (int j = 0; j < size2; ++ j) - m (i, j) = i * size1 + j + 1.f; -} +#include "../common/init.hpp" void test_vector (); void test_matrix_vector (); diff --git a/test/test2/test2.hpp b/test/test2/test2.hpp index 57f483a2..e8338aab 100644 --- a/test/test2/test2.hpp +++ b/test/test2/test2.hpp @@ -23,50 +23,11 @@ #include #include #include - #include namespace ublas = boost::numeric::ublas; -template -void initialize_vector (V &v) { - int size = v.size (); - for (int i = 0; i < size; ++ i) - v [i] = i + 1.f; -} - -template -void initialize_matrix (M &m, ublas::lower_tag) { - int size1 = m.size1 (); - int size2 = m.size2 (); - for (int i = 0; i < size1; ++ i) { - int j = 0; - for (; j <= i; ++ j) - m (i, j) = i * size1 + j + 1.f; - for (; j < size2; ++ j) - m (i, j) = 0.f; - } -} -template -void initialize_matrix (M &m, ublas::upper_tag) { - int size1 = m.size1 (); - int size2 = m.size2 (); - for (int i = 0; i < size1; ++ i) { - int j = 0; - for (; j < i; ++ j) - m (i, j) = 0.f; - for (; j < size2; ++ j) - m (i, j) = i * size1 + j + 1.f; - } -} -template -void initialize_matrix (M &m) { - int size1 = m.size1 (); - int size2 = m.size2 (); - for (int i = 0; i < size1; ++ i) - for (int j = 0; j < size2; ++ j) - m (i, j) = i * size1 + j + 1.f; -} +#include "../common/init.hpp" template struct test_blas_1 { diff --git a/test/test3/test3.hpp b/test/test3/test3.hpp index f644f66d..6a78c38b 100644 --- a/test/test3/test3.hpp +++ b/test/test3/test3.hpp @@ -33,21 +33,7 @@ namespace ublas = boost::numeric::ublas; -template -void initialize_vector (V &v) { - int size = v.size (); - for (int i = 0; i < size; i += 2) - v [i] = i + 1.f; -} - -template -void initialize_matrix (M &m) { - int size1 = m.size1 (); - int size2 = m.size2 (); - for (int i = 0; i < size1; i += 2) - for (int j = 0; j < size2; j += 2) - m (i, j) = i * size1 + j + 1.f; -} +#include "../common/init.hpp" void test_vector (); void test_matrix_vector (); diff --git a/test/test4/test4.hpp b/test/test4/test4.hpp index 705d99b1..24436240 100644 --- a/test/test4/test4.hpp +++ b/test/test4/test4.hpp @@ -25,31 +25,13 @@ #include #include +namespace ublas = boost::numeric::ublas; + +#include "../common/init.hpp" + //#define USE_BANDED #define USE_DIAGONAL -namespace ublas = boost::numeric::ublas; - -template -void initialize_vector (V &v) { - int size = v.size (); - for (int i = 0; i < size; ++ i) - v [i] = i + 1.f; -} - -template -void initialize_matrix (M &m) { - int size1 = m.size1 (); - int size2 = m.size2 (); - for (int i = 0; i < size1; ++ i) -#ifdef USE_BANDED - for (int j = std::max (i - 1, 0); j < std::min (i + 2, size2); ++ j) -#endif -#ifdef USE_DIAGONAL - for (int j = std::max (i, 0); j < std::min (i + 1, size2); ++ j) -#endif - m (i, j) = i * size1 + j + 1.f; -} void test_matrix_vector (); void test_matrix (); diff --git a/test/test5/test5.hpp b/test/test5/test5.hpp index c5d35ec2..aeec1d8a 100644 --- a/test/test5/test5.hpp +++ b/test/test5/test5.hpp @@ -27,46 +27,7 @@ namespace ublas = boost::numeric::ublas; -template -void initialize_vector (V &v) { - int size = v.size (); - for (int i = 0; i < size; ++ i) - v [i] = i + 1.f; -} - -template -void initialize_matrix (M &m, ublas::lower_tag) { - int size1 = m.size1 (); -// int size2 = m.size2 (); - for (int i = 0; i < size1; ++ i) { - int j = 0; - for (; j <= i; ++ j) - m (i, j) = i * size1 + j + 1.f; -// for (; j < size2; ++ j) -// m (i, j) = 0.f; - } -} -template -void initialize_matrix (M &m, ublas::upper_tag) { - int size1 = m.size1 (); - int size2 = m.size2 (); - for (int i = 0; i < size1; ++ i) { - int j = 0; -// for (; j < i; ++ j) -// m (i, j) = 0.f; - for (; j < size2; ++ j) - m (i, j) = i * size1 + j + 1.f; - } -} -template -void initialize_matrix (M &m) { - int size1 = m.size1 (); - int size2 = m.size2 (); - for (int i = 0; i < size1; ++ i) - for (int j = 0; j < size2; ++ j) - m (i, j) = i * size1 + j + 1; -} - +#include "../common/init.hpp" void test_matrix_vector (); void test_matrix (); diff --git a/test/test5/test52.cpp b/test/test5/test52.cpp index 7aaa08a7..2b920794 100644 --- a/test/test5/test52.cpp +++ b/test/test5/test52.cpp @@ -25,7 +25,7 @@ struct test_my_matrix_vector { void test_with (VP &v1, VP &v2, MP &m1) const { { // Rows and columns - initialize_matrix (m1, ublas::lower_tag ()); + initialize_matrix (m1); for (int i = 0; i < N; ++ i) { v2 = ublas::row (m1, i); std::cout << "row (m, " << i << ") = " << v2 << std::endl; @@ -42,7 +42,7 @@ struct test_my_matrix_vector { std::cout << "outer_prod (v1, v2) = " << m1 << std::endl; // Matrix vector product - initialize_matrix (m1, ublas::lower_tag ()); + initialize_matrix (m1); initialize_vector (v1); v2 = ublas::prod (m1, v1); std::cout << "prod (m1, v1) = " << v2 << std::endl; diff --git a/test/test5/test53.cpp b/test/test5/test53.cpp index e17728ce..d847d0a8 100644 --- a/test/test5/test53.cpp +++ b/test/test5/test53.cpp @@ -32,8 +32,8 @@ struct test_my_matrix { std::cout << "default construct = " << default_constuct << std::endl; // Copy and swap - initialize_matrix (m1, ublas::lower_tag ()); - initialize_matrix (m2, ublas::lower_tag ()); + initialize_matrix (m1); + initialize_matrix (m2); m1 = m2; std::cout << "m1 = m2 = " << m1 << std::endl; m1.assign_temporary (m2); @@ -42,15 +42,15 @@ struct test_my_matrix { std::cout << "m1.swap (m2) = " << m1 << " " << m2 << std::endl; // Unary matrix operations resulting in a matrix - initialize_matrix (m1, ublas::lower_tag ()); + initialize_matrix (m1); m2 = - m1; std::cout << "- m1 = " << m2 << std::endl; m2 = ublas::conj (m1); std::cout << "conj (m1) = " << m2 << std::endl; // Binary matrix operations resulting in a matrix - initialize_matrix (m1, ublas::lower_tag ()); - initialize_matrix (m2, ublas::lower_tag ()); + initialize_matrix (m1); + initialize_matrix (m2); m3 = m1 + m2; std::cout << "m1 + m2 = " << m3 << std::endl; m3 = m1 - m2; @@ -58,20 +58,20 @@ struct test_my_matrix { // Scaling a matrix t = N; - initialize_matrix (m1, ublas::lower_tag ()); + initialize_matrix (m1); m2 = value_type (1.) * m1; std::cout << "1. * m1 = " << m2 << std::endl; m2 = t * m1; std::cout << "N * m1 = " << m2 << std::endl; - initialize_matrix (m1, ublas::lower_tag ()); + initialize_matrix (m1); m2 = m1 * value_type (1.); std::cout << "m1 * 1. = " << m2 << std::endl; m2 = m1 * t; std::cout << "m1 * N = " << m2 << std::endl; // Some assignments - initialize_matrix (m1, ublas::lower_tag ()); - initialize_matrix (m2, ublas::lower_tag ()); + initialize_matrix (m1); + initialize_matrix (m2); m2 += m1; std::cout << "m2 += m1 = " << m2 << std::endl; m2 -= m1; @@ -86,18 +86,18 @@ struct test_my_matrix { std::cout << "m1 *= N = " << m1 << std::endl; // Transpose - initialize_matrix (m1, ublas::lower_tag ()); + initialize_matrix (m1); // Transpose of a triangular isn't triangular of the same kind std::cout << "trans (m1) = " << ublas::trans (m1) << std::endl; // Hermitian - initialize_matrix (m1, ublas::lower_tag ()); + initialize_matrix (m1); // Hermitian of a triangular isn't hermitian of the same kind std::cout << "herm (m1) = " << ublas::herm (m1) << std::endl; // Matrix multiplication - initialize_matrix (m1, ublas::lower_tag ()); - initialize_matrix (m2, ublas::lower_tag ()); + initialize_matrix (m1); + initialize_matrix (m2); m3 = ublas::prod (m1, m2); std::cout << "prod (m1, m2) = " << m3 << std::endl; } diff --git a/test/test6/test6.hpp b/test/test6/test6.hpp index b4b2ba38..bb67ef32 100644 --- a/test/test6/test6.hpp +++ b/test/test6/test6.hpp @@ -28,46 +28,7 @@ namespace ublas = boost::numeric::ublas; -template -void initialize_vector (V &v) { - int size = v.size (); - for (int i = 0; i < size; ++ i) - v [i] = i + 1.f; -} - -template -void initialize_matrix (M &m, ublas::lower_tag) { - int size1 = m.size1 (); -// int size2 = m.size2 (); - for (int i = 0; i < size1; ++ i) { - int j = 0; - for (; j <= i; ++ j) - m (i, j) = i * size1 + j + 1.f; -// for (; j < size2; ++ j) -// m (i, j) = 0.f; - } -} -template -void initialize_matrix (M &m, ublas::upper_tag) { - int size1 = m.size1 (); - int size2 = m.size2 (); - for (int i = 0; i < size1; ++ i) { - int j = 0; -// for (; j < i; ++ j) -// m (i, j) = 0.f; - for (; j < size2; ++ j) - m (i, j) = i * size1 + j + 1.f; - } -} -template -void initialize_matrix (M &m) { - int size1 = m.size1 (); - int size2 = m.size2 (); - for (int i = 0; i < size1; ++ i) - for (int j = 0; j < size2; ++ j) - m (i, j) = i * size1 + j + 1.f; -} - +#include "../common/init.hpp" void test_matrix_vector (); void test_matrix (); diff --git a/test/test6/test62.cpp b/test/test6/test62.cpp index dd86fa89..a540647d 100644 --- a/test/test6/test62.cpp +++ b/test/test6/test62.cpp @@ -25,7 +25,7 @@ struct test_my_matrix_vector { void test_with (VP &v1, VP &v2, MP &m1) const { { // Rows and columns - initialize_matrix (m1, ublas::lower_tag ()); + initialize_matrix (m1); for (int i = 0; i < N; ++ i) { v2 = ublas::row (m1, i); std::cout << "row (m, " << i << ") = " << v2 << std::endl; @@ -44,7 +44,7 @@ struct test_my_matrix_vector { std::cout << "outer_prod (v1, v2) = " << m1 << std::endl; // Matrix vector product - initialize_matrix (m1, ublas::lower_tag ()); + initialize_matrix (m1); initialize_vector (v1); v2 = ublas::prod (m1, v1); std::cout << "prod (m1, v1) = " << v2 << std::endl; diff --git a/test/test6/test63.cpp b/test/test6/test63.cpp index fff34263..5299a919 100644 --- a/test/test6/test63.cpp +++ b/test/test6/test63.cpp @@ -32,8 +32,8 @@ struct test_my_matrix { std::cout << "default construct = " << default_constuct << std::endl; // Copy and swap - initialize_matrix (m1, ublas::lower_tag ()); - initialize_matrix (m2, ublas::lower_tag ()); + initialize_matrix (m1); + initialize_matrix (m2); m1 = m2; std::cout << "m1 = m2 = " << m1 << std::endl; m1.assign_temporary (m2); @@ -42,15 +42,15 @@ struct test_my_matrix { std::cout << "m1.swap (m2) = " << m1 << " " << m2 << std::endl; // Unary matrix operations resulting in a matrix - initialize_matrix (m1, ublas::lower_tag ()); + initialize_matrix (m1); m2 = - m1; std::cout << "- m1 = " << m2 << std::endl; m2 = ublas::conj (m1); std::cout << "conj (m1) = " << m2 << std::endl; // Binary matrix operations resulting in a matrix - initialize_matrix (m1, ublas::lower_tag ()); - initialize_matrix (m2, ublas::lower_tag ()); + initialize_matrix (m1); + initialize_matrix (m2); m3 = m1 + m2; std::cout << "m1 + m2 = " << m3 << std::endl; m3 = m1 - m2; @@ -58,20 +58,20 @@ struct test_my_matrix { // Scaling a matrix t = N; - initialize_matrix (m1, ublas::lower_tag ()); + initialize_matrix (m1); m2 = value_type (1.) * m1; std::cout << "1. * m1 = " << m2 << std::endl; m2 = t * m1; std::cout << "N * m1 = " << m2 << std::endl; - initialize_matrix (m1, ublas::lower_tag ()); + initialize_matrix (m1); m2 = m1 * value_type (1.); std::cout << "m1 * 1. = " << m2 << std::endl; m2 = m1 * t; std::cout << "m1 * N = " << m2 << std::endl; // Some assignments - initialize_matrix (m1, ublas::lower_tag ()); - initialize_matrix (m2, ublas::lower_tag ()); + initialize_matrix (m1); + initialize_matrix (m2); m2 += m1; std::cout << "m2 += m1 = " << m2 << std::endl; m2 -= m1; @@ -86,18 +86,18 @@ struct test_my_matrix { std::cout << "m1 *= N = " << m1 << std::endl; // Transpose - initialize_matrix (m1, ublas::lower_tag ()); + initialize_matrix (m1); m2 = ublas::trans (m1); std::cout << "trans (m1) = " << m2 << std::endl; // Hermitean - initialize_matrix (m1, ublas::lower_tag ()); + initialize_matrix (m1); m2 = ublas::herm (m1); std::cout << "herm (m1) = " << m2 << std::endl; // Matrix multiplication - initialize_matrix (m1, ublas::lower_tag ()); - initialize_matrix (m2, ublas::lower_tag ()); + initialize_matrix (m1); + initialize_matrix (m2); m3 = ublas::prod (m1, m2); std::cout << "prod (m1, m2) = " << m3 << std::endl; } diff --git a/test/test7/test7.hpp b/test/test7/test7.hpp index 7d67fdbe..00e2a139 100644 --- a/test/test7/test7.hpp +++ b/test/test7/test7.hpp @@ -17,23 +17,18 @@ #ifndef TEST7_H #define TEST7_H +#include + +#include +#include + +#include +#include +#include + namespace ublas = boost::numeric::ublas; -template -void initialize_vector (V &v) { - int size = v.size (); - for (int i = 0; i < size; ++ i) - v [i] = typename V::value_type (i + 1.f); -} - -template -void initialize_matrix (M &m) { - int size1 = m.size1 (); - int size2 = m.size2 (); - for (int i = 0; i < size1; ++ i) - for (int j = 0; j < size2; ++ j) - m (i, j) = typename M::value_type (i * size1 + j + 1.f); -} +#include "../common/init.hpp" void test_vector (); void test_matrix_vector (); diff --git a/test/test7/test71.cpp b/test/test7/test71.cpp index 562cac35..9dd759b2 100644 --- a/test/test7/test71.cpp +++ b/test/test7/test71.cpp @@ -14,15 +14,6 @@ // GeNeSys mbH & Co. KG in producing this work. // -#include - -#include -#include - -#include -#include -#include - #include "test7.hpp" // Test vector expression templates diff --git a/test/test7/test72.cpp b/test/test7/test72.cpp index 35749392..4a0388b8 100644 --- a/test/test7/test72.cpp +++ b/test/test7/test72.cpp @@ -14,15 +14,6 @@ // GeNeSys mbH & Co. KG in producing this work. // -#include - -#include -#include - -#include -#include -#include - #include "test7.hpp" // Test matrix & vector expression templates diff --git a/test/test7/test73.cpp b/test/test7/test73.cpp index ca381b9f..149da02a 100644 --- a/test/test7/test73.cpp +++ b/test/test7/test73.cpp @@ -14,13 +14,6 @@ // GeNeSys mbH & Co. KG in producing this work. // -#include -#include - -#include -#include -#include - #include "test7.hpp" // Test matrix expression templates