2121
2222BOOST_AUTO_TEST_SUITE (tile)
2323
24- template <typename algorithm> void test_tile(algorithm &osrm )
24+ void validate_value(protozero::pbf_reader value )
2525{
2626 using namespace osrm ;
27+ while (value.next ())
28+ {
29+ switch (value.tag ())
30+ {
31+ case util::vector_tile::VARIANT_TYPE_BOOL:
32+ value.get_bool ();
33+ break ;
34+ case util::vector_tile::VARIANT_TYPE_DOUBLE:
35+ value.get_double ();
36+ break ;
37+ case util::vector_tile::VARIANT_TYPE_FLOAT:
38+ value.get_float ();
39+ break ;
40+ case util::vector_tile::VARIANT_TYPE_STRING:
41+ value.get_string ();
42+ break ;
43+ case util::vector_tile::VARIANT_TYPE_UINT64:
44+ value.get_uint64 ();
45+ break ;
46+ case util::vector_tile::VARIANT_TYPE_SINT64:
47+ value.get_sint64 ();
48+ break ;
49+ }
50+ }
51+ }
2752
28- // This tile should contain most of monaco
29- TileParameters params{17059 , 11948 , 15 };
30-
31- std::string result;
32- const auto rc = osrm.Tile (params, result);
33- BOOST_CHECK (rc == Status::Ok);
34-
35- BOOST_CHECK (result.size () > 114000 );
36-
37- protozero::pbf_reader tile_message (result);
38- tile_message.next ();
39- BOOST_CHECK_EQUAL (tile_message.tag (), util::vector_tile::LAYER_TAG); // must be a layer
40- protozero::pbf_reader layer_message = tile_message.get_message ();
53+ void validate_feature_layer (protozero::pbf_reader &layer_message)
54+ {
55+ using namespace osrm ;
4156
4257 const auto check_feature = [](protozero::pbf_reader feature_message) {
4358 feature_message.next (); // advance parser to first entry
@@ -82,33 +97,6 @@ template <typename algorithm> void test_tile(algorithm &osrm)
8297 BOOST_CHECK_GT (std::distance (geometry_iter_pair.begin (), geometry_iter_pair.end ()), 1 );
8398 };
8499
85- const auto check_value = [](protozero::pbf_reader value) {
86- while (value.next ())
87- {
88- switch (value.tag ())
89- {
90- case util::vector_tile::VARIANT_TYPE_BOOL:
91- value.get_bool ();
92- break ;
93- case util::vector_tile::VARIANT_TYPE_DOUBLE:
94- value.get_double ();
95- break ;
96- case util::vector_tile::VARIANT_TYPE_FLOAT:
97- value.get_float ();
98- break ;
99- case util::vector_tile::VARIANT_TYPE_STRING:
100- value.get_string ();
101- break ;
102- case util::vector_tile::VARIANT_TYPE_UINT64:
103- value.get_uint64 ();
104- break ;
105- case util::vector_tile::VARIANT_TYPE_SINT64:
106- value.get_sint64 ();
107- break ;
108- }
109- }
110- };
111-
112100 auto number_of_speed_keys = 0u ;
113101 auto number_of_speed_values = 0u ;
114102
@@ -133,7 +121,7 @@ template <typename algorithm> void test_tile(algorithm &osrm)
133121 number_of_speed_keys++;
134122 break ;
135123 case util::vector_tile::VARIANT_TAG:
136- check_value (layer_message.get_message ());
124+ validate_value (layer_message.get_message ());
137125 number_of_speed_values++;
138126 break ;
139127 default :
@@ -144,9 +132,11 @@ template <typename algorithm> void test_tile(algorithm &osrm)
144132
145133 BOOST_CHECK_EQUAL (number_of_speed_keys, 7 );
146134 BOOST_CHECK_GT (number_of_speed_values, 128 ); // speed value resolution
135+ }
147136
148- tile_message.next ();
149- layer_message = tile_message.get_message ();
137+ void validate_turn_layer (protozero::pbf_reader &layer_message)
138+ {
139+ using namespace osrm ;
150140
151141 const auto check_turn_feature = [](protozero::pbf_reader feature_message) {
152142 feature_message.next (); // advance parser to first entry
@@ -203,7 +193,7 @@ template <typename algorithm> void test_tile(algorithm &osrm)
203193 number_of_turn_keys++;
204194 break ;
205195 case util::vector_tile::VARIANT_TAG:
206- check_value (layer_message.get_message ());
196+ validate_value (layer_message.get_message ());
207197 break ;
208198 default :
209199 BOOST_CHECK (false ); // invalid tag
@@ -213,10 +203,11 @@ template <typename algorithm> void test_tile(algorithm &osrm)
213203
214204 BOOST_CHECK_EQUAL (number_of_turn_keys, 4 );
215205 BOOST_CHECK (number_of_turns_found > 700 );
206+ }
216207
217- tile_message. next ();
218- layer_message = tile_message. get_message ();
219-
208+ void validate_node_layer (protozero::pbf_reader &layer_message)
209+ {
210+ using namespace osrm ;
220211 auto number_of_nodes_found = 0u ;
221212
222213 const auto check_osmnode_feature = [](protozero::pbf_reader feature_message) {
@@ -267,29 +258,60 @@ template <typename algorithm> void test_tile(algorithm &osrm)
267258 BOOST_CHECK_EQUAL (number_of_nodes_found, 1791 );
268259}
269260
261+ void validate_tile (const osrm::OSRM &osrm)
262+ {
263+ using namespace osrm ;
264+
265+ // This tile should contain most of monaco
266+ TileParameters params{17059 , 11948 , 15 };
267+
268+ std::string result;
269+ const auto rc = osrm.Tile (params, result);
270+ BOOST_CHECK (rc == Status::Ok);
271+
272+ BOOST_CHECK (result.size () > 114000 );
273+
274+ protozero::pbf_reader tile_message (result);
275+
276+ tile_message.next ();
277+ BOOST_CHECK_EQUAL (tile_message.tag (), util::vector_tile::LAYER_TAG); // must be a layer
278+ protozero::pbf_reader layer_message = tile_message.get_message ();
279+ validate_feature_layer (layer_message);
280+
281+ tile_message.next ();
282+ BOOST_CHECK_EQUAL (tile_message.tag (), util::vector_tile::LAYER_TAG); // must be a layer
283+ layer_message = tile_message.get_message ();
284+ validate_turn_layer (layer_message);
285+
286+ tile_message.next ();
287+ BOOST_CHECK_EQUAL (tile_message.tag (), util::vector_tile::LAYER_TAG); // must be a layer
288+ layer_message = tile_message.get_message ();
289+ validate_node_layer (layer_message);
290+ }
291+
270292BOOST_AUTO_TEST_CASE (test_tile_ch)
271293{
272294 using namespace osrm ;
273295 auto osrm = getOSRM (OSRM_TEST_DATA_DIR " /ch/monaco.osrm" , osrm::EngineConfig::Algorithm::CH);
274- test_tile (osrm);
296+ validate_tile (osrm);
275297}
276298
277299BOOST_AUTO_TEST_CASE (test_tile_corech)
278300{
279301 using namespace osrm ;
280302 auto osrm =
281303 getOSRM (OSRM_TEST_DATA_DIR " /corech/monaco.osrm" , osrm::EngineConfig::Algorithm::CoreCH);
282- test_tile (osrm);
304+ validate_tile (osrm);
283305}
284306
285307BOOST_AUTO_TEST_CASE (test_tile_mld)
286308{
287309 using namespace osrm ;
288310 auto osrm = getOSRM (OSRM_TEST_DATA_DIR " /mld/monaco.osrm" , osrm::EngineConfig::Algorithm::MLD);
289- test_tile (osrm);
311+ validate_tile (osrm);
290312}
291313
292- template < typename algorithm> void test_tile_turns (algorithm &osrm)
314+ void test_tile_turns (const osrm::OSRM &osrm)
293315{
294316 using namespace osrm ;
295317
@@ -476,7 +498,7 @@ BOOST_AUTO_TEST_CASE(test_tile_turns_mld)
476498 test_tile_turns (osrm);
477499}
478500
479- template < typename algorithm> void test_tile_speeds (algorithm &osrm)
501+ void test_tile_speeds (const osrm::OSRM &osrm)
480502{
481503 using namespace osrm ;
482504
@@ -666,7 +688,7 @@ BOOST_AUTO_TEST_CASE(test_tile_speeds_mld)
666688 test_tile_speeds (osrm);
667689}
668690
669- template < typename algorithm> void test_tile_nodes (algorithm &osrm)
691+ void test_tile_nodes (const osrm::OSRM &osrm)
670692{
671693 using namespace osrm ;
672694
0 commit comments