Blame src/cppunit/TestAssert.cpp

Packit Service e31359
#include <cppunit/TestAssert.h>
Packit Service e31359
#include <cppunit/portability/FloatingPoint.h>
Packit Service e31359
Packit Service e31359
CPPUNIT_NS_BEGIN
Packit Service e31359
Packit Service e31359
Packit Service e31359
void 
Packit Service e31359
assertDoubleEquals( double expected,
Packit Service e31359
                    double actual,
Packit Service e31359
                    double delta,
Packit Service e31359
                    SourceLine sourceLine,
Packit Service e31359
                    const std::string &message )
Packit Service e31359
{
Packit Service e31359
  AdditionalMessage msg( "Delta   : " + 
Packit Service e31359
                         assertion_traits<double>::toString(delta) );
Packit Service e31359
  msg.addDetail( AdditionalMessage(message) );
Packit Service e31359
Packit Service e31359
  bool equal;
Packit Service e31359
  if ( floatingPointIsFinite(expected)  &&  floatingPointIsFinite(actual) )
Packit Service e31359
      equal = fabs( expected - actual ) <= delta;
Packit Service e31359
  else
Packit Service e31359
  {
Packit Service e31359
    // If expected or actual is not finite, it may be +inf, -inf or NaN (Not a Number).
Packit Service e31359
    // Value of +inf or -inf leads to a true equality regardless of delta if both
Packit Service e31359
    // expected and actual have the same value (infinity sign).
Packit Service e31359
    // NaN Value should always lead to a failed equality.
Packit Service e31359
    if ( floatingPointIsUnordered(expected)  ||  floatingPointIsUnordered(actual) )
Packit Service e31359
    { 
Packit Service e31359
       equal = false;  // expected or actual is a NaN
Packit Service e31359
    }
Packit Service e31359
    else // ordered values, +inf or -inf comparison
Packit Service e31359
    {
Packit Service e31359
       equal = expected == actual;
Packit Service e31359
    }
Packit Service e31359
  }
Packit Service e31359
Packit Service e31359
  Asserter::failNotEqualIf( !equal,
Packit Service e31359
                            assertion_traits<double>::toString(expected),
Packit Service e31359
                            assertion_traits<double>::toString(actual),
Packit Service e31359
                            sourceLine, 
Packit Service e31359
                            msg, 
Packit Service e31359
                            "double equality assertion failed" );
Packit Service e31359
}
Packit Service e31359
Packit Service e31359
Packit Service e31359
CPPUNIT_NS_END