// #include "extractor/graph_compressor.hpp" // #include "extractor/compressed_edge_container.hpp" // #include "extractor/maneuver_override.hpp" // #include "extractor/restriction.hpp" // #include "util/node_based_graph.hpp" // #include "util/typedefs.hpp" // #include "../unit_tests/mocks/mock_scripting_environment.hpp" // #include // #include // #include // #include // #include // BOOST_AUTO_TEST_SUITE(graph_compressor) // using namespace osrm; // using namespace osrm::extractor; // using InputEdge = util::NodeBasedDynamicGraph::InputEdge; // using Graph = util::NodeBasedDynamicGraph; // namespace // { // // creates a default edge of unit weight // inline InputEdge MakeUnitEdge(const NodeID from, const NodeID to) // { // return {from, // source // to, // target // 1, // weight // 1, // duration // GeometryID{0, false}, // geometry_id // false, // reversed // NodeBasedEdgeClassification(), // default flags // 0}; // AnnotationID // } // bool compatible(Graph const &graph, // const std::vector &node_data_container, // EdgeID const first, // EdgeID second) // { // auto const &first_flags = graph.GetEdgeData(first).flags; // auto const &second_flags = graph.GetEdgeData(second).flags; // if (!(first_flags == second_flags)) // return false; // if (graph.GetEdgeData(first).reversed != graph.GetEdgeData(second).reversed) // return false; // auto const &first_annotation = node_data_container[graph.GetEdgeData(first).annotation_data]; // auto const &second_annotation = // node_data_container[graph.GetEdgeData(second).annotation_data]; // return first_annotation.CanCombineWith(second_annotation); // } // } // namespace // BOOST_AUTO_TEST_CASE(long_road_test) // { // // // // 0---1---2---3---4 // // // GraphCompressor compressor; // std::unordered_set barrier_nodes; // std::unordered_set traffic_lights; // std::vector restrictions; // std::vector conditional_restrictions; // std::vector annotations(1); // CompressedEdgeContainer container; // test::MockScriptingEnvironment scripting_environment; // std::vector maneuver_overrides; // std::vector edges = {MakeUnitEdge(0, 1), // MakeUnitEdge(1, 0), // MakeUnitEdge(1, 2), // MakeUnitEdge(2, 1), // MakeUnitEdge(2, 3), // MakeUnitEdge(3, 2), // MakeUnitEdge(3, 4), // MakeUnitEdge(4, 3)}; // Graph graph(5, edges); // BOOST_CHECK(compatible(graph, annotations, 0, 2)); // BOOST_CHECK(compatible(graph, annotations, 2, 4)); // BOOST_CHECK(compatible(graph, annotations, 4, 6)); // compressor.Compress(barrier_nodes, // traffic_lights, // scripting_environment, // restrictions, // conditional_restrictions, // maneuver_overrides, // graph, // annotations, // container); // BOOST_CHECK_EQUAL(graph.FindEdge(0, 1), SPECIAL_EDGEID); // BOOST_CHECK_EQUAL(graph.FindEdge(1, 2), SPECIAL_EDGEID); // BOOST_CHECK_EQUAL(graph.FindEdge(2, 3), SPECIAL_EDGEID); // BOOST_CHECK_EQUAL(graph.FindEdge(3, 4), SPECIAL_EDGEID); // BOOST_CHECK(graph.FindEdge(0, 4) != SPECIAL_EDGEID); // } // BOOST_AUTO_TEST_CASE(loop_test) // { // // // // 0---1---2 // // | | // // 5---4---3 // // // GraphCompressor compressor; // std::unordered_set barrier_nodes; // std::unordered_set traffic_lights; // std::vector restrictions; // std::vector conditional_restrictions; // CompressedEdgeContainer container; // std::vector annotations(1); // test::MockScriptingEnvironment scripting_environment; // std::vector maneuver_overrides; // std::vector edges = {MakeUnitEdge(0, 1), // MakeUnitEdge(0, 5), // MakeUnitEdge(1, 0), // MakeUnitEdge(1, 2), // MakeUnitEdge(2, 1), // MakeUnitEdge(2, 3), // MakeUnitEdge(3, 2), // MakeUnitEdge(3, 4), // MakeUnitEdge(4, 3), // MakeUnitEdge(4, 5), // MakeUnitEdge(5, 0), // MakeUnitEdge(5, 4)}; // Graph graph(6, edges); // BOOST_CHECK(edges.size() == 12); // BOOST_CHECK(compatible(graph, annotations, 0, 1)); // BOOST_CHECK(compatible(graph, annotations, 1, 2)); // BOOST_CHECK(compatible(graph, annotations, 2, 3)); // BOOST_CHECK(compatible(graph, annotations, 3, 4)); // BOOST_CHECK(compatible(graph, annotations, 4, 5)); // BOOST_CHECK(compatible(graph, annotations, 5, 6)); // BOOST_CHECK(compatible(graph, annotations, 6, 7)); // BOOST_CHECK(compatible(graph, annotations, 7, 8)); // BOOST_CHECK(compatible(graph, annotations, 8, 9)); // BOOST_CHECK(compatible(graph, annotations, 9, 10)); // BOOST_CHECK(compatible(graph, annotations, 10, 11)); // BOOST_CHECK(compatible(graph, annotations, 11, 0)); // compressor.Compress(barrier_nodes, // traffic_lights, // scripting_environment, // restrictions, // conditional_restrictions, // maneuver_overrides, // graph, // annotations, // container); // BOOST_CHECK_EQUAL(graph.FindEdge(5, 0), SPECIAL_EDGEID); // BOOST_CHECK_EQUAL(graph.FindEdge(0, 1), SPECIAL_EDGEID); // BOOST_CHECK_EQUAL(graph.FindEdge(1, 2), SPECIAL_EDGEID); // BOOST_CHECK_EQUAL(graph.FindEdge(2, 3), SPECIAL_EDGEID); // BOOST_CHECK(graph.FindEdge(5, 3) != SPECIAL_EDGEID); // BOOST_CHECK(graph.FindEdge(3, 4) != SPECIAL_EDGEID); // BOOST_CHECK(graph.FindEdge(4, 5) != SPECIAL_EDGEID); // } // BOOST_AUTO_TEST_CASE(t_intersection) // { // // // // 0---1---2 // // | // // 3 // // // GraphCompressor compressor; // std::unordered_set barrier_nodes; // std::unordered_set traffic_lights; // std::vector annotations(1); // std::vector restrictions; // std::vector conditional_restrictions; // CompressedEdgeContainer container; // test::MockScriptingEnvironment scripting_environment; // std::vector maneuver_overrides; // std::vector edges = {MakeUnitEdge(0, 1), // MakeUnitEdge(1, 0), // MakeUnitEdge(1, 2), // MakeUnitEdge(1, 3), // MakeUnitEdge(2, 1), // MakeUnitEdge(3, 1)}; // Graph graph(4, edges); // BOOST_CHECK(compatible(graph, annotations, 0, 1)); // BOOST_CHECK(compatible(graph, annotations, 1, 2)); // BOOST_CHECK(compatible(graph, annotations, 2, 3)); // BOOST_CHECK(compatible(graph, annotations, 3, 4)); // BOOST_CHECK(compatible(graph, annotations, 4, 5)); // compressor.Compress(barrier_nodes, // traffic_lights, // scripting_environment, // restrictions, // conditional_restrictions, // maneuver_overrides, // graph, // annotations, // container); // BOOST_CHECK(graph.FindEdge(0, 1) != SPECIAL_EDGEID); // BOOST_CHECK(graph.FindEdge(1, 2) != SPECIAL_EDGEID); // BOOST_CHECK(graph.FindEdge(1, 3) != SPECIAL_EDGEID); // } // BOOST_AUTO_TEST_CASE(street_name_changes) // { // // // // 0---1---2 // // // GraphCompressor compressor; // std::unordered_set barrier_nodes; // std::unordered_set traffic_lights; // std::vector annotations(2); // std::vector restrictions; // std::vector conditional_restrictions; // CompressedEdgeContainer container; // test::MockScriptingEnvironment scripting_environment; // std::vector maneuver_overrides; // std::vector edges = { // MakeUnitEdge(0, 1), MakeUnitEdge(1, 0), MakeUnitEdge(1, 2), MakeUnitEdge(2, 1)}; // annotations[1].name_id = 1; // edges[2].data.annotation_data = edges[3].data.annotation_data = 1; // Graph graph(5, edges); // BOOST_CHECK(compatible(graph, annotations, 0, 1)); // BOOST_CHECK(compatible(graph, annotations, 2, 3)); // compressor.Compress(barrier_nodes, // traffic_lights, // scripting_environment, // restrictions, // conditional_restrictions, // maneuver_overrides, // graph, // annotations, // container); // BOOST_CHECK(graph.FindEdge(0, 1) != SPECIAL_EDGEID); // BOOST_CHECK(graph.FindEdge(1, 2) != SPECIAL_EDGEID); // } // BOOST_AUTO_TEST_CASE(direction_changes) // { // // // // 0-->1---2 // // // GraphCompressor compressor; // std::unordered_set barrier_nodes; // std::unordered_set traffic_lights; // std::vector annotations(1); // std::vector restrictions; // std::vector conditional_restrictions; // CompressedEdgeContainer container; // test::MockScriptingEnvironment scripting_environment; // std::vector maneuver_overrides; // std::vector edges = { // MakeUnitEdge(0, 1), MakeUnitEdge(1, 0), MakeUnitEdge(1, 2), MakeUnitEdge(2, 1)}; // // make first edge point forward // edges[1].data.reversed = true; // Graph graph(5, edges); // compressor.Compress(barrier_nodes, // traffic_lights, // scripting_environment, // restrictions, // conditional_restrictions, // maneuver_overrides, // graph, // annotations, // container); // BOOST_CHECK(graph.FindEdge(0, 1) != SPECIAL_EDGEID); // BOOST_CHECK(graph.FindEdge(1, 2) != SPECIAL_EDGEID); // } // BOOST_AUTO_TEST_SUITE_END()