diff options
| author | Ashish Chaudhari <ashish@ettus.com> | 2015-08-28 18:52:42 -0700 | 
|---|---|---|
| committer | Ashish Chaudhari <ashish@ettus.com> | 2016-02-11 14:36:20 -0800 | 
| commit | 834acb8b6ccaaab1701d0c48ead443b0fb17b8cf (patch) | |
| tree | 07a51df4c2a1e6b6f08ab35277acdce920fb9807 /host/tests | |
| parent | 27a08ccddc94c4945d48445b14c23fe6d186f9ef (diff) | |
| download | uhd-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')
| -rw-r--r-- | host/tests/property_test.cpp | 53 | 
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>("/");  | 
