diff options
Diffstat (limited to 'host')
-rw-r--r-- | host/tests/convert_test.cpp | 436 |
1 files changed, 259 insertions, 177 deletions
diff --git a/host/tests/convert_test.cpp b/host/tests/convert_test.cpp index 40ec51bd2..7fd3f2564 100644 --- a/host/tests/convert_test.cpp +++ b/host/tests/convert_test.cpp @@ -10,7 +10,9 @@ #include <stdint.h> // NOTE: <list> MUST be included before <boost/test/data/test_case.hpp> to // work around a bug in Boost 1.65. +// clang-format off #include <list> +// clang-format on #include <boost/test/data/test_case.hpp> #include <boost/test/unit_test.hpp> #include <array> @@ -66,17 +68,17 @@ const std::array<uhd::convert::priority_type, 5> CONV_PRIO_TYPES{-1, 0, 1, 2, 3} // specified after `--` to ensure it is passed directly to the test and not // interpreted by Boost.) #if (BOOST_VERSION < 106800) -#define SKIP_BENCHMARK_CHECK \ - if (!(boost::unit_test::framework::master_test_suite().argc >= 2 \ - && std::string(boost::unit_test::framework::master_test_suite().argv[1]) \ - == "--benchmark")) { \ - return; \ - } +# define SKIP_BENCHMARK_CHECK \ + if (!(boost::unit_test::framework::master_test_suite().argc >= 2 \ + && std::string(boost::unit_test::framework::master_test_suite().argv[1]) \ + == "--benchmark")) { \ + return; \ + } #else // For versions of Boost where this issue has been fixed, the benchmarks can // be enabled by invoking convert_test with `--run-test=+benchmark*` to // explicitly enable all the disabled benchmark tests. -#define SKIP_BENCHMARK_CHECK +# define SKIP_BENCHMARK_CHECK #endif // Shorthand for defining a test case that tests all prios. Creates a variable @@ -84,14 +86,14 @@ const std::array<uhd::convert::priority_type, 5> CONV_PRIO_TYPES{-1, 0, 1, 2, 3} #define MULTI_CONVERTER_TEST_CASE(test_name) \ BOOST_DATA_TEST_CASE(test_name, CONV_PRIO_TYPES, conv_prio_type) -#define MY_CHECK_CLOSE(a, b, f) \ - { \ - static bool error_encountered = false; \ - if(!error_encountered && (std::abs((a) - (b)) >= f)) { \ - BOOST_ERROR( \ - "\n\t" << #a << " (" << (a) << ") error " << #b << " (" << (b) << ")"); \ - error_encountered = true; \ - } \ +#define MY_CHECK_CLOSE(a, b, f) \ + { \ + static bool error_encountered = false; \ + if (!error_encountered && (std::abs((a) - (b)) >= f)) { \ + BOOST_ERROR( \ + "\n\t" << #a << " (" << (a) << ") error " << #b << " (" << (b) << ")"); \ + error_encountered = true; \ + } \ } // Given a converter ID describing a conversion from input type to @@ -130,11 +132,12 @@ static void loopback(size_t nsamps, // convert to intermediate type convert::converter::sptr c0 = convert::get_converter(in_id, prio_in)(); c0->set_scalar(32767.); - if(benchmark_data) { - const auto start_time = std::chrono::steady_clock::now(); + if (benchmark_data) { + const auto start_time = std::chrono::steady_clock::now(); c0->conv(input0, output0, nsamps); const auto end_time = std::chrono::steady_clock::now(); - const std::chrono::duration<double, std::nano> elapsed_in2out = end_time - start_time; + const std::chrono::duration<double, std::nano> elapsed_in2out = + end_time - start_time; benchmark_data->push_back({in_id, prio_in, elapsed_in2out.count(), nsamps}); } else { c0->conv(input0, output0, nsamps); @@ -143,11 +146,12 @@ static void loopback(size_t nsamps, // convert back to host type convert::converter::sptr c1 = convert::get_converter(out_id, prio_out)(); c1->set_scalar(1 / 32767.); - if(benchmark_data) { - const auto start_time = std::chrono::steady_clock::now(); + if (benchmark_data) { + const auto start_time = std::chrono::steady_clock::now(); c1->conv(input1, output1, nsamps); const auto end_time = std::chrono::steady_clock::now(); - const std::chrono::duration<double, std::nano> elapsed_out2in = end_time - start_time; + const std::chrono::duration<double, std::nano> elapsed_out2in = + end_time - start_time; benchmark_data->push_back({out_id, prio_out, elapsed_out2in.count(), nsamps}); } else { c1->conv(input1, output1, nsamps); @@ -168,16 +172,14 @@ static void loopback(size_t nsamps, // and prints out the results static void collate_benchmark_results(std::vector<benchmark_result> benchmarks) { - while(!benchmarks.empty()) - { + while (!benchmarks.empty()) { // Get the first entry from the per-iteration runs struct benchmark_result result = *(benchmarks.begin()); // Remove that entry from the list, and look for other entries in // the list that have the same converter and priority auto b_iter = benchmarks.erase(benchmarks.begin()); - while(b_iter != benchmarks.end()) - { - if(b_iter->id == result.id && b_iter->prio == result.prio) { + while (b_iter != benchmarks.end()) { + if (b_iter->id == result.id && b_iter->prio == result.prio) { // If a match is found, accumulate the elapsed time and // number of samples result.elapsed_ns += b_iter->elapsed_ns; @@ -190,8 +192,8 @@ static void collate_benchmark_results(std::vector<benchmark_result> benchmarks) } } double ns_per_sample = result.elapsed_ns / result.nsamps; - std::cout << "For converter " << result.id.to_string() << " prio " << result.prio << ": " << - ns_per_sample << " ns/sample" << std::endl; + std::cout << "For converter " << result.id.to_string() << " prio " << result.prio + << ": " << ns_per_sample << " ns/sample" << std::endl; } } @@ -201,24 +203,24 @@ static void collate_benchmark_results(std::vector<benchmark_result> benchmarks) * receive it as a parameter **********************************************************************/ template <typename ConverterFunction> -static void benchmark_converter( - convert::id_type id, +static void benchmark_converter(convert::id_type id, uhd::convert::priority_type prio, ConverterFunction&& converter_fn) { std::vector<benchmark_result> benchmarks; - for(size_t iter = 0; iter < BENCHMARK_NITERS; iter++) - { + for (size_t iter = 0; iter < BENCHMARK_NITERS; iter++) { std::vector<benchmark_result> benchmarks_iter; converter_fn(BENCHMARK_NSAMPS, id, prio, &benchmarks_iter); // Detect if the benchmark didn't run because the converter type // with the given priority wasn't found; if that's the case, bail // on the test case - if(benchmarks_iter.empty()) { + if (benchmarks_iter.empty()) { return; } // Save the results for this iteration - std::copy(benchmarks_iter.begin(), benchmarks_iter.end(), std::back_inserter(benchmarks)); + std::copy(benchmarks_iter.begin(), + benchmarks_iter.end(), + std::back_inserter(benchmarks)); } collate_benchmark_results(benchmarks); } @@ -229,23 +231,22 @@ static void benchmark_converter( * iterate them automatically (the test_convert_types_for_floats variant) **********************************************************************/ template <typename ConverterFunction> -static void benchmark_converter( - convert::id_type id, - ConverterFunction&& converter_fn) +static void benchmark_converter(convert::id_type id, ConverterFunction&& converter_fn) { std::vector<benchmark_result> benchmarks; - for(size_t iter = 0; iter < BENCHMARK_NITERS; iter++) - { + for (size_t iter = 0; iter < BENCHMARK_NITERS; iter++) { std::vector<benchmark_result> benchmarks_iter; converter_fn(BENCHMARK_NSAMPS, id, &benchmarks_iter); // Detect if the benchmark didn't run because the converter type // with the given priority wasn't found; if that's the case, bail // on the test case - if(benchmarks_iter.empty()) { + if (benchmarks_iter.empty()) { return; } // Save the results for this iteration - std::copy(benchmarks_iter.begin(), benchmarks_iter.end(), std::back_inserter(benchmarks)); + std::copy(benchmarks_iter.begin(), + benchmarks_iter.end(), + std::back_inserter(benchmarks)); } collate_benchmark_results(benchmarks); } @@ -256,14 +257,13 @@ static void benchmark_converter( static void test_convert_types_sc16(size_t nsamps, convert::id_type& id, uhd::convert::priority_type prio, - const int extra_div = 1, - int mask = 0xffff, + const int extra_div = 1, + int mask = 0xffff, std::vector<benchmark_result>* benchmark_data = nullptr) { // fill the input samples std::vector<sc16_t> input(nsamps), output(nsamps); - for (sc16_t& in : input) - { + for (sc16_t& in : input) { in = sc16_t( short((float((std::rand()) / (double(RAND_MAX) / 2)) - 1) * 32767 / extra_div) & mask, @@ -275,7 +275,7 @@ static void test_convert_types_sc16(size_t nsamps, convert::id_type in_id = id; convert::id_type out_id = reverse_converter(id); CALL_LOOPBACK_SAFE(nsamps, in_id, out_id, input, output, prio, prio, benchmark_data); - if(!benchmark_data) { + if (!benchmark_data) { BOOST_CHECK_EQUAL_COLLECTIONS( input.begin(), input.end(), output.begin(), output.end()); } @@ -306,9 +306,12 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_be_sc16) id.output_format = "sc16_item32_be"; id.num_outputs = 1; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_sc16(nsamps, id, prio, 1, 0xffff, benchmarks); }); } @@ -338,9 +341,12 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_le_sc16) id.output_format = "sc16_item32_le"; id.num_outputs = 1; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_sc16(nsamps, id, prio, 1, 0xffff, benchmarks); }); } @@ -363,16 +369,19 @@ BOOST_TEST_DECORATOR(*boost::unit_test::disabled()) MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_chdr_sc16) { SKIP_BENCHMARK_CHECK; - + convert::id_type id; id.input_format = "sc16"; id.num_inputs = 1; id.output_format = "sc16_chdr"; id.num_outputs = 1; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_sc16(nsamps, id, prio, 1, 0xffff, benchmarks); }); } @@ -383,15 +392,14 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_chdr_sc16) template <typename data_type> static void test_convert_types_for_floats(size_t nsamps, convert::id_type& id, - const double extra_scale = 1.0, + const double extra_scale = 1.0, std::vector<benchmark_result>* benchmark_data = nullptr) { typedef typename data_type::value_type value_type; // fill the input samples std::vector<data_type> input(nsamps), output(nsamps); - for (data_type& in : input) - { + for (data_type& in : input) { in = data_type( ((std::rand() / (value_type(RAND_MAX) / 2)) - 1) * float(extra_scale), ((std::rand() / (value_type(RAND_MAX) / 2)) - 1) * float(extra_scale)); @@ -408,7 +416,14 @@ static void test_convert_types_for_floats(size_t nsamps, // loopback foreach prio combo (generic vs best) for (const auto& prio : prios) { - CALL_LOOPBACK_SAFE(nsamps, in_id, out_id, input, output, prio.first, prio.second, benchmark_data); + CALL_LOOPBACK_SAFE(nsamps, + in_id, + out_id, + input, + output, + prio.first, + prio.second, + benchmark_data); for (size_t i = 0; i < nsamps && (!benchmark_data); i++) { MY_CHECK_CLOSE(input[i].real(), output[i].real(), value_type(1. / (1 << 14))); MY_CHECK_CLOSE(input[i].imag(), output[i].imag(), value_type(1. / (1 << 14))); @@ -417,22 +432,21 @@ static void test_convert_types_for_floats(size_t nsamps, } template <typename data_type> -static void test_convert_types_for_floats_with_saturation(size_t nsamps, - convert::id_type& id, - const double extra_scale = 1.0) +static void test_convert_types_for_floats_with_saturation( + size_t nsamps, convert::id_type& id, const double extra_scale = 1.0) { typedef typename data_type::value_type value_type; // fill the input samples std::vector<data_type> input(nsamps), output(nsamps), expected_output(nsamps); - for (size_t sample_count = 0; sample_count < nsamps; sample_count++) - { - value_type real_data = ((std::rand() / (value_type(RAND_MAX) / 2)) - 1) * float(extra_scale); - value_type imag_data = ((std::rand() / (value_type(RAND_MAX) / 2)) - 1) * float(extra_scale); + for (size_t sample_count = 0; sample_count < nsamps; sample_count++) { + value_type real_data = + ((std::rand() / (value_type(RAND_MAX) / 2)) - 1) * float(extra_scale); + value_type imag_data = + ((std::rand() / (value_type(RAND_MAX) / 2)) - 1) * float(extra_scale); value_type expected_real_data = real_data; value_type expected_imag_data = imag_data; - if(sample_count & 1) - { + if (sample_count & 1) { // To ensure that some samples are out of range and thus should be // saturated, every alternating sample's real and imaginary values // are pushed outside of the [-1..1] range. @@ -444,7 +458,7 @@ static void test_convert_types_for_floats_with_saturation(size_t nsamps, expected_real_data = (real_data < 0.0) ? -1.0 : 1.0; expected_imag_data = (imag_data < 0.0) ? -1.0 : 1.0; } - input[sample_count] = data_type(real_data, imag_data); + input[sample_count] = data_type(real_data, imag_data); expected_output[sample_count] = data_type(expected_real_data, expected_imag_data); } @@ -463,8 +477,10 @@ static void test_convert_types_for_floats_with_saturation(size_t nsamps, for (const auto& prio : prios) { CALL_LOOPBACK_SAFE(nsamps, in_id, out_id, input, output, prio.first, prio.second); for (size_t i = 0; i < nsamps; i++) { - MY_CHECK_CLOSE(expected_output[i].real(), output[i].real(), value_type(1. / (1 << 14))); - MY_CHECK_CLOSE(expected_output[i].imag(), output[i].imag(), value_type(1. / (1 << 14))); + MY_CHECK_CLOSE( + expected_output[i].real(), output[i].real(), value_type(1. / (1 << 14))); + MY_CHECK_CLOSE( + expected_output[i].imag(), output[i].imag(), value_type(1. / (1 << 14))); } } } @@ -501,7 +517,7 @@ BOOST_TEST_DECORATOR(*boost::unit_test::disabled()) BOOST_AUTO_TEST_CASE(benchmark_convert_types_be_fc32) { SKIP_BENCHMARK_CHECK; - + convert::id_type id; id.input_format = "fc32"; id.num_inputs = 1; @@ -509,8 +525,9 @@ BOOST_AUTO_TEST_CASE(benchmark_convert_types_be_fc32) id.num_outputs = 1; benchmark_converter(id, - [](size_t nsamps, convert::id_type id, std::vector<benchmark_result>* benchmarks) - { + [](size_t nsamps, + convert::id_type id, + std::vector<benchmark_result>* benchmarks) { test_convert_types_for_floats<fc32_t>(nsamps, id, 1.0, benchmarks); }); } @@ -547,7 +564,7 @@ BOOST_TEST_DECORATOR(*boost::unit_test::disabled()) BOOST_AUTO_TEST_CASE(benchmark_convert_types_le_fc32) { SKIP_BENCHMARK_CHECK; - + convert::id_type id; id.input_format = "fc32"; id.num_inputs = 1; @@ -555,8 +572,9 @@ BOOST_AUTO_TEST_CASE(benchmark_convert_types_le_fc32) id.num_outputs = 1; benchmark_converter(id, - [](size_t nsamps, convert::id_type id, std::vector<benchmark_result>* benchmarks) - { + [](size_t nsamps, + convert::id_type id, + std::vector<benchmark_result>* benchmarks) { test_convert_types_for_floats<fc32_t>(nsamps, id, 1.0, benchmarks); }); } @@ -593,7 +611,7 @@ BOOST_TEST_DECORATOR(*boost::unit_test::disabled()) BOOST_AUTO_TEST_CASE(benchmark_convert_types_chdr_fc32) { SKIP_BENCHMARK_CHECK; - + convert::id_type id; id.input_format = "fc32"; id.num_inputs = 1; @@ -601,8 +619,9 @@ BOOST_AUTO_TEST_CASE(benchmark_convert_types_chdr_fc32) id.num_outputs = 1; benchmark_converter(id, - [](size_t nsamps, convert::id_type id, std::vector<benchmark_result>* benchmarks) - { + [](size_t nsamps, + convert::id_type id, + std::vector<benchmark_result>* benchmarks) { test_convert_types_for_floats<fc32_t>(nsamps, id, 1.0, benchmarks); }); } @@ -639,7 +658,7 @@ BOOST_TEST_DECORATOR(*boost::unit_test::disabled()) BOOST_AUTO_TEST_CASE(benchmark_convert_types_be_fc64) { SKIP_BENCHMARK_CHECK; - + convert::id_type id; id.input_format = "fc64"; id.num_inputs = 1; @@ -647,8 +666,9 @@ BOOST_AUTO_TEST_CASE(benchmark_convert_types_be_fc64) id.num_outputs = 1; benchmark_converter(id, - [](size_t nsamps, convert::id_type id, std::vector<benchmark_result>* benchmarks) - { + [](size_t nsamps, + convert::id_type id, + std::vector<benchmark_result>* benchmarks) { test_convert_types_for_floats<fc64_t>(nsamps, id, 1.0, benchmarks); }); } @@ -685,7 +705,7 @@ BOOST_TEST_DECORATOR(*boost::unit_test::disabled()) BOOST_AUTO_TEST_CASE(benchmark_convert_types_le_fc64) { SKIP_BENCHMARK_CHECK; - + convert::id_type id; id.input_format = "fc64"; id.num_inputs = 1; @@ -693,8 +713,9 @@ BOOST_AUTO_TEST_CASE(benchmark_convert_types_le_fc64) id.num_outputs = 1; benchmark_converter(id, - [](size_t nsamps, convert::id_type id, std::vector<benchmark_result>* benchmarks) - { + [](size_t nsamps, + convert::id_type id, + std::vector<benchmark_result>* benchmarks) { test_convert_types_for_floats<fc64_t>(nsamps, id, 1.0, benchmarks); }); } @@ -731,7 +752,7 @@ BOOST_TEST_DECORATOR(*boost::unit_test::disabled()) BOOST_AUTO_TEST_CASE(benchmark_convert_types_chdr_fc64) { SKIP_BENCHMARK_CHECK; - + convert::id_type id; id.input_format = "fc64"; id.num_inputs = 1; @@ -739,8 +760,9 @@ BOOST_AUTO_TEST_CASE(benchmark_convert_types_chdr_fc64) id.num_outputs = 1; benchmark_converter(id, - [](size_t nsamps, convert::id_type id, std::vector<benchmark_result>* benchmarks) - { + [](size_t nsamps, + convert::id_type id, + std::vector<benchmark_result>* benchmarks) { test_convert_types_for_floats<fc64_t>(nsamps, id, 1.0, benchmarks); }); } @@ -767,7 +789,7 @@ BOOST_TEST_DECORATOR(*boost::unit_test::disabled()) BOOST_AUTO_TEST_CASE(benchmark_convert_types_le_sc12_with_fc32) { SKIP_BENCHMARK_CHECK; - + convert::id_type id; id.input_format = "fc32"; id.num_inputs = 1; @@ -775,8 +797,9 @@ BOOST_AUTO_TEST_CASE(benchmark_convert_types_le_sc12_with_fc32) id.num_outputs = 1; benchmark_converter(id, - [](size_t nsamps, convert::id_type id, std::vector<benchmark_result>* benchmarks) - { + [](size_t nsamps, + convert::id_type id, + std::vector<benchmark_result>* benchmarks) { test_convert_types_for_floats<fc32_t>(nsamps, id, 1. / 16, benchmarks); }); } @@ -799,7 +822,7 @@ BOOST_TEST_DECORATOR(*boost::unit_test::disabled()) BOOST_AUTO_TEST_CASE(benchmark_convert_types_be_sc12_with_fc32) { SKIP_BENCHMARK_CHECK; - + convert::id_type id; id.input_format = "fc32"; id.num_inputs = 1; @@ -807,8 +830,9 @@ BOOST_AUTO_TEST_CASE(benchmark_convert_types_be_sc12_with_fc32) id.num_outputs = 1; benchmark_converter(id, - [](size_t nsamps, convert::id_type id, std::vector<benchmark_result>* benchmarks) - { + [](size_t nsamps, + convert::id_type id, + std::vector<benchmark_result>* benchmarks) { test_convert_types_for_floats<fc32_t>(nsamps, id, 1. / 16, benchmarks); }); } @@ -839,9 +863,12 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_le_sc16_and_sc12) // try various lengths to test edge cases id.output_format = "sc12_item32_le"; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_sc16(nsamps, id, prio, 1, 0xfff0, benchmarks); }); } @@ -870,9 +897,12 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_be_sc16_and_sc12) id.num_outputs = 1; id.output_format = "sc12_item32_be"; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_sc16(nsamps, id, prio, 1, 0xfff0, benchmarks); }); } @@ -899,7 +929,7 @@ BOOST_TEST_DECORATOR(*boost::unit_test::disabled()) BOOST_AUTO_TEST_CASE(benchmark_convert_types_le_fc32_with_fc32) { SKIP_BENCHMARK_CHECK; - + convert::id_type id; id.input_format = "fc32"; id.num_inputs = 1; @@ -907,8 +937,9 @@ BOOST_AUTO_TEST_CASE(benchmark_convert_types_le_fc32_with_fc32) id.num_outputs = 1; benchmark_converter(id, - [](size_t nsamps, convert::id_type id, std::vector<benchmark_result>* benchmarks) - { + [](size_t nsamps, + convert::id_type id, + std::vector<benchmark_result>* benchmarks) { test_convert_types_for_floats<fc32_t>(nsamps, id, 1.0, benchmarks); }); } @@ -931,7 +962,7 @@ BOOST_TEST_DECORATOR(*boost::unit_test::disabled()) BOOST_AUTO_TEST_CASE(benchmark_convert_types_be_fc32_with_fc32) { SKIP_BENCHMARK_CHECK; - + convert::id_type id; id.input_format = "fc32"; id.num_inputs = 1; @@ -939,8 +970,9 @@ BOOST_AUTO_TEST_CASE(benchmark_convert_types_be_fc32_with_fc32) id.num_outputs = 1; benchmark_converter(id, - [](size_t nsamps, convert::id_type id, std::vector<benchmark_result>* benchmarks) - { + [](size_t nsamps, + convert::id_type id, + std::vector<benchmark_result>* benchmarks) { test_convert_types_for_floats<fc32_t>(nsamps, id, 1.0, benchmarks); }); } @@ -963,7 +995,7 @@ BOOST_TEST_DECORATOR(*boost::unit_test::disabled()) BOOST_AUTO_TEST_CASE(benchmark_convert_types_fc32_with_fc32_chdr) { SKIP_BENCHMARK_CHECK; - + convert::id_type id; id.input_format = "fc32"; id.num_inputs = 1; @@ -971,8 +1003,9 @@ BOOST_AUTO_TEST_CASE(benchmark_convert_types_fc32_with_fc32_chdr) id.num_outputs = 1; benchmark_converter(id, - [](size_t nsamps, convert::id_type id, std::vector<benchmark_result>* benchmarks) - { + [](size_t nsamps, + convert::id_type id, + std::vector<benchmark_result>* benchmarks) { test_convert_types_for_floats<fc32_t>(nsamps, id, 1.0, benchmarks); }); } @@ -1004,7 +1037,7 @@ BOOST_TEST_DECORATOR(*boost::unit_test::disabled()) BOOST_AUTO_TEST_CASE(benchmark_convert_types_fc64_and_sc8) { SKIP_BENCHMARK_CHECK; - + convert::id_type id; id.input_format = "fc64"; id.num_inputs = 1; @@ -1012,15 +1045,17 @@ BOOST_AUTO_TEST_CASE(benchmark_convert_types_fc64_and_sc8) id.output_format = "sc8_item32_le"; benchmark_converter(id, - [](size_t nsamps, convert::id_type id, std::vector<benchmark_result>* benchmarks) - { + [](size_t nsamps, + convert::id_type id, + std::vector<benchmark_result>* benchmarks) { test_convert_types_for_floats<fc64_t>(nsamps, id, 1. / 256, benchmarks); }); id.output_format = "sc8_item32_be"; benchmark_converter(id, - [](size_t nsamps, convert::id_type id, std::vector<benchmark_result>* benchmarks) - { + [](size_t nsamps, + convert::id_type id, + std::vector<benchmark_result>* benchmarks) { test_convert_types_for_floats<fc64_t>(nsamps, id, 1. / 256, benchmarks); }); } @@ -1049,7 +1084,7 @@ BOOST_TEST_DECORATOR(*boost::unit_test::disabled()) BOOST_AUTO_TEST_CASE(benchmark_convert_types_fc32_and_sc8) { SKIP_BENCHMARK_CHECK; - + convert::id_type id; id.input_format = "fc32"; id.num_inputs = 1; @@ -1057,16 +1092,18 @@ BOOST_AUTO_TEST_CASE(benchmark_convert_types_fc32_and_sc8) id.output_format = "sc8_item32_le"; benchmark_converter(id, - [](size_t nsamps, convert::id_type id, std::vector<benchmark_result>* benchmarks) - { + [](size_t nsamps, + convert::id_type id, + std::vector<benchmark_result>* benchmarks) { test_convert_types_for_floats<fc32_t>(nsamps, id, 1. / 256, benchmarks); }); // try various lengths to test edge cases id.output_format = "sc8_item32_be"; benchmark_converter(id, - [](size_t nsamps, convert::id_type id, std::vector<benchmark_result>* benchmarks) - { + [](size_t nsamps, + convert::id_type id, + std::vector<benchmark_result>* benchmarks) { test_convert_types_for_floats<fc32_t>(nsamps, id, 1. / 256, benchmarks); }); } @@ -1102,16 +1139,22 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_sc16_and_sc8) id.num_outputs = 1; id.output_format = "sc8_item32_le"; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_sc16(nsamps, id, prio, 256, 0xffff, benchmarks); }); id.output_format = "sc8_item32_be"; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_sc16(nsamps, id, prio, 256, 0xffff, benchmarks); }); } @@ -1119,8 +1162,9 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_sc16_and_sc8) /*********************************************************************** * Test u8 conversion **********************************************************************/ -static void test_convert_types_u8( - size_t nsamps, convert::id_type& id, uhd::convert::priority_type prio, +static void test_convert_types_u8(size_t nsamps, + convert::id_type& id, + uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmark_data = nullptr) { // fill the input samples @@ -1135,7 +1179,7 @@ static void test_convert_types_u8( convert::id_type in_id = id; convert::id_type out_id = reverse_converter(id); CALL_LOOPBACK_SAFE(nsamps, in_id, out_id, input, output, prio, prio, benchmark_data); - if(!benchmark_data) { + if (!benchmark_data) { BOOST_CHECK_EQUAL_COLLECTIONS( input.begin(), input.end(), output.begin(), output.end()); } @@ -1172,17 +1216,23 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_u8_and_u8) id.num_outputs = 1; id.output_format = "u8_item32_le"; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_u8(nsamps, id, prio, benchmarks); }); // try various lengths to test edge cases id.output_format = "u8_item32_be"; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_u8(nsamps, id, prio, benchmarks); }); } @@ -1212,9 +1262,12 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_u8_and_u8_chdr) id.num_inputs = 1; id.num_outputs = 1; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_u8(nsamps, id, prio, benchmarks); }); } @@ -1222,8 +1275,9 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_u8_and_u8_chdr) /*********************************************************************** * Test s8 conversion **********************************************************************/ -static void test_convert_types_s8( - size_t nsamps, convert::id_type& id, uhd::convert::priority_type prio, +static void test_convert_types_s8(size_t nsamps, + convert::id_type& id, + uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmark_data = nullptr) { // fill the input samples @@ -1236,10 +1290,10 @@ static void test_convert_types_s8( convert::id_type in_id = id; convert::id_type out_id = reverse_converter(id); CALL_LOOPBACK_SAFE(nsamps, in_id, out_id, input, output, prio, prio, benchmark_data); - if(!benchmark_data) { + if (!benchmark_data) { BOOST_CHECK_EQUAL_COLLECTIONS( input.begin(), input.end(), output.begin(), output.end()); - } + } } MULTI_CONVERTER_TEST_CASE(test_convert_types_s8_and_s8) @@ -1274,17 +1328,23 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_s8_and_s8) // try various lengths to test edge cases id.output_format = "s8_item32_le"; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_s8(nsamps, id, prio, benchmarks); }); // try various lengths to test edge cases id.output_format = "s8_item32_be"; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_s8(nsamps, id, prio, benchmarks); }); } @@ -1314,9 +1374,12 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_s8_and_s8_chdr) id.num_inputs = 1; id.num_outputs = 1; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_s8(nsamps, id, prio, benchmarks); }); } @@ -1324,8 +1387,9 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_s8_and_s8_chdr) /*********************************************************************** * Test s16 conversion **********************************************************************/ -static void test_convert_types_s16( - size_t nsamps, convert::id_type& id, uhd::convert::priority_type prio, +static void test_convert_types_s16(size_t nsamps, + convert::id_type& id, + uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmark_data = nullptr) { // fill the input samples @@ -1338,7 +1402,7 @@ static void test_convert_types_s16( convert::id_type in_id = id; convert::id_type out_id = reverse_converter(id); CALL_LOOPBACK_SAFE(nsamps, in_id, out_id, input, output, prio, prio, benchmark_data); - if(!benchmark_data) { + if (!benchmark_data) { BOOST_CHECK_EQUAL_COLLECTIONS( input.begin(), input.end(), output.begin(), output.end()); } @@ -1375,17 +1439,23 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_s16_and_s16) id.num_outputs = 1; id.output_format = "s16_item32_le"; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_s16(nsamps, id, prio, benchmarks); }); // try various lengths to test edge cases id.output_format = "s16_item32_be"; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_s16(nsamps, id, prio, benchmarks); }); } @@ -1415,9 +1485,12 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_s16_and_s16_chdr) id.num_inputs = 1; id.num_outputs = 1; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_s16(nsamps, id, prio, benchmarks); }); } @@ -1425,14 +1498,14 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_s16_and_s16_chdr) /*********************************************************************** * Test fc32 -> fc32 conversion **********************************************************************/ -static void test_convert_types_fc32( - size_t nsamps, convert::id_type& id, uhd::convert::priority_type prio, +static void test_convert_types_fc32(size_t nsamps, + convert::id_type& id, + uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmark_data = nullptr) { // fill the input samples std::vector<std::complex<float>> input(nsamps), output(nsamps); - for (fc32_t& in : input) - { + for (fc32_t& in : input) { in = fc32_t((std::rand() / float(RAND_MAX / 2)) - 1, (std::rand() / float(RAND_MAX / 2)) - 1); } @@ -1478,16 +1551,22 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_fc32_and_fc32) id.num_outputs = 1; id.output_format = "fc32_item32_le"; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_fc32(nsamps, id, prio, benchmarks); }); id.output_format = "fc32_item32_be"; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_fc32(nsamps, id, prio, benchmarks); }); } @@ -1518,9 +1597,12 @@ MULTI_CONVERTER_TEST_CASE(benchmark_convert_types_fc32_and_fc32_chdr) id.num_outputs = 1; id.output_format = "fc32_item32_be"; - benchmark_converter(id, conv_prio_type, - [](size_t nsamps, convert::id_type id, uhd::convert::priority_type prio, std::vector<benchmark_result>* benchmarks) - { + benchmark_converter(id, + conv_prio_type, + [](size_t nsamps, + convert::id_type id, + uhd::convert::priority_type prio, + std::vector<benchmark_result>* benchmarks) { test_convert_types_fc32(nsamps, id, prio, benchmarks); }); } |