7#include "hikogui/polynomial.hpp"
9#include <gtest/gtest.h>
13template<
typename T,
typename U,
int N>
14double maxAbsDiff(hi::results<T, N>
const &lhs, hi::results<U, N>
const &rhs)
16 if (lhs.size() != rhs.size()) {
20 double max_diff = 0.0;
21 assert(lhs.size() <= lhs.capacity());
22 for (
auto i = 0_uz; i != lhs.size(); ++i) {
25 for (
auto j = 0_uz; j != rhs.size(); ++j) {
26 hi::inplace_min(min_diff, std::abs(lhs[i] - rhs[j]));
29 hi::inplace_max(max_diff, min_diff);
34template<
typename T,
typename U,
int N>
35testing::AssertionResult ResultsNearPredFormat(
38 const char *abs_error_expr,
39 hi::results<T, N> val1,
40 hi::results<U, N> val2,
43 hilet diff = maxAbsDiff(val1, val2);
44 if (diff <= abs_error)
45 return testing::AssertionSuccess();
47 return testing::AssertionFailure() <<
"The difference between " << expr1 <<
" and " << expr2 <<
" is " << diff
48 <<
", which exceeds " << abs_error_expr <<
", where\n"
49 << expr1 <<
" evaluates to " << val1 <<
",\n"
50 << expr2 <<
" evaluates to " << val2 <<
", and\n"
51 << abs_error_expr <<
" evaluates to " << abs_error <<
".";
54#define ASSERT_RESULTS_NEAR(val1, val2, abs_error) ASSERT_PRED_FORMAT3(ResultsNearPredFormat, val1, val2, abs_error)
56#define ASSERT_RESULTS(val1, val2) ASSERT_RESULTS_NEAR(val1, val2, 0.000001)
58namespace hi::inline
v1 {
59using results1 = hi::results<double, 1>;
60using results2 = hi::results<double, 2>;
61using results3 = hi::results<double, 3>;
Miscellaneous math functions.
#define hilet
Invariant should be the default for variables.
Definition utility.hpp:23
DOXYGEN BUG.
Definition algorithm.hpp:15