| 1 | /**
|
|---|
| 2 | * \file libs/numeric/ublas/test/test_utils.hpp
|
|---|
| 3 | *
|
|---|
| 4 | * \brief Test suite for utils.hpp.
|
|---|
| 5 | *
|
|---|
| 6 | * Copyright (c) 2012, Marco Guazzone
|
|---|
| 7 | *
|
|---|
| 8 | * Distributed under the Boost Software License, Version 1.0. (See
|
|---|
| 9 | * accompanying file LICENSE_1_0.txt or copy at
|
|---|
| 10 | * http://www.boost.org/LICENSE_1_0.txt)
|
|---|
| 11 | *
|
|---|
| 12 | * \author Marco Guazzone (marco.guazzone@gmail.com)
|
|---|
| 13 | */
|
|---|
| 14 |
|
|---|
| 15 | #include <boost/numeric/ublas/io.hpp>
|
|---|
| 16 | #include <boost/numeric/ublas/matrix.hpp>
|
|---|
| 17 | #include <boost/numeric/ublas/vector.hpp>
|
|---|
| 18 | #include <complex>
|
|---|
| 19 | #include <cstddef>
|
|---|
| 20 | #include <libs/numeric/ublas/test/utils.hpp>
|
|---|
| 21 |
|
|---|
| 22 |
|
|---|
| 23 | namespace ublas = boost::numeric::ublas;
|
|---|
| 24 |
|
|---|
| 25 |
|
|---|
| 26 | static const double tol(1e-6);
|
|---|
| 27 |
|
|---|
| 28 |
|
|---|
| 29 | BOOST_UBLAS_TEST_DEF( check )
|
|---|
| 30 | {
|
|---|
| 31 | BOOST_UBLAS_TEST_TRACE( "Test case: 'check'" );
|
|---|
| 32 |
|
|---|
| 33 | BOOST_UBLAS_TEST_CHECK( true );
|
|---|
| 34 | }
|
|---|
| 35 |
|
|---|
| 36 | BOOST_UBLAS_TEST_DEF( check_eq )
|
|---|
| 37 | {
|
|---|
| 38 | BOOST_UBLAS_TEST_TRACE( "Test case: 'check_eq'" );
|
|---|
| 39 |
|
|---|
| 40 | BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
|
|---|
| 41 | BOOST_UBLAS_TEST_CHECK_EQ( short(1), short(1) );
|
|---|
| 42 | BOOST_UBLAS_TEST_CHECK_EQ( int(1), int(1) );
|
|---|
| 43 | BOOST_UBLAS_TEST_CHECK_EQ( long(1), long(1) );
|
|---|
| 44 | BOOST_UBLAS_TEST_CHECK_EQ( unsigned(1), unsigned(1) );
|
|---|
| 45 |
|
|---|
| 46 | BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
|
|---|
| 47 | BOOST_UBLAS_TEST_CHECK_EQ( short(1), int(1) );
|
|---|
| 48 | BOOST_UBLAS_TEST_CHECK_EQ( short(1), int(1) );
|
|---|
| 49 | BOOST_UBLAS_TEST_CHECK_EQ( int(1), long(1) );
|
|---|
| 50 | BOOST_UBLAS_TEST_CHECK_EQ( long(1), int(1) );
|
|---|
| 51 |
|
|---|
| 52 | BOOST_UBLAS_DEBUG_TRACE( "-- Test aliases." );
|
|---|
| 53 | BOOST_UBLAS_TEST_CHECK_EQUAL( int(1), int(1) );
|
|---|
| 54 | }
|
|---|
| 55 |
|
|---|
| 56 | BOOST_UBLAS_TEST_DEF( check_close )
|
|---|
| 57 | {
|
|---|
| 58 | BOOST_UBLAS_TEST_TRACE( "Test case: 'check_close'" );
|
|---|
| 59 |
|
|---|
| 60 | // Check T vs. T
|
|---|
| 61 | BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
|
|---|
| 62 | BOOST_UBLAS_TEST_CHECK_CLOSE( float(1), float(1), tol );
|
|---|
| 63 | BOOST_UBLAS_TEST_CHECK_CLOSE( double(1), double(1), tol );
|
|---|
| 64 | BOOST_UBLAS_TEST_CHECK_CLOSE( ::std::complex<float>(1,2), ::std::complex<float>(1,2), tol );
|
|---|
| 65 | BOOST_UBLAS_TEST_CHECK_CLOSE( ::std::complex<double>(1,2), ::std::complex<double>(1,2), tol );
|
|---|
| 66 |
|
|---|
| 67 | // Check T1 vs. T2
|
|---|
| 68 | BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
|
|---|
| 69 | BOOST_UBLAS_TEST_CHECK_CLOSE( float(1), double(1), tol );
|
|---|
| 70 | BOOST_UBLAS_TEST_CHECK_CLOSE( double(1), float(1), tol );
|
|---|
| 71 | BOOST_UBLAS_TEST_CHECK_CLOSE( ::std::complex<float>(1,2), ::std::complex<double>(1,2), tol );
|
|---|
| 72 | BOOST_UBLAS_TEST_CHECK_CLOSE( ::std::complex<double>(1,2), ::std::complex<float>(1,2), tol );
|
|---|
| 73 |
|
|---|
| 74 | // Check alias
|
|---|
| 75 | BOOST_UBLAS_DEBUG_TRACE( "-- Test aliases." );
|
|---|
| 76 | BOOST_UBLAS_TEST_CHECK_PRECISION( float(1), float(1), tol );
|
|---|
| 77 | }
|
|---|
| 78 |
|
|---|
| 79 | BOOST_UBLAS_TEST_DEF( check_rel_close )
|
|---|
| 80 | {
|
|---|
| 81 | BOOST_UBLAS_TEST_TRACE( "Test case: 'check_rel_close'" );
|
|---|
| 82 |
|
|---|
| 83 | // Check T vs. T
|
|---|
| 84 | BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
|
|---|
| 85 | BOOST_UBLAS_TEST_CHECK_REL_CLOSE( float(1), float(1), tol );
|
|---|
| 86 | BOOST_UBLAS_TEST_CHECK_REL_CLOSE( double(1), double(1), tol );
|
|---|
| 87 | BOOST_UBLAS_TEST_CHECK_REL_CLOSE( ::std::complex<float>(1,2), ::std::complex<float>(1,2), tol );
|
|---|
| 88 | BOOST_UBLAS_TEST_CHECK_REL_CLOSE( ::std::complex<double>(1,2), ::std::complex<double>(1,2), tol );
|
|---|
| 89 |
|
|---|
| 90 | // Check T1 vs. T2
|
|---|
| 91 | BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
|
|---|
| 92 | BOOST_UBLAS_TEST_CHECK_REL_CLOSE( float(1), double(1), tol );
|
|---|
| 93 | BOOST_UBLAS_TEST_CHECK_REL_CLOSE( double(1), float(1), tol );
|
|---|
| 94 | BOOST_UBLAS_TEST_CHECK_REL_CLOSE( ::std::complex<float>(1,2), ::std::complex<double>(1,2), tol );
|
|---|
| 95 | BOOST_UBLAS_TEST_CHECK_REL_CLOSE( ::std::complex<double>(1,2), ::std::complex<float>(1,2), tol );
|
|---|
| 96 |
|
|---|
| 97 | // Check alias
|
|---|
| 98 | BOOST_UBLAS_DEBUG_TRACE( "-- Test aliases." );
|
|---|
| 99 | BOOST_UBLAS_TEST_CHECK_REL_PRECISION( float(1), float(1), tol );
|
|---|
| 100 | }
|
|---|
| 101 |
|
|---|
| 102 | BOOST_UBLAS_TEST_DEF( check_vector_eq )
|
|---|
| 103 | {
|
|---|
| 104 | BOOST_UBLAS_TEST_TRACE( "Test case: 'check_vector_eq'" );
|
|---|
| 105 |
|
|---|
| 106 | const ::std::size_t n(5);
|
|---|
| 107 |
|
|---|
| 108 | ublas::vector<short> sv = ublas::scalar_vector<short>(n, 1);
|
|---|
| 109 | ublas::vector<int> iv = ublas::scalar_vector<int>(n, 1);
|
|---|
| 110 | ublas::vector<long> lv = ublas::scalar_vector<long>(n, 1L);
|
|---|
| 111 | ublas::vector<unsigned> uv = ublas::scalar_vector<unsigned>(n, 1u);
|
|---|
| 112 |
|
|---|
| 113 | // Check T vs. T
|
|---|
| 114 | BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
|
|---|
| 115 | BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( sv, sv, n );
|
|---|
| 116 | BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( iv, iv, n );
|
|---|
| 117 | BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( lv, lv, n );
|
|---|
| 118 | BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( uv, uv, n );
|
|---|
| 119 |
|
|---|
| 120 | // Check T1 vs. T2
|
|---|
| 121 | BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
|
|---|
| 122 | BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( sv, iv, n );
|
|---|
| 123 | BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( iv, sv, n );
|
|---|
| 124 | BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( iv, lv, n );
|
|---|
| 125 | BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( lv, iv, n );
|
|---|
| 126 | }
|
|---|
| 127 |
|
|---|
| 128 | BOOST_UBLAS_TEST_DEF( check_vector_close )
|
|---|
| 129 | {
|
|---|
| 130 | BOOST_UBLAS_TEST_TRACE( "Test case: 'check_vector_close'" );
|
|---|
| 131 |
|
|---|
| 132 | const ::std::size_t n(5);
|
|---|
| 133 |
|
|---|
| 134 | ublas::vector<float> fv = ublas::scalar_vector<float>(n, 1);
|
|---|
| 135 | ublas::vector<float> dv = ublas::scalar_vector<float>(n, 1);
|
|---|
| 136 | ublas::vector< ::std::complex<float> > cfv = ublas::scalar_vector< ::std::complex<float> >(n, ::std::complex<float>(1,2));
|
|---|
| 137 | ublas::vector< ::std::complex<double> > cdv = ublas::scalar_vector< ::std::complex<double> >(n, ::std::complex<double>(1,2));
|
|---|
| 138 |
|
|---|
| 139 | // Check T vs. T
|
|---|
| 140 | BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
|
|---|
| 141 | BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( fv, fv, n, tol );
|
|---|
| 142 | BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( dv, dv, n, tol );
|
|---|
| 143 | BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( cfv, cfv, n, tol );
|
|---|
| 144 | BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( cdv, cdv, n, tol );
|
|---|
| 145 |
|
|---|
| 146 | // Check T1 vs. T2
|
|---|
| 147 | BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
|
|---|
| 148 | BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( fv, dv, n, tol );
|
|---|
| 149 | BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( dv, fv, n, tol );
|
|---|
| 150 | BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( cfv, cdv, n, tol );
|
|---|
| 151 | BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( cdv, cfv, n, tol );
|
|---|
| 152 | }
|
|---|
| 153 |
|
|---|
| 154 | BOOST_UBLAS_TEST_DEF( check_matrix_eq )
|
|---|
| 155 | {
|
|---|
| 156 | BOOST_UBLAS_TEST_TRACE( "Test case: 'check_matrix_eq'" );
|
|---|
| 157 |
|
|---|
| 158 | const ::std::size_t nr(3);
|
|---|
| 159 | const ::std::size_t nc(4);
|
|---|
| 160 |
|
|---|
| 161 | ublas::matrix<short> sv = ublas::scalar_matrix<short>(nr, nc, 1);
|
|---|
| 162 | ublas::matrix<int> iv = ublas::scalar_matrix<int>(nr, nc, 1);
|
|---|
| 163 | ublas::matrix<long> lv = ublas::scalar_matrix<long>(nr, nc, 1L);
|
|---|
| 164 | ublas::matrix<unsigned> uv = ublas::scalar_matrix<unsigned>(nr, nc, 1u);
|
|---|
| 165 |
|
|---|
| 166 | // Check T vs. T
|
|---|
| 167 | BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
|
|---|
| 168 | BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( sv, sv, nr, nc );
|
|---|
| 169 | BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( iv, iv, nr, nc );
|
|---|
| 170 | BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( lv, lv, nr, nc );
|
|---|
| 171 | BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( uv, uv, nr, nc );
|
|---|
| 172 |
|
|---|
| 173 | // Check T1 vs. T2
|
|---|
| 174 | BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
|
|---|
| 175 | BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( sv, iv, nr, nc );
|
|---|
| 176 | BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( iv, sv, nr, nc );
|
|---|
| 177 | BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( iv, lv, nr, nc );
|
|---|
| 178 | BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( lv, iv, nr, nc );
|
|---|
| 179 | }
|
|---|
| 180 |
|
|---|
| 181 | BOOST_UBLAS_TEST_DEF( check_matrix_close )
|
|---|
| 182 | {
|
|---|
| 183 | BOOST_UBLAS_TEST_TRACE( "Test case: 'check_matrix_close'" );
|
|---|
| 184 |
|
|---|
| 185 | const ::std::size_t nr(3);
|
|---|
| 186 | const ::std::size_t nc(4);
|
|---|
| 187 |
|
|---|
| 188 | ublas::matrix<float> fA = ublas::scalar_matrix<float>(nr, nc, 1);
|
|---|
| 189 | ublas::matrix<float> dA = ublas::scalar_matrix<float>(nr, nc, 1);
|
|---|
| 190 | ublas::matrix< ::std::complex<float> > cfA = ublas::scalar_matrix< ::std::complex<float> >(nr, nc, ::std::complex<float>(1,2));
|
|---|
| 191 | ublas::matrix< ::std::complex<double> > cdA = ublas::scalar_matrix< ::std::complex<double> >(nr, nc, ::std::complex<double>(1,2));
|
|---|
| 192 |
|
|---|
| 193 | // Check T vs. T
|
|---|
| 194 | BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
|
|---|
| 195 | BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( fA, fA, nr, nc, tol );
|
|---|
| 196 | BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( dA, dA, nr, nc, tol );
|
|---|
| 197 | BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( cfA, cfA, nr, nc, tol );
|
|---|
| 198 | BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( cdA, cdA, nr, nc, tol );
|
|---|
| 199 |
|
|---|
| 200 | // Check T1 vs. T2
|
|---|
| 201 | BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
|
|---|
| 202 | BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( fA, dA, nr, nc, tol );
|
|---|
| 203 | BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( dA, fA, nr, nc, tol );
|
|---|
| 204 | BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( cfA, cdA, nr, nc, tol );
|
|---|
| 205 | BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( cdA, cfA, nr, nc, tol );
|
|---|
| 206 | }
|
|---|
| 207 |
|
|---|
| 208 |
|
|---|
| 209 | int main()
|
|---|
| 210 | {
|
|---|
| 211 | BOOST_UBLAS_TEST_SUITE( "Test 'utils.hpp' functionalities" );
|
|---|
| 212 |
|
|---|
| 213 | BOOST_UBLAS_TEST_BEGIN();
|
|---|
| 214 | BOOST_UBLAS_TEST_DO( check );
|
|---|
| 215 | BOOST_UBLAS_TEST_DO( check_eq );
|
|---|
| 216 | BOOST_UBLAS_TEST_DO( check_close );
|
|---|
| 217 | BOOST_UBLAS_TEST_DO( check_rel_close );
|
|---|
| 218 | BOOST_UBLAS_TEST_DO( check_vector_eq );
|
|---|
| 219 | BOOST_UBLAS_TEST_DO( check_vector_close );
|
|---|
| 220 | BOOST_UBLAS_TEST_DO( check_matrix_eq );
|
|---|
| 221 | BOOST_UBLAS_TEST_DO( check_matrix_close );
|
|---|
| 222 | BOOST_UBLAS_TEST_END();
|
|---|
| 223 | }
|
|---|