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

Approximate comparator struct template. More...

#include "micro-os-plus/micro-test-plus.h"

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

Public Types

using op_type = op
 Marker identifying the framework expression types.

Public Member Functions

template<class L, class R, class E>
constexpr approx_op (L &&lhs, R &&rhs, E &&epsilon)
 Constructs an approximate comparator for the given operands.
constexpr decltype(auto) epsilon (void) const
 Retrieves the tolerance.
constexpr decltype(auto) lhs (void) const
 Retrieves the left-hand operand.
constexpr operator bool () const
 Conversion operator to boolean.
constexpr decltype(auto) rhs (void) const
 Retrieves the right-hand operand.

Private Attributes

Epsilon_T epsilon_
 The stored tolerance.
Lhs_T lhs_
 Stores the left-hand operand.
Rhs_T rhs_
 Stores the right-hand operand.
const bool value_ {}
 Stores the result of the comparison.

Detailed Description

template<class Lhs_T, class Rhs_T, class Epsilon_T>
struct micro_os_plus::micro_test_plus::detail::approx_op< Lhs_T, Rhs_T, Epsilon_T >

Derived from binary_op, this struct compares two numbers with an explicit tolerance, given as a third operand: the comparison succeeds if the distance between the numbers is at most the tolerance (see detail::differ_by_at_most()). The result is computed at construction time. It is created by the approx (lhs, rhs, epsilon) function comparator, and reported as lhs ~ (rhs +/- epsilon).

The operands may be framework value wrappers or numeric literals, which are unwrapped; their own tolerance, if any, is not used.

Template Parameters
Lhs_TThe type of the stored left-hand operand, either the operand type, or a const reference to it (see stored_operand_t).
Rhs_TThe type of the stored right-hand operand, either the operand type, or a const reference to it.
Epsilon_TThe type of the stored tolerance, either the operand type, or a const reference to it.

Definition at line 1002 of file detail.h.

Member Typedef Documentation

◆ op_type

Detected by the extension::is_op concept, and inherited by all types derived from op.

Definition at line 128 of file extension.h.

Constructor & Destructor Documentation

◆ approx_op()

template<class Lhs_T, class Rhs_T, class Epsilon_T>
template<class L, class R, class E>
micro_os_plus::micro_test_plus::detail::approx_op< Lhs_T, Rhs_T, Epsilon_T >::approx_op ( L && lhs,
R && rhs,
E && epsilon )
constexpr

The result is computed from the arguments, before they are forwarded to the members.

Template Parameters
LThe type of the left-hand operand argument.
RThe type of the right-hand operand argument.
EThe type of the tolerance argument.
Parameters
lhsThe left-hand operand.
rhsThe right-hand operand.
epsilonThe tolerance.

The result is computed from the unwrapped arguments, with detail::differ_by_at_most(), before the operands are forwarded to the base and the tolerance to its member.

Definition at line 1008 of file detail-inlines.h.

1018 {
constexpr bool differ_by_at_most(Lhs_T lhs, Rhs_T rhs, Epsilon_T epsilon)
Tells whether two numbers differ by at most a tolerance.
Approximate comparator struct template.
Definition detail.h:1003
constexpr decltype(auto) epsilon(void) const
Retrieves the tolerance.
Epsilon_T epsilon_
The stored tolerance.
Definition detail.h:1044
constexpr decltype(auto) lhs(void) const
Retrieves the left-hand operand.
constexpr binary_op(L &&lhs, R &&rhs, bool value)
Constructs a binary comparator with the given operands and pre-computed result.
constexpr decltype(auto) rhs(void) const
Retrieves the right-hand operand.

References micro_os_plus::micro_test_plus::detail::binary_op< Lhs_T, Rhs_T >::binary_op(), micro_os_plus::micro_test_plus::detail::differ_by_at_most(), epsilon(), micro_os_plus::micro_test_plus::detail::binary_op< Lhs_T, Rhs_T >::lhs(), micro_os_plus::micro_test_plus::detail::binary_op< Lhs_T, Rhs_T >::rhs(), and micro_os_plus::micro_test_plus::detail::unwrap().

Member Function Documentation

◆ epsilon()

template<class Lhs_T, class Rhs_T, class Epsilon_T>
decltype(auto) constexpr micro_os_plus::micro_test_plus::detail::approx_op< Lhs_T, Rhs_T, Epsilon_T >::epsilon ( void ) const
nodiscardconstexpr

The tolerance is unwrapped with detail::unwrap(), as the operands are.

Parameters
None.
Returns
The extracted tolerance.

Returns the stored tolerance, unwrapped with detail::unwrap().

Definition at line 1026 of file detail-inlines.h.

1028 {
1029 return detail::unwrap (epsilon_);
decltype(auto) constexpr unwrap(const T &t)
Returns the value wrapped by a framework type, or the operand itself.

References epsilon(), epsilon_, and micro_os_plus::micro_test_plus::detail::unwrap().

Referenced by approx_op(), and epsilon().

◆ lhs()

template<class Lhs_T, class Rhs_T>
decltype(auto) constexpr micro_os_plus::micro_test_plus::detail::binary_op< Lhs_T, Rhs_T >::lhs ( void ) const
nodiscardconstexprinherited

The operand is unwrapped with detail::unwrap() and returned by reference, so that formatting it does not copy it.

Parameters
None.
Returns
The extracted left-hand operand.

Returns the value of the left-hand operand, unwrapped by detail::unwrap() if it is a framework wrapper type; the stored operand is not copied.

Definition at line 181 of file detail-inlines.h.

182 {
183 return detail::unwrap (lhs_);
184 }
Lhs_T lhs_
Stores the left-hand operand.
Definition detail.h:410

References lhs(), lhs_, and micro_os_plus::micro_test_plus::detail::unwrap().

Referenced by micro_os_plus::micro_test_plus::detail::and_op< Lhs_T, Rhs_T >::and_op(), micro_os_plus::micro_test_plus::detail::approx_op< Lhs_T, Rhs_T, Epsilon_T >::approx_op(), binary_op(), micro_os_plus::micro_test_plus::detail::compare_op< Lhs_T, Rhs_T, Compare_T >::compare_op(), micro_os_plus::micro_test_plus::detail::or_op< Lhs_T, Rhs_T >::or_op(), and lhs().

◆ operator bool()

template<class Lhs_T, class Rhs_T>
micro_os_plus::micro_test_plus::detail::binary_op< Lhs_T, Rhs_T >::operator bool ( ) const
nodiscardconstexprinherited
Parameters
None.
Returns
The result of the comparison.

Returns the pre-computed boolean result stored by the derived comparator's constructor.

Definition at line 167 of file detail-inlines.h.

169 {
170 return value_;
171 }
const bool value_
Stores the result of the comparison.
Definition detail.h:426

References binary_op(), and value_.

◆ rhs()

template<class Lhs_T, class Rhs_T>
decltype(auto) constexpr micro_os_plus::micro_test_plus::detail::binary_op< Lhs_T, Rhs_T >::rhs ( void ) const
nodiscardconstexprinherited

The operand is unwrapped with detail::unwrap() and returned by reference, so that formatting it does not copy it.

Parameters
None.
Returns
The extracted right-hand operand.

Returns the value of the right-hand operand, unwrapped by detail::unwrap() if it is a framework wrapper type; the stored operand is not copied.

Definition at line 194 of file detail-inlines.h.

195 {
196 return detail::unwrap (rhs_);
197 }
Rhs_T rhs_
Stores the right-hand operand.
Definition detail.h:418

References rhs(), rhs_, and micro_os_plus::micro_test_plus::detail::unwrap().

Referenced by micro_os_plus::micro_test_plus::detail::and_op< Lhs_T, Rhs_T >::and_op(), micro_os_plus::micro_test_plus::detail::approx_op< Lhs_T, Rhs_T, Epsilon_T >::approx_op(), binary_op(), micro_os_plus::micro_test_plus::detail::compare_op< Lhs_T, Rhs_T, Compare_T >::compare_op(), micro_os_plus::micro_test_plus::detail::or_op< Lhs_T, Rhs_T >::or_op(), and rhs().

Member Data Documentation

◆ epsilon_

template<class Lhs_T, class Rhs_T, class Epsilon_T>
Epsilon_T micro_os_plus::micro_test_plus::detail::approx_op< Lhs_T, Rhs_T, Epsilon_T >::epsilon_
private

Stored as the operands are (see stored_operand_t), only to be reported; the result was already computed by the constructor.

Definition at line 1044 of file detail.h.

Referenced by epsilon().

◆ lhs_

template<class Lhs_T, class Rhs_T>
Lhs_T micro_os_plus::micro_test_plus::detail::binary_op< Lhs_T, Rhs_T >::lhs_
privateinherited

A value, moved from a temporary or copied from a named operand, or, for a named operand that cannot be copied, a const reference to it (see stored_operand_t). It is not const, so that a temporary expression can be moved into an enclosing one.

Definition at line 410 of file detail.h.

Referenced by binary_op(), and lhs().

◆ rhs_

template<class Lhs_T, class Rhs_T>
Rhs_T micro_os_plus::micro_test_plus::detail::binary_op< Lhs_T, Rhs_T >::rhs_
privateinherited

Stored as the left-hand operand is.

Definition at line 418 of file detail.h.

Referenced by binary_op(), and rhs().

◆ value_

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

Computed once, by the derived comparator constructor.

Definition at line 426 of file detail.h.

Referenced by binary_op(), and operator bool().


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