HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
polynomial_tests.hpp
1
2// Copyright 2019 Pokitec
3// All rights reserved.
4
5#include "TTauri/Foundation/polynomial.hpp"
6#include <gtest/gtest.h>
7#include <iostream>
8#include <string>
9
10template<typename T, typename U, int N>
11double maxAbsDiff(tt::results<T,N> const &lhs, tt::results<U,N> const &rhs) {
12 if (lhs.count != rhs.count) {
14 }
15
16 double maxDiff = 0.0;
17 assert(lhs.count <= lhs.maxCount);
18 for (ptrdiff_t i = 0; i < lhs.count; i++) {
19 ttlet diff = std::abs(lhs.value[i] - rhs.value[i]);
20 maxDiff = std::max(maxDiff, diff);
21 }
22 return maxDiff;
23}
24
25template<typename T, typename U, int N>
26testing::AssertionResult ResultsNearPredFormat(const char* expr1,
27 const char* expr2,
28 const char* abs_error_expr,
31 double abs_error) {
32 ttlet diff = maxAbsDiff(val1, val2);
33 if (diff <= abs_error) return testing::AssertionSuccess();
34
35 return testing::AssertionFailure()
36 << "The difference between " << expr1 << " and " << expr2
37 << " is " << diff << ", which exceeds " << abs_error_expr << ", where\n"
38 << expr1 << " evaluates to " << val1 << ",\n"
39 << expr2 << " evaluates to " << val2 << ", and\n"
40 << abs_error_expr << " evaluates to " << abs_error << ".";
41}
42
43#define ASSERT_RESULTS_NEAR(val1, val2, abs_error)\
44 ASSERT_PRED_FORMAT3(ResultsNearPredFormat, val1, val2, abs_error)
45
46#define ASSERT_RESULTS(val1, val2) ASSERT_RESULTS_NEAR(val1, val2, 0.000001)
47
48namespace tt {
49using results1 = tt::results<double,1>;
50using results2 = tt::results<double,2>;
51using results3 = tt::results<double,3>;
52}
Definition polynomial.hpp:11
T infinity(T... args)
T max(T... args)