]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Disable floating point exceptions for tests that specifically test is_nan.
authorWolfgang Bangerth <bangerth@math.tamu.edu>
Wed, 29 Jul 2015 16:31:44 +0000 (11:31 -0500)
committerWolfgang Bangerth <bangerth@math.tamu.edu>
Tue, 18 Aug 2015 19:51:56 +0000 (14:51 -0500)
This is necessary because, very helpfully, the isnan() function throws a
floating point exception when encountering NaN if floating
point exceptions are enabled.

tests/base/is_finite.cc
tests/base/is_finite_complex.cc
tests/base/log_nan.cc

index f801526806c8c9264b9ec5fe70d2a3f3d3a74fa3..bc71920e8d7acb11f967ed8f94e4451992ade4c2 100644 (file)
@@ -1,6 +1,6 @@
 // ---------------------------------------------------------------------
 //
-// Copyright (C) 2005 - 2014 by the deal.II authors
+// Copyright (C) 2005 - 2015 by the deal.II authors
 //
 // This file is part of the deal.II library.
 //
@@ -21,6 +21,7 @@
 #include <fstream>
 #include <iomanip>
 #include <limits>
+#include <fenv.h>
 
 
 template <typename T>
@@ -62,6 +63,17 @@ int main ()
   deallog.depth_console(0);
   deallog.threshold_double(1.e-10);
 
+  // the isnan() function (which we call in is_finite()) helpfully
+  // produces a floating point exception when called with a signalling
+  // NaN if FP exceptions are on. this of course makes it completely
+  // unusable since we can no longer detect whether something is a
+  // NaN. that said, to make the test work in these cases, simply
+  // switch off floating point exceptions for invalid arguments
+#if defined(DEAL_II_HAVE_FP_EXCEPTIONS)
+  fedisableexcept(FE_INVALID);
+#endif
+
+  
   check<double> ();
   check<long double> ();
 
index 7177f8430ffeee690134e106f7f0ab103c2e6692..e0d2a9998137ebfc4b47797a81aba462233b3482 100644 (file)
@@ -1,6 +1,6 @@
 // ---------------------------------------------------------------------
 //
-// Copyright (C) 2005 - 2014 by the deal.II authors
+// Copyright (C) 2005 - 2015 by the deal.II authors
 //
 // This file is part of the deal.II library.
 //
@@ -21,6 +21,7 @@
 #include <fstream>
 #include <iomanip>
 #include <limits>
+#include <fenv.h>
 
 
 template <typename T>
@@ -70,6 +71,16 @@ int main ()
   deallog.depth_console(0);
   deallog.threshold_double(1.e-10);
 
+  // the isnan() function (which we call in is_finite()) helpfully
+  // produces a floating point exception when called with a signalling
+  // NaN if FP exceptions are on. this of course makes it completely
+  // unusable since we can no longer detect whether something is a
+  // NaN. that said, to make the test work in these cases, simply
+  // switch off floating point exceptions for invalid arguments
+#if defined(DEAL_II_HAVE_FP_EXCEPTIONS)
+  fedisableexcept(FE_INVALID);
+#endif
+
   check<std::complex<double> > ();
   check<std::complex<long double> > ();
 
index 8c890405d906d825ba2ecd18a948b878e6fa20b0..cc43164a4e3154cd685cf7f3dbb5bca704b053b1 100644 (file)
@@ -1,6 +1,6 @@
 // ---------------------------------------------------------------------
 //
-// Copyright (C) 2005 - 2014 by the deal.II authors
+// Copyright (C) 2005 - 2015 by the deal.II authors
 //
 // This file is part of the deal.II library.
 //
@@ -22,6 +22,7 @@
 #include <fstream>
 #include <iomanip>
 #include <limits>
+#include <fenv.h>
 
 int main ()
 {
@@ -31,6 +32,16 @@ int main ()
   deallog.depth_console(0);
   deallog.threshold_double(1.e-10);
 
+  // the isnan() function (which we call in is_finite()) helpfully
+  // produces a floating point exception when called with a signalling
+  // NaN if FP exceptions are on. this of course makes it completely
+  // unusable since we can no longer detect whether something is a
+  // NaN. that said, to make the test work in these cases, simply
+  // switch off floating point exceptions for invalid arguments
+#if defined(DEAL_II_HAVE_FP_EXCEPTIONS)
+  fedisableexcept(FE_INVALID);
+#endif
+  
   deallog << std::numeric_limits<double>::quiet_NaN() << std::endl;
   deallog << std::numeric_limits<double>::signaling_NaN() << std::endl;
 

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.