1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
#include <boost/test/unit_test.hpp>
#include <aocommon/multibanddata.h>
#include <vector>
using aocommon::BandData;
using aocommon::ChannelInfo;
using aocommon::MultiBandData;
BOOST_AUTO_TEST_SUITE(multi_band_data)
BOOST_AUTO_TEST_CASE(empty) {
MultiBandData multiBand;
BOOST_CHECK_EQUAL(multiBand.BandCount(), 0u);
BOOST_CHECK_CLOSE_FRACTION(multiBand.BandStart(), 0.0, 1e-6);
BOOST_CHECK_CLOSE_FRACTION(multiBand.BandEnd(), 0.0, 1e-6);
BOOST_CHECK_CLOSE_FRACTION(multiBand.Bandwidth(), 0.0, 1e-6);
BOOST_CHECK_CLOSE_FRACTION(multiBand.CentreFrequency(), 0.0, 1e-6);
BOOST_CHECK_EQUAL(multiBand.DataDescCount(), 0u);
BOOST_CHECK_CLOSE_FRACTION(multiBand.HighestFrequency(), 0.0, 1e-6);
BOOST_CHECK_CLOSE_FRACTION(multiBand.LowestFrequency(), 0.0, 1e-6);
MultiBandData moved(std::move(multiBand));
BOOST_CHECK_EQUAL(moved.BandCount(), 0u);
MultiBandData copied(multiBand);
BOOST_CHECK_EQUAL(copied.BandCount(), 0u);
}
BOOST_AUTO_TEST_CASE(irregular_bands) {
// Band 1 has (purposely):
// - A higher frequency than Band 2
// - Fewer channels than Band 2
// - Have a different channel width
// MultiBandData should be able to handle this.
std::vector<ChannelInfo> channels1{ChannelInfo(180e6, 10e6),
ChannelInfo(190e6, 10e6)},
channels2{ChannelInfo(140e6, 5e6), ChannelInfo(145e6, 5e6),
ChannelInfo(150e6, 5e6)};
MultiBandData multiBand;
const size_t data_desc_id_1 = multiBand.AddBand(BandData(channels1, 185e6));
const size_t data_desc_id_2 = multiBand.AddBand(BandData(channels2, 145e6));
BOOST_CHECK_EQUAL(multiBand.BandCount(), 2u);
BOOST_CHECK_CLOSE_FRACTION(multiBand.BandStart(), 137.5e6, 1e-6);
BOOST_CHECK_CLOSE_FRACTION(multiBand.BandEnd(), 195e6, 1e-6);
BOOST_CHECK_CLOSE_FRACTION(multiBand.Bandwidth(), 195e6 - 137.5e6, 1e-6);
BOOST_CHECK_CLOSE_FRACTION(multiBand.CentreFrequency(),
0.5 * (195e6 + 137.5e6), 1e-6);
BOOST_CHECK_EQUAL(multiBand.DataDescCount(), 2u);
BOOST_CHECK_EQUAL(multiBand.GetBandIndex(data_desc_id_1), 0u);
BOOST_CHECK_EQUAL(multiBand.GetBandIndex(data_desc_id_2), 1u);
BOOST_CHECK_CLOSE_FRACTION(multiBand.HighestFrequency(), 190e6, 1e-6);
BOOST_CHECK_CLOSE_FRACTION(multiBand.LowestFrequency(), 140e6, 1e-6);
BOOST_CHECK_EQUAL(multiBand[data_desc_id_1].ChannelCount(), 2u);
BOOST_CHECK_EQUAL(multiBand[data_desc_id_2].ChannelCount(), 3u);
MultiBandData partialBandA(multiBand, 1, 2);
BOOST_CHECK_EQUAL(partialBandA.BandCount(), 2u);
BOOST_CHECK_CLOSE_FRACTION(partialBandA.BandStart(), 142.5e6, 1e-6);
BOOST_CHECK_CLOSE_FRACTION(partialBandA.BandEnd(), 195e6, 1e-6);
BOOST_CHECK_CLOSE_FRACTION(partialBandA.Bandwidth(), 195e6 - 142.5e6, 1e-6);
BOOST_CHECK_CLOSE_FRACTION(partialBandA.CentreFrequency(),
0.5 * (195e6 + 142.5e6), 1e-6);
BOOST_CHECK_EQUAL(partialBandA.DataDescCount(), 2u);
BOOST_CHECK_EQUAL(partialBandA.GetBandIndex(data_desc_id_1), 0u);
BOOST_CHECK_EQUAL(partialBandA.GetBandIndex(data_desc_id_2), 1u);
BOOST_CHECK_CLOSE_FRACTION(partialBandA.HighestFrequency(), 190e6, 1e-6);
BOOST_CHECK_CLOSE_FRACTION(partialBandA.LowestFrequency(), 145e6, 1e-6);
BOOST_CHECK_EQUAL(partialBandA[data_desc_id_1].ChannelCount(), 1u);
BOOST_CHECK_CLOSE_FRACTION(partialBandA[data_desc_id_1].ChannelFrequency(0),
190e6, 1e-6);
BOOST_CHECK_EQUAL(partialBandA[data_desc_id_2].ChannelCount(), 1u);
BOOST_CHECK_CLOSE_FRACTION(partialBandA[data_desc_id_2].ChannelFrequency(0),
145e6, 1e-6);
MultiBandData partialBandB(multiBand, 1, 3);
BOOST_CHECK_EQUAL(partialBandB.BandCount(), 2u);
BOOST_CHECK_CLOSE_FRACTION(partialBandB.BandStart(), 142.5e6, 1e-6);
BOOST_CHECK_CLOSE_FRACTION(partialBandB.BandEnd(), 195e6, 1e-6);
BOOST_CHECK_CLOSE_FRACTION(partialBandB.Bandwidth(), 195e6 - 142.5e6, 1e-6);
BOOST_CHECK_CLOSE_FRACTION(partialBandB.CentreFrequency(),
0.5 * (195e6 + 142.5e6), 1e-6);
BOOST_CHECK_EQUAL(partialBandB.DataDescCount(), 2u);
BOOST_CHECK_EQUAL(partialBandB.GetBandIndex(data_desc_id_1), 0u);
BOOST_CHECK_EQUAL(partialBandB.GetBandIndex(data_desc_id_2), 1u);
BOOST_CHECK_CLOSE_FRACTION(partialBandB.HighestFrequency(), 190e6, 1e-6);
BOOST_CHECK_CLOSE_FRACTION(partialBandB.LowestFrequency(), 145e6, 1e-6);
BOOST_CHECK_EQUAL(partialBandB[data_desc_id_1].ChannelCount(), 1u);
BOOST_CHECK_CLOSE_FRACTION(partialBandB[data_desc_id_1].ChannelFrequency(0),
190e6, 1e-6);
BOOST_CHECK_EQUAL(partialBandB[data_desc_id_2].ChannelCount(), 2u);
BOOST_CHECK_CLOSE_FRACTION(partialBandB[data_desc_id_2].ChannelFrequency(0),
145e6, 1e-6);
BOOST_CHECK_CLOSE_FRACTION(partialBandB[data_desc_id_2].ChannelFrequency(1),
150e6, 1e-6);
MultiBandData copy(multiBand);
BOOST_CHECK_EQUAL(copy.BandCount(), 2u);
MultiBandData moved(std::move(multiBand));
BOOST_CHECK_EQUAL(moved.BandCount(), 2u);
}
BOOST_AUTO_TEST_SUITE_END()
|