16 #ifndef ABSL_RANDOM_INTERNAL_MOCK_HELPERS_H_
17 #define ABSL_RANDOM_INTERNAL_MOCK_HELPERS_H_
20 #include <type_traits>
23 #include "absl/base/internal/fast_type_id.h"
24 #include "absl/types/optional.h"
28 namespace random_internal {
47 template <
typename KeyT>
50 template <
typename ResultT,
typename DiscriminatorT,
typename ArgTupleT>
59 using invoke_mock_t = decltype(std::declval<T*>()->InvokeMock(
60 std::declval<IdType>(), std::declval<void*>(), std::declval<void*>()));
63 template <
typename KeyT,
typename ReturnT,
typename ArgTupleT,
typename URBG,
70 template <
typename KeyT,
typename ReturnT,
typename ArgTupleT,
typename URBG,
71 typename = invoke_mock_t<URBG>,
typename...
Args>
74 ArgTupleT arg_tuple(std::forward<Args>(
args)...);
76 if (urbg->InvokeMock(::absl::base_internal::FastTypeId<KeyT>(), &arg_tuple,
85 template <
typename URBG>
87 void* args_tuple,
void*
result) {
88 return urbg->InvokeMock(
type, args_tuple,
result);
101 template <
typename KeyT,
typename URBG,
typename...
Args>
109 0, urbg, std::forward<Args>(
args)...);
119 template <
typename KeyT,
typename MockURBG>
121 -> decltype(
m.template RegisterMock<
124 m, std::declval<IdType>())) {
127 m, ::absl::base_internal::FastTypeId<KeyT>());
135 #endif // ABSL_RANDOM_INTERNAL_MOCK_HELPERS_H_