• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_double_complex_norm_2_square)45 BOOST_UBLAS_TEST_DEF ( test_double_complex_norm_2_square ) {
46     typedef std::complex<double> 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 double expected = 44;
52 
53     BOOST_UBLAS_DEBUG_TRACE( "square norm is " << norm_2_square(v) );
54     BOOST_UBLAS_TEST_CHECK(std::abs(norm_2_square(v) - expected) < TOL);
55     v *= 3.;
56     BOOST_UBLAS_TEST_CHECK(std::abs(norm_2_square(v) - (9.0*expected)) < TOL);
57 }
58 
59 
BOOST_UBLAS_TEST_DEF(test_float_complex_norm_inf)60 BOOST_UBLAS_TEST_DEF ( test_float_complex_norm_inf ) {
61     typedef std::complex<float> dComplex;
62     vector<dComplex> v(4);
63     for (unsigned short i = 0; i < v.size(); ++i) {
64         unsigned short imag(i + 1);
65         v[i] = dComplex(i, imag);
66     }
67 
68     const float expected = abs(v[3]);
69 
70     BOOST_UBLAS_DEBUG_TRACE( "norm is " << norm_inf(v) );
71     BOOST_UBLAS_TEST_CHECK(std::abs(norm_inf(v) - expected) < TOL);
72     v *= 3.f;
73     BOOST_UBLAS_TEST_CHECK(std::abs(norm_inf(v) - (3.0*expected)) < TOL);
74 }
75 
BOOST_UBLAS_TEST_DEF(test_float_complex_norm_2)76 BOOST_UBLAS_TEST_DEF ( test_float_complex_norm_2 ) {
77     typedef std::complex<float> dComplex;
78     vector<dComplex> v(4);
79     for (unsigned short i = 0; i < v.size(); ++i) {
80         unsigned short imag(i + 1);
81         v[i] = dComplex(i, imag);
82     }
83 
84     const double expected = sqrt(44.0);
85 
86     BOOST_UBLAS_DEBUG_TRACE( "norm is " << norm_2(v) );
87     BOOST_UBLAS_TEST_CHECK(std::abs(norm_2(v) - expected) < TOL);
88     v *= 3.f;
89     BOOST_UBLAS_TEST_CHECK(std::abs(norm_2(v) - (3.0*expected)) < TOL);
90 }
91 
BOOST_UBLAS_TEST_DEF(test_float_complex_norm_2_square)92 BOOST_UBLAS_TEST_DEF ( test_float_complex_norm_2_square ) {
93     typedef std::complex<float> dComplex;
94     vector<dComplex> v(4);
95     for (unsigned short i = 0; i < v.size(); ++i) {
96         unsigned short imag(i + 1);
97         v[i] = dComplex(i, imag);
98     }
99 
100     const double expected = 44;
101 
102     BOOST_UBLAS_DEBUG_TRACE( "square norm is " << norm_2_square(v) );
103     BOOST_UBLAS_TEST_CHECK(std::abs(norm_2_square(v) - expected) < TOL);
104     v *= 3.f;
105     BOOST_UBLAS_TEST_CHECK(std::abs(norm_2_square(v) - (9.0*expected)) < TOL);
106 }
107 
main()108 int main() {
109     BOOST_UBLAS_TEST_BEGIN();
110 
111     BOOST_UBLAS_TEST_DO( test_double_complex_norm_inf );
112     BOOST_UBLAS_TEST_DO( test_float_complex_norm_inf );
113     BOOST_UBLAS_TEST_DO( test_double_complex_norm_2 );
114     BOOST_UBLAS_TEST_DO( test_float_complex_norm_2 );
115     BOOST_UBLAS_TEST_DO( test_double_complex_norm_2_square );
116     BOOST_UBLAS_TEST_DO( test_float_complex_norm_2_square );
117 
118     BOOST_UBLAS_TEST_END();
119 }
120