Ticket #7296: utils-201208301042.patch

File utils-201208301042.patch, 19.0 KB (added by Marco Guazzone <marco.guazzone@…>, 10 years ago)

Patch file for utils.hpp to be applied against utils.4.hpp

  • libs/numeric/ublas/test/utils.hpp

    diff -Naur /old/libs/numeric/ublas/test/utils.hpp /new/libs/numeric/ublas/test/utils.hpp
    old new  
    5656#include <boost/numeric/ublas/traits.hpp>
    5757#include <cmath>
    5858#include <complex>
     59#include <cstddef>
    5960#include <iostream>
    6061#include <limits>
    6162#include <stdexcept>
     
    143144}}}}}} // Namespace boost::numeric::ublas::test::detail::<unnamed>
    144145
    145146
    146 /// Expand its argument.
     147/// Expand its argument \a x.
    147148#define BOOST_UBLAS_TEST_EXPAND_(x) x
    148149
    149150
    150 /// Transform its argument into a string.
     151/// Expand its argument \a x inside parenthesis.
     152#define BOOST_UBLAS_TEST_EXPANDP_(x) (x)
     153
     154
     155/// Transform its argument \a x into a string.
    151156#define BOOST_UBLAS_TEST_STRINGIFY_(x) #x
    152157
    153158
    154 /// Concatenate its two \e string arguments.
     159/// Concatenate its two \e string arguments \a x and \a y.
    155160#define BOOST_UBLAS_TEST_JOIN_(x,y) x ## y
    156161
    157162
    158163/// Output the message \a x if in debug-mode; otherwise output nothing.
     164/// Note: we don't use macro expansion inside parenthesis to let \a m be an
     165///  expression of the form <code>a &lt;&lt; b</code>.
    159166#ifndef NDEBUG
    160167#       define BOOST_UBLAS_DEBUG_TRACE(x) ::std::cerr << "[Debug>> " << BOOST_UBLAS_TEST_EXPAND_(x) << ::std::endl
    161168#else
     
    163170#endif // NDEBUG
    164171
    165172
    166 /// Define the name of the entire test suite.
    167 #define BOOST_UBLAS_TEST_SUITE(m) ::std::cerr << "--- Test Suite: " << m << " ---" << ::std::endl;
     173/// Define the name \a m of the entire test suite.
     174#define BOOST_UBLAS_TEST_SUITE(m) ::std::cerr << "--- Test Suite: " << BOOST_UBLAS_TEST_EXPAND_(m) << " ---" << ::std::endl;
    168175
    169176
    170177/// Define the beginning of a test suite.
    171178#define BOOST_UBLAS_TEST_BEGIN()        /* [BOOST_UBLAS_TEST_BEGIN] */ \
    172179                                                                        { \
    173180                                                                                /* Begin of Test Suite */ \
    174                                                                                 unsigned int test_fails__(0) \
     181                                                                                ::std::size_t test_fails__(0) \
    175182                                                                        /* [/BOOST_UBLAS_TEST_BEGIN] */
    176183
    177184
    178185/// Define a test case \a x inside the current test suite.
    179 #define BOOST_UBLAS_TEST_DEF(x) static void BOOST_UBLAS_TEST_EXPAND_(x)(unsigned int& test_fails__)
     186#define BOOST_UBLAS_TEST_DEF(x) static void BOOST_UBLAS_TEST_EXPAND_(x)(::std::size_t& test_fails__)
    180187
    181188
    182189/// Call the test case \a x.
     
    212219
    213220
    214221/// Output the message \a m.
     222/// Note: we don't use macro expansion inside parenthesis to let \a m be an
     223///  expression of the form <code>a &lt;&lt; b</code>.
    215224#define BOOST_UBLAS_TEST_TRACE(m) ::std::cerr << "[Info>> " << BOOST_UBLAS_TEST_EXPAND_(m) << ::std::endl
    216225
    217226
    218227/// Check the truth of assertion \a x.
    219228#define BOOST_UBLAS_TEST_CHECK(x)       /* [BOOST_UBLAS_TEST_CHECK] */ \
    220                                                                         if (!(x)) \
     229                                                                        if (!BOOST_UBLAS_TEST_EXPANDP_(x)) \
    221230                                                                        { \
    222231                                                                                BOOST_UBLAS_TEST_ERROR( "Failed assertion: " << BOOST_UBLAS_TEST_STRINGIFY_(x) ); \
    223232                                                                                ++test_fails__; \
     
    227236
    228237/// Check for the equality of \a x against \a y.
    229238#define BOOST_UBLAS_TEST_CHECK_EQ(x,y)  /* [BOOST_UBLAS_TEST_CHECK_EQUAL] */ \
    230                                                                                 if (!(BOOST_UBLAS_TEST_EXPAND_(x) == BOOST_UBLAS_TEST_EXPAND_(y))) \
     239                                                                                if (!(BOOST_UBLAS_TEST_EXPANDP_(x) == BOOST_UBLAS_TEST_EXPANDP_(y))) \
    231240                                                                                { \
    232241                                                                                        BOOST_UBLAS_TEST_ERROR( "Failed assertion: (" << BOOST_UBLAS_TEST_STRINGIFY_(x) << " == " << BOOST_UBLAS_TEST_STRINGIFY_(y) << ")" ); \
    233242                                                                                        ++test_fails__; \
     
    239248#define BOOST_UBLAS_TEST_CHECK_EQUAL(x,y) BOOST_UBLAS_TEST_CHECK_EQ(x,y)
    240249
    241250
    242 /// Check that \a x and \a y are close with respect to a given precision.
    243 #define BOOST_UBLAS_TEST_CHECK_CLOSE(x,y,e)     /* [BOOST_UBLAS_TEST_CHECK_PRECISION] */ \
     251/// Check that \a x and \a y are close with respect to a given precision \a e.
     252#define BOOST_UBLAS_TEST_CHECK_CLOSE(x,y,e)     /* [BOOST_UBLAS_TEST_CHECK_CLOSE] */ \
    244253                                                                                        if (!::boost::numeric::ublas::test::detail::close_to(BOOST_UBLAS_TEST_EXPAND_(x), BOOST_UBLAS_TEST_EXPAND_(y), BOOST_UBLAS_TEST_EXPAND_(e))) \
    245254                                                                                        { \
    246                                                                                                 BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs(" << BOOST_UBLAS_TEST_STRINGIFY_(x) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x) << " == " << BOOST_UBLAS_TEST_EXPAND_(x) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y) << " == " << BOOST_UBLAS_TEST_EXPAND_(y) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " == " << BOOST_UBLAS_TEST_EXPAND_(e) << "]" ); \
     255                                                                                                BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs(" << BOOST_UBLAS_TEST_STRINGIFY_(x) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x) << " == " << BOOST_UBLAS_TEST_EXPANDP_(x) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y) << " == " << BOOST_UBLAS_TEST_EXPANDP_(y) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " == " << BOOST_UBLAS_TEST_EXPANDP_(e) << "]" ); \
    247256                                                                                                ++test_fails__; \
    248257                                                                                        } \
    249                                                                                         /* [/BOOST_UBLAS_TEST_CHECK_PRECISION] */
     258                                                                                        /* [/BOOST_UBLAS_TEST_CHECK_CLOSE] */
    250259
    251260
    252261/// Alias for macro \c BOOST_UBLAS_TEST_CHECK_CLOSE (for backward compatibility),
    253262#define BOOST_UBLAS_TEST_CHECK_PRECISION(x,y,e) BOOST_UBLAS_TEST_CHECK_CLOSE(x,y,e)
    254263
    255264
    256 /// Check that \a x is close to \a y with respect to a given relative precision.
    257 #define BOOST_UBLAS_TEST_CHECK_REL_CLOSE(x,y,e) /* [BOOST_UBLAS_TEST_CHECK_REL_PRECISION] */ \
     265/// Check that \a x is close to \a y with respect to a given relative precision \a e.
     266#define BOOST_UBLAS_TEST_CHECK_REL_CLOSE(x,y,e) /* [BOOST_UBLAS_TEST_CHECK_REL_CLOSE] */ \
    258267                                                                                                if (!::boost::numeric::ublas::test::detail::rel_close_to(BOOST_UBLAS_TEST_EXPAND_(x), BOOST_UBLAS_TEST_EXPAND_(y), BOOST_UBLAS_TEST_EXPAND_(e))) \
    259268                                                                                                { \
    260                                                                                                         BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs((" << BOOST_UBLAS_TEST_STRINGIFY_(x) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y) << ")/" << BOOST_UBLAS_TEST_STRINGIFY_(y) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e)  << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x) << " == " << BOOST_UBLAS_TEST_EXPAND_(x) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y) << " == " << BOOST_UBLAS_TEST_EXPAND_(y) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " == " << BOOST_UBLAS_TEST_EXPAND_(e) << "]" ); \
     269                                                                                                        BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs((" << BOOST_UBLAS_TEST_STRINGIFY_(x) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y) << ")/" << BOOST_UBLAS_TEST_STRINGIFY_(y) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e)  << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x) << " == " << BOOST_UBLAS_TEST_EXPANDP_(x) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y) << " == " << BOOST_UBLAS_TEST_EXPANDP_(y) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " == " << BOOST_UBLAS_TEST_EXPANDP_(e) << "]" ); \
    261270                                                                                                        ++test_fails__; \
    262271                                                                                                } \
    263                                                                                                 /* [/BOOST_UBLAS_TEST_CHECK_REL_PRECISION] */
     272                                                                                                /* [/BOOST_UBLAS_TEST_CHECK_REL_CLOSE] */
    264273
    265274
    266275/// Alias for macro \c BOOST_UBLAS_TEST_CHECK_REL_CLOSE (for backward compatibility),
     
    269278
    270279/// Check that elements of \a x and \a y are equal.
    271280#define BOOST_UBLAS_TEST_CHECK_VECTOR_EQ(x,y,n) /* [BOOST_UBLAS_TEST_CHECK_VECTOR_EQ] */ \
    272                                                                                                 if (BOOST_UBLAS_TEST_EXPAND_(n) > 0) \
     281                                                                                                if (BOOST_UBLAS_TEST_EXPANDP_(n) > 0) \
    273282                                                                                                { \
    274                                                                                                         unsigned long n__ = BOOST_UBLAS_TEST_EXPAND_(n); \
    275                                                                                                         for (unsigned long i__ = n__; i__ > 0; --i__) \
     283                                                                                                        ::std::size_t n__ = BOOST_UBLAS_TEST_EXPAND_(n); \
     284                                                                                                        for (::std::size_t i__ = n__; i__ > 0; --i__) \
    276285                                                                                                        { \
    277                                                                                                                 if (!(BOOST_UBLAS_TEST_EXPAND_(x)[n__-i__]==BOOST_UBLAS_TEST_EXPAND_(y)[n__-i__])) \
     286                                                                                                                if (!(BOOST_UBLAS_TEST_EXPANDP_(x)[n__-i__]==BOOST_UBLAS_TEST_EXPANDP_(y)[n__-i__])) \
    278287                                                                                                                { \
    279                                                                                                                         BOOST_UBLAS_TEST_ERROR( "Failed assertion: (" << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << "==" << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << ")" << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << " == " << BOOST_UBLAS_TEST_EXPAND_(x)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << " == " << BOOST_UBLAS_TEST_EXPAND_(y)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << " and " << BOOST_UBLAS_TEST_STRINGIFY_(n) << " == " << n__ << "]" ); \
     288                                                                                                                        BOOST_UBLAS_TEST_ERROR( "Failed assertion: (" << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << "==" << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << ")" << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << " == " << BOOST_UBLAS_TEST_EXPANDP_(x)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << " == " << BOOST_UBLAS_TEST_EXPANDP_(y)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << " and " << BOOST_UBLAS_TEST_STRINGIFY_(n) << " == " << n__ << "]" ); \
    280289                                                                                                                        ++test_fails__; \
    281290                                                                                                                } \
    282291                                                                                                        } \
     
    284293                                                                                                /* [/BOOST_UBLAS_TEST_CHECK_VECTOR_EQ] */
    285294
    286295
    287 /// Check that elements of \a x and \a y are close with respect to a given precision.
     296/// Check that elements of \a x and \a y are close with respect to a given precision \a e.
    288297#define BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE(x,y,n,e)    /* [BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE] */ \
    289                                                                                                                 if (BOOST_UBLAS_TEST_EXPAND_(n) > 0) \
     298                                                                                                                if (BOOST_UBLAS_TEST_EXPANDP_(n) > 0) \
    290299                                                                                                                { \
    291                                                                                                                         unsigned long n__ = BOOST_UBLAS_TEST_EXPAND_(n); \
    292                                                                                                                         for (unsigned long i__ = n__; i__ > 0; --i__) \
     300                                                                                                                        ::std::size_t n__ = BOOST_UBLAS_TEST_EXPAND_(n); \
     301                                                                                                                        for (::std::size_t i__ = n__; i__ > 0; --i__) \
    293302                                                                                                                        { \
    294                                                                                                                                 if (!::boost::numeric::ublas::test::detail::close_to(BOOST_UBLAS_TEST_EXPAND_(x)[n__-i__], BOOST_UBLAS_TEST_EXPAND_(y)[n__-i__], BOOST_UBLAS_TEST_EXPAND_(e))) \
     303                                                                                                                                if (!::boost::numeric::ublas::test::detail::close_to(BOOST_UBLAS_TEST_EXPANDP_(x)[n__-i__], BOOST_UBLAS_TEST_EXPANDP_(y)[n__-i__], BOOST_UBLAS_TEST_EXPANDP_(e))) \
    295304                                                                                                                                { \
    296                                                                                                                                         BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs((" << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e)  << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << " == " << BOOST_UBLAS_TEST_EXPAND_(x)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << " == " << BOOST_UBLAS_TEST_EXPAND_(y)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << " and " << BOOST_UBLAS_TEST_STRINGIFY_(n) << " == " << n__ << "]" ); \
     305                                                                                                                                        BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs((" << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e)  << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << " == " << BOOST_UBLAS_TEST_EXPANDP_(x)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << " == " << BOOST_UBLAS_TEST_EXPANDP_(y)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << " and " << BOOST_UBLAS_TEST_STRINGIFY_(n) << " == " << n__ << "]" ); \
    297306                                                                                                                                        ++test_fails__; \
    298307                                                                                                                                } \
    299308                                                                                                                        } \
     
    301310                                                                                                                /* [/BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE] */
    302311
    303312
     313/// Check that elements of \a x and \a y are close with respect to a given relative precision \a e.
     314#define BOOST_UBLAS_TEST_CHECK_VECTOR_REL_CLOSE(x,y,n,e)        /* [BOOST_UBLAS_TEST_CHECK_VECTOR_REL_CLOSE] */ \
     315                                                                                                                if (BOOST_UBLAS_TEST_EXPANDP_(n) > 0) \
     316                                                                                                                { \
     317                                                                                                                        ::std::size_t n__ = BOOST_UBLAS_TEST_EXPAND_(n); \
     318                                                                                                                        for (::std::size_t i__ = n__; i__ > 0; --i__) \
     319                                                                                                                        { \
     320                                                                                                                                if (!::boost::numeric::ublas::test::detail::rel_close_to(BOOST_UBLAS_TEST_EXPANDP_(x)[n__-i__], BOOST_UBLAS_TEST_EXPANDP_(y)[n__-i__], BOOST_UBLAS_TEST_EXPANDP_(e))) \
     321                                                                                                                                { \
     322                                                                                                                                        BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs((" << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e)  << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << " == " << BOOST_UBLAS_TEST_EXPANDP_(x)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << " == " << BOOST_UBLAS_TEST_EXPANDP_(y)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << " and " << BOOST_UBLAS_TEST_STRINGIFY_(n) << " == " << n__ << "]" ); \
     323                                                                                                                                        ++test_fails__; \
     324                                                                                                                                } \
     325                                                                                                                        } \
     326                                                                                                                } \
     327                                                                                                                /* [/BOOST_UBLAS_TEST_CHECK_VECTOR_REL_CLOSE] */
     328
     329
    304330/// Check that elements of matrices \a x and \a y are equal.
    305331#define BOOST_UBLAS_TEST_CHECK_MATRIX_EQ(x,y,nr,nc)     /* [BOOST_UBLAS_TEST_CHECK_MATRIX_EQ] */ \
    306                                                                                                         for (unsigned long i__ = 0; i__ < BOOST_UBLAS_TEST_EXPAND_(nr); ++i__) \
     332                                                                                                        for (::std::size_t i__ = 0; i__ < BOOST_UBLAS_TEST_EXPANDP_(nr); ++i__) \
    307333                                                                                                        { \
    308                                                                                                                 for (unsigned long j__ = 0; j__ < BOOST_UBLAS_TEST_EXPAND_(nc); ++j__) \
     334                                                                                                                for (::std::size_t j__ = 0; j__ < BOOST_UBLAS_TEST_EXPANDP_(nc); ++j__) \
    309335                                                                                                                { \
    310                                                                                                                         if (!(BOOST_UBLAS_TEST_EXPAND_(x)(i__,j__)==BOOST_UBLAS_TEST_EXPAND_(y)(i__,j__))) \
     336                                                                                                                        if (!(BOOST_UBLAS_TEST_EXPANDP_(x)(i__,j__)==BOOST_UBLAS_TEST_EXPANDP_(y)(i__,j__))) \
    311337                                                                                                                        { \
    312                                                                                                                                 BOOST_UBLAS_TEST_ERROR( "Failed assertion: (" << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << " == " << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << ") [with " << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPAND_(x)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPAND_(y)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << ", " << BOOST_UBLAS_TEST_STRINGIFY_(j__) << " == " << BOOST_UBLAS_TEST_EXPAND_(j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(nr) << " == " << BOOST_UBLAS_TEST_EXPAND_(nr) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(nc) << " == " << BOOST_UBLAS_TEST_EXPAND_(nc) << "]" ); \
     338                                                                                                                                BOOST_UBLAS_TEST_ERROR( "Failed assertion: (" << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << " == " << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << ") [with " << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPANDP_(x)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPANDP_(y)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << ", " << BOOST_UBLAS_TEST_STRINGIFY_(j__) << " == " << BOOST_UBLAS_TEST_EXPANDP_(j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(nr) << " == " << BOOST_UBLAS_TEST_EXPANDP_(nr) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(nc) << " == " << BOOST_UBLAS_TEST_EXPANDP_(nc) << "]" ); \
     339                                                                                                                                ++test_fails__; \
    313340                                                                                                                        } \
    314341                                                                                                                } \
    315342                                                                                                        } \
    316343                                                                                                        /* [/BOOST_UBLAS_TEST_CHECK_MATRIX_EQ] */
    317344
    318345
    319 /// Check that elements of matrices \a x and \a y are close with respect to a given precision.
     346/// Check that elements of matrices \a x and \a y are close with respect to a given precision \a e.
    320347#define BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE(x,y,nr,nc,e)        /* [BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE] */ \
    321                                                                                                                         for (unsigned long i__ = 0; i__ < BOOST_UBLAS_TEST_EXPAND_(nr); ++i__) \
     348                                                                                                                        for (::std::size_t i__ = 0; i__ < BOOST_UBLAS_TEST_EXPANDP_(nr); ++i__) \
    322349                                                                                                                        { \
    323                                                                                                                                 for (unsigned long j__ = 0; j__ < BOOST_UBLAS_TEST_EXPAND_(nc); ++j__) \
     350                                                                                                                                for (::std::size_t j__ = 0; j__ < BOOST_UBLAS_TEST_EXPANDP_(nc); ++j__) \
    324351                                                                                                                                { \
    325                                                                                                                                         if (!::boost::numeric::ublas::test::detail::close_to(BOOST_UBLAS_TEST_EXPAND_(x)(i__,j__), BOOST_UBLAS_TEST_EXPAND_(y)(i__,j__), BOOST_UBLAS_TEST_EXPAND_(e))) \
     352                                                                                                                                        if (!::boost::numeric::ublas::test::detail::close_to(BOOST_UBLAS_TEST_EXPANDP_(x)(i__,j__), BOOST_UBLAS_TEST_EXPANDP_(y)(i__,j__), BOOST_UBLAS_TEST_EXPANDP_(e))) \
    326353                                                                                                                                        { \
    327                                                                                                                                                 BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs((" << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e)  << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPAND_(x)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPAND_(y)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << ", " << BOOST_UBLAS_TEST_STRINGIFY_(j__) << " == " << BOOST_UBLAS_TEST_EXPAND_(j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(nr) << " == " << BOOST_UBLAS_TEST_EXPAND_(nr) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(nc) << " == " << BOOST_UBLAS_TEST_EXPAND_(nc) << "]" ); \
     354                                                                                                                                                BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs((" << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e)  << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPANDP_(x)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPANDP_(y)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << ", " << BOOST_UBLAS_TEST_STRINGIFY_(j__) << " == " << BOOST_UBLAS_TEST_EXPANDP_(j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(nr) << " == " << BOOST_UBLAS_TEST_EXPANDP_(nr) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(nc) << " == " << BOOST_UBLAS_TEST_EXPANDP_(nc) << "]" ); \
     355                                                                                                                                                ++test_fails__; \
    328356                                                                                                                                        } \
    329357                                                                                                                                } \
    330358                                                                                                                        } \
    331359                                                                                                                        /* [/BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE] */
    332360
    333361
     362/// Check that elements of matrices \a x and \a y are close with respect to a given relative precision \a e.
     363#define BOOST_UBLAS_TEST_CHECK_MATRIX_REL_CLOSE(x,y,nr,nc,e)    /* [BOOST_UBLAS_TEST_CHECK_MATRIX_REL_CLOSE] */ \
     364                                                                                                                                for (::std::size_t i__ = 0; i__ < BOOST_UBLAS_TEST_EXPANDP_(nr); ++i__) \
     365                                                                                                                                { \
     366                                                                                                                                        for (::std::size_t j__ = 0; j__ < BOOST_UBLAS_TEST_EXPANDP_(nc); ++j__) \
     367                                                                                                                                        { \
     368                                                                                                                                                if (!::boost::numeric::ublas::test::detail::rel_close_to(BOOST_UBLAS_TEST_EXPANDP_(x)(i__,j__), BOOST_UBLAS_TEST_EXPANDP_(y)(i__,j__), BOOST_UBLAS_TEST_EXPANDP_(e))) \
     369                                                                                                                                                { \
     370                                                                                                                                                        BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs((" << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e)  << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPANDP_(x)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPANDP_(y)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << ", " << BOOST_UBLAS_TEST_STRINGIFY_(j__) << " == " << BOOST_UBLAS_TEST_EXPANDP_(j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(nr) << " == " << BOOST_UBLAS_TEST_EXPANDP_(nr) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(nc) << " == " << BOOST_UBLAS_TEST_EXPANDP_(nc) << "]" ); \
     371                                                                                                                                                        ++test_fails__; \
     372                                                                                                                                                } \
     373                                                                                                                                        } \
     374                                                                                                                                } \
     375                                                                                                                                /* [/BOOST_UBLAS_TEST_CHECK_MATRIX_REL_CLOSE] */
     376
     377
    334378///< Output the error message \a x.
    335379#define BOOST_UBLAS_TEST_ERROR(x) ::std::cerr << "[Error (" << __FILE__ << ":" << __func__ << ":" << __LINE__ << ")>> " << BOOST_UBLAS_TEST_EXPAND_(x) << ::std::endl
    336380