1#ifndef SCRAN_TESTS_COMPARE_ALMOST_EQUAL_HPP
2#define SCRAN_TESTS_COMPARE_ALMOST_EQUAL_HPP
4#include <gtest/gtest.h>
56 const auto message = [&]() ->
void {
58 EXPECT_TRUE(
false) <<
"mismatching floats (" << left <<
" versus " << right <<
")";
62 if (std::isnan(left) || std::isnan(right)) {
63 if (std::isnan(left) != std::isnan(right) || !params.
nan_equal) {
81 const double denom = std::abs(left + right) / 2;
92 if (std::abs(left - right) > threshold) {
114template<
class LeftContainer_,
class RightContainer_>
116 auto n = left.size();
117 ASSERT_EQ(n, right.size());
120 for (
decltype(n) i = 0; i < n; ++i) {
122 EXPECT_TRUE(
false) <<
"mismatch in almost-equal floats at element " << i <<
" (expected " << left[i] <<
", got " << right[i] <<
")";
136template<
class Vector_>
139 CompareAlmostEqualParameters params;
140 params.relative_tolerance = tol;
Test utilites for libscran.
Definition compare_almost_equal.hpp:12
void compare_almost_equal_containers(const LeftContainer_ &left, const RightContainer_ &right, CompareAlmostEqualParameters params)
Definition compare_almost_equal.hpp:115
bool compare_almost_equal(double left, double right, const CompareAlmostEqualParameters ¶ms)
Definition compare_almost_equal.hpp:55
Parameters for compare_almost_equal().
Definition compare_almost_equal.hpp:17
bool report
Definition compare_almost_equal.hpp:36
double absolute_tolerance
Definition compare_almost_equal.hpp:26
bool nan_equal
Definition compare_almost_equal.hpp:31
double relative_tolerance
Definition compare_almost_equal.hpp:21