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
|