1 // Copyright 2010 Gunter Winkler <guwi17@gmx.de>
2 // Distributed under the Boost Software License, Version 1.0. (See
3 // accompanying file LICENSE_1_0.txt or copy at
4 // http://www.boost.org/LICENSE_1_0.txt)
5 
6 #include <boost/numeric/ublas/vector.hpp>
7 #include <boost/numeric/ublas/io.hpp>
8 #include <boost/numeric/ublas/matrix.hpp>
9 #include <complex>
10 
11 #include "utils.hpp"
12 
13 using namespace boost::numeric::ublas;
14 
15 static const double TOL(1.0e-5); ///< Used for comparing two real numbers.
16 
BOOST_UBLAS_TEST_DEF(test_double_complex_norm_inf)17 BOOST_UBLAS_TEST_DEF ( test_double_complex_norm_inf ) {
18     typedef std::complex<double> dComplex;
19     vector<dComplex> v(4);
20     for (unsigned int i = 0; i < v.size(); ++i)
21         v[i] = dComplex(i, i + 1);
22 
23     const double expected = abs(v[3]);
24 
25     BOOST_UBLAS_DEBUG_TRACE( "norm is " << norm_inf(v) );
26     BOOST_UBLAS_TEST_CHECK(std::abs(norm_inf(v) - expected) < TOL);
27     v *= 3.;
28     BOOST_UBLAS_TEST_CHECK(std::abs(norm_inf(v) - (3.0*expected)) < TOL);
29 }
30 
BOOST_UBLAS_TEST_DEF(test_double_complex_norm_2)31 BOOST_UBLAS_TEST_DEF ( test_double_complex_norm_2 ) {
32     typedef std::complex<double> dComplex;
33     vector<dComplex> v(4);
34     for (unsigned int i = 0; i < v.size(); ++i)
35         v[i] = dComplex(i, i + 1);
36 
37     const double expected = sqrt(44.0);
38 
39     BOOST_UBLAS_DEBUG_TRACE( "norm is " << norm_2(v) );
40     BOOST_UBLAS_TEST_CHECK(std::abs(norm_2(v) - expected) < TOL);
41     v *= 3.;
42     BOOST_UBLAS_TEST_CHECK(std::abs(norm_2(v) - (3.0*expected)) < TOL);
43 }
44 
BOOST_UBLAS_TEST_DEF(test_float_complex_norm_inf)45 BOOST_UBLAS_TEST_DEF ( test_float_complex_norm_inf ) {
46     typedef std::complex<float> dComplex;
47     vector<dComplex> v(4);
48     for (unsigned int i = 0; i < v.size(); ++i)
49         v[i] = dComplex(i, i + 1);
50 
51     const float expected = abs(v[3]);
52 
53     BOOST_UBLAS_DEBUG_TRACE( "norm is " << norm_inf(v) );
54     BOOST_UBLAS_TEST_CHECK(std::abs(norm_inf(v) - expected) < TOL);
55     v *= 3.;
56     BOOST_UBLAS_TEST_CHECK(std::abs(norm_inf(v) - (3.0*expected)) < TOL);
57 }
58 
BOOST_UBLAS_TEST_DEF(test_float_complex_norm_2)59 BOOST_UBLAS_TEST_DEF ( test_float_complex_norm_2 ) {
60     typedef std::complex<float> dComplex;
61     vector<dComplex> v(4);
62     for (unsigned int i = 0; i < v.size(); ++i)
63         v[i] = dComplex(i, i + 1);
64 
65     const double expected = sqrt(44.0);
66 
67     BOOST_UBLAS_DEBUG_TRACE( "norm is " << norm_2(v) );
68     BOOST_UBLAS_TEST_CHECK(std::abs(norm_2(v) - expected) < TOL);
69     v *= 3.;
70     BOOST_UBLAS_TEST_CHECK(std::abs(norm_2(v) - (3.0*expected)) < TOL);
71 }
72 
main()73 int main() {
74     BOOST_UBLAS_TEST_BEGIN();
75 
76     BOOST_UBLAS_TEST_DO( test_double_complex_norm_inf );
77     BOOST_UBLAS_TEST_DO( test_float_complex_norm_inf );
78     BOOST_UBLAS_TEST_DO( test_double_complex_norm_2 );
79     BOOST_UBLAS_TEST_DO( test_float_complex_norm_2 );
80 
81     BOOST_UBLAS_TEST_END();
82 }
83