24 #include "cheetah/sigproc/test/SigProcWriterTest.h" 25 #include "cheetah/sigproc/SigProcWriter.h" 26 #include "cheetah/sigproc/SigProcFileStream.h" 27 #include "cheetah/utils/JulianClock.h" 28 #include "pss/astrotypes/sigproc/FileReader.h" 29 #include "panda/test/TestDir.h" 41 SigProcWriterTest::SigProcWriterTest()
46 SigProcWriterTest::~SigProcWriterTest()
50 void SigProcWriterTest::SetUp()
54 void SigProcWriterTest::TearDown()
58 TEST_F(SigProcWriterTest, test_write_read)
60 data::DimensionSize<data::Time> samples(20);
61 pss::astrotypes::units::Quantity<pss::astrotypes::units::Seconds, double> sample_interval(1.0 * pss::astrotypes::units::milliseconds);
63 for(data::DimensionSize<data::Frequency> i(1); i<data::DimensionSize<data::Frequency>(9046); i+=data::DimensionSize<data::Frequency>(1024)) {
64 panda::test::TestDir tmp_dir;
65 ASSERT_NO_THROW(tmp_dir.create());
67 typename utils::JulianClock::time_point start_time(utils::julian_day(2458179.500000));
68 data::TimeFrequency<Cpu, uint8_t> tf1(samples, i);
69 tf1.start_time(
static_cast<typename data::TimeFrequency<Cpu, uint8_t>::TimePointType
>(start_time));
70 tf1.sample_interval(sample_interval);
71 data::TimeFrequency<Cpu, uint8_t> tf2(samples, i);
72 tf2.start_time(tf1.end_time() + tf1.sample_interval());
73 tf2.sample_interval(sample_interval);
74 SigProcWriter<> writer(tmp_dir.dir_name());
79 auto it = boost::filesystem::directory_iterator(tmp_dir.path());
80 ASSERT_FALSE(it == boost::filesystem::directory_iterator());
82 ASSERT_TRUE(boost::filesystem::exists(it->path()));
83 config.set_sigproc_files(it->path().native());
84 config.set_chunk_samples(3*samples);
86 std::vector<boost::filesystem::path> files;
87 std::copy(it, boost::filesystem::directory_iterator(), std::back_inserter(files));
88 std::sort(files.begin(), files.end());
89 ASSERT_EQ(files.size(), 1);
91 boost::filesystem::path file = files[0];
92 ASSERT_EQ(file.extension().string(),
".fil");
93 ASSERT_EQ(file.stem().string(), std::string(
"2018_03_02_00:00:00"));
95 SigProcFileStream stream(config);
96 panda::DataManager<SigProcFileStream> chunk_manager(stream);
97 ASSERT_TRUE(stream.process()) <<
"channels=" << i;
98 std::tuple<std::shared_ptr<data::TimeFrequency<Cpu, uint8_t>>> data = chunk_manager.next();
99 ASSERT_EQ(static_cast<std::size_t>(i), std::get<0>(data)->number_of_channels());
100 ASSERT_EQ(2*samples, std::get<0>(data)->number_of_spectra()) <<
"channel=" << i;
104 template<
typename NumRep>
105 void write_truncate_test()
107 data::DimensionSize<data::Time> samples(20);
108 data::DimensionSize<data::Time> samples_2(20);
109 data::DimensionSize<data::Frequency> freq(100);
110 pss::astrotypes::units::Quantity<pss::astrotypes::units::Seconds, double> sample_interval(1.0 * pss::astrotypes::units::milliseconds);
111 typename utils::JulianClock::time_point start_time(utils::julian_day(2458179.500000));
113 panda::test::TestDir tmp_dir;
114 ASSERT_NO_THROW(tmp_dir.create());
116 data::TimeFrequency<Cpu, NumRep> tf1(samples, freq);
117 tf1.start_time(
static_cast<typename data::TimeFrequency<Cpu, NumRep>::TimePointType
>(start_time));
118 tf1.sample_interval(sample_interval);
119 data::TimeFrequency<Cpu, NumRep> tf2(samples_2, freq);
120 tf2.start_time(tf1.end_time() + tf1.sample_interval());
121 tf2.sample_interval(sample_interval);
125 config.max_count(samples-1);
126 config.dir(tmp_dir.dir_name());
127 SigProcWriter<> writer(config);
133 auto it = boost::filesystem::directory_iterator(tmp_dir.path());
134 std::vector<boost::filesystem::path> files;
135 std::copy(it, boost::filesystem::directory_iterator(), std::back_inserter(files));
136 std::sort(files.begin(), files.end());
137 ASSERT_EQ(files.size(), 3);
139 boost::filesystem::path file = files[0];
140 std::cout <<
"examining file: " << file.string() <<
"\n";
141 pss::astrotypes::sigproc::FileReader<> reader(file.string());
142 pss::astrotypes::sigproc::Header header1 = reader.header();
143 ASSERT_EQ((std::size_t)reader.dimension<data::Time>(), config.max_count());
146 boost::filesystem::path file2 = files[1];
147 std::cout <<
"examining file: " << file2.string() <<
"\n";
148 reader.open(file2.string());
149 pss::astrotypes::sigproc::Header header2 = reader.header();
151 ASSERT_EQ(header1, header2);
152 ASSERT_EQ((std::size_t)reader.dimension<data::Time>(), config.max_count());
154 boost::filesystem::path file3 = files[2];
155 reader.open(file3.string());
156 pss::astrotypes::sigproc::Header header3 = reader.header();
158 ASSERT_EQ(header1, header3);
159 ASSERT_EQ((std::size_t)reader.dimension<data::Time>(), 2);
163 TEST_F(SigProcWriterTest, test_write_truncate_uint8_t)
165 write_truncate_test<uint8_t>();
168 TEST_F(SigProcWriterTest, test_write_truncate_uint16_t)
170 write_truncate_test<uint16_t>();
Some limits and constants for FLDO.