123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- /*
- * NICE-Core - efficient algebra and computer vision methods
- * - libfbasics - library of some basic tools
- * See file License for license information.
- */
- #ifndef _CPPUNITEX_FBASICS_H
- #define _CPPUNITEX_FBASICS_H
- #ifdef NICE_USELIB_CPPUNIT
- #include <cppunit/extensions/HelperMacros.h>
- #include <core/basics/numerictools.h>
- /**
- * This is similar to CppUnit's built in CPPUNIT_ASSERT_MESSAGE,
- * but \c _STREAMABLE_ can be anything streamable to a std::stringstream
- * (including expressions like the following:
- * <code>"test failed with error " << error << "."</code>)
- */
- #define CPPUNIT_ASSERT_STREAMABLE(_CONDITION_,_STREAMABLE_) \
- if(!(_CONDITION_)) { \
- std::stringstream _MSG_; \
- _MSG_<<_STREAMABLE_<<std::endl; \
- CPPUNIT_NS::Asserter::fail(_MSG_.str() , CPPUNIT_SOURCELINE() ); }
- /**
- * CppUnit macro asserting that \c b is NOT NaN (Not a Number)
- */
- #define CPPUNIT_ASSERT_NOT_NAN(b) \
- CPPUNIT_ASSERT_MESSAGE("Value is NaN", !isNaN(b));
- /**
- * CppUnit macro asserting that \c b IS NaN (Not a Number)
- */
- #define CPPUNIT_ASSERT_IS_NAN(b) \
- CPPUNIT_ASSERT_MESSAGE("Value is not NaN", isNaN(b));
- /**
- * CppUnit macro asserting equality of doubles.
- */
- #define CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN_STREAMABLE(a,b,c,s) \
- { \
- bool uaieuaieOK = true; \
- if (!isZero(double(a) - double(b), double(c)) || isNaN(b)) { \
- uaieuaieOK = false; \
- } \
- CPPUNIT_ASSERT_STREAMABLE(uaieuaieOK, \
- "equality assertion failed. " << s << std::endl \
- << "- Expected: " << (a) << std::endl \
- << "- Actual : " << (b) << std::endl); \
- }
- /**
- * CppUnit macro asserting equality of doubles.
- */
- #define CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN(a,b,c) \
- CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN_STREAMABLE(a,b,c,"")
- /**
- * CppUnit macro asserting equality of double values.
- * This is like CppUnit's built in CPPUNIT_ASSERT_DOUBLES_EQUAL
- * extended by an explicit check that \c b is NOT NaN
- * (CPPUNIT_ASSERT_DOUBLES_EQUAL will NOT fail if \c b is NaN,
- * but most of the time, this IS an error).
- */
- /*
- #define CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN(a,b,c) \
- CPPUNIT_ASSERT_NOT_NAN((b)); \
- CPPUNIT_ASSERT_DOUBLES_EQUAL((a),(b),(c));
- */
- /**
- * Like CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN, but here \c c is \b relative
- * to \c a.
- */
- #define CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN_REL(a,b,c) \
- CPPUNIT_ASSERT_NOT_NAN((b)); \
- CPPUNIT_ASSERT_DOUBLES_EQUAL((a),(b),fabs(a*c));
- /**
- * This is similar to CppUnit's built in CPPUNIT_ASSERT_EQUAL,
- * but streams the two parameters and compares the resulting strings.
- * Hence, any streamable objects can be compared.
- */
- #define CPPUNIT_ASSERT_EQUAL_STREAMED(a,b) \
- { \
- std::ostringstream str_a, str_b; \
- str_a << a; \
- str_b << b; \
- CPPUNIT_ASSERT_EQUAL(str_a.str(), str_b.str()); \
- }
- /**
- * This is similar to CppUnit's built in CPPUNIT_ASSERT_MESSAGE,
- * but \c _STREAMABLE_ can be anything streamable to a std::stringstream
- * (including expressions like the following:
- * <code>"test failed with error " << error << "."</code>)
- * @deprecated Use CPPUNIT_ASSERT_STREAMABLE instead
- */
- #define CPPUNIT_COND_STREAM(_COND_,_STREAM_) \
- CPPUNIT_ASSERT_STREAMABLE(_COND_,_STREAM_)
- #endif // NICE_USELIB_CPPUNIT
- #endif // _CPPUNITEX_FBASICS_H
|