summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2018-05-23 02:06:52 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2018-05-23 02:06:52 +0200
commitfd7111241a90b00eed45c7fb847101c732b9df83 (patch)
tree5c85e7f88dee579baa54ff2aa663efa61e4414d5
parent03fe3b83eb95a20a3397a0b5c19c25f02986c888 (diff)
downloadcppunit-fd7111241a90b00eed45c7fb847101c732b9df83.tar.gz
C++11 provides std::isfinite and std::isnan
-rw-r--r--Makefile.am1
-rw-r--r--configure.ac2
-rw-r--r--include/cppunit/portability/FloatingPoint.h41
-rw-r--r--m4/README1
4 files changed, 3 insertions, 42 deletions
diff --git a/Makefile.am b/Makefile.am
index 674afd3..90c6a1c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -32,7 +32,6 @@ m4internal = \
m4/ac_cxx_string_compare_string_first.m4 \
m4/ac_dll.m4 \
m4/ax_cxx_gcc_abi_demangle.m4 \
- m4/ax_cxx_have_isfinite.m4 \
m4/ax_cxx_have_sstream.m4 \
m4/ax_cxx_namespaces.m4 \
m4/ax_cxx_compile_stdcxx_11.m4 \
diff --git a/configure.ac b/configure.ac
index b34947a..21172f0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -38,8 +38,6 @@ AC_LIBTOOL_WIN32_DLL
AC_HEADER_STDC
AC_LTDL_DLLIB
AC_CHECK_HEADERS(cmath,[],[],[/**/])
-AX_CXX_HAVE_ISFINITE
-AC_CHECK_FUNCS(finite)
AX_CXX_HAVE_SSTREAM
AC_CXX_HAVE_STRSTREAM
diff --git a/include/cppunit/portability/FloatingPoint.h b/include/cppunit/portability/FloatingPoint.h
index 15bf95b..56138fa 100644
--- a/include/cppunit/portability/FloatingPoint.h
+++ b/include/cppunit/portability/FloatingPoint.h
@@ -2,39 +2,13 @@
#define CPPUNIT_PORTABILITY_FLOATINGPOINT_H_INCLUDED
#include <cppunit/Portability.h>
-#include <math.h>
-
-#if defined(__sun) && !defined(CPPUNIT_HAVE_ISFINITE) && defined(CPPUNIT_HAVE_FINITE)
-#include <ieeefp.h>
- // <math.h> is still needed for usage of fabs in TestAssert.cpp
-#endif
+#include <cmath>
CPPUNIT_NS_BEGIN
-/// \brief Tests if a floating-point is a NaN.
-// According to IEEE-754 floating point standard,
-// (see e.g. page 8 of
-// http://www.cs.berkeley.edu/~wkahan/ieee754status/ieee754.ps)
-// all comparisons with NaN are false except "x != x", which is true.
-//
-// At least Microsoft Visual Studio 6 is known not to implement this test correctly.
-// It emits the following code to test equality:
-// fcomp qword ptr [nan]
-// fnstsw ax // copie fp (floating-point) status register to ax
-// test ah,40h // test bit 14 of ax (0x4000) => C3 of fp status register
-// According to the following documentation on the x86 floating point status register,
-// the C2 bit should be tested to test for NaN value.
-// http://webster.cs.ucr.edu/AoA/Windows/HTML/RealArithmetic.html#1000117
-// In Microsoft Visual Studio 2003 & 2005, the test is implemented with:
-// test ah,44h // Visual Studio 2005 test both C2 & C3...
-//
-// To work around this, a NaN is assumed to be detected if no strict ordering is found.
inline bool floatingPointIsUnordered( double x )
{
- // x != x will detect a NaN on conformant platform
- // (2.0 < x && x < 1.0) will detect a NaN on non conformant platform:
- // => no ordering can be found for x.
- return (x != x) || (2.0 < x && x < 1.0);
+ return std::isnan(x);
}
@@ -42,16 +16,7 @@ inline bool floatingPointIsUnordered( double x )
/// @return \c true if x is neither a NaN, nor +inf, nor -inf, \c false otherwise.
inline int floatingPointIsFinite( double x )
{
-#if defined(CPPUNIT_HAVE_ISFINITE)
- return isfinite( x );
-#elif defined(CPPUNIT_HAVE_FINITE)
- return finite( x );
-#elif defined(CPPUNIT_HAVE__FINITE)
- return _finite(x);
-#else
- double testInf = x * 0.0; // Produce 0.0 if x is finite, a NaN otherwise.
- return testInf == 0.0 && !floatingPointIsUnordered(testInf);
-#endif
+ return std::isfinite(x);
}
CPPUNIT_NS_END
diff --git a/m4/README b/m4/README
index 90a85e2..b082695 100644
--- a/m4/README
+++ b/m4/README
@@ -3,6 +3,5 @@
# Exceptions internal code:
# bb_enable_doxygen.m4
# ac_cxx_string_compare_string_first.m4
-# ax_cxx_have_isfinite.m4
# ac_dll.m4
# ac_cxx_have_strstream.m4