summaryrefslogtreecommitdiff
path: root/src/common/include/gudhi/Unitary_tests_utils.h
diff options
context:
space:
mode:
authorGard Spreemann <gspr@nonempty.org>2020-01-20 09:33:33 +0100
committerGard Spreemann <gspr@nonempty.org>2020-01-20 09:33:33 +0100
commit8c751c3929b1727c1e2e2781259ddaa39cfd8df3 (patch)
tree0e680ea9182032cc82a732230217980ada093ee9 /src/common/include/gudhi/Unitary_tests_utils.h
parenta11db9cb0c8b35fa393c95d698754bb0c652b1d6 (diff)
parent9acc59fcc1d5001a212e7b9cd6f00a569a625882 (diff)
Merge branch 'dfsg/latest' into debian/sid
Diffstat (limited to 'src/common/include/gudhi/Unitary_tests_utils.h')
-rw-r--r--src/common/include/gudhi/Unitary_tests_utils.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/common/include/gudhi/Unitary_tests_utils.h b/src/common/include/gudhi/Unitary_tests_utils.h
index 4ad4dae8..9b86460a 100644
--- a/src/common/include/gudhi/Unitary_tests_utils.h
+++ b/src/common/include/gudhi/Unitary_tests_utils.h
@@ -14,6 +14,7 @@
#include <iostream>
#include <limits> // for std::numeric_limits<>
+#include <cmath> // for std::fabs
template<typename FloatingType >
void GUDHI_TEST_FLOAT_EQUALITY_CHECK(FloatingType a, FloatingType b,
@@ -25,4 +26,15 @@ void GUDHI_TEST_FLOAT_EQUALITY_CHECK(FloatingType a, FloatingType b,
BOOST_CHECK(std::fabs(a - b) <= epsilon);
}
+// That's the usual x86 issue where a+b==a+b can return false (without any NaN) because one of them was stored in
+// memory (and thus rounded to 64 bits) while the other is still in a register (80 bits).
+template<typename FloatingType >
+FloatingType GUDHI_PROTECT_FLOAT(FloatingType value) {
+ volatile FloatingType protected_value = value;
+#ifdef DEBUG_TRACES
+ std::cout << "GUDHI_PROTECT_FLOAT - " << protected_value << std::endl;
+#endif
+ return protected_value;
+}
+
#endif // UNITARY_TESTS_UTILS_H_