2018-01-18 00:02:55 +00:00
|
|
|
//
|
|
|
|
|
// Copyright 2018 Ettus Research, a National Instruments Company
|
|
|
|
|
//
|
2018-02-19 23:30:32 +00:00
|
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
2018-01-18 00:02:55 +00:00
|
|
|
//
|
|
|
|
|
|
|
|
|
|
#include <uhdlib/usrp/constrained_device_args.hpp>
|
2019-01-14 18:35:25 +00:00
|
|
|
#include <boost/test/unit_test.hpp>
|
2018-01-18 00:02:55 +00:00
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
|
|
using uhd::usrp::constrained_device_args_t;
|
|
|
|
|
|
|
|
|
|
namespace {
|
2019-01-14 18:35:25 +00:00
|
|
|
enum test_enum_t { VALUE1, VALUE2, VALUE3 = 4 };
|
2018-01-18 00:02:55 +00:00
|
|
|
|
2019-01-14 18:35:25 +00:00
|
|
|
static constexpr double MAX_DOUBLE_ARG = 1e6;
|
|
|
|
|
static constexpr double MIN_DOUBLE_ARG = 0.125;
|
2018-01-18 00:02:55 +00:00
|
|
|
|
2019-01-14 18:35:25 +00:00
|
|
|
static constexpr double DEFAULT_DOUBLE_ARG = 2.25;
|
|
|
|
|
static constexpr size_t DEFAULT_SIZE_T_ARG = 42;
|
|
|
|
|
static constexpr bool DEFAULT_BOOL_ARG = true;
|
|
|
|
|
static constexpr test_enum_t DEFAULT_ENUM_ARG = VALUE1;
|
2018-01-18 00:02:55 +00:00
|
|
|
|
|
|
|
|
|
2019-01-14 18:35:25 +00:00
|
|
|
class test_device_args_t : public constrained_device_args_t
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
test_device_args_t() {}
|
|
|
|
|
test_device_args_t(const std::string& dev_args)
|
2018-01-18 00:02:55 +00:00
|
|
|
{
|
2019-01-14 18:35:25 +00:00
|
|
|
parse(dev_args);
|
|
|
|
|
}
|
2018-01-18 00:02:55 +00:00
|
|
|
|
2019-01-14 18:35:25 +00:00
|
|
|
double get_double_arg() const
|
|
|
|
|
{
|
|
|
|
|
return _double_arg.get();
|
|
|
|
|
}
|
|
|
|
|
size_t get_size_t_arg() const
|
|
|
|
|
{
|
|
|
|
|
return _size_t_arg.get();
|
|
|
|
|
}
|
|
|
|
|
bool get_bool_arg() const
|
|
|
|
|
{
|
|
|
|
|
return _bool_arg.get();
|
|
|
|
|
}
|
|
|
|
|
test_enum_t get_enum_arg() const
|
|
|
|
|
{
|
|
|
|
|
return _enum_arg.get();
|
|
|
|
|
}
|
2018-01-18 00:02:55 +00:00
|
|
|
|
2021-01-08 08:33:36 +00:00
|
|
|
inline std::string to_string() const override
|
2019-01-14 18:35:25 +00:00
|
|
|
{
|
|
|
|
|
return _double_arg.to_string() + ", " + _size_t_arg.to_string() + ", "
|
|
|
|
|
+ _bool_arg.to_string() + ", " + _enum_arg.to_string();
|
|
|
|
|
}
|
2018-01-18 00:02:55 +00:00
|
|
|
|
2019-01-14 18:35:25 +00:00
|
|
|
private:
|
2021-01-08 08:33:36 +00:00
|
|
|
void _parse(const uhd::device_addr_t& dev_args) override
|
2019-01-14 18:35:25 +00:00
|
|
|
{
|
|
|
|
|
if (dev_args.has_key(_double_arg.key()))
|
|
|
|
|
_double_arg.parse(dev_args[_double_arg.key()]);
|
|
|
|
|
if (dev_args.has_key(_size_t_arg.key()))
|
|
|
|
|
_size_t_arg.parse(dev_args[_size_t_arg.key()]);
|
|
|
|
|
if (dev_args.has_key(_bool_arg.key()))
|
|
|
|
|
_bool_arg.parse(dev_args[_bool_arg.key()]);
|
|
|
|
|
if (dev_args.has_key(_enum_arg.key()))
|
|
|
|
|
_enum_arg.parse(dev_args[_enum_arg.key()]);
|
|
|
|
|
_enforce_range(_double_arg, MIN_DOUBLE_ARG, MAX_DOUBLE_ARG);
|
|
|
|
|
}
|
2018-01-18 00:02:55 +00:00
|
|
|
|
2019-01-14 18:35:25 +00:00
|
|
|
constrained_device_args_t::num_arg<double> _double_arg{
|
|
|
|
|
"double_arg", DEFAULT_DOUBLE_ARG};
|
|
|
|
|
constrained_device_args_t::num_arg<size_t> _size_t_arg{
|
|
|
|
|
"size_t_arg", DEFAULT_SIZE_T_ARG};
|
|
|
|
|
constrained_device_args_t::bool_arg _bool_arg{"bool_arg", DEFAULT_BOOL_ARG};
|
|
|
|
|
constrained_device_args_t::enum_arg<test_enum_t> _enum_arg{"enum_arg",
|
|
|
|
|
DEFAULT_ENUM_ARG,
|
|
|
|
|
{{"value1", VALUE1}, {"value2", VALUE2}, {"VALUE3", VALUE3}}};
|
|
|
|
|
};
|
2018-01-18 00:02:55 +00:00
|
|
|
|
2019-01-14 18:35:25 +00:00
|
|
|
} // namespace
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(test_constrained_device_args)
|
|
|
|
|
{
|
2018-01-18 00:02:55 +00:00
|
|
|
test_device_args_t test_dev_args("double_arg=3.5,bool_arg=0,foo=bar");
|
|
|
|
|
BOOST_CHECK_EQUAL(test_dev_args.get_double_arg(), 3.5);
|
2019-01-14 18:35:25 +00:00
|
|
|
BOOST_CHECK_EQUAL(test_dev_args.get_size_t_arg(), DEFAULT_SIZE_T_ARG);
|
2018-01-18 00:02:55 +00:00
|
|
|
BOOST_CHECK_EQUAL(test_dev_args.get_bool_arg(), false);
|
2019-01-14 18:35:25 +00:00
|
|
|
BOOST_CHECK_EQUAL(test_dev_args.get_enum_arg(), DEFAULT_ENUM_ARG);
|
|
|
|
|
BOOST_REQUIRE_THROW(test_dev_args.parse("double_arg=2e6"),
|
|
|
|
|
uhd::value_error); // Note: test_dev_args is now in a bad state until we fix it!
|
|
|
|
|
test_dev_args.parse("double_arg=2.6"), test_dev_args.parse("enum_arg=vaLue2");
|
|
|
|
|
BOOST_CHECK_EQUAL(test_dev_args.get_enum_arg(), VALUE2);
|
2018-01-18 00:02:55 +00:00
|
|
|
test_dev_args.parse("enum_arg=VALUE3");
|
2019-01-14 18:35:25 +00:00
|
|
|
BOOST_CHECK_EQUAL(test_dev_args.get_enum_arg(), VALUE3);
|
2018-01-18 00:02:55 +00:00
|
|
|
}
|