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 | |
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(z: 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 | |
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(x: 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 | |
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 | |
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(z: 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 | |
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(x: 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 | |
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 | |
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 |