AdcValueHolder class: tests are passed

This commit is contained in:
Timur A. Fatkhullin
2024-03-24 23:48:52 +03:00
parent a963db2900
commit fad61ea1df
2 changed files with 178 additions and 48 deletions

View File

@@ -1,32 +1,17 @@
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include <doctest/doctest.h>
#include <iostream>
// #include <doctest/doctest.h>
#include "../common/adc_value_holder.h"
// TEST_CASE("[ADC VALUEHOLDER]")
// {
// int ch_i = 10;
// auto getter = [&ch_i]() { return ch_i; };
// auto setter = [&ch_i](const int& v) { ch_i = v; };
// auto validator = [&ch_i](const int& v) {
// if (v < 0)
// return false;
// else
// return true;
// };
// adc::AdcValueHolder vh(getter, setter, validator);
// }
int main()
TEST_CASE("[ADC VALUEHOLDER]")
{
int ch_i = 10;
int int_val = 10;
auto getter = [&ch_i]() { return ch_i; };
auto setter = [&ch_i](const int& v) { ch_i = v; };
auto validator = [&ch_i](const int& v) {
auto getter = [&int_val]() { return int_val; };
auto setter = [&int_val](const int& v) { int_val = v; };
auto validator = [](const int& v) {
if (v < 0)
return false;
else
@@ -34,11 +19,68 @@ int main()
};
// adc::AdcValueHolder vh(getter, setter, validator);
adc::AdcValueHolder vh(getter, setter, adc::AdcValueHolder::_defaultTrivialConvTypes, validator);
adc::AdcValueHolder vh(getter, setter, validator);
auto vah = adc::make_arith_valueholder(getter, setter);
vh = 77;
std::cout << "(vh = 77) => ch_i = " << ch_i << "\n";
REQUIRE_EQ(int_val, 77);
std::cout << (double)vh << "\n";
vh = 100;
int res = vh;
REQUIRE_EQ(res, 100);
CHECK_THROWS_WITH_AS(vh = 1.1, "conversion function is not defined", std::system_error);
CHECK_THROWS_WITH_AS(vh = -3, "user value is not valid", std::system_error);
double dv = 33.33;
vah = dv;
REQUIRE_EQ(int_val, 33);
vah = 100;
auto res_long = static_cast<unsigned long>(vah);
REQUIRE_EQ(res_long, 100ul);
vah = -10.1234;
REQUIRE_EQ(int_val, -10);
/* std::string holder */
std::string str = "THIS IS A STRING";
auto sget = [&str]() { return str; };
auto sset = [&str](const std::string& s) { str = s; };
auto sval = [](const std::string& s) {
if (s.size())
return true;
else
return false;
};
adc::AdcValueHolder vsh(sget, sset, sval);
vsh.addConvertFunc<const char*>([](std::any& v) { v = std::string(std::any_cast<const char*>(v)); },
[](std::any& v) {
auto sval = std::any_cast<std::string>(&v);
v = sval->c_str();
});
vsh = "NEW VALUE";
REQUIRE_EQ(str, "NEW VALUE");
const char* sptr = vsh;
REQUIRE_EQ(std::strcmp(sptr, "NEW VALUE"), 0);
using namespace std::literals;
CHECK_THROWS_WITH_AS(vsh = ""s, "user value is not valid", std::system_error);
}