6 #include <gtest/gtest.h>
12 typedef std::map<std::string, double>
KeyValue;
17 Index current_idx = 0;
18 for (KeyValue::const_iterator it =
kv.begin(); it !=
kv.end(); ++it, ++current_idx)
20 if (current_idx == index)
22 out_name = it->first.c_str();
30 assert(!name.empty());
31 std::cout <<
"ASSIGN [" << name.c_str() <<
"]\n" << value <<
"\n---" << std::endl;
32 KeyValue::iterator it =
kv.find(name.c_str());
35 if (value.is(Value::Tag::boolean_value))
37 assert(value.getTag() == Value::Tag::boolean_value);
38 it->second = double(value.boolean_value);
40 else if (value.is(Value::Tag::integer_value))
42 assert(value.getTag() == Value::Tag::integer_value);
43 it->second = double(value.integer_value);
45 else if (value.is(Value::Tag::real_value))
47 assert(value.getTag() == Value::Tag::real_value);
48 it->second = double(value.real_value);
50 else if (value.is(Value::Tag::string_value))
52 assert(value.getTag() == Value::Tag::string_value);
53 it->second = std::atof(value.string_value.c_str());
64 assert(!name.empty());
65 KeyValue::const_iterator it =
kv.find(name.c_str());
68 out_value.to<Value::Tag::real_value>() =
float(it->second);
69 assert(out_value.getTag() == Value::Tag::real_value);
71 std::cout <<
"READ [" << name.c_str() <<
"]\n" << out_value <<
"\n---" << std::endl;
76 std::cout <<
"SAVE" << std::endl;
82 std::cout <<
"ERASE" << std::endl;
88 template <
typename Client,
typename Message>
91 ASSERT_LE(0, client.call(1, request));
93 ASSERT_TRUE(client.collector.result.get());
94 ASSERT_TRUE(client.collector.result->isSuccessful());
110 ASSERT_LE(0, server.
start(&mgr));
118 uavcan::protocol::param::ExecuteOpcode::Request save_erase_rq;
119 save_erase_rq.opcode = uavcan::protocol::param::ExecuteOpcode::Request::OPCODE_SAVE;
120 doCall(save_erase_cln, save_erase_rq, nodes);
124 save_erase_rq.opcode = uavcan::protocol::param::ExecuteOpcode::Request::OPCODE_ERASE;
125 doCall(save_erase_cln, save_erase_rq, nodes);
129 save_erase_rq.opcode = 0xFF;
130 doCall(save_erase_cln, save_erase_rq, nodes);
136 uavcan::protocol::param::GetSet::Request get_set_rq;
137 get_set_rq.name =
"nonexistent_parameter";
138 doCall(get_set_cln, get_set_rq, nodes);
143 get_set_rq.index = 0;
144 get_set_rq.name.clear();
145 get_set_rq.value.to<uavcan::protocol::param::Value::Tag::integer_value>() = 0xDEADBEEF;
146 doCall(get_set_cln, get_set_rq, nodes);
148 ASSERT_TRUE(get_set_cln.
collector.
result->getResponse().value.is(uavcan::protocol::param::Value::Tag::empty));
150 mgr.
kv[
"foobar"] = 123.456;
153 get_set_rq = uavcan::protocol::param::GetSet::Request();
154 get_set_rq.name =
"foobar";
155 doCall(get_set_cln, get_set_rq, nodes);
156 ASSERT_STREQ(
"foobar", get_set_cln.
collector.
result->getResponse().name.c_str());
157 ASSERT_TRUE(get_set_cln.
collector.
result->getResponse().value.is(uavcan::protocol::param::Value::Tag::real_value));
158 ASSERT_FLOAT_EQ(123.456F, get_set_cln.
collector.
result->getResponse().value.
159 to<uavcan::protocol::param::Value::Tag::real_value>());
162 get_set_rq = uavcan::protocol::param::GetSet::Request();
163 get_set_rq.index = 0;
164 get_set_rq.value.to<uavcan::protocol::param::Value::Tag::string_value>() =
"424242";
165 doCall(get_set_cln, get_set_rq, nodes);
166 ASSERT_STREQ(
"foobar", get_set_cln.
collector.
result->getResponse().name.c_str());
167 ASSERT_FLOAT_EQ(424242, get_set_cln.
collector.
result->getResponse().value.
168 to<uavcan::protocol::param::Value::Tag::real_value>());
171 get_set_rq = uavcan::protocol::param::GetSet::Request();
172 get_set_rq.index = 0;
173 doCall(get_set_cln, get_set_rq, nodes);
174 ASSERT_STREQ(
"foobar", get_set_cln.
collector.
result->getResponse().name.c_str());
175 ASSERT_FLOAT_EQ(424242, get_set_cln.
collector.
result->getResponse().value.
176 to<uavcan::protocol::param::Value::Tag::real_value>());