aboutsummaryrefslogtreecommitdiffstats
path: root/host/tests
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2019-07-18 14:36:14 -0700
committerMartin Braun <martin.braun@ettus.com>2019-11-26 11:49:10 -0800
commitfed32af0806a730e0f4202003dc49cb736c832fb (patch)
treefa36c54ff0af16ede9e1c2125d6432a4ef65e6ab /host/tests
parent93d8c6f83b35ca08b009a02b7109e09f4e4e43b1 (diff)
downloaduhd-fed32af0806a730e0f4202003dc49cb736c832fb.tar.gz
uhd-fed32af0806a730e0f4202003dc49cb736c832fb.tar.bz2
uhd-fed32af0806a730e0f4202003dc49cb736c832fb.zip
convert: Add CHDR converters
The difference between the _chdr converters and the _item32_ converters is that the former do not require item32 boundaries, they do not require endianness swapping, and they don't use IQ swapping either. This is possible because the FPGA will do byte-swapping.
Diffstat (limited to 'host/tests')
-rw-r--r--host/tests/convert_test.cpp133
1 files changed, 102 insertions, 31 deletions
diff --git a/host/tests/convert_test.cpp b/host/tests/convert_test.cpp
index 67409e310..9bdfbef6c 100644
--- a/host/tests/convert_test.cpp
+++ b/host/tests/convert_test.cpp
@@ -110,6 +110,20 @@ BOOST_AUTO_TEST_CASE(test_convert_types_le_sc16)
}
}
+BOOST_AUTO_TEST_CASE(test_convert_types_chdr_sc16)
+{
+ convert::id_type id;
+ id.input_format = "sc16";
+ id.num_inputs = 1;
+ id.output_format = "sc16_chdr";
+ id.num_outputs = 1;
+
+ // try various lengths to test edge cases
+ for (size_t nsamps = 1; nsamps < 16; nsamps++) {
+ test_convert_types_sc16(nsamps, id);
+ }
+}
+
/***********************************************************************
* Test float conversion
**********************************************************************/
@@ -175,6 +189,20 @@ BOOST_AUTO_TEST_CASE(test_convert_types_le_fc32)
}
}
+BOOST_AUTO_TEST_CASE(test_convert_types_chdr_fc32)
+{
+ convert::id_type id;
+ id.input_format = "fc32";
+ id.num_inputs = 1;
+ id.output_format = "sc16_chdr";
+ id.num_outputs = 1;
+
+ // try various lengths to test edge cases
+ for (size_t nsamps = 1; nsamps < 16; nsamps++) {
+ test_convert_types_for_floats<fc32_t>(nsamps, id);
+ }
+}
+
BOOST_AUTO_TEST_CASE(test_convert_types_be_fc64)
{
convert::id_type id;
@@ -203,6 +231,20 @@ BOOST_AUTO_TEST_CASE(test_convert_types_le_fc64)
}
}
+BOOST_AUTO_TEST_CASE(test_convert_types_chdr_fc64)
+{
+ convert::id_type id;
+ id.input_format = "fc64";
+ id.num_inputs = 1;
+ id.output_format = "sc16_chdr";
+ id.num_outputs = 1;
+
+ // try various lengths to test edge cases
+ for (size_t nsamps = 1; nsamps < 16; nsamps++) {
+ test_convert_types_for_floats<fc64_t>(nsamps, id);
+ }
+}
+
/***********************************************************************
* Test float to/from sc12 conversion loopback
**********************************************************************/
@@ -294,6 +336,20 @@ BOOST_AUTO_TEST_CASE(test_convert_types_be_fc32_with_fc32)
}
}
+BOOST_AUTO_TEST_CASE(test_convert_types_fc32_with_fc32_chdr)
+{
+ convert::id_type id;
+ id.input_format = "fc32";
+ id.num_inputs = 1;
+ id.output_format = "fc32_chdr";
+ id.num_outputs = 1;
+
+ // try various lengths to test edge cases
+ for (size_t nsamps = 1; nsamps < 16; nsamps++) {
+ test_convert_types_for_floats<fc32_t>(nsamps, id);
+ }
+}
+
/***********************************************************************
* Test float to short conversion loopback
**********************************************************************/
@@ -488,6 +544,20 @@ BOOST_AUTO_TEST_CASE(test_convert_types_u8_and_u8)
}
}
+BOOST_AUTO_TEST_CASE(test_convert_types_u8_and_u8_chdr)
+{
+ convert::id_type id;
+ id.input_format = "u8";
+ id.output_format = "u8_chdr";
+ id.num_inputs = 1;
+ id.num_outputs = 1;
+
+ // try various lengths to test edge cases
+ for (size_t nsamps = 1; nsamps < 16; nsamps++) {
+ test_convert_types_u8(nsamps, id);
+ }
+}
+
/***********************************************************************
* Test s8 conversion
**********************************************************************/
@@ -528,6 +598,20 @@ BOOST_AUTO_TEST_CASE(test_convert_types_s8_and_s8)
}
}
+BOOST_AUTO_TEST_CASE(test_convert_types_s8_and_s8_chdr)
+{
+ convert::id_type id;
+ id.input_format = "s8";
+ id.output_format = "s8_chdr";
+ id.num_inputs = 1;
+ id.num_outputs = 1;
+
+ // try various lengths to test edge cases
+ for (size_t nsamps = 1; nsamps < 16; nsamps++) {
+ test_convert_types_s8(nsamps, id);
+ }
+}
+
/***********************************************************************
* Test s16 conversion
**********************************************************************/
@@ -568,6 +652,20 @@ BOOST_AUTO_TEST_CASE(test_convert_types_s16_and_s16)
}
}
+BOOST_AUTO_TEST_CASE(test_convert_types_s16_and_s16_chdr)
+{
+ convert::id_type id;
+ id.input_format = "s16";
+ id.output_format = "s16_chdr";
+ id.num_inputs = 1;
+ id.num_outputs = 1;
+
+ // try various lengths to test edge cases
+ for (size_t nsamps = 1; nsamps < 16; nsamps++) {
+ test_convert_types_s16(nsamps, id);
+ }
+}
+
/***********************************************************************
* Test fc32 -> fc32 conversion
**********************************************************************/
@@ -611,43 +709,16 @@ BOOST_AUTO_TEST_CASE(test_convert_types_fc32_and_fc32)
}
}
-/***********************************************************************
- * Test f32 -> f32 conversion
- **********************************************************************/
-static void test_convert_types_f32(size_t nsamps, convert::id_type& id)
-{
- // fill the input samples
- std::vector<float> input(nsamps), output(nsamps);
- for (float& in : input)
- in = float((float(std::rand()) / float(RAND_MAX / 2)) - 1);
-
- // run the loopback and test
- convert::id_type in_id = id;
- convert::id_type out_id = id;
- std::swap(out_id.input_format, out_id.output_format);
- std::swap(out_id.num_inputs, out_id.num_outputs);
- loopback(nsamps, in_id, out_id, input, output);
- for (size_t i = 0; i < nsamps; i++) {
- MY_CHECK_CLOSE(input[i], output[i], float(1. / (1 << 16)));
- }
-}
-
-BOOST_AUTO_TEST_CASE(test_convert_types_f32_and_f32)
+BOOST_AUTO_TEST_CASE(test_convert_types_fc32_and_fc32_chdr)
{
convert::id_type id;
- id.input_format = "f32";
+ id.input_format = "fc32";
+ id.output_format = "fc32_chdr";
id.num_inputs = 1;
id.num_outputs = 1;
// try various lengths to test edge cases
- id.output_format = "f32_item32_le";
- for (size_t nsamps = 1; nsamps < 16; nsamps++) {
- test_convert_types_f32(nsamps, id);
- }
-
- // try various lengths to test edge cases
- id.output_format = "f32_item32_be";
for (size_t nsamps = 1; nsamps < 16; nsamps++) {
- test_convert_types_f32(nsamps, id);
+ test_convert_types_fc32(nsamps, id);
}
}