31 template <
typename TestTraits>
32 TimeFrequencyTester<TestTraits>::TimeFrequencyTester()
36 template <
typename TestTraits>
37 TimeFrequencyTester<TestTraits>::~TimeFrequencyTester()
41 template <
typename TestTraits>
42 void TimeFrequencyTester<TestTraits>::SetUp()
46 template <
typename TestTraits>
47 void TimeFrequencyTester<TestTraits>::TearDown()
51 ALGORITHM_TYPED_TEST_P(TimeFrequencyTester, test_dimensions)
54 typedef typename TypeParam::DataType DataType;
55 data::DimensionSize<data::Time> number_of_spectra(10);
56 data::DimensionSize<data::Frequency> number_of_channels(10);
57 DataType tf_1(number_of_channels, number_of_spectra);
58 DataType tf_2(number_of_spectra, number_of_channels);
60 ASSERT_EQ(tf_1.number_of_channels(), number_of_channels);
61 ASSERT_EQ(tf_2.number_of_channels(), number_of_channels);
62 ASSERT_EQ(tf_1.number_of_spectra(), number_of_spectra);
63 ASSERT_EQ(tf_2.number_of_spectra(), number_of_spectra);
66 ALGORITHM_TYPED_TEST_P(TimeFrequencyTester, test_samples)
69 typedef typename TypeParam::DataType DataType;
70 data::DimensionSize<data::Time> number_of_spectra(10U);
71 data::DimensionSize<data::Frequency> number_of_channels(5U);
73 DataType tf(number_of_spectra, number_of_channels);
74 ASSERT_EQ(static_cast<std::size_t>(number_of_spectra), tf.number_of_spectra());
75 ASSERT_EQ(static_cast<std::size_t>(number_of_channels), tf.number_of_channels());
77 for(
unsigned sample_number=0; sample_number < tf.number_of_spectra(); ++sample_number) {
78 SCOPED_TRACE(
"sample = " + std::to_string(sample_number));
79 typename DataType::Spectra it = tf.spectrum(sample_number);
80 unsigned channel_count = 0U;
81 auto channel_it = it.begin();
82 while(channel_it != it.end()) {
86 ASSERT_EQ(static_cast<std::size_t>(number_of_channels), channel_count);
90 ALGORITHM_TYPED_TEST_P(TimeFrequencyTester, test_channel_frequencies_start_end)
93 data::DimensionSize<data::Time> number_of_spectra(1U);
94 data::DimensionSize<data::Frequency> number_of_channels(0);
95 typedef typename TypeParam::DataType DataType;
97 for(; number_of_channels < data::DimensionSize<data::Frequency>(5U); ++number_of_channels) {
98 DataType tf(number_of_spectra, number_of_channels);
99 auto f1 = 5.0 * boost::units::si::mega * boost::units::si::hertz;
100 auto delta = 1.0 * boost::units::si::mega * boost::units::si::hertz;
101 auto f2 = 12.0 * delta - f1;
103 tf.set_channel_frequencies_const_width( f1, delta );
105 auto generated = tf.channel_frequencies();
106 ASSERT_EQ(generated.size(), number_of_channels);
108 for(std::size_t i = 0U; i < number_of_channels; ++i) {
109 auto dif = (double)i * delta;
110 ASSERT_TRUE( f1 + dif == generated[i]) <<
"element " << i <<
" dif=" << dif <<
" generated=" << generated[i];
113 tf.set_channel_frequencies_const_width( f2, -1.0 * delta );
116 auto generated = tf.channel_frequencies();
117 ASSERT_EQ(generated.size(), number_of_channels);
118 for(std::size_t i = 0U; i < number_of_channels; ++i) {
119 ASSERT_TRUE( f2 - (
double)i * delta == generated[i]) <<
"element " << i;
125 ALGORITHM_TYPED_TEST_P(TimeFrequencyTester, test_low_high_freq)
128 typedef typename TypeParam::DataType DataType;
129 data::DimensionSize<data::Time> number_of_spectra(4U);
130 data::DimensionSize<data::Frequency> number_of_channels(10U);
132 DataType tf(number_of_spectra, number_of_channels);
133 typedef std::pair<typename DataType::FrequencyType, typename DataType::FrequencyType> ReturnType;
136 ReturnType r = tf.low_high_frequencies();
137 ASSERT_EQ(0.0, r.first.value());
138 ASSERT_EQ(0.0, r.second.value());
140 auto f1 =
typename DataType::FrequencyType(10.0 * boost::units::si::hertz);
141 auto f2 =
typename DataType::FrequencyType(20.0 * boost::units::si::hertz);
142 auto delta = (f2 - f1)/ (
double)(number_of_channels-1);
145 tf.set_channel_frequencies_const_width( f1, delta );
146 ASSERT_EQ(tf.channel_frequencies().size(), number_of_channels);
147 r = tf.low_high_frequencies();
148 ASSERT_EQ(f1, r.first);
149 ASSERT_EQ(f2, r.second);
152 tf.set_channel_frequencies_const_width( f2, -1.0 *delta );
153 ASSERT_EQ(tf.channel_frequencies().size(), number_of_channels);
154 r = tf.low_high_frequencies();
155 ASSERT_EQ(f1, r.first);
156 ASSERT_EQ(f2, r.second);
160 ALGORITHM_TYPED_TEST_P(TimeFrequencyTester, set_channel)
163 typedef typename TypeParam::DataType DataType;
165 data::DimensionSize<data::Time> number_of_spectra(3U);
166 data::DimensionSize<data::Frequency> number_of_channels(5U);
168 for(
unsigned set_channel=0; set_channel<number_of_channels; ++set_channel)
170 SCOPED_TRACE(set_channel);
171 DataType tf(number_of_spectra, number_of_channels);
172 ASSERT_EQ(tf.number_of_channels(), number_of_channels);
173 ASSERT_EQ(tf.number_of_spectra(), number_of_spectra);
175 tf.set_channel(set_channel, 1.0);
176 for(
unsigned channel_num=0; channel_num<number_of_channels; ++channel_num) {
177 SCOPED_TRACE(channel_num);
178 auto channel=tf.channel(channel_num);
179 auto channel_it = channel.begin();
180 ASSERT_EQ(channel.template dimension<data::Time>(), number_of_spectra);
181 ASSERT_EQ(channel.template dimension<data::Frequency>(), DimensionSize<data::Frequency>(1));
182 unsigned sample_count=0U;
183 while(channel_it != channel.end()) {
185 if(channel_num != set_channel) {
186 ASSERT_EQ(0.0, *channel_it);
189 ASSERT_EQ(1.0, *channel_it);
193 ASSERT_EQ(static_cast<std::size_t>(number_of_spectra), sample_count);
198 ALGORITHM_TYPED_TEST_P(TimeFrequencyTester, test_start_time_offset)
201 typedef typename TypeParam::DataType DataType;
203 data::DimensionSize<data::Time> number_of_spectra(100U);
204 data::DimensionSize<data::Frequency> number_of_channels(1U);
206 DataType tf(number_of_spectra, number_of_channels);
207 typename utils::ModifiedJulianClock::time_point epoch(utils::julian_day(50000.0));
208 typename DataType::TimeType interval(1.0 * boost::units::si::milli * boost::units::si::seconds);
209 tf.sample_interval(interval);
210 tf.start_time(epoch);
211 epoch += std::chrono::duration<double>(tf.sample_interval().value()*std::size_t(12));
212 ASSERT_EQ(tf.start_time(12L), epoch);
216 REGISTER_TYPED_TEST_CASE_P(TimeFrequencyTester, test_dimensions, test_samples, test_channel_frequencies_start_end, test_low_high_freq, set_channel, test_start_time_offset);
Some limits and constants for FLDO.