@@ -45,4 +45,96 @@ BOOST_AUTO_TEST_CASE(polyline6_test_case)
45
45
decodePolyline<1000000 >(encodePolyline<1000000 >(coords.begin (), coords.end ())).begin ()));
46
46
}
47
47
48
+ BOOST_AUTO_TEST_CASE (empty_polyline_test)
49
+ {
50
+ using namespace osrm ::engine;
51
+ using namespace osrm ::util;
52
+
53
+ std::vector<Coordinate> empty_coords;
54
+ BOOST_CHECK_EQUAL (encodePolyline (empty_coords.begin (), empty_coords.end ()), " " );
55
+ BOOST_CHECK (decodePolyline (" " ).empty ());
56
+ }
57
+ BOOST_AUTO_TEST_CASE (polyline_single_point_test)
58
+ {
59
+ using namespace osrm ::engine;
60
+ using namespace osrm ::util;
61
+
62
+ const std::vector<Coordinate> coords ({{FixedLongitude{-122414000 }, FixedLatitude{37776000 }}});
63
+
64
+ const std::string encoded = encodePolyline (coords.begin (), coords.end ());
65
+ BOOST_CHECK_EQUAL (encoded, " _cqeFn~cjV" );
66
+
67
+ const auto decoded = decodePolyline (encoded);
68
+ BOOST_CHECK_EQUAL (decoded.size (), 1 );
69
+ BOOST_CHECK_EQUAL (decoded[0 ].lon , FixedLongitude{-122414000 });
70
+ BOOST_CHECK_EQUAL (decoded[0 ].lat , FixedLatitude{37776000 });
71
+ }
72
+
73
+ BOOST_AUTO_TEST_CASE (polyline_multiple_points_test)
74
+ {
75
+ using namespace osrm ::engine;
76
+ using namespace osrm ::util;
77
+
78
+ const std::vector<Coordinate> coords ({{FixedLongitude{-122414000 }, FixedLatitude{37776000 }},
79
+ {FixedLongitude{-122420000 }, FixedLatitude{37779000 }},
80
+ {FixedLongitude{-122421000 }, FixedLatitude{37780000 }}});
81
+
82
+ const std::string encoded = encodePolyline (coords.begin (), coords.end ());
83
+ BOOST_CHECK_EQUAL (encoded, " _cqeFn~cjVwQnd@gEfE" );
84
+
85
+ const auto decoded = decodePolyline (encoded);
86
+ BOOST_CHECK_EQUAL (decoded.size (), 3 );
87
+ for (size_t i = 0 ; i < coords.size (); ++i)
88
+ {
89
+ BOOST_CHECK_EQUAL (decoded[i].lon , coords[i].lon );
90
+ BOOST_CHECK_EQUAL (decoded[i].lat , coords[i].lat );
91
+ }
92
+ }
93
+
94
+ BOOST_AUTO_TEST_CASE (polyline_large_coordinate_difference_test)
95
+ {
96
+ using namespace osrm ::engine;
97
+ using namespace osrm ::util;
98
+
99
+ const std::vector<Coordinate> coords ({{FixedLongitude{-179000000 }, FixedLatitude{-89000000 }},
100
+ {FixedLongitude{179000000 }, FixedLatitude{89000000 }}});
101
+
102
+ const std::string encoded = encodePolyline (coords.begin (), coords.end ());
103
+ BOOST_CHECK_EQUAL (encoded, " ~xe~O~|oca@_sl}`@_{`hcA" );
104
+
105
+ const auto decoded = decodePolyline (encoded);
106
+ BOOST_CHECK_EQUAL (decoded.size (), 2 );
107
+ for (size_t i = 0 ; i < coords.size (); ++i)
108
+ {
109
+ BOOST_CHECK_EQUAL (decoded[i].lon , coords[i].lon );
110
+ BOOST_CHECK_EQUAL (decoded[i].lat , coords[i].lat );
111
+ }
112
+ }
113
+
114
+ BOOST_AUTO_TEST_CASE (roundtrip)
115
+ {
116
+ using namespace osrm ::engine;
117
+ using namespace osrm ::util;
118
+
119
+ {
120
+ const auto encoded = " _chxEn`zvN\\\\ ]]" ;
121
+ const auto decoded = decodePolyline (encoded);
122
+ const auto reencoded = encodePolyline (decoded.begin (), decoded.end ());
123
+ BOOST_CHECK_EQUAL (encoded, reencoded);
124
+ }
125
+ {
126
+ const auto encoded =
127
+ " gcneIpgxzRcDnBoBlEHzKjBbHlG`@`IkDxIiKhKoMaLwTwHeIqHuAyGXeB~Ew@fFjAtIzExF" ;
128
+ const auto decoded = decodePolyline (encoded);
129
+ const auto reencoded = encodePolyline (decoded.begin (), decoded.end ());
130
+ BOOST_CHECK_EQUAL (encoded, reencoded);
131
+ }
132
+ {
133
+ const auto encoded = " _p~iF~ps|U_ulLnnqC_mqNvxq`@" ;
134
+ const auto decoded = decodePolyline (encoded);
135
+ const auto reencoded = encodePolyline (decoded.begin (), decoded.end ());
136
+ BOOST_CHECK_EQUAL (encoded, reencoded);
137
+ }
138
+ }
139
+
48
140
BOOST_AUTO_TEST_SUITE_END ()
0 commit comments