diff options
Diffstat (limited to 'host/tests/rfnoc_propprop_test.cpp')
-rw-r--r-- | host/tests/rfnoc_propprop_test.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/host/tests/rfnoc_propprop_test.cpp b/host/tests/rfnoc_propprop_test.cpp index 1b9b94b05..20d7d96f5 100644 --- a/host/tests/rfnoc_propprop_test.cpp +++ b/host/tests/rfnoc_propprop_test.cpp @@ -111,6 +111,52 @@ private: property_t<double> _out{"out", 2.0, {res_source_info::OUTPUT_EDGE}}; }; +/*! Mock node, circular prop deps + */ +class mock_circular_prop_node_t : public node_t +{ +public: + mock_circular_prop_node_t() + { + register_property(&_x1); + register_property(&_x2); + register_property(&_x4); + + add_property_resolver({&_x1}, {&_x2}, [this]() { + RFNOC_LOG_INFO("Calling resolver for _x1"); + _x2 = 2.0 * _x1.get(); + }); + add_property_resolver({&_x2}, {&_x4}, [this]() { + RFNOC_LOG_INFO("Calling resolver for _x2"); + _x4 = 2.0 * _x2.get(); + }); + add_property_resolver({&_x4}, {&_x1}, [this]() { + RFNOC_LOG_INFO("Calling resolver for _x4"); + _x1 = _x4.get() / 4.0; + }); + } + + size_t get_num_input_ports() const + { + return 1; + } + + size_t get_num_output_ports() const + { + return 1; + } + + std::string get_unique_id() const + { + return "MOCK_CIRCULAR_PROPS"; + } + + property_t<double> _x1{"x1", 1.0, {res_source_info::USER}}; + property_t<double> _x2{"x2", 2.0, {res_source_info::USER}}; + property_t<double> _x4{"x4", 4.0, {res_source_info::USER}}; +}; + + // Do some sanity checks on the mock just so we don't get surprised later BOOST_AUTO_TEST_CASE(test_mock) { @@ -364,3 +410,17 @@ BOOST_AUTO_TEST_CASE(test_graph_crisscross_fifo) UHD_LOG_INFO("TEST", "Now testing criss-cross prop resolution"); graph.initialize(); } + +BOOST_AUTO_TEST_CASE(test_circular_deps) +{ + node_accessor_t node_accessor{}; + // Define some mock nodes: + // Source radios + mock_circular_prop_node_t mock_circular_prop_node{}; + + // These init calls would normally be done by the framework + node_accessor.init_props(&mock_circular_prop_node); + + mock_circular_prop_node.set_property<double>("x1", 5.0, 0); + BOOST_CHECK_EQUAL(mock_circular_prop_node.get_property<double>("x4"), 4 * 5.0); +} |