1 #include <gtest/gtest.h>
2 #include <marnav/nmea/glc.hpp>
3 #include <marnav/nmea/nmea.hpp>
4 #include "type_traits_helper.hpp"
9 using namespace marnav
;
11 class Test_nmea_glc
: public ::testing::Test
15 TEST_F(Test_nmea_glc
, contruction
) { EXPECT_NO_THROW(nmea::glc glc
); }
17 TEST_F(Test_nmea_glc
, properties
) { nmea_sentence_traits
<nmea::glc
>(); }
19 TEST_F(Test_nmea_glc
, parse
)
21 auto s
= nmea::make_sentence("$GPGLC,1,1,A,1,A,2,A,3,A,4,V,,*21");
22 ASSERT_NE(nullptr, s
);
24 auto glc
= nmea::sentence_cast
<nmea::glc
>(s
);
25 ASSERT_NE(nullptr, glc
);
28 TEST_F(Test_nmea_glc
, parse_invalid_number_of_arguments
)
30 EXPECT_ANY_THROW(nmea::sentence_parse
<nmea::glc
>(nmea::talker_id::none
, {12, "@"}));
31 EXPECT_ANY_THROW(nmea::sentence_parse
<nmea::glc
>(nmea::talker_id::none
, {14, "@"}));
34 TEST_F(Test_nmea_glc
, empty_to_string
)
38 EXPECT_STREQ("$GPGLC,0,0,V,,,,,,,,,,*25", nmea::to_string(glc
).c_str());
41 TEST_F(Test_nmea_glc
, set_time_diff_invalid_index
)
45 EXPECT_ANY_THROW(glc
.set_time_diff(-1, {0.0, nmea::status::ok
}));
46 EXPECT_ANY_THROW(glc
.set_time_diff(5, {0.0, nmea::status::ok
}));
49 TEST_F(Test_nmea_glc
, get_time_diff_invalid_index
)
53 EXPECT_ANY_THROW(glc
.get_time_diff(-1));
54 EXPECT_ANY_THROW(glc
.get_time_diff(5));
55 EXPECT_ANY_THROW(glc
.get_time_diff(nmea::glc::max_differences
));
58 TEST_F(Test_nmea_glc
, set_time_diff
)
62 glc
.set_time_diff(0, {1.0, nmea::status::ok
});
63 EXPECT_STREQ("$GPGLC,0,0,V,1,A,,,,,,,,*55", nmea::to_string(glc
).c_str());
67 glc
.set_time_diff(1, {1.0, nmea::status::ok
});
68 EXPECT_STREQ("$GPGLC,0,0,V,,,1,A,,,,,,*55", nmea::to_string(glc
).c_str());
72 glc
.set_time_diff(2, {1.0, nmea::status::ok
});
73 EXPECT_STREQ("$GPGLC,0,0,V,,,,,1,A,,,,*55", nmea::to_string(glc
).c_str());
77 glc
.set_time_diff(3, {1.0, nmea::status::ok
});
78 EXPECT_STREQ("$GPGLC,0,0,V,,,,,,,1,A,,*55", nmea::to_string(glc
).c_str());
82 glc
.set_time_diff(4, {1.0, nmea::status::ok
});
83 EXPECT_STREQ("$GPGLC,0,0,V,,,,,,,,,1,A*55", nmea::to_string(glc
).c_str());
87 TEST_F(Test_nmea_glc
, get_time_diff
)
89 auto s
= nmea::make_sentence("$GPGLC,1,1,A,1,A,2,A,3,A,4,V,,*21");
90 ASSERT_NE(nullptr, s
);
92 auto glc
= nmea::sentence_cast
<nmea::glc
>(s
);
93 ASSERT_NE(nullptr, glc
);
95 auto const t
= glc
->get_time_diff(0);
96 EXPECT_TRUE(static_cast<bool>(t
));
97 EXPECT_NEAR(1.0, t
->diff
, 1e-8);
98 EXPECT_EQ(nmea::status::ok
, t
->status
);