add test (doctest)

This commit is contained in:
2024-03-24 15:37:11 +03:00
parent 969429d2f6
commit a963db2900
3 changed files with 83 additions and 13 deletions

View File

@@ -97,7 +97,8 @@ class AdcValueHolder
{
protected:
template <typename T>
using arg_t = typename traits::adc_func_traits<T>::ret_t;
// using arg_t = typename traits::adc_func_traits<T>::ret_t;
using arg_t = typename traits::adc_func_traits<std::remove_reference_t<T>>::ret_t;
std::function<void(std::any&)> _getterWrapper;
std::function<void(const std::any&)> _setterWrapper;
@@ -113,7 +114,7 @@ protected:
{
using value_t = arg_t<decltype(getter)>;
static_assert(std::is_same_v<value_t, void>, "THE getter MUST NOT RETURN void TYPE!!!");
// static_assert(std::is_same_v<value_t, void>, "THE getter MUST NOT RETURN void TYPE!!!");
using g_t = decltype(getter);
_getterWrapper = [wrapper = traits::adc_pf_wrapper(std::forward<g_t>(getter))](std::any& val) {
@@ -125,7 +126,7 @@ protected:
using vld_t = decltype(validator);
using s_t = decltype(setter);
if constexpr (std::is_same_v<vld_t, decltype(AdcValueHolderDummyValidator)>) { // no validation
if constexpr (std::is_same_v<vld_t, decltype(AdcValueHolderDummyValidator<value_t>)>) { // no validation
_setterWrapper = [wrapper = traits::adc_pf_wrapper(std::forward<s_t>(setter)), this](const std::any& val) {
auto& setter = std::get<0>(wrapper);
@@ -160,14 +161,19 @@ public:
constexpr static std::tuple<char, short, int, long, long long, float, double> _defaultTrivialConvTypes{};
// always-true validator
constexpr static auto AdcValueHolderDummyValidator = [](const auto&) { return true; };
// constexpr static auto AdcValueHolderDummyValidator = [](const auto&) { return true; };
template <typename VT>
constexpr static bool AdcValueHolderDummyValidator(const VT&)
{
return true;
};
/* CONSTRUCTORS AND DESTRUCTOR */
AdcValueHolder(
std::invocable<> auto&& getter,
std::invocable<const arg_t<decltype(getter)>&> auto&& setter,
std::predicate<const arg_t<decltype(getter)>&> auto&& validator = AdcValueHolder::AdcValueHolderDummyValidator)
AdcValueHolder(std::invocable<> auto&& getter,
std::invocable<const arg_t<decltype(getter)>&> auto&& setter,
std::predicate<const arg_t<decltype(getter)>&> auto&& validator =
AdcValueHolder::AdcValueHolderDummyValidator<arg_t<decltype(getter)>>)
: _internalTypeIndex(std::type_index(typeid(arg_t<decltype(getter)>)))
{
init(std::forward<decltype(getter)>(getter), std::forward<decltype(setter)>(setter),
@@ -176,11 +182,11 @@ public:
template <typename... Ts>
AdcValueHolder(
std::invocable<> auto&& getter,
std::invocable<const arg_t<decltype(getter)>&> auto&& setter,
const std::tuple<Ts...>& trivialConvTypes,
std::predicate<const arg_t<decltype(getter)>&> auto&& validator = AdcValueHolder::AdcValueHolderDummyValidator)
AdcValueHolder(std::invocable<> auto&& getter,
std::invocable<const arg_t<decltype(getter)>&> auto&& setter,
const std::tuple<Ts...>& trivialConvTypes,
std::predicate<const arg_t<decltype(getter)>&> auto&& validator =
AdcValueHolder::AdcValueHolderDummyValidator<arg_t<decltype(getter)>>)
: AdcValueHolder(std::forward<decltype(getter)>(getter),
std::forward<decltype(setter)>(setter),
std::forward<decltype(validator)>(validator))