Pico GPS Teseo I2C
Loading...
Searching...
No Matches
test_gps_nmea_lib.cpp
Go to the documentation of this file.
1#include <gtest/gtest.h>
2#include <string>
3import nmea;
4
5// generic template for NMEA parser unit tests
6// base class for all test fixtures, parameterized or not.
7template <class T>
8class nmeaTest : public testing::Test {
9protected:
11 T o;
12};
13
14// ==================================================================================
15// template for parameterised parser tests
16// generic fixture that allows to test any nmea parser class' parser function
17// with multiple data inputs
18template <class T>
19class nmeaParsers : public nmeaTest<T>, public testing::WithParamInterface<std::tuple<std::string, bool>> {
20protected:
22};
23
24class nmea_gllParser : public nmeaParsers<nmea::gll> {};
25
26TEST_P(nmea_gllParser, gllparsetest) {
27 bool expected = std::get<1>(GetParam());
28 std::string s = std::get<0>(GetParam());
29 ASSERT_EQ(expected, o.from_data(s, o));
30}
31
33 ,
35 ::testing::Values(
36 std::make_tuple("$XXXXXXXX", false), // invalid payload
37 std::make_tuple("", false), // empty payload
38 std::make_tuple("$GPGLL,5051.83778,N,00422.55809,S,185427.150,A,N*4F", true),
39 std::make_tuple("$GPGLL,5051.83778,N,00422.55809,S,185427.150,V,N*4F", true))
40);
41
42class nmea_ggaParser : public nmeaParsers<nmea::gga> {};
43
44TEST_P(nmea_ggaParser, ggaparsetest) {
45 bool expected = std::get<1>(GetParam());
46 std::string s = std::get<0>(GetParam());
47 ASSERT_EQ(expected, o.from_data(s, o));
48}
49
51 ,
53 ::testing::Values(
54 std::make_tuple("$XXXXXXXX", false), // invalid payload
55 std::make_tuple("", false), // empty payload
56 std::make_tuple("$GPGGA,191237.000,5051.78066,N,00422.57079,E,1,05,3.7,027.26,M,47.3,M,,*65", true))
57);
58
59class nmea_gsaParser : public nmeaParsers<nmea::gsa> {};
60
61TEST_P(nmea_gsaParser, gsaparsetest) {
62 bool expected = std::get<1>(GetParam());
63 std::string s = std::get<0>(GetParam());
64 ASSERT_EQ(expected, o.from_data(s, o));
65}
66
68 ,
70 ::testing::Values(
71 std::make_tuple("$XXXXXXXX", false), // invalid payload
72 std::make_tuple("", false), // empty payload
73 std::make_tuple("$GNGSA,A,3,15,18,,,,,,,,,,,4.7,3.7,2.9*2D", true),
74 std::make_tuple("$GNGSA,A,3,73,65,81,,,,,,,,,,4.7,3.7,2.9*2E", true))
75);
76
77// ==================================================================================
78
79// unit test for gll parser
80class nmea_gll : public nmeaTest<nmea::gll> {
81protected:
82 nmea_gll() : parse_ok(false) {}
83 void SetUp() override {
84 parse_ok = o.from_data("$GPGLL,5051.83778,N,00422.55809,S,185427.150,A,N*4F", o);
85 }
87};
88
90 EXPECT_TRUE(parse_ok) << "parse failed";
91}
92
93TEST_F(nmea_gll, source) {
94 EXPECT_TRUE(o.source == nmea::talker_id::gps);
95}
96
98 EXPECT_FLOAT_EQ(o.lat, 50.8639641);
99}
100
102 EXPECT_FLOAT_EQ(o.lon, 4.37596798);
103}
104
106 EXPECT_EQ((int)(o.t.hours().count()), 18) << "hours wrong. expected: 18. got: " << (int)(o.t.hours().count());
107 EXPECT_EQ((int)(o.t.minutes().count()), 54) << "minutes wrong";
108 EXPECT_EQ((int)(o.t.seconds().count()), 27) << "seconds wrong";
109 EXPECT_EQ((int)(o.t.subseconds().count()), 150) << "subseconds wrong";
110}
111
113 EXPECT_TRUE(o.valid);
114}
115
116// unit test for gga parser
117class nmea_gga : public nmeaTest<nmea::gga> {
118protected:
119 nmea_gga() : parse_ok(false) {}
120 void SetUp() override {
121 parse_ok = o.from_data("$GPGGA,191237.000,5051.78066,N,00422.57079,E,1,05,3.7,027.26,M,47.3,M,,*65", o);
122 }
124};
125
127 EXPECT_TRUE(parse_ok) << "parse failed";
128}
129
130TEST_F(nmea_gga, source) {
131 EXPECT_TRUE(o.source == nmea::talker_id::gps);
132}
133
135 EXPECT_FLOAT_EQ(o.lat, 50.86301);
136}
137
139 EXPECT_FLOAT_EQ(o.lon, 4.3761797);
140}
141
143 EXPECT_EQ((int)(o.t.hours().count()), 19) << "hours wrong. expected: 18. got: " << (int)(o.t.hours().count());
144 EXPECT_EQ((int)(o.t.minutes().count()), 12) << "minutes wrong";
145 EXPECT_EQ((int)(o.t.seconds().count()), 37) << "seconds wrong";
146 EXPECT_EQ((int)(o.t.subseconds().count()), 0) << "subseconds wrong";
147}
148
150 EXPECT_EQ(o.sats, 5);
151}
152
154 EXPECT_EQ(o.qual, nmea::quality::q1);
155}
156
158 EXPECT_FLOAT_EQ(o.alt, 27.2600002);
159}
160
161TEST_F(nmea_gga, geosep) {
162 EXPECT_FLOAT_EQ(o.geosep, 47.2999992);
163}
void SetUp() override
void SetUp() override
TEST_P(nmea_gllParser, gllparsetest)
TEST_F(nmea_gll, parse)
INSTANTIATE_TEST_SUITE_P(, nmea_gllParser, ::testing::Values(std::make_tuple("$XXXXXXXX", false), std::make_tuple("", false), std::make_tuple("$GPGLL,5051.83778,N,00422.55809,S,185427.150,A,N*4F", true), std::make_tuple("$GPGLL,5051.83778,N,00422.55809,S,185427.150,V,N*4F", true)))