1 /*
2 * Copyright (c) 2004 Michael Stevens
3 * Use, modification and distribution are subject to the
4 * Boost Software License, Version 1.0. (See accompanying file
5 * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 */
7
8 /*
9 * Default construct test when possible
10 */
11
12 template <class E>
13 struct default_construct
14 {
testdefault_construct15 static void test() {}
16 };
17 template <class VC>
18 struct default_construct<boost::numeric::ublas::vector_container<VC> >
19 {
testdefault_construct20 static void test ()
21 {
22 VC default_constuct;
23 initialize_vector (default_constuct);
24 std::cout << "default construct = " << default_constuct << std::endl;
25 }
26 };
27 template <class MC>
28 struct default_construct<boost::numeric::ublas::matrix_container<MC> >
29 {
testdefault_construct30 static void test ()
31 {
32 MC default_constuct;
33 initialize_vector (default_constuct);
34 std::cout << "default construct = " << default_constuct << std::endl;
35 }
36 };
37
38 /*
39 * Initialise test values in vector/matrix
40 */
41
42 template<class V>
initialize_vector(V & v)43 void initialize_vector (V &v) {
44 typename V::size_type size = v.size ();
45 for (typename V::size_type i = 0; i < size; ++ i)
46 v [i] = typename V::value_type ( i + 1.f );
47 }
48
49 template<class M>
initialize_matrix_impl(M & m,ublas::packed_proxy_tag)50 void initialize_matrix_impl (M &m, ublas::packed_proxy_tag) {
51 typename M::size_type size1 = m.size1 ();
52 #ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
53 for (typename M::iterator1 i = m.begin1(); i != m.end1(); ++ i)
54 for (typename M::iterator2 j = i.begin(); j != i.end(); ++ j)
55 *j = typename M::value_type ( i.index1() * size1 + j.index2() + 1.f );
56 #else
57 for (typename M::iterator1 i = m.begin1(); i != m.end1(); ++ i)
58 for (typename M::iterator2 j = ublas::begin (i, ublas::iterator1_tag ()); j != ublas::end (i, ublas::iterator1_tag ()); ++ j)
59 *j = typename M::value_type ( i.index1() * size1 + j.index2() + 1.f );
60 #endif
61 }
62
63 template<class M>
initialize_matrix_impl(M & m,ublas::sparse_proxy_tag)64 void initialize_matrix_impl (M &m, ublas::sparse_proxy_tag) {
65 typename M::size_type size1 = m.size1 ();
66 typename M::size_type size2 = m.size2 ();
67 for (typename M::size_type i = 0; i < size1; ++ i)
68 for (typename M::size_type j = 0; j < size2; ++ j)
69 m (i, j) = typename M::value_type (i * size1 + j + 1.f);
70 }
71
72 template<class M>
initialize_matrix(M & m)73 void initialize_matrix (M &m) {
74 initialize_matrix_impl (m, typename M::storage_category());
75 }
76
77 template<class M>
initialize_matrix(M & m,ublas::lower_tag)78 void initialize_matrix (M &m, ublas::lower_tag) {
79 typename M::size_type size1 = m.size1 ();
80 typename M::size_type size2 = m.size2 ();
81 for (typename M::size_type i = 0; i < size1; ++ i) {
82 typename M::size_type j = 0;
83 for (; j <= i; ++ j)
84 m (i, j) = i * size1 + j + 1.f;
85 for (; j < size2; ++ j)
86 m (i, j) = 0.f;
87 }
88 }
89 template<class M>
initialize_matrix(M & m,ublas::upper_tag)90 void initialize_matrix (M &m, ublas::upper_tag) {
91 typename M::size_type size1 = m.size1 ();
92 typename M::size_type size2 = m.size2 ();
93 for (typename M::size_type i = 0; i < size1; ++ i) {
94 typename M::size_type j = 0;
95 for (; j < i; ++ j)
96 m (i, j) = 0.f;
97 for (; j < size2; ++ j)
98 m (i, j) = i * size1 + j + 1.f;
99 }
100 }
101