mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 07:30:04 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			129 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include <scwx/awips/pvtec.hpp>
 | |
| 
 | |
| #include <gtest/gtest.h>
 | |
| 
 | |
| namespace scwx
 | |
| {
 | |
| namespace awips
 | |
| {
 | |
| 
 | |
| static const std::string logPrefix_ = "scwx::awips::pvtec.test";
 | |
| 
 | |
| std::pair<std::chrono::year_month_day,
 | |
|           std::chrono::hh_mm_ss<std::chrono::minutes>>
 | |
| GetDateTime(std::chrono::system_clock::time_point t);
 | |
| 
 | |
| TEST(PVtec, FlashFloodWarningExtended)
 | |
| {
 | |
|    using namespace std::chrono;
 | |
| 
 | |
|    PVtec       pvtec;
 | |
|    std::string s = "/O.EXT.KJAN.FF.W.0023.000000T0000Z-210606T1700Z/";
 | |
| 
 | |
|    pvtec.Parse(s);
 | |
| 
 | |
|    auto eventBegin = GetDateTime(pvtec.event_begin());
 | |
|    auto eventEnd   = GetDateTime(pvtec.event_end());
 | |
| 
 | |
|    EXPECT_EQ(pvtec.fixed_identifier(), PVtec::ProductType::Operational);
 | |
|    EXPECT_EQ(pvtec.action(), PVtec::Action::ExtendedInTime);
 | |
|    EXPECT_EQ(pvtec.office_id(), "KJAN");
 | |
|    EXPECT_EQ(pvtec.phenomenon(), Phenomenon::FlashFlood);
 | |
|    EXPECT_EQ(pvtec.significance(), Significance::Warning);
 | |
|    EXPECT_EQ(pvtec.event_tracking_number(), 23);
 | |
| 
 | |
|    EXPECT_EQ(pvtec.event_begin(), std::chrono::system_clock::time_point {});
 | |
|    EXPECT_EQ(eventBegin.first.year(), 1970y);
 | |
|    EXPECT_EQ(eventBegin.first.month(), month {1});
 | |
|    EXPECT_EQ(eventBegin.first.day(), 1d);
 | |
|    EXPECT_EQ(eventBegin.second.hours(), 0h);
 | |
|    EXPECT_EQ(eventBegin.second.minutes(), 0min);
 | |
| 
 | |
|    EXPECT_EQ(eventEnd.first.year(), 2021y);
 | |
|    EXPECT_EQ(eventEnd.first.month(), month {6});
 | |
|    EXPECT_EQ(eventEnd.first.day(), 6d);
 | |
|    EXPECT_EQ(eventEnd.second.hours(), 17h);
 | |
|    EXPECT_EQ(eventEnd.second.minutes(), 0min);
 | |
| }
 | |
| 
 | |
| TEST(PVtec, TornadoWarningNew)
 | |
| {
 | |
|    using namespace std::chrono;
 | |
| 
 | |
|    PVtec       pvtec;
 | |
|    std::string s = "/O.NEW.KLIX.TO.W.0032.210606T1501Z-210606T1600Z/";
 | |
| 
 | |
|    pvtec.Parse(s);
 | |
| 
 | |
|    auto eventBegin = GetDateTime(pvtec.event_begin());
 | |
|    auto eventEnd   = GetDateTime(pvtec.event_end());
 | |
| 
 | |
|    EXPECT_EQ(pvtec.fixed_identifier(), PVtec::ProductType::Operational);
 | |
|    EXPECT_EQ(pvtec.action(), PVtec::Action::New);
 | |
|    EXPECT_EQ(pvtec.office_id(), "KLIX");
 | |
|    EXPECT_EQ(pvtec.phenomenon(), Phenomenon::Tornado);
 | |
|    EXPECT_EQ(pvtec.significance(), Significance::Warning);
 | |
|    EXPECT_EQ(pvtec.event_tracking_number(), 32);
 | |
| 
 | |
|    EXPECT_EQ(eventBegin.first.year(), 2021y);
 | |
|    EXPECT_EQ(eventBegin.first.month(), month {6});
 | |
|    EXPECT_EQ(eventBegin.first.day(), 6d);
 | |
|    EXPECT_EQ(eventBegin.second.hours(), 15h);
 | |
|    EXPECT_EQ(eventBegin.second.minutes(), 1min);
 | |
| 
 | |
|    EXPECT_EQ(eventEnd.first.year(), 2021y);
 | |
|    EXPECT_EQ(eventEnd.first.month(), month {6});
 | |
|    EXPECT_EQ(eventEnd.first.day(), 6d);
 | |
|    EXPECT_EQ(eventEnd.second.hours(), 16h);
 | |
|    EXPECT_EQ(eventEnd.second.minutes(), 0min);
 | |
| }
 | |
| 
 | |
| TEST(PVtec, TornadoWarningContinued)
 | |
| {
 | |
|    using namespace std::chrono;
 | |
| 
 | |
|    PVtec       pvtec;
 | |
|    std::string s = "/O.CON.KLIX.TO.W.0032.000000T0000Z-210606T1600Z/";
 | |
| 
 | |
|    pvtec.Parse(s);
 | |
| 
 | |
|    auto eventBegin = GetDateTime(pvtec.event_begin());
 | |
|    auto eventEnd   = GetDateTime(pvtec.event_end());
 | |
| 
 | |
|    EXPECT_EQ(pvtec.fixed_identifier(), PVtec::ProductType::Operational);
 | |
|    EXPECT_EQ(pvtec.action(), PVtec::Action::Continued);
 | |
|    EXPECT_EQ(pvtec.office_id(), "KLIX");
 | |
|    EXPECT_EQ(pvtec.phenomenon(), Phenomenon::Tornado);
 | |
|    EXPECT_EQ(pvtec.significance(), Significance::Warning);
 | |
|    EXPECT_EQ(pvtec.event_tracking_number(), 32);
 | |
| 
 | |
|    EXPECT_EQ(pvtec.event_begin(), std::chrono::system_clock::time_point {});
 | |
|    EXPECT_EQ(eventBegin.first.year(), 1970y);
 | |
|    EXPECT_EQ(eventBegin.first.month(), month {1});
 | |
|    EXPECT_EQ(eventBegin.first.day(), 1d);
 | |
|    EXPECT_EQ(eventBegin.second.hours(), 0h);
 | |
|    EXPECT_EQ(eventBegin.second.minutes(), 0min);
 | |
| 
 | |
|    EXPECT_EQ(eventEnd.first.year(), 2021y);
 | |
|    EXPECT_EQ(eventEnd.first.month(), month {6});
 | |
|    EXPECT_EQ(eventEnd.first.day(), 6d);
 | |
|    EXPECT_EQ(eventEnd.second.hours(), 16h);
 | |
|    EXPECT_EQ(eventEnd.second.minutes(), 0min);
 | |
| }
 | |
| 
 | |
| std::pair<std::chrono::year_month_day,
 | |
|           std::chrono::hh_mm_ss<std::chrono::minutes>>
 | |
| GetDateTime(std::chrono::system_clock::time_point t)
 | |
| {
 | |
|    using namespace std::chrono;
 | |
| 
 | |
|    auto tDays    = floor<days>(t);
 | |
|    auto tDate    = year_month_day {tDays};
 | |
|    auto tMinutes = floor<minutes>(t - tDays);
 | |
|    auto tTime    = hh_mm_ss {tMinutes};
 | |
| 
 | |
|    return std::make_pair(tDate, tTime);
 | |
| }
 | |
| 
 | |
| } // namespace awips
 | |
| } // namespace scwx
 | 
