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)17BOOST_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)31BOOST_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)45BOOST_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)60BOOST_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)76BOOST_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)92BOOST_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()108int 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