File: qualitytablesformattertest.cpp

package info (click to toggle)
aoflagger 3.4.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 8,960 kB
  • sloc: cpp: 83,076; python: 10,187; sh: 260; makefile: 178
file content (191 lines) | stat: -rw-r--r-- 8,059 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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191

#include "../../quality/qualitytablesformatter.h"
#include "../../quality/statisticalvalue.h"

#include <casacore/tables/Tables/Table.h>
#include <casacore/tables/Tables/SetupNewTab.h>
#include <casacore/tables/Tables/ScaColDesc.h>

#include <boost/test/unit_test.hpp>

struct Fixture {
  Fixture() {
    casacore::TableDesc tableDesc("MAIN_TABLE", "1.0",
                                  casacore::TableDesc::Scratch);
    tableDesc.addColumn(casacore::ScalarColumnDesc<int>("TEST"));
    casacore::SetupNewTable mainTableSetup("QualityTest.MS", tableDesc,
                                           casacore::Table::New);
    casacore::Table mainOutputTable(mainTableSetup);
  }
  ~Fixture() { casacore::Table::deleteTable("QualityTest.MS"); }
};

BOOST_AUTO_TEST_SUITE(quality_tables_formatter,
                      *boost::unit_test::label("quality") *
                          boost::unit_test::fixture<Fixture>())

BOOST_AUTO_TEST_CASE(constructor) {
  QualityTablesFormatter qd("QualityTest.MS");
  BOOST_CHECK(true);
}

BOOST_AUTO_TEST_CASE(table_exists) {
  QualityTablesFormatter qd("QualityTest.MS");
  // undefined answer, but should not crash.
  qd.TableExists(QualityTablesFormatter::KindNameTable);
  qd.TableExists(QualityTablesFormatter::TimeStatisticTable);
  qd.TableExists(QualityTablesFormatter::FrequencyStatisticTable);
  qd.TableExists(QualityTablesFormatter::BaselineStatisticTable);
  qd.TableExists(QualityTablesFormatter::BaselineTimeStatisticTable);

  qd.RemoveAllQualityTables();
  BOOST_CHECK(!qd.TableExists(QualityTablesFormatter::KindNameTable));
  BOOST_CHECK(!qd.TableExists(QualityTablesFormatter::TimeStatisticTable));
  BOOST_CHECK(!qd.TableExists(QualityTablesFormatter::FrequencyStatisticTable));
  BOOST_CHECK(!qd.TableExists(QualityTablesFormatter::BaselineStatisticTable));
  BOOST_CHECK(
      !qd.TableExists(QualityTablesFormatter::BaselineTimeStatisticTable));
}

BOOST_AUTO_TEST_CASE(table_initialization) {
  QualityTablesFormatter qd("QualityTest.MS");

  qd.RemoveAllQualityTables();

  enum QualityTablesFormatter::QualityTable tables[5] = {
      QualityTablesFormatter::KindNameTable,
      QualityTablesFormatter::TimeStatisticTable,
      QualityTablesFormatter::FrequencyStatisticTable,
      QualityTablesFormatter::BaselineStatisticTable,
      QualityTablesFormatter::BaselineTimeStatisticTable};
  for (unsigned i = 0; i < 5; ++i) {
    qd.InitializeEmptyTable(tables[i], 8);
    BOOST_CHECK(qd.TableExists(tables[i]));
  }

  for (unsigned i = 0; i < 5; ++i) {
    qd.RemoveTable(tables[i]);
    for (unsigned j = 0; j <= i; ++j) BOOST_CHECK(!qd.TableExists(tables[j]));
    for (unsigned j = i + 1; j < 5; ++j) BOOST_CHECK(qd.TableExists(tables[j]));
  }
}

BOOST_AUTO_TEST_CASE(kind_operations) {
  QualityTablesFormatter qd("QualityTest.MS");

  qd.RemoveAllQualityTables();
  qd.InitializeEmptyTable(QualityTablesFormatter::KindNameTable, 4);
  BOOST_CHECK(qd.TableExists(QualityTablesFormatter::KindNameTable));

  unsigned kindIndex;
  BOOST_CHECK(
      !qd.QueryKindIndex(QualityTablesFormatter::MeanStatistic, kindIndex));

  unsigned originalKindIndex =
      qd.StoreKindName(QualityTablesFormatter::MeanStatistic);
  BOOST_CHECK(
      qd.QueryKindIndex(QualityTablesFormatter::MeanStatistic, kindIndex));
  BOOST_CHECK_EQUAL(kindIndex, originalKindIndex);
  BOOST_CHECK_EQUAL(qd.QueryKindIndex(QualityTablesFormatter::MeanStatistic),
                    originalKindIndex);

  unsigned secondKindIndex =
      qd.StoreKindName(QualityTablesFormatter::VarianceStatistic);
  BOOST_CHECK_NE(originalKindIndex, secondKindIndex);
  BOOST_CHECK_EQUAL(qd.QueryKindIndex(QualityTablesFormatter::MeanStatistic),
                    originalKindIndex);
  BOOST_CHECK_EQUAL(
      qd.QueryKindIndex(QualityTablesFormatter::VarianceStatistic),
      secondKindIndex);

  qd.InitializeEmptyTable(QualityTablesFormatter::KindNameTable, 4);
  BOOST_CHECK(
      !qd.QueryKindIndex(QualityTablesFormatter::MeanStatistic, kindIndex));
}

BOOST_AUTO_TEST_CASE(store_statistics) {
  QualityTablesFormatter qd("QualityTest.MS");

  qd.RemoveAllQualityTables();
  BOOST_CHECK(!qd.IsStatisticAvailable(QualityTablesFormatter::TimeDimension,
                                       QualityTablesFormatter::MeanStatistic));

  qd.InitializeEmptyTable(QualityTablesFormatter::KindNameTable, 4);
  BOOST_CHECK(!qd.IsStatisticAvailable(QualityTablesFormatter::TimeDimension,
                                       QualityTablesFormatter::MeanStatistic));

  qd.InitializeEmptyTable(QualityTablesFormatter::TimeStatisticTable, 4);
  BOOST_CHECK(!qd.IsStatisticAvailable(QualityTablesFormatter::TimeDimension,
                                       QualityTablesFormatter::MeanStatistic));

  unsigned meanStatIndex =
      qd.StoreKindName(QualityTablesFormatter::MeanStatistic);
  BOOST_CHECK(!qd.IsStatisticAvailable(QualityTablesFormatter::TimeDimension,
                                       QualityTablesFormatter::MeanStatistic));
  BOOST_CHECK_EQUAL(qd.QueryStatisticEntryCount(
                        QualityTablesFormatter::TimeDimension, meanStatIndex),
                    0u);

  StatisticalValue value(4);
  value.SetKindIndex(meanStatIndex);
  value.SetValue(0, std::complex<float>(0.0, 1.0));
  value.SetValue(1, std::complex<float>(2.0, -2.0));
  value.SetValue(2, std::complex<float>(-3.0, 3.0));
  value.SetValue(3, std::complex<float>(-4.0, -4.0));
  qd.StoreTimeValue(60.0, 107000000.0, value);
  BOOST_CHECK(qd.IsStatisticAvailable(QualityTablesFormatter::TimeDimension,
                                      QualityTablesFormatter::MeanStatistic));
  BOOST_CHECK_EQUAL(qd.QueryStatisticEntryCount(
                        QualityTablesFormatter::TimeDimension, meanStatIndex),
                    1u);

  std::vector<std::pair<QualityTablesFormatter::TimePosition, StatisticalValue>>
      entries;
  qd.QueryTimeStatistic(meanStatIndex, entries);
  BOOST_CHECK_EQUAL(entries.size(), (size_t)1);
  std::pair<QualityTablesFormatter::TimePosition, StatisticalValue> entry =
      entries[0];
  BOOST_CHECK_EQUAL(entry.first.frequency, 107000000.0f);
  BOOST_CHECK_EQUAL(entry.first.time, 60.0f);
  BOOST_CHECK_EQUAL(entry.second.PolarizationCount(), 4u);
  BOOST_CHECK_EQUAL(entry.second.KindIndex(), meanStatIndex);
  BOOST_CHECK_EQUAL(entry.second.Value(0), std::complex<float>(0.0, 1.0));
  BOOST_CHECK_EQUAL(entry.second.Value(1), std::complex<float>(2.0, -2.0));
  BOOST_CHECK_EQUAL(entry.second.Value(2), std::complex<float>(-3.0, 3.0));
  BOOST_CHECK_EQUAL(entry.second.Value(3), std::complex<float>(-4.0, -4.0));

  qd.RemoveTable(QualityTablesFormatter::KindNameTable);
  qd.RemoveTable(QualityTablesFormatter::TimeStatisticTable);
}

BOOST_AUTO_TEST_CASE(kind_names) {
  BOOST_CHECK_EQUAL(
      QualityTablesFormatter::KindToName(QualityTablesFormatter::MeanStatistic),
      "Mean");
  BOOST_CHECK_EQUAL(QualityTablesFormatter::KindToName(
                        QualityTablesFormatter::VarianceStatistic),
                    "Variance");
  BOOST_CHECK_EQUAL(
      QualityTablesFormatter::KindToName(QualityTablesFormatter::SumStatistic),
      "Sum");
  BOOST_CHECK_EQUAL(QualityTablesFormatter::KindToName(
                        QualityTablesFormatter::SumP2Statistic),
                    "SumP2");
  BOOST_CHECK_EQUAL(QualityTablesFormatter::KindToName(
                        QualityTablesFormatter::DMeanStatistic),
                    "DMean");
  BOOST_CHECK_EQUAL(QualityTablesFormatter::KindToName(
                        QualityTablesFormatter::DVarianceStatistic),
                    "DVariance");
  BOOST_CHECK_EQUAL(
      QualityTablesFormatter::KindToName(QualityTablesFormatter::DSumStatistic),
      "DSum");
  BOOST_CHECK_EQUAL(QualityTablesFormatter::KindToName(
                        QualityTablesFormatter::DSumP2Statistic),
                    "DSumP2");
  BOOST_CHECK_EQUAL(QualityTablesFormatter::KindToName(
                        QualityTablesFormatter::FTSumP2Statistic),
                    "FTSumP2");
}

BOOST_AUTO_TEST_SUITE_END()