48#ifndef MICRO_TEST_PLUS_MATH_INLINES_H_
49#define MICRO_TEST_PLUS_MATH_INLINES_H_
64#pragma GCC diagnostic push
65#pragma GCC diagnostic ignored "-Waggregate-return"
67#pragma clang diagnostic ignored "-Wc++98-compat"
68#pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
95 [[nodiscard]]
constexpr auto
98 return t < T{} ? -t : t;
116 [[nodiscard]]
constexpr auto
119 return (rhs < lhs) ? rhs : lhs;
136 template <
class T,
class Exp_T>
137 [[nodiscard]]
constexpr auto
138 pow (
const T base,
const Exp_T exp) -> T
141 return exp ? T (base *
pow (base, exp - Exp_T (1))) : T (1);
158 template <
class T,
char... Cs>
159 [[nodiscard]]
constexpr auto
164 ((Cs ==
'.' or Cs ==
'\'' or (Cs >=
'0' and Cs <=
'9')) and ...));
166 for (
const char c : { Cs... })
172 if (c >=
'0' and c <=
'9')
174 result =
static_cast<T
> (result *
static_cast<T
> (10)
175 +
static_cast<T
> (c -
'0'));
198 template <
class T,
char... Cs>
199 [[nodiscard]]
constexpr auto
202 constexpr const std::array cs{ Cs... };
205 while (cs[i++] !=
'.')
209 for (
auto j = i; j <
sizeof...(Cs); ++j)
211 result +=
pow (T (10),
sizeof...(Cs) - j) * T (cs[j] -
'0');
231 template <
class T,
char... Cs>
232 [[nodiscard]]
constexpr auto
235 constexpr const std::array cs{ Cs... };
238#pragma GCC diagnostic push
239#pragma GCC diagnostic ignored "-Wconversion"
241 while (cs[i++] !=
'.')
243#pragma GCC diagnostic pop
248 return T (
sizeof...(Cs)) - i + T (1);
267 template <
class T,
class Value_T>
268 [[nodiscard]]
constexpr auto
271 constexpr auto precision = Value_T (1e-7);
278#pragma GCC diagnostic push
279#if !defined(__clang__)
280#pragma GCC diagnostic ignored "-Warith-conversion"
282#if defined(__clang__)
283#pragma clang diagnostic ignored "-Wimplicit-int-float-conversion"
286 tmp = value - T (value);
288#pragma GCC diagnostic pop
292 while (tmp > precision);
304#pragma GCC diagnostic pop
Mathematical utilities for the µTest++ testing framework.
constexpr auto den(void) -> T
Computes the decimal part of a number represented as an array of characters.
constexpr auto abs(const T t) -> T
Computes the absolute value of a given comparable value.
constexpr auto pow(const T base, const Exp_T exp) -> T
Generic exponentiation function to compute the power of a base raised to an exponent.
constexpr auto den_size(void) -> T
Computes the number of decimal places in a number represented as an array of characters.
constexpr auto num(void) -> T
Computes the integral value of a number represented as an array of characters.
constexpr auto min_value(const T &lhs, const T &rhs) -> const T &
Computes the minimum of two comparable values.
Primary namespace for the µTest++ testing framework.