1 #include <gtest/gtest.h>
2 #include <marnav/nmea/dtm.hpp>
3 #include <marnav/nmea/nmea.hpp>
4 #include "type_traits_helper.hpp"
9 using namespace marnav
;
11 class Test_nmea_dtm
: public ::testing::Test
15 TEST_F(Test_nmea_dtm
, contruction
) { EXPECT_NO_THROW(nmea::dtm dtm
); }
17 TEST_F(Test_nmea_dtm
, properties
) { nmea_sentence_traits
<nmea::dtm
>(); }
19 TEST_F(Test_nmea_dtm
, parse
)
21 auto s
= nmea::make_sentence("$GPDTM,W84,,0.000000,N,0.000000,E,0.0,W84*6F");
22 ASSERT_NE(nullptr, s
);
24 auto dtm
= nmea::sentence_cast
<nmea::dtm
>(s
);
25 ASSERT_NE(nullptr, dtm
);
28 TEST_F(Test_nmea_dtm
, parse_invalid_number_of_arguments
)
30 EXPECT_ANY_THROW(nmea::sentence_parse
<nmea::dtm
>("@@", {7, "@"}));
31 EXPECT_ANY_THROW(nmea::sentence_parse
<nmea::dtm
>("@@", {9, "@"}));
34 TEST_F(Test_nmea_dtm
, empty_to_string
)
38 EXPECT_STREQ("$GPDTM,W84,,0.0000,N,0.0000,E,0.0,W84*6F", nmea::to_string(dtm
).c_str());
41 TEST_F(Test_nmea_dtm
, set_lat_offset
)
45 dtm
.set_lat_offset(1.0, nmea::direction::north
);
46 EXPECT_STREQ("$GPDTM,W84,,1.0000,N,0.0000,E,0.0,W84*6E", nmea::to_string(dtm
).c_str());
50 dtm
.set_lat_offset(1.0, nmea::direction::south
);
51 EXPECT_STREQ("$GPDTM,W84,,1.0000,S,0.0000,E,0.0,W84*73", nmea::to_string(dtm
).c_str());
55 TEST_F(Test_nmea_dtm
, set_lat_offset_invalid_direction
)
59 EXPECT_NO_THROW(dtm
.set_lat_offset(1.0, nmea::direction::north
));
60 EXPECT_NO_THROW(dtm
.set_lat_offset(1.0, nmea::direction::south
));
61 EXPECT_ANY_THROW(dtm
.set_lat_offset(1.0, nmea::direction::east
));
62 EXPECT_ANY_THROW(dtm
.set_lat_offset(1.0, nmea::direction::west
));
65 TEST_F(Test_nmea_dtm
, set_lon_offset
)
69 dtm
.set_lon_offset(1.0, nmea::direction::east
);
70 EXPECT_STREQ("$GPDTM,W84,,0.0000,N,1.0000,E,0.0,W84*6E", nmea::to_string(dtm
).c_str());
74 dtm
.set_lon_offset(1.0, nmea::direction::west
);
75 EXPECT_STREQ("$GPDTM,W84,,0.0000,N,1.0000,W,0.0,W84*7C", nmea::to_string(dtm
).c_str());
79 TEST_F(Test_nmea_dtm
, set_lon_offset_invalid_direction
)
83 EXPECT_ANY_THROW(dtm
.set_lon_offset(1.0, nmea::direction::north
));
84 EXPECT_ANY_THROW(dtm
.set_lon_offset(1.0, nmea::direction::south
));
85 EXPECT_NO_THROW(dtm
.set_lon_offset(1.0, nmea::direction::east
));
86 EXPECT_NO_THROW(dtm
.set_lon_offset(1.0, nmea::direction::west
));
89 TEST_F(Test_nmea_dtm
, set_ref
)
93 EXPECT_STREQ("$GPDTM,ABC,,0.0000,N,0.0000,E,0.0,W84*74", nmea::to_string(dtm
).c_str());
96 TEST_F(Test_nmea_dtm
, set_ref_too_large
)
99 dtm
.set_ref("ABCDEFGHI");
100 EXPECT_STREQ("$GPDTM,ABCDE,,0.0000,N,0.0000,E,0.0,W84*75", nmea::to_string(dtm
).c_str());
103 TEST_F(Test_nmea_dtm
, set_subcode
)
106 dtm
.set_subcode("ABC");
107 EXPECT_STREQ("$GPDTM,W84,ABC,0.0000,N,0.0000,E,0.0,W84*2F", nmea::to_string(dtm
).c_str());
110 TEST_F(Test_nmea_dtm
, set_subcode_too_large
)
113 dtm
.set_subcode("ABCDEFGHI");
114 EXPECT_STREQ("$GPDTM,W84,ABCDE,0.0000,N,0.0000,E,0.0,W84*2E", nmea::to_string(dtm
).c_str());
117 TEST_F(Test_nmea_dtm
, set_name
)
121 EXPECT_STREQ("$GPDTM,W84,,0.0000,N,0.0000,E,0.0,ABC*74", nmea::to_string(dtm
).c_str());
124 TEST_F(Test_nmea_dtm
, set_name_too_large
)
127 dtm
.set_name("ABCDEFGHI");
128 EXPECT_STREQ("$GPDTM,W84,,0.0000,N,0.0000,E,0.0,ABCDE*75", nmea::to_string(dtm
).c_str());