diff options
author | Martin Braun <martin.braun@ettus.com> | 2021-04-29 11:27:21 +0200 |
---|---|---|
committer | Aaron Rossetto <aaron.rossetto@ni.com> | 2021-05-04 14:34:44 -0500 |
commit | 87de94748ad5324024adb7d149878d7b6c92e71a (patch) | |
tree | 300eabe79c8dadd7025ec1e8854236206fe5ab48 /host/tests/expert_test.cpp | |
parent | 1a213267a080ea7f1c364ff3afefdf6e9e4cb509 (diff) | |
download | uhd-87de94748ad5324024adb7d149878d7b6c92e71a.tar.gz uhd-87de94748ad5324024adb7d149878d7b6c92e71a.tar.bz2 uhd-87de94748ad5324024adb7d149878d7b6c92e71a.zip |
experts: Change coercion policy for regular prop nodes
The experts framework has two ways of integrating expert nodes into the
property tree: add_prop_node() and add_dual_prop_node(). In the latter
case, the experts should take care of coercion, and thus, we subscribe
to the desired value.
In the former case, this is not necessary, and precludes us from using
set_coercer() with prop nodes on the prop tree. This change lets us use
regular nodes in the expert framework that also use property tree
coercers.
As of now, there is not a single property node in UHD that uses
add_prop_node() and also does any kind of coercion, so this change has
no effect on current code (this is only used in TwinRX as of now).
Diffstat (limited to 'host/tests/expert_test.cpp')
-rw-r--r-- | host/tests/expert_test.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/host/tests/expert_test.cpp b/host/tests/expert_test.cpp index a23c9cbb8..8ca60477a 100644 --- a/host/tests/expert_test.cpp +++ b/host/tests/expert_test.cpp @@ -187,6 +187,9 @@ BOOST_AUTO_TEST_CASE(test_experts) expert_factory::add_data_node<int>(container, "F", 0); expert_factory::add_data_node<int>(container, "G", 0); + // B also gets a coercer. It coerces 4 to 3. + tree->access<int>("B").set_coercer([](const int b) { return b == 4 ? 3 : b; }); + // Add worker nodes to container expert_factory::add_worker_node<worker1_t>(container, container->node_retriever()); expert_factory::add_worker_node<worker2_t>(container, container->node_retriever()); @@ -225,11 +228,11 @@ BOOST_AUTO_TEST_CASE(test_experts) BOOST_CHECK(nodeF.is_dirty()); BOOST_CHECK(nodeG.is_dirty()); container->resolve_all(); - VALIDATE_ALL_DEPENDENCIES // Ensure a default resolve + VALIDATE_ALL_DEPENDENCIES; // Ensure a default resolve + + // Ensure basic node value propagation + tree->access<int>("B").set(4); // Set it 4, but that will get coerced to 3 - // Ensure basic node value propagation - tree->access<int>("B") - .set(3); BOOST_CHECK(nodeB.get() == 3); // Ensure value propagated BOOST_CHECK(nodeB.is_dirty()); // Ensure that nothing got resolved... container->resolve_all(); |