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_float_complex_norm_inf)45BOOST_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)59BOOST_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()73int 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