NMEA: changed type of talker id from 'std::string' to its own type.
[marnav.git] / test / nmea / Test_nmea_glc.cpp
blobe365cb79141e7aab142cae6d5f75a559238a5952
1 #include <gtest/gtest.h>
2 #include <marnav/nmea/glc.hpp>
3 #include <marnav/nmea/nmea.hpp>
4 #include "type_traits_helper.hpp"
6 namespace
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)
36 nmea::glc glc;
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)
43 nmea::glc glc;
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)
51 nmea::glc glc;
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)
61 nmea::glc glc;
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());
66 nmea::glc glc;
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());
71 nmea::glc glc;
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());
76 nmea::glc glc;
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());
81 nmea::glc glc;
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);