#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include #include #include "../device/adc_device_attribute.h" using namespace adc; template struct V { static T getter() { return _v; } static void setter(const T& v) { _v = v; } static bool validator(const T& v) { if (v < 1) return false; else return true; } private: inline static T _v = 1; }; TEST_CASE("[ADC DEVICE ATTRIBUTE]") { double av = -10; using vv = V; using attr_t = AdcDeviceAttribute; std::string_view id{"ATTR_A"}; // attr_t attr(id, adc::constants::AdcDefaultTrivialConvTypes, vv::getter, vv::setter); attr_t attr("id", adc::constants::AdcDefaultTrivialConvTypes, vv::getter, vv::setter); attr = 10.7; av = attr; std::cout << "ATTR = " << av << "\n"; std::cout << "ATTR = " << (unsigned)attr << "\n"; // attr_t aw("ATTR_WO", nullptr, vv::setter, nullptr); attr_t aw("ATTR_WO", adc::constants::AdcDefaultTrivialConvTypes, vv::setter); // attr_t aw(id, adc::constants::AdcDefaultTrivialConvTypes, vv::setter); std::cout << "ACC_TYPE: " << aw.accessType() << "\n"; // av = aw; aw = 4534.6588; // attr_t ar("ATTR_RO", adc::constants::AdcDefaultTrivialConvTypes, vv::getter); auto ar = attr_t::makeArithAttr("ATTR_RO", vv::getter); std::cout << "ACC_TYPE: " << ar.accessType() << "\n"; std::cout << "ATTR_RO = " << (double)ar << "\n"; }