micro-test-plus 3.2.2
µTest++ Testing Framework
Loading...
Searching...
No Matches
micro_os_plus::micro_test_plus::detail::eq_< Lhs_T, Rhs_T > Struct Template Reference

Equality comparator struct template. More...

#include <micro-os-plus/micro-test-plus.h>

Inheritance diagram for micro_os_plus::micro_test_plus::detail::eq_< Lhs_T, Rhs_T >:

Public Member Functions

constexpr eq_ (const Lhs_T &lhs={}, const Rhs_T &rhs={})
 Constructs an equality comparator for the given operands.
constexpr auto lhs (void) const
 Retrieves the left-hand operand.
constexpr operator bool () const
 Conversion operator to boolean.
constexpr auto rhs (void) const
 Retrieves the right-hand operand.

Public Attributes

const Lhs_T lhs_ {}
 Stores the left-hand operand.
const Rhs_T rhs_ {}
 Stores the right-hand operand.
const bool value_ {}
 Stores the result of the equality comparison.

Detailed Description

template<class Lhs_T, class Rhs_T>
struct micro_os_plus::micro_test_plus::detail::eq_< Lhs_T, Rhs_T >
Template Parameters
Lhs_TThe type of the left-hand operand.
Rhs_TThe type of the right-hand operand.

The eq_ struct template provides a type-safe mechanism for evaluating equality between two operands within the framework.

This comparator supports a variety of operand types, including those with static values, types with precision (epsilon), and generic types. For types with static values, the comparison is performed directly. For types supporting precision, the comparison accounts for the smallest epsilon to ensure accuracy, particularly for floating-point types. For all other types, the generic getter is used to retrieve and compare the values.

The implementation is optimised for use in embedded environments and supports both compile-time and run-time evaluation.

All definitions are intended for internal use within the framework and are implemented in the include/micro-os-plus/micro-test-plus folder to maintain a structured and modular codebase.

Definition at line 259 of file detail.h.

Constructor & Destructor Documentation

◆ eq_()

template<class Lhs_T, class Rhs_T>
micro_os_plus::micro_test_plus::detail::eq_< Lhs_T, Rhs_T >::eq_ ( const Lhs_T & lhs = {},
const Rhs_T & rhs = {} )
inlineconstexpr
Parameters
lhsThe left-hand operand.
rhsThe right-hand operand.

Evaluates the equality of the provided operands at construction, supporting static values, types with precision, and generic types. The result is stored in the value_ member for efficient access.

Definition at line 272 of file detail.h.

272 {}, const Rhs_T& rhs = {})
273 : lhs_{ lhs }, rhs_{ rhs }, value_{ [&] {
274 // This lambda is called in the constructor to
275 // evaluate the comparison.
276 using std::operator==;
277 using std::operator<;
278
279#if defined(__GNUC__)
280#pragma GCC diagnostic push
281#pragma GCC diagnostic ignored "-Wfloat-equal"
282#pragma GCC diagnostic ignored "-Wconversion"
283#pragma GCC diagnostic ignored "-Wdouble-promotion"
284#pragma GCC diagnostic ignored "-Wsign-compare"
285#if defined(__clang__)
286#pragma clang diagnostic ignored "-Wimplicit-int-float-conversion"
287#pragma clang diagnostic ignored "-Wpedantic"
288#endif
289#endif
292 {
293 // If both types have values (like numeric constants),
294 // compare them directly.
295 return Lhs_T::value == Rhs_T::value;
296 }
297 else if constexpr (type_traits::has_epsilon_v<Lhs_T>
299 {
300 // If both values have precision, compare them using
301 // the smalles precision.
302 return math::abs (get (lhs) - get (rhs))
304 }
305 else if constexpr (type_traits::has_epsilon_v<Lhs_T>)
306 {
307 // If only the left operand has precision, use it.
308 return math::abs (get (lhs) - get (rhs)) < Lhs_T::epsilon;
309 }
310 else if constexpr (type_traits::has_epsilon_v<Rhs_T>)
311 {
312 // If only the right operand has precision, use it.
313 return math::abs (get (lhs) - get (rhs)) < Rhs_T::epsilon;
314 }
315 else
316 {
317 // Call the generic getters, which might
318 // either call the type get() or return the value.
319 return get (lhs) == get (rhs);
320 }
321#if defined(__GNUC__)
322#pragma GCC diagnostic pop
323#endif
324 }() }
325 {
326 }
constexpr auto get(const T &t)
Generic getter function template for value retrieval.
Definition detail.h:223
constexpr auto abs(const T t) -> T
Computes the absolute value of a given comparable value.
constexpr auto min_value(const T &lhs, const T &rhs) -> const T &
Computes the minimum of two comparable values.
Equality comparator struct template.
Definition detail.h:260
constexpr auto rhs(void) const
Retrieves the right-hand operand.
Definition detail.h:376
const Lhs_T lhs_
Stores the left-hand operand.
Definition detail.h:384
const bool value_
Stores the result of the equality comparison.
Definition detail.h:394
constexpr auto lhs(void) const
Retrieves the left-hand operand.
Definition detail.h:358
const Rhs_T rhs_
Stores the right-hand operand.
Definition detail.h:389

References lhs().

Member Function Documentation

◆ lhs()

template<class Lhs_T, class Rhs_T>
auto micro_os_plus::micro_test_plus::detail::eq_< Lhs_T, Rhs_T >::lhs ( void ) const
inlinenodiscardconstexpr
Parameters
None.
Returns
The extracted left-hand operand.

Returns the value of the left-hand operand, applying the generic getter to ensure correct extraction for both custom and standard types.

Definition at line 358 of file detail.h.

359 {
360 return get (lhs_);
361 }

References micro_os_plus::micro_test_plus::detail::get(), and lhs_.

Referenced by eq_(), and micro_os_plus::micro_test_plus::test_reporter::operator<<().

◆ operator bool()

template<class Lhs_T, class Rhs_T>
micro_os_plus::micro_test_plus::detail::eq_< Lhs_T, Rhs_T >::operator bool ( ) const
inlinenodiscardconstexpr
Parameters
None.
Return values
trueThe operands are considered equal.
falseThe operands are not equal.

Returns the result of the equality comparison.

Definition at line 340 of file detail.h.

341 {
342 return value_;
343 }

References value_.

◆ rhs()

template<class Lhs_T, class Rhs_T>
auto micro_os_plus::micro_test_plus::detail::eq_< Lhs_T, Rhs_T >::rhs ( void ) const
inlinenodiscardconstexpr
Parameters
None.
Returns
The extracted right-hand operand.

Returns the value of the right-hand operand, applying the generic getter to ensure correct extraction for both custom and standard types.

Definition at line 376 of file detail.h.

377 {
378 return get (rhs_);
379 }

References micro_os_plus::micro_test_plus::detail::get(), and rhs_.

Referenced by micro_os_plus::micro_test_plus::test_reporter::operator<<().

Member Data Documentation

◆ lhs_

template<class Lhs_T, class Rhs_T>
const Lhs_T micro_os_plus::micro_test_plus::detail::eq_< Lhs_T, Rhs_T >::lhs_ {}

Definition at line 384 of file detail.h.

384{};

Referenced by lhs().

◆ rhs_

template<class Lhs_T, class Rhs_T>
const Rhs_T micro_os_plus::micro_test_plus::detail::eq_< Lhs_T, Rhs_T >::rhs_ {}

Definition at line 389 of file detail.h.

389{};

Referenced by rhs().

◆ value_

template<class Lhs_T, class Rhs_T>
const bool micro_os_plus::micro_test_plus::detail::eq_< Lhs_T, Rhs_T >::value_ {}

Definition at line 394 of file detail.h.

394{};

Referenced by operator bool().


The documentation for this struct was generated from the following file: