NMEA: changed type of talker id from 'std::string' to its own type.
[marnav.git] / test / nmea / Test_nmea_aam.cpp
blob904bde9d30135f27ad9097c9ad4d06cf0e1b9652
1 #include <gtest/gtest.h>
2 #include <marnav/nmea/aam.hpp>
3 #include <marnav/nmea/nmea.hpp>
4 #include "type_traits_helper.hpp"
6 namespace
9 using namespace marnav;
11 class Test_nmea_aam : public ::testing::Test
15 TEST_F(Test_nmea_aam, contruction) { EXPECT_NO_THROW(nmea::aam aam); }
17 TEST_F(Test_nmea_aam, properties) { nmea_sentence_traits<nmea::aam>(); }
19 TEST_F(Test_nmea_aam, parse)
21 auto s = nmea::make_sentence("$GPAAM,A,A,0.5,N,POINT1*6E");
22 ASSERT_NE(nullptr, s);
24 auto aam = nmea::sentence_cast<nmea::aam>(s);
25 ASSERT_NE(nullptr, aam);
27 auto radius = aam->get_arrival_circle_radius();
28 EXPECT_TRUE(radius.available());
29 EXPECT_NEAR(0.5, radius.value(), 1e-8);
32 TEST_F(Test_nmea_aam, parse_wrong_distance_unit)
34 EXPECT_ANY_THROW(nmea::make_sentence("$GPAAM,,,0.5,M,POINT1*6D"));
37 TEST_F(Test_nmea_aam, parse_missing_distance_unit)
39 EXPECT_ANY_THROW(nmea::make_sentence("$GPAAM,,,0.5,,POINT1*20"));
42 TEST_F(Test_nmea_aam, parse_invalid_number_of_arguments)
44 EXPECT_ANY_THROW(nmea::sentence_parse<nmea::aam>(nmea::talker_id::none, {4, "@"}));
45 EXPECT_ANY_THROW(nmea::sentence_parse<nmea::aam>(nmea::talker_id::none, {6, "@"}));
48 TEST_F(Test_nmea_aam, empty_to_string)
50 nmea::aam aam;
52 EXPECT_STREQ("$GPAAM,,,,,*76", nmea::to_string(aam).c_str());
55 TEST_F(Test_nmea_aam, set_arrival_circle_entered_ok)
57 nmea::aam aam;
58 aam.set_arrival_circle_entered(nmea::status::ok);
60 EXPECT_STREQ("$GPAAM,A,,,,*37", nmea::to_string(aam).c_str());
63 TEST_F(Test_nmea_aam, set_arrival_circle_entered_warning)
65 nmea::aam aam;
66 aam.set_arrival_circle_entered(nmea::status::warning);
68 EXPECT_STREQ("$GPAAM,V,,,,*20", nmea::to_string(aam).c_str());
71 TEST_F(Test_nmea_aam, set_arrival_circle_entered_invalid_status)
73 nmea::aam aam;
74 EXPECT_THROW(
75 aam.set_arrival_circle_entered(static_cast<nmea::status>('?')), std::invalid_argument);
78 TEST_F(Test_nmea_aam, set_perpendicular_passed_ok)
80 nmea::aam aam;
81 aam.set_perpendicular_passed(nmea::status::ok);
83 EXPECT_STREQ("$GPAAM,,A,,,*37", nmea::to_string(aam).c_str());
86 TEST_F(Test_nmea_aam, set_perpendicular_passed_warning)
88 nmea::aam aam;
89 aam.set_perpendicular_passed(nmea::status::warning);
91 EXPECT_STREQ("$GPAAM,,V,,,*20", nmea::to_string(aam).c_str());
94 TEST_F(Test_nmea_aam, set_perpendicular_passed_invalid_status)
96 nmea::aam aam;
97 EXPECT_THROW(
98 aam.set_perpendicular_passed(static_cast<nmea::status>('?')), std::invalid_argument);
101 TEST_F(Test_nmea_aam, set_arrival_circle_radius)
103 nmea::aam aam;
104 aam.set_arrival_circle_radius(1.2);
106 EXPECT_STREQ("$GPAAM,,,1.2,N,*15", nmea::to_string(aam).c_str());
109 TEST_F(Test_nmea_aam, set_arrival_circle_radius_negative)
111 nmea::aam aam;
113 EXPECT_THROW(aam.set_arrival_circle_radius(-1.2), std::invalid_argument);
116 TEST_F(Test_nmea_aam, set_waypoint_id)
118 nmea::aam aam;
119 aam.set_waypoint_id(nmea::waypoint{"wpt1"});
121 EXPECT_STREQ("$GPAAM,,,,,wpt1*34", nmea::to_string(aam).c_str());