NMEA: remove deprecated type talker_id
[marnav.git] / test / nmea / Test_nmea_vdm.cpp
blobc74476af38489f8603ab9be226e4eb313625b15d
1 #include <gtest/gtest.h>
2 #include <marnav/nmea/vdm.hpp>
3 #include <marnav/nmea/mtw.hpp>
4 #include <marnav/nmea/nmea.hpp>
5 #include <marnav/nmea/ais_helper.hpp>
6 #include "type_traits_helper.hpp"
8 namespace
11 using namespace marnav;
13 class Test_nmea_vdm : public ::testing::Test
17 TEST_F(Test_nmea_vdm, contruction)
19 EXPECT_NO_THROW(nmea::vdm vdm);
22 TEST_F(Test_nmea_vdm, properties)
24 nmea_sentence_traits<nmea::vdm>();
27 TEST_F(Test_nmea_vdm, parse_invalid_number_of_arguments)
29 EXPECT_ANY_THROW(
30 nmea::detail::factory::sentence_parse<nmea::vdm>(nmea::talker::none, {5, "@"}));
31 EXPECT_ANY_THROW(
32 nmea::detail::factory::sentence_parse<nmea::vdm>(nmea::talker::none, {7, "@"}));
35 TEST_F(Test_nmea_vdm, parse_1)
37 auto s = nmea::make_sentence("!AIVDM,1,1,,B,177KQJ5000G?tO`K>RA1wUbN0TKH,0*5C");
38 ASSERT_NE(nullptr, s);
40 auto vdm = nmea::sentence_cast<nmea::vdm>(s);
41 ASSERT_NE(nullptr, vdm);
43 auto fragments = vdm->get_n_fragments();
44 EXPECT_EQ(1u, fragments);
46 auto fragment = vdm->get_fragment();
47 EXPECT_EQ(1u, fragment);
49 auto payload = vdm->get_payload();
50 EXPECT_STREQ("177KQJ5000G?tO`K>RA1wUbN0TKH", payload.c_str());
53 TEST_F(Test_nmea_vdm, parse_2)
55 auto s0 = nmea::make_sentence(
56 "!AIVDM,2,1,3,B,55P5TL01VIaAL@7WKO@mBplU@<PDhh000000001S;AJ::4A80?4i@E53,0*3E");
57 ASSERT_NE(nullptr, s0);
59 auto vdm0 = nmea::sentence_cast<nmea::vdm>(s0);
60 ASSERT_NE(nullptr, vdm0);
62 auto s1 = nmea::make_sentence("!AIVDM,2,2,3,B,1@0000000000000,2*55");
63 ASSERT_NE(nullptr, s1);
65 auto vdm1 = nmea::sentence_cast<nmea::vdm>(s1);
66 ASSERT_NE(nullptr, vdm1);
69 TEST_F(Test_nmea_vdm, empty_to_string)
71 nmea::vdm vdm;
73 EXPECT_STREQ("!AIVDM,0,0,,,,0*67", nmea::to_string(vdm).c_str());
76 TEST_F(Test_nmea_vdm, collect_payload)
78 std::vector<std::unique_ptr<nmea::sentence>> v;
80 v.push_back(nmea::make_sentence(
81 "!AIVDM,2,1,3,B,55P5TL01VIaAL@7WKO@mBplU@<PDhh000000001S;AJ::4A80?4i@E53,0*3E"));
82 v.push_back(nmea::make_sentence("!AIVDM,2,2,3,B,1@0000000000000,2*55"));
84 auto result = nmea::collect_payload(v.begin(), v.end());
86 ASSERT_EQ(2u, result.size());
87 EXPECT_EQ(0u, result[0].second);
88 EXPECT_EQ(2u, result[1].second);
89 EXPECT_STREQ(
90 "55P5TL01VIaAL@7WKO@mBplU@<PDhh000000001S;AJ::4A80?4i@E53", result[0].first.c_str());
91 EXPECT_STREQ("1@0000000000000", result[1].first.c_str());
94 TEST_F(Test_nmea_vdm, collect_payload_wrong_sentence)
96 std::vector<std::unique_ptr<nmea::sentence>> v;
97 v.push_back(std::unique_ptr<nmea::sentence>(new nmea::mtw));
99 EXPECT_ANY_THROW(nmea::collect_payload(v.begin(), v.end()));
102 TEST_F(Test_nmea_vdm, collect_payload_object_iterators)
104 std::vector<nmea::vdm> v;
105 v.push_back(nmea::vdm{});
106 v.push_back(nmea::vdm{});
108 auto result = nmea::collect_payload(v.begin(), v.end());
110 ASSERT_EQ(2u, result.size());
113 TEST_F(Test_nmea_vdm, collect_payload_pointers)
115 nmea::vdm v[3];
117 auto result = nmea::collect_payload(v, v + 3);
119 ASSERT_EQ(3u, result.size());
122 TEST_F(Test_nmea_vdm, collect_payload_pointers_begin_end)
124 using namespace std;
126 nmea::vdm v[3];
128 auto result = nmea::collect_payload(begin(v), end(v));
130 ASSERT_EQ(3u, result.size());
133 TEST_F(Test_nmea_vdm, make_vdms__1)
135 const std::vector<std::pair<std::string, uint32_t>> payload = {
136 {"177KQJ5000G?tO`K>RA1wUbN0TKH", 0},
139 const char * expected = "!AIVDM,1,1,,B,177KQJ5000G?tO`K>RA1wUbN0TKH,0*5C";
141 auto const sentences = nmea::make_vdms(payload);
143 ASSERT_EQ(1u, sentences.size());
144 ASSERT_EQ(nmea::sentence_id::VDM, sentences[0]->id());
146 auto const result = nmea::to_string(*sentences[0]);
148 EXPECT_STREQ(expected, result.c_str());
151 TEST_F(Test_nmea_vdm, make_vdms__2)
153 const std::vector<std::pair<std::string, uint32_t>> payload
154 = {{"55P5TL01VIaAL@7WKO@mBplU@<PDhh000000001S;AJ::4A80?4i@E53", 0},
155 {"1@0000000000000", 2}};
157 const char * expected[2]
158 = {"!AIVDM,2,1,3,B,55P5TL01VIaAL@7WKO@mBplU@<PDhh000000001S;AJ::4A80?4i@E53,0*3E",
159 "!AIVDM,2,2,3,B,1@0000000000000,2*55"};
161 auto const sentences = nmea::make_vdms(payload, 3);
163 ASSERT_EQ(2u, sentences.size());
165 for (auto i = 0; i < 2; ++i) {
166 ASSERT_EQ(nmea::sentence_id::VDM, sentences[i]->id());
167 auto const result = nmea::to_string(*sentences[i]);
168 EXPECT_STREQ(expected[i], result.c_str());