aboutsummaryrefslogtreecommitdiffstats
path: root/host/tests/property_test.cpp
diff options
context:
space:
mode:
authorAshish Chaudhari <ashish@ettus.com>2015-08-28 18:52:42 -0700
committerAshish Chaudhari <ashish@ettus.com>2016-02-11 14:36:20 -0800
commit834acb8b6ccaaab1701d0c48ead443b0fb17b8cf (patch)
tree07a51df4c2a1e6b6f08ab35277acdce920fb9807 /host/tests/property_test.cpp
parent27a08ccddc94c4945d48445b14c23fe6d186f9ef (diff)
downloaduhd-834acb8b6ccaaab1701d0c48ead443b0fb17b8cf.tar.gz
uhd-834acb8b6ccaaab1701d0c48ead443b0fb17b8cf.tar.bz2
uhd-834acb8b6ccaaab1701d0c48ead443b0fb17b8cf.zip
prop_tree: Added advanced coercion capability to property
- Added auto and manual coerce modes - Added set_coerced API for manual coercion - Added detailed doxy comments describing behavior of property class
Diffstat (limited to 'host/tests/property_test.cpp')
-rw-r--r--host/tests/property_test.cpp53
1 files changed, 52 insertions, 1 deletions
diff --git a/host/tests/property_test.cpp b/host/tests/property_test.cpp
index b7aa29e4b..61d1de9a6 100644
--- a/host/tests/property_test.cpp
+++ b/host/tests/property_test.cpp
@@ -28,18 +28,26 @@ struct coercer_type{
};
struct setter_type{
+ setter_type() : _count(0), _x(0) {}
+
void doit(int x){
+ _count++;
_x = x;
}
+ int _count;
int _x;
};
struct getter_type{
+ getter_type() : _count(0), _x(0) {}
+
int doit(void){
+ _count++;
return _x;
}
+ int _count;
int _x;
};
@@ -57,7 +65,25 @@ BOOST_AUTO_TEST_CASE(test_prop_simple){
BOOST_CHECK_EQUAL(prop.get(), 34);
}
-BOOST_AUTO_TEST_CASE(test_prop_with_subscriber){
+BOOST_AUTO_TEST_CASE(test_prop_with_desired_subscriber){
+ uhd::property_tree::sptr tree = uhd::property_tree::make();
+ uhd::property<int> &prop = tree->create<int>("/");
+
+ setter_type setter;
+ prop.add_desired_subscriber(boost::bind(&setter_type::doit, &setter, _1));
+
+ prop.set(42);
+ BOOST_CHECK_EQUAL(prop.get_desired(), 42);
+ BOOST_CHECK_EQUAL(prop.get(), 42);
+ BOOST_CHECK_EQUAL(setter._x, 42);
+
+ prop.set(34);
+ BOOST_CHECK_EQUAL(prop.get_desired(), 34);
+ BOOST_CHECK_EQUAL(prop.get(), 34);
+ BOOST_CHECK_EQUAL(setter._x, 34);
+}
+
+BOOST_AUTO_TEST_CASE(test_prop_with_coerced_subscriber){
uhd::property_tree::sptr tree = uhd::property_tree::make();
uhd::property<int> &prop = tree->create<int>("/");
@@ -65,14 +91,39 @@ BOOST_AUTO_TEST_CASE(test_prop_with_subscriber){
prop.add_coerced_subscriber(boost::bind(&setter_type::doit, &setter, _1));
prop.set(42);
+ BOOST_CHECK_EQUAL(prop.get_desired(), 42);
BOOST_CHECK_EQUAL(prop.get(), 42);
BOOST_CHECK_EQUAL(setter._x, 42);
prop.set(34);
+ BOOST_CHECK_EQUAL(prop.get_desired(), 34);
BOOST_CHECK_EQUAL(prop.get(), 34);
BOOST_CHECK_EQUAL(setter._x, 34);
}
+BOOST_AUTO_TEST_CASE(test_prop_manual_coercion){
+ uhd::property_tree::sptr tree = uhd::property_tree::make();
+ uhd::property<int> &prop = tree->create<int>("/", uhd::property_tree::MANUAL_COERCE);
+
+ setter_type dsetter, csetter;
+ prop.add_desired_subscriber(boost::bind(&setter_type::doit, &dsetter, _1));
+ prop.add_coerced_subscriber(boost::bind(&setter_type::doit, &csetter, _1));
+
+ BOOST_CHECK_EQUAL(dsetter._x, 0);
+ BOOST_CHECK_EQUAL(csetter._x, 0);
+
+ prop.set(42);
+ BOOST_CHECK_EQUAL(prop.get_desired(), 42);
+ BOOST_CHECK_EQUAL(dsetter._x, 42);
+ BOOST_CHECK_EQUAL(csetter._x, 0);
+
+ prop.set_coerced(34);
+ BOOST_CHECK_EQUAL(prop.get_desired(), 42);
+ BOOST_CHECK_EQUAL(prop.get(), 34);
+ BOOST_CHECK_EQUAL(dsetter._x, 42);
+ BOOST_CHECK_EQUAL(csetter._x, 34);
+}
+
BOOST_AUTO_TEST_CASE(test_prop_with_publisher){
uhd::property_tree::sptr tree = uhd::property_tree::make();
uhd::property<int> &prop = tree->create<int>("/");