From ca46e89536fe37718b8bb39ee07ba8afcaf197f3 Mon Sep 17 00:00:00 2001 From: "Timur A. Fatkhullin" Date: Sat, 13 Apr 2024 23:47:22 +0300 Subject: [PATCH] ... --- CMakeLists.txt | 6 +++++- common/adc_value.h | 18 +++++++++++------- tests/adc_valueholder_test.cpp | 18 +++++++++++++++++- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8625575..24c7dd6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,7 @@ project(ADC LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) +# set(CMAKE_BUILD_TYPE Release) set(ADC_COMMON_HEADERS @@ -16,7 +17,7 @@ set(ADC_DEVICE_HEADERS device/adc_device_command.h ) -option(BUILD_TESTS "Buiuld tests" ON) +option(BUILD_TESTS "Build tests" ON) if (BUILD_TESTS) find_package(doctest) @@ -35,6 +36,9 @@ if (BUILD_TESTS) endif() target_link_libraries(${VALUEHOLDER_TEST_APP} PRIVATE doctest::doctest) + include(CTest) + add_test(VALUE_HOLDER ${VALUEHOLDER_TEST_APP}) + enable_testing() endif(BUILD_TESTS) include(GNUInstallDirs) diff --git a/common/adc_value.h b/common/adc_value.h index b293e57..d4a0aba 100644 --- a/common/adc_value.h +++ b/common/adc_value.h @@ -8,7 +8,6 @@ #include -#include #include #include "adc_traits.h" @@ -251,8 +250,10 @@ public: { using from_sig_t = typename traits::adc_func_traits; using to_sig_t = typename traits::adc_func_traits; - using value_t = typename to_sig_t::ret_t; // internal value type - using user_t = typename from_sig_t::ret_t; + // using value_t = typename to_sig_t::ret_t; // internal value type + using value_t = std::remove_cv_t; // internal value type + // using user_t = typename from_sig_t::ret_t; + using user_t = std::remove_cv_t; // static_assert(!std::is_same_v, "void IS NOT VALID TYPE!!!"); @@ -267,7 +268,8 @@ public: this]() { if (_getterFunc[this]) { auto val = _getterFunc[this](); - return std::get<0>(wrapper)(val); // convert from internal type + // return std::get<0>(wrapper)(val); // convert from internal type + return std::get<0>(wrapper)(_getterFunc[this]()); // convert from internal type } // invalid conversion function signature throw std::system_error(AdcValueHolderErrorCode::ERROR_INTERNAL_TYPE_MISMATCH); @@ -307,12 +309,14 @@ public: AdcValueHolder& operator=(UT&& value) { // using v_t = std::remove_reference_t; - using v_t = std::remove_cvref_t; - using val_t = std::conditional_t, std::add_pointer_t>, v_t>; + // using v_t = std::remove_cvref_t; + // using val_t = std::conditional_t, std::add_pointer_t>, v_t>; + using val_t = std::decay_t; auto setter = _setterFunc[this]; if (setter) { - setter(std::forward(value)); + // setter(std::forward(value)); + setter(value); } else { throw std::system_error(AdcValueHolderErrorCode::ERROR_NO_CONV_FUNC); } diff --git a/tests/adc_valueholder_test.cpp b/tests/adc_valueholder_test.cpp index af0bc7b..32a3135 100644 --- a/tests/adc_valueholder_test.cpp +++ b/tests/adc_valueholder_test.cpp @@ -1,6 +1,7 @@ #include #define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include +#include #include #include "../common/adc_utils.h" @@ -76,7 +77,8 @@ TEST_CASE("[ADC VALUEHOLDER]") // }); - vsh.addConvertFunc([](const std::string& v) { return v.c_str(); }, [](const char* v) { return std::string(v); }); + vsh.addConvertFunc([&str](const std::string&) { return str.c_str(); }, + [](const char* v) { return std::string(v); }); vsh = "NEW VALUE"; @@ -84,6 +86,8 @@ TEST_CASE("[ADC VALUEHOLDER]") const char* sptr = vsh; + std::cout << "SPTR: " << sptr << "\n"; + REQUIRE_EQ(std::strcmp(sptr, "NEW VALUE"), 0); using namespace std::literals; @@ -134,4 +138,16 @@ TEST_CASE("[ADC VALUEHOLDER]") std::cout << "SR: " << sr(std::list{11.11, 22.22, 33.33}) << "\n"; ss = ",\t"; std::cout << "SR: " << sr.setDelimiter(" , ")(std::vector{11.11, 22.22, 33.33}) << "\n"; + + + int zz; + auto t1 = std::chrono::system_clock::now(); + for (int i = 10; i < 1000000; ++i) { + vah = i; + zz = (int)vah + 10; + } + auto t2 = std::chrono::system_clock::now(); + std::cout << "ZZ = " << zz << "\n"; + + std::cout << "ELAPS: " << std::chrono::duration_cast(t2 - t1).count() << " mksec\n"; }