File: test_component_list.cc

package info (click to toggle)
wsclean 3.6-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 16,296 kB
  • sloc: cpp: 129,246; python: 22,066; sh: 360; ansic: 230; makefile: 185
file content (109 lines) | stat: -rw-r--r-- 3,488 bytes parent folder | download | duplicates (2)
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