mimic++ v10.0.1
Loading...
Searching...
No Matches
Common.hpp
Go to the documentation of this file.
1// Copyright Dominic (DNKpp) Koepke 2026.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at
4// https://www.boost.org/LICENSE_1_0.txt)
5
6#ifndef MIMICPP_EXPECTATION_COMMON_HPP
7#define MIMICPP_EXPECTATION_COMMON_HPP
8
9#pragma once
10
11#include "mimic++/Call.hpp"
12#include "mimic++/Fwd.hpp"
16
17#ifndef MIMICPP_DETAIL_IS_MODULE
18 #include <concepts>
19 #include <type_traits>
20 #include <utility>
21 #include <variant>
22#endif
23
25{
27 {
28 std::optional<StringT> description{};
29
30 [[nodiscard]]
31 friend bool operator==(MatchSuccess const&, MatchSuccess const&) = default;
32 };
33
35 {
36 std::optional<StringT> description{};
37
38 friend bool operator==(MatchFailure const&, MatchFailure const&) = default;
39 };
40
41 using MatchResult = std::variant<MatchSuccess, MatchFailure>;
42 using MatchResults = std::vector<MatchResult>;
43
48 template <typename T, typename Signature>
49 concept expectation_policy_for = std::is_move_constructible_v<T>
50 && std::is_destructible_v<T>
51 && std::same_as<T, std::remove_cvref_t<T>>
52 && requires(T& policy, call::info_for_signature_t<Signature> const& info) {
53 { std::as_const(policy).is_satisfied() } noexcept -> util::boolean_testable;
54 { std::as_const(policy).matches(info) } -> std::convertible_to<MatchResult>;
55 { policy.consume(info) };
56 };
57
62 template <typename T, typename Signature>
63 concept finalize_policy_for = std::is_move_constructible_v<T>
64 && std::is_destructible_v<T>
65 && std::same_as<T, std::remove_cvref_t<T>>
66 && requires(T& policy, call::info_for_signature_t<Signature> const& info) {
67 { policy.finalize_call(info) } -> std::convertible_to<signature_return_type_t<Signature>>;
68 };
69
74 template <typename T>
75 concept control_policy = std::is_move_constructible_v<T>
76 && std::is_destructible_v<T>
77 && std::same_as<T, std::remove_cvref_t<T>>
78 && requires(T& policy) {
79 { std::as_const(policy).is_satisfied() } noexcept -> util::boolean_testable;
80 { std::as_const(policy).state() } -> std::convertible_to<reporting::control_state_t>;
81 policy.consume();
82 };
83}
84
85#endif
#define MIMICPP_DETAIL_MODULE_EXPORT
Definition Config.hpp:19
Determines whether the given type satisfies the requirements of a control-policy.
Definition Common.hpp:75
Determines whether the given type satisfies the requirements of an expectation-policy for the given s...
Definition Common.hpp:49
Determines whether the given type satisfies the requirements of a finalize-policy for the given signa...
Definition Common.hpp:63
Determines, whether B behaves as a the builtin type bool.
Definition Concepts.hpp:66
typename info_for_signature< Signature >::type info_for_signature_t
Definition Call.hpp:47
Definition Builder.hpp:33
std::variant< MatchSuccess, MatchFailure > MatchResult
Definition Common.hpp:41
std::vector< MatchResult > MatchResults
Definition Common.hpp:42
Definition Common.hpp:35
friend bool operator==(MatchFailure const &, MatchFailure const &)=default
std::optional< StringT > description
Definition Common.hpp:36
Definition Common.hpp:27
friend bool operator==(MatchSuccess const &, MatchSuccess const &)=default
std::optional< StringT > description
Definition Common.hpp:28