summaryrefslogtreecommitdiff
path: root/src/cppunit/TestAssert.cpp
blob: 44be55fb895a7c2bbe7c5973503f70f4f4cab1f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <cppunit/TestAssert.h>

#include <math.h>

#if !defined(CPPUNIT_HAVE_ISFINITE)

    static inline bool isfinite( double x )
    {
#if defined(CPPUNIT_HAVE_FINITE)
	return finite( x );
#else
        return ( x * 0.0 ) == 0.0;
#endif
    }

#endif

CPPUNIT_NS_BEGIN


void 
assertDoubleEquals( double expected,
                    double actual,
                    double delta,
                    SourceLine sourceLine,
                    const std::string &message )
{
  AdditionalMessage msg( "Delta   : " + 
                         assertion_traits<double>::toString(delta) );
  msg.addDetail( AdditionalMessage(message) );

  bool equal;
  if ( isfinite(expected) && isfinite(actual) )
      equal = fabs( expected - actual ) <= delta;
  else
      equal = expected == actual;

  Asserter::failNotEqualIf( !equal,
                            assertion_traits<double>::toString(expected),
                            assertion_traits<double>::toString(actual),
                            sourceLine, 
                            msg, 
                            "double equality assertion failed" );
}


CPPUNIT_NS_END