ublas/test/common/init.hpp
Gunter Winkler f17be9f0a9 ublas/doc/samples/ex_triangular.cpp: added new example
ublas/doc/samples/Jamfile.v2: added build section for ex_triangular
ublas/doc/container_concept.htm: fixed wrong description of array_type
ublas/doc/triangular.htm: fixed lower/upper confusion and added link to ex_triangular

ublas/test/test_lu.cpp: added unit test for LU decomposition
ublas/test/triangular_access.cpp: added unit test for accessing triangular/symmetric matrices
ublas/test/triangular_layout.cpp: added unit test for testing storage layout of triangular/symmetric matrices
ublas/test/common/testhelper.hpp: support routines for new unit tests

ublas/test/CMakeLists.txt: added new tests (still experimental) test_lu, triangular_access. triangular_layout

ublas/test/Jamfile.v2: 
  added new tests (still experimental) test_lu, triangular_access. triangular_layout
  disabled broken test7 (maybe a fix of boost::interval is needed, see #2473)

ublas/test/test71.cpp, ublas/test/test73.cpp, ublas/test/test7.cpp:
  added first fixes to support boost::interval as scalar type

ublas/test/common/init.hpp: 
  initialize all matrices/vectors with floats instead of (unsigned) ints
  this helps to fix broken test7 for boost::interval



[SVN r52147]
2009-04-02 22:36:39 +00:00

101 lines
3.1 KiB
C++

/*
* Copyright (c) 2004 Michael Stevens
* Use, modification and distribution are subject to 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)
*/
/*
* Default construct test when possible
*/
template <class E>
struct default_construct
{
static void test() {}
};
template <class VC>
struct default_construct<boost::numeric::ublas::vector_container<VC> >
{
static void test ()
{
VC default_constuct;
initialize_vector (default_constuct);
std::cout << "default construct = " << default_constuct << std::endl;
}
};
template <class MC>
struct default_construct<boost::numeric::ublas::matrix_container<MC> >
{
static void test ()
{
MC default_constuct;
initialize_vector (default_constuct);
std::cout << "default construct = " << default_constuct << std::endl;
}
};
/*
* Initialise test values in vector/matrix
*/
template<class V>
void initialize_vector (V &v) {
typename V::size_type size = v.size ();
for (typename V::size_type i = 0; i < size; ++ i)
v [i] = typename V::value_type ( i + 1.f );
}
template<class M>
void initialize_matrix_impl (M &m, ublas::packed_proxy_tag) {
typename M::size_type size1 = m.size1 ();
#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
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.f );
#else
for (typename M::iterator1 i = m.begin1(); i != m.end1(); ++ i)
for (typename M::iterator2 j = ublas::begin (i, ublas::iterator1_tag ()); j != ublas::end (i, ublas::iterator1_tag ()); ++ j)
*j = typename M::value_type ( i.index1() * size1 + j.index2() + 1.f );
#endif
}
template<class M>
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) = typename M::value_type (i * size1 + j + 1.f);
}
template<class M>
void initialize_matrix (M &m) {
initialize_matrix_impl (m, typename M::storage_category());
}
template<class M>
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<class M>
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;
}
}