From dbe66751ab0dfd68d26d443633c28eefd21c620b Mon Sep 17 00:00:00 2001 From: Michael Stevens Date: Sun, 16 Oct 2005 16:35:18 +0000 Subject: [PATCH] ADD first tests of Container concept svn path=/trunk/boost/libs/numeric/ublas/; revision=31348 --- test/test1/test11.cpp | 218 ++++++++++++++++++++++-------------------- test/test1/test13.cpp | 193 +++++++++++++++++++------------------ 2 files changed, 213 insertions(+), 198 deletions(-) diff --git a/test/test1/test11.cpp b/test/test1/test11.cpp index 3101abda..4bbad7fb 100644 --- a/test/test1/test11.cpp +++ b/test/test1/test11.cpp @@ -24,133 +24,141 @@ struct test_my_vector { typedef typename ublas::type_traits::real_type real_type; template - void test_with (VP &v1, VP &v2, VP &v3) const { - { - value_type t; - size_type i; - real_type n; + void test_container_with (VP &v1) const { + // Container type tests in addition to expression types + // Insert and erase + v1.insert_element (0, 55); + v1.erase_element (1); + v1.clear (); + } + + template + void test_expression_with (VP &v1, VP &v2, VP &v3) const { + // Expression type tests + value_type t; + size_type i; + real_type n; - // Default Construct - default_construct::test (); - - // Copy and swap - initialize_vector (v1); - initialize_vector (v2); - v1 = v2; - std::cout << "v1 = v2 = " << v1 << std::endl; - v1.assign_temporary (v2); - std::cout << "v1.assign_temporary (v2) = " << v1 << std::endl; - v1.swap (v2); - std::cout << "v1.swap (v2) = " << v1 << " " << v2 << std::endl; - - // Zero assignment - v1 = ublas::zero_vector<> (v1.size ()); - std::cout << "v1.zero_vector = " << v1 << std::endl; - v1 = v2; + // Default Construct + default_construct::test (); + + // Copy and swap + initialize_vector (v1); + initialize_vector (v2); + v1 = v2; + std::cout << "v1 = v2 = " << v1 << std::endl; + v1.assign_temporary (v2); + std::cout << "v1.assign_temporary (v2) = " << v1 << std::endl; + v1.swap (v2); + std::cout << "v1.swap (v2) = " << v1 << " " << v2 << std::endl; + + // Zero assignment + v1 = ublas::zero_vector<> (v1.size ()); + std::cout << "v1.zero_vector = " << v1 << std::endl; + v1 = v2; #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING // Project range and slice - initialize_vector (v1); - initialize_vector (v2); - project (v1, ublas::range(0,1)) = project (v2, ublas::range(0,1)); - project (v1, ublas::range(0,1)) = project (v2, ublas::slice(0,1,1)); - project (v1, ublas::slice(2,-1,2)) = project (v2, ublas::slice(0,1,2)); - project (v1, ublas::slice(2,-1,2)) = project (v2, ublas::range(0,2)); - std::cout << "v1 = range/slice " << v1 << std::endl; + initialize_vector (v1); + initialize_vector (v2); + project (v1, ublas::range(0,1)) = project (v2, ublas::range(0,1)); + project (v1, ublas::range(0,1)) = project (v2, ublas::slice(0,1,1)); + project (v1, ublas::slice(2,-1,2)) = project (v2, ublas::slice(0,1,2)); + project (v1, ublas::slice(2,-1,2)) = project (v2, ublas::range(0,2)); + std::cout << "v1 = range/slice " << v1 << std::endl; #endif // Unary vector operations resulting in a vector - initialize_vector (v1); - v2 = - v1; - std::cout << "- v1 = " << v2 << std::endl; - v2 = ublas::conj (v1); - std::cout << "conj (v1) = " << v2 << std::endl; + initialize_vector (v1); + v2 = - v1; + std::cout << "- v1 = " << v2 << std::endl; + v2 = ublas::conj (v1); + std::cout << "conj (v1) = " << v2 << std::endl; - // Binary vector operations resulting in a vector - initialize_vector (v1); - initialize_vector (v2); - v3 = v1 + v2; - std::cout << "v1 + v2 = " << v3 << std::endl; - v3 = v1 - v2; - std::cout << "v1 - v2 = " << v3 << std::endl; - v3 = ublas::element_prod (v1, v2); - std::cout << "element_prod (v1, v2) = " << v3 << std::endl; + // Binary vector operations resulting in a vector + initialize_vector (v1); + initialize_vector (v2); + v3 = v1 + v2; + std::cout << "v1 + v2 = " << v3 << std::endl; + v3 = v1 - v2; + std::cout << "v1 - v2 = " << v3 << std::endl; + v3 = ublas::element_prod (v1, v2); + std::cout << "element_prod (v1, v2) = " << v3 << std::endl; - // Scaling a vector - t = N; - initialize_vector (v1); - v2 = value_type (1.) * v1; - std::cout << "1. * v1 = " << v2 << std::endl; - v2 = t * v1; - std::cout << "N * v1 = " << v2 << std::endl; - initialize_vector (v1); - v2 = v1 * value_type (1.); - std::cout << "v1 * 1. = " << v2 << std::endl; - v2 = v1 * t; - std::cout << "v1 * N = " << v2 << std::endl; + // Scaling a vector + t = N; + initialize_vector (v1); + v2 = value_type (1.) * v1; + std::cout << "1. * v1 = " << v2 << std::endl; + v2 = t * v1; + std::cout << "N * v1 = " << v2 << std::endl; + initialize_vector (v1); + v2 = v1 * value_type (1.); + std::cout << "v1 * 1. = " << v2 << std::endl; + v2 = v1 * t; + std::cout << "v1 * N = " << v2 << std::endl; - // Some assignments - initialize_vector (v1); - initialize_vector (v2); - v2 += v1; - std::cout << "v2 += v1 = " << v2 << std::endl; - v2 -= v1; - std::cout << "v2 -= v1 = " << v2 << std::endl; - v2 = v2 + v1; - std::cout << "v2 = v2 + v1 = " << v2 << std::endl; - v2 = v2 - v1; - std::cout << "v2 = v2 - v1 = " << v2 << std::endl; - v1 *= value_type (1.); - std::cout << "v1 *= 1. = " << v1 << std::endl; - v1 *= t; - std::cout << "v1 *= N = " << v1 << std::endl; + // Some assignments + initialize_vector (v1); + initialize_vector (v2); + v2 += v1; + std::cout << "v2 += v1 = " << v2 << std::endl; + v2 -= v1; + std::cout << "v2 -= v1 = " << v2 << std::endl; + v2 = v2 + v1; + std::cout << "v2 = v2 + v1 = " << v2 << std::endl; + v2 = v2 - v1; + std::cout << "v2 = v2 - v1 = " << v2 << std::endl; + v1 *= value_type (1.); + std::cout << "v1 *= 1. = " << v1 << std::endl; + v1 *= t; + std::cout << "v1 *= N = " << v1 << std::endl; - // Unary vector operations resulting in a scalar - initialize_vector (v1); - t = ublas::sum (v1); - std::cout << "sum (v1) = " << t << std::endl; - n = ublas::norm_1 (v1); - std::cout << "norm_1 (v1) = " << n << std::endl; - n = ublas::norm_2 (v1); - std::cout << "norm_2 (v1) = " << n << std::endl; - n = ublas::norm_inf (v1); - std::cout << "norm_inf (v1) = " << n << std::endl; + // Unary vector operations resulting in a scalar + initialize_vector (v1); + t = ublas::sum (v1); + std::cout << "sum (v1) = " << t << std::endl; + n = ublas::norm_1 (v1); + std::cout << "norm_1 (v1) = " << n << std::endl; + n = ublas::norm_2 (v1); + std::cout << "norm_2 (v1) = " << n << std::endl; + n = ublas::norm_inf (v1); + std::cout << "norm_inf (v1) = " << n << std::endl; - i = ublas::index_norm_inf (v1); - std::cout << "index_norm_inf (v1) = " << i << std::endl; + i = ublas::index_norm_inf (v1); + std::cout << "index_norm_inf (v1) = " << i << std::endl; - // Binary vector operations resulting in a scalar - initialize_vector (v1); - initialize_vector (v2); - t = ublas::inner_prod (v1, v2); - std::cout << "inner_prod (v1, v2) = " << t << std::endl; + // Binary vector operations resulting in a scalar + initialize_vector (v1); + initialize_vector (v2); + t = ublas::inner_prod (v1, v2); + std::cout << "inner_prod (v1, v2) = " << t << std::endl; - // Scalar and Binary vector expression resulting in a vector - initialize_vector (v1); - initialize_vector (v2); - v1 = v1 * ublas::inner_prod (v1, v2); - std::cout << "v1 * inner_prod (v1, v2) = " << v1 << std::endl; - } + // Scalar and Binary vector expression resulting in a vector + initialize_vector (v1); + initialize_vector (v2); + v1 = v1 * ublas::inner_prod (v1, v2); + std::cout << "v1 * inner_prod (v1, v2) = " << v1 << std::endl; } + void operator () () const { - { - V v1 (N), v2 (N), v3 (N); - test_with (v1, v2, v3); + V v1 (N), v2 (N), v3 (N); + test_expression_with (v1, v2, v3); + test_container_with (v1); #ifdef USE_RANGE - ublas::vector_range vr1 (v1, ublas::range (0, N)), - vr2 (v2, ublas::range (0, N)), - vr3 (v3, ublas::range (0, N)); - test_with (vr1, vr2, vr3); + ublas::vector_range vr1 (v1, ublas::range (0, N)), + vr2 (v2, ublas::range (0, N)), + vr3 (v3, ublas::range (0, N)); + test_expression_with (vr1, vr2, vr3); #endif #ifdef USE_SLICE - ublas::vector_slice vs1 (v1, ublas::slice (0, 1, N)), - vs2 (v2, ublas::slice (0, 1, N)), - vs3 (v3, ublas::slice (0, 1, N)); - test_with (vs1, vs2, vs3); + ublas::vector_slice vs1 (v1, ublas::slice (0, 1, N)), + vs2 (v2, ublas::slice (0, 1, N)), + vs3 (v3, ublas::slice (0, 1, N)); + test_expression_with (vs1, vs2, vs3); #endif - } } }; diff --git a/test/test1/test13.cpp b/test/test1/test13.cpp index 1aa50b5e..f57c273f 100644 --- a/test/test1/test13.cpp +++ b/test/test1/test13.cpp @@ -21,122 +21,129 @@ template struct test_my_matrix { typedef typename M::value_type value_type; + template + void test_container_with (VP &v1) const { + // Container type tests in addition to expression types + // Insert and erase + v1.insert_element (0,0, 55); + v1.erase_element (1,1); + v1.clear (); + } + template - void test_with (MP &m1, MP &m2, MP &m3) const { - { - value_type t; + void test_expression_with (MP &m1, MP &m2, MP &m3) const { + value_type t; - // Default Construct - default_construct::test (); - - // Copy and swap - initialize_matrix (m1); - initialize_matrix (m2); - m1 = m2; - std::cout << "m1 = m2 = " << m1 << std::endl; - m1.assign_temporary (m2); - std::cout << "m1.assign_temporary (m2) = " << m1 << std::endl; - m1.swap (m2); - std::cout << "m1.swap (m2) = " << m1 << " " << m2 << std::endl; + // Default Construct + default_construct::test (); + + // Copy and swap + initialize_matrix (m1); + initialize_matrix (m2); + m1 = m2; + std::cout << "m1 = m2 = " << m1 << std::endl; + m1.assign_temporary (m2); + std::cout << "m1.assign_temporary (m2) = " << m1 << std::endl; + m1.swap (m2); + std::cout << "m1.swap (m2) = " << m1 << " " << m2 << std::endl; - // Zero assignment - m1 = ublas::zero_matrix<> (m1.size1 (), m1.size2 ()); - std::cout << "m1.zero_matrix = " << m1 << std::endl; - m1 = m2; + // Zero assignment + m1 = ublas::zero_matrix<> (m1.size1 (), m1.size2 ()); + std::cout << "m1.zero_matrix = " << m1 << std::endl; + m1 = m2; #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING // Project range and slice - initialize_matrix (m1); - initialize_matrix (m2); - project (m1, ublas::range(0,1),ublas::range(0,1)) = project (m2, ublas::range(0,1),ublas::range(0,1)); - project (m1, ublas::range(0,1),ublas::range(0,1)) = project (m2, ublas::slice(0,1,1),ublas::slice(0,1,1)); - project (m1, ublas::slice(2,-1,2),ublas::slice(2,-1,2)) = project (m2, ublas::slice(0,1,2),ublas::slice(0,1,2)); - project (m1, ublas::slice(2,-1,2),ublas::slice(2,-1,2)) = project (m2, ublas::range(0,2),ublas::range(0,2)); - std::cout << "m1 = range/slice " << m1 << std::endl; + initialize_matrix (m1); + initialize_matrix (m2); + project (m1, ublas::range(0,1),ublas::range(0,1)) = project (m2, ublas::range(0,1),ublas::range(0,1)); + project (m1, ublas::range(0,1),ublas::range(0,1)) = project (m2, ublas::slice(0,1,1),ublas::slice(0,1,1)); + project (m1, ublas::slice(2,-1,2),ublas::slice(2,-1,2)) = project (m2, ublas::slice(0,1,2),ublas::slice(0,1,2)); + project (m1, ublas::slice(2,-1,2),ublas::slice(2,-1,2)) = project (m2, ublas::range(0,2),ublas::range(0,2)); + std::cout << "m1 = range/slice " << m1 << std::endl; #endif // Unary matrix operations resulting in a matrix - initialize_matrix (m1); - m2 = - m1; - std::cout << "- m1 = " << m2 << std::endl; - m2 = ublas::conj (m1); - std::cout << "conj (m1) = " << m2 << std::endl; + 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); - initialize_matrix (m2); - m3 = m1 + m2; - std::cout << "m1 + m2 = " << m3 << std::endl; - m3 = m1 - m2; - std::cout << "m1 - m2 = " << m3 << std::endl; - m3 = ublas::element_prod (m1, m2); - std::cout << "element_prod (m1, m2) = " << m3 << std::endl; + // Binary matrix operations resulting in a matrix + initialize_matrix (m1); + initialize_matrix (m2); + m3 = m1 + m2; + std::cout << "m1 + m2 = " << m3 << std::endl; + m3 = m1 - m2; + std::cout << "m1 - m2 = " << m3 << std::endl; + m3 = ublas::element_prod (m1, m2); + std::cout << "element_prod (m1, m2) = " << m3 << std::endl; - // Scaling a matrix - t = N; - 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); - m2 = m1 * value_type (1.); - std::cout << "m1 * 1. = " << m2 << std::endl; - m2 = m1 * t; - std::cout << "m1 * N = " << m2 << std::endl; + // Scaling a matrix + t = N; + 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); + 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); - initialize_matrix (m2); - m2 += m1; - std::cout << "m2 += m1 = " << m2 << std::endl; - m2 -= m1; - std::cout << "m2 -= m1 = " << m2 << std::endl; - m2 = m2 + m1; - std::cout << "m2 = m2 + m1 = " << m2 << std::endl; - m2 = m2 - m1; - std::cout << "m2 = m2 - m1 = " << m2 << std::endl; - m1 *= value_type (1.); - std::cout << "m1 *= 1. = " << m1 << std::endl; - m1 *= t; - std::cout << "m1 *= N = " << m1 << std::endl; + // Some assignments + initialize_matrix (m1); + initialize_matrix (m2); + m2 += m1; + std::cout << "m2 += m1 = " << m2 << std::endl; + m2 -= m1; + std::cout << "m2 -= m1 = " << m2 << std::endl; + m2 = m2 + m1; + std::cout << "m2 = m2 + m1 = " << m2 << std::endl; + m2 = m2 - m1; + std::cout << "m2 = m2 - m1 = " << m2 << std::endl; + m1 *= value_type (1.); + std::cout << "m1 *= 1. = " << m1 << std::endl; + m1 *= t; + std::cout << "m1 *= N = " << m1 << std::endl; - // Transpose - initialize_matrix (m1); - m2 = ublas::trans (m1); - std::cout << "trans (m1) = " << m2 << std::endl; + // Transpose + initialize_matrix (m1); + m2 = ublas::trans (m1); + std::cout << "trans (m1) = " << m2 << std::endl; - // Hermitean - initialize_matrix (m1); - m2 = ublas::herm (m1); - std::cout << "herm (m1) = " << m2 << std::endl; + // Hermitean + initialize_matrix (m1); + m2 = ublas::herm (m1); + std::cout << "herm (m1) = " << m2 << std::endl; - // Matrix multiplication - initialize_matrix (m1); - initialize_matrix (m2); - m3 = ublas::prod (m1, m2); - std::cout << "prod (m1, m2) = " << m3 << std::endl; - } + // Matrix multiplication + initialize_matrix (m1); + initialize_matrix (m2); + m3 = ublas::prod (m1, m2); + std::cout << "prod (m1, m2) = " << m3 << std::endl; } + void operator () () const { - { - M m1 (N, N), m2 (N, N), m3 (N, N); - test_with (m1, m2, m3); + M m1 (N, N), m2 (N, N), m3 (N, N); + test_expression_with (m1, m2, m3); + test_container_with (m1); #ifdef USE_RANGE - ublas::matrix_range mr1 (m1, ublas::range (0, N), ublas::range (0, N)), - mr2 (m2, ublas::range (0, N), ublas::range (0, N)), - mr3 (m3, ublas::range (0, N), ublas::range (0, N)); - test_with (mr1, mr2, mr3); + ublas::matrix_range mr1 (m1, ublas::range (0, N), ublas::range (0, N)), + mr2 (m2, ublas::range (0, N), ublas::range (0, N)), + mr3 (m3, ublas::range (0, N), ublas::range (0, N)); + test_expression_with (mr1, mr2, mr3); #endif #ifdef USE_SLICE - ublas::matrix_slice ms1 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)), - ms2 (m2, ublas::slice (0, 1, N), ublas::slice (0, 1, N)), - ms3 (m3, ublas::slice (0, 1, N), ublas::slice (0, 1, N)); - test_with (ms1, ms2, ms3); + ublas::matrix_slice ms1 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)), + ms2 (m2, ublas::slice (0, 1, N), ublas::slice (0, 1, N)), + ms3 (m3, ublas::slice (0, 1, N), ublas::slice (0, 1, N)); + test_expression_with (ms1, ms2, ms3); #endif - } } };