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 107 108 109
|
// SPDX-License-Identifier: LGPL-3.0-only
#include <boost/test/unit_test.hpp>
#include "component_list.h"
namespace radler {
BOOST_AUTO_TEST_SUITE(component_list)
struct ComponentListFixture {
ComponentListFixture() : list(512, 512, 4, 3) {
aocommon::UVector<float> values = {1.0, 2.0, 3.0};
list.Add(256, 256, 1, values.data());
values = {5.0, 6.0, 7.0};
list.Add(256, 256, 1, values.data());
values = {8.0, 9.0, 10.0};
list.Add(511, 511, 0, values.data());
values = {11.0, 12.0, 13.0};
list.Add(13, 42, 3, values.data());
list.MergeDuplicates();
}
ComponentList list;
aocommon::UVector<float> values;
};
BOOST_FIXTURE_TEST_CASE(adding_values, ComponentListFixture) {
BOOST_CHECK_EQUAL(list.ComponentCount(0), 1u);
BOOST_CHECK_EQUAL(list.ComponentCount(1), 1u);
BOOST_CHECK_EQUAL(list.ComponentCount(2), 0u);
BOOST_CHECK_EQUAL(list.ComponentCount(3), 1u);
size_t x;
size_t y;
aocommon::UVector<float> values(3);
list.GetComponent(0, 0, x, y, values.data());
BOOST_CHECK_EQUAL(x, 511u);
BOOST_CHECK_EQUAL(y, 511u);
BOOST_CHECK_CLOSE_FRACTION(values[0], 8.0, 1e-5);
BOOST_CHECK_CLOSE_FRACTION(values[1], 9.0, 1e-5);
BOOST_CHECK_CLOSE_FRACTION(values[2], 10.0, 1e-5);
list.GetComponent(1, 0, x, y, values.data());
BOOST_CHECK_EQUAL(x, 256u);
BOOST_CHECK_EQUAL(y, 256u);
BOOST_CHECK_CLOSE_FRACTION(values[0], 6.0, 1e-5);
BOOST_CHECK_CLOSE_FRACTION(values[1], 8.0, 1e-5);
BOOST_CHECK_CLOSE_FRACTION(values[2], 10.0, 1e-5);
list.GetComponent(3, 0, x, y, values.data());
BOOST_CHECK_EQUAL(x, 13u);
BOOST_CHECK_EQUAL(y, 42u);
BOOST_CHECK_CLOSE_FRACTION(values[0], 11.0, 1e-5);
BOOST_CHECK_CLOSE_FRACTION(values[1], 12.0, 1e-5);
BOOST_CHECK_CLOSE_FRACTION(values[2], 13.0, 1e-5);
}
BOOST_FIXTURE_TEST_CASE(get_position, ComponentListFixture) {
BOOST_CHECK_EQUAL(list.GetPositions(0).size(), 1u);
BOOST_CHECK_EQUAL(list.GetPositions(1).size(), 1u);
BOOST_CHECK_EQUAL(list.GetPositions(2).size(), 0u);
BOOST_CHECK_EQUAL(list.GetPositions(3).size(), 1u);
BOOST_CHECK_EQUAL(list.GetPositions(0)[0].x, 511u);
BOOST_CHECK_EQUAL(list.GetPositions(0)[0].y, 511u);
BOOST_CHECK_EQUAL(list.GetPositions(1)[0].x, 256u);
BOOST_CHECK_EQUAL(list.GetPositions(1)[0].y, 256u);
BOOST_CHECK_EQUAL(list.GetPositions(3)[0].x, 13u);
BOOST_CHECK_EQUAL(list.GetPositions(3)[0].y, 42u);
}
BOOST_FIXTURE_TEST_CASE(multiply_scale_component, ComponentListFixture) {
for (size_t i = 0; i != list.NScales(); ++i) {
// Second scale is empty (captured in DEBUG mode via an assert)
if (i != 2u) {
for (size_t j = 0; j != list.NFrequencies(); ++j) {
list.MultiplyScaleComponent(i, 0, j, static_cast<double>(j + 1u));
}
}
}
size_t x;
size_t y;
aocommon::UVector<float> values(3);
list.GetComponent(0, 0, x, y, values.data());
BOOST_CHECK_CLOSE_FRACTION(values[0], 8.0, 1e-5);
BOOST_CHECK_CLOSE_FRACTION(values[1], 18.0, 1e-5);
BOOST_CHECK_CLOSE_FRACTION(values[2], 30.0, 1e-5);
list.GetComponent(1, 0, x, y, values.data());
BOOST_CHECK_CLOSE_FRACTION(values[0], 6.0, 1e-5);
BOOST_CHECK_CLOSE_FRACTION(values[1], 16.0, 1e-5);
BOOST_CHECK_CLOSE_FRACTION(values[2], 30.0, 1e-5);
list.GetComponent(3, 0, x, y, values.data());
BOOST_CHECK_CLOSE_FRACTION(values[0], 11.0, 1e-5);
BOOST_CHECK_CLOSE_FRACTION(values[1], 24.0, 1e-5);
BOOST_CHECK_CLOSE_FRACTION(values[2], 39.0, 1e-5);
}
BOOST_AUTO_TEST_SUITE_END()
} // namespace radler
|