AIS: latitude/longitude of messages are now handled using utils::optional.
[marnav.git] / test / ais / Test_ais_message_19.cpp
blob8858ac24a7d46a444d26c77d3b9fe3fa61ffd280
1 #include <gtest/gtest.h>
2 #include <marnav/ais/message_19.hpp>
3 #include <marnav/ais/ais.hpp>
5 namespace
8 using namespace marnav;
10 class Test_ais_message_19 : public ::testing::Test
14 TEST_F(Test_ais_message_19, parse)
16 std::vector<std::pair<std::string, uint32_t>> v;
17 v.push_back(std::make_pair("C000000000H0htY08D41qwv0000000000000000000000000000@", 0));
19 auto result = ais::make_message(v);
20 ASSERT_TRUE(result != nullptr);
22 auto m = ais::message_cast<ais::message_19>(result);
23 ASSERT_TRUE(m != nullptr);
26 TEST_F(Test_ais_message_19, wrong_number_of_bits)
28 EXPECT_ANY_THROW(ais::message_parse<ais::message_19>(ais::raw{311}));
29 EXPECT_ANY_THROW(ais::message_parse<ais::message_19>(ais::raw{313}));
32 TEST_F(Test_ais_message_19, encode_default_values)
34 ais::message_19 m;
36 auto v = ais::encode_message(m);
38 ASSERT_EQ(1u, v.size());
39 EXPECT_STREQ("C0000003wk?8mP=18D3Q3wv00000000000000000000000000000", v[0].first.c_str());
40 EXPECT_EQ(0u, v[0].second);
43 TEST_F(Test_ais_message_19, set_latitude)
45 ais::message_19 m;
46 m.set_latitude(geo::latitude{12.34});
48 auto v = ais::encode_message(m);
50 ASSERT_EQ(1u, v.size());
51 EXPECT_STREQ("C0000003wk?8mP1hvN3Q3wv00000000000000000000000000000", v[0].first.c_str());
52 EXPECT_EQ(0u, v[0].second);
55 TEST_F(Test_ais_message_19, get_latitude)
57 std::vector<std::pair<std::string, uint32_t>> v;
58 v.push_back(std::make_pair("C000000003?8mP1hvN3Q3wv00000000000000000000000000000", 0));
60 auto result = ais::make_message(v);
61 ASSERT_TRUE(result != nullptr);
63 auto m = ais::message_cast<ais::message_19>(result);
64 ASSERT_TRUE(m != nullptr);
66 const geo::latitude expected{12.34};
67 const geo::latitude decoded = *m->get_latitude();
69 EXPECT_EQ(expected, decoded) << "expected value:" << static_cast<double>(expected)
70 << ", decoded value:" << static_cast<double>(decoded);
73 TEST_F(Test_ais_message_19, set_longitude)
75 ais::message_19 m;
76 m.set_longitude(geo::longitude{123.45});
78 auto v = ais::encode_message(m);
80 ASSERT_EQ(1u, v.size());
81 EXPECT_STREQ("C0000003wj=Agp=18D3Q3wv00000000000000000000000000000", v[0].first.c_str());
82 EXPECT_EQ(0u, v[0].second);
85 TEST_F(Test_ais_message_19, get_longitude)
87 std::vector<std::pair<std::string, uint32_t>> v;
88 v.push_back(std::make_pair("C000000002=Agp=18D3Q3wv00000000000000000000000000000", 0));
90 auto result = ais::make_message(v);
91 ASSERT_TRUE(result != nullptr);
93 auto m = ais::message_cast<ais::message_19>(result);
94 ASSERT_TRUE(m != nullptr);
96 const geo::longitude expected{123.45};
97 const geo::longitude decoded = *m->get_longitude();
99 EXPECT_EQ(expected, decoded) << "expected value:" << static_cast<double>(expected)
100 << ", decoded value:" << static_cast<double>(decoded);