AdcValueHolder class: tests are passed
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user