// // Copyright 2020 Ettus Research, a National Instruments Brand // // SPDX-License-Identifier: GPL-3.0-or-later // #include #include #include #include #include using namespace uhd::usrp::cal; BOOST_AUTO_TEST_CASE(test_pwr_cal_api) { const std::string name = "Mock Gain/Power Data"; const std::string serial = "ABC1234"; const uint64_t timestamp = 0x12340000; auto dsa_data = zbx_tx_dsa_cal::make(name, serial, timestamp); BOOST_CHECK_EQUAL(dsa_data->get_name(), name); BOOST_CHECK_EQUAL(dsa_data->get_serial(), serial); BOOST_CHECK_EQUAL(dsa_data->get_timestamp(), timestamp); BOOST_REQUIRE_THROW(dsa_data->get_dsa_setting(0, 0), uhd::runtime_error); std::array, 61> gains1{{{1, 2}, {3, 4}, {5, 6}}}; std::array, 61> gains2{{{7, 8}, {9, 0}, {1, 2}}}; dsa_data->add_frequency_band(1E9, "low", gains1); dsa_data->add_frequency_band(4E9, "high", gains2); auto expected = gains1[0]; auto calculated = dsa_data->get_dsa_setting(1E9, 0); BOOST_CHECK_EQUAL_COLLECTIONS(calculated.begin(), calculated.end(), expected.begin(), expected.end()); calculated = dsa_data->get_dsa_setting(1E8, 0); BOOST_CHECK_EQUAL_COLLECTIONS(calculated.begin(), calculated.end(), expected.begin(), expected.end()); expected = gains1[1]; calculated = dsa_data->get_dsa_setting(1E9, 1); BOOST_CHECK_EQUAL_COLLECTIONS(calculated.begin(), calculated.end(), expected.begin(), expected.end()); calculated = dsa_data->get_dsa_setting(1E8, 1); BOOST_CHECK_EQUAL_COLLECTIONS(calculated.begin(), calculated.end(), expected.begin(), expected.end()); expected = gains2[1]; calculated = dsa_data->get_dsa_setting(3E9, 1); BOOST_CHECK_EQUAL_COLLECTIONS(calculated.begin(), calculated.end(), expected.begin(), expected.end()); calculated = dsa_data->get_dsa_setting(4E9, 1); BOOST_CHECK_EQUAL_COLLECTIONS(calculated.begin(), calculated.end(), expected.begin(), expected.end()); BOOST_REQUIRE_THROW(dsa_data->get_dsa_setting(5E9, 1), uhd::value_error); } BOOST_AUTO_TEST_CASE(test_pwr_cal_serdes) { const std::string name = "Mock Gain/DSA Data"; const std::string serial = "FOOBAR"; const uint64_t timestamp = 0xCAFEBABE; auto cal_data = zbx_tx_dsa_cal::make(name, serial, timestamp); std::vector freqs{2e9, 6e9}; int i = 0; for (auto freq : freqs) { std::array, 61> gains; for (auto& gain : gains) { for (auto& step : gain) { step = i++; } } cal_data->add_frequency_band(freq, std::to_string(freq), gains); } const auto serialized = cal_data->serialize(); BOOST_REQUIRE_THROW(container::make(serialized), uhd::runtime_error); auto des_cal_data = container::make(serialized); BOOST_CHECK_EQUAL(des_cal_data->get_name(), cal_data->get_name()); BOOST_CHECK_EQUAL(des_cal_data->get_serial(), cal_data->get_serial()); BOOST_CHECK_EQUAL(des_cal_data->get_timestamp(), cal_data->get_timestamp()); } BOOST_AUTO_TEST_CASE(test_pwr_cal_des_fail) { std::vector not_actual_data(42, 23); BOOST_REQUIRE_THROW(container::make(not_actual_data), uhd::runtime_error); }