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
|
/*
Copyright 2021 Glen Joseph Fernandes
(glenjofe@gmail.com)
Distributed under the Boost Software License, Version 1.0.
(http://www.boost.org/LICENSE_1_0.txt)
*/
#ifndef BOOST_UNITS_TEST_CLOSE_HPP
#define BOOST_UNITS_TEST_CLOSE_HPP
#include <boost/core/lightweight_test.hpp>
#include <algorithm>
#include <limits>
#include <cmath>
/*
Provide a predicate for BOOST_TEST_WITH that is equivalent to
what was provided by the previous test framework.
*/
class close_to {
public:
explicit close_to(double f)
: f_(f) { }
bool operator()(double l, double r) const {
return std::abs(l - r) <=
(std::max)(f_ * (std::max)(std::abs(l), std::abs(r)), 0.);
}
private:
double f_;
};
#define BOOST_UNITS_TEST_CLOSE(l,r,f) BOOST_TEST_WITH((l),(r),close_to((f)))
#endif
|