Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Byko-Ianko <v.bykoianko@corp.mail.ru>2018-09-25 16:50:41 +0300
committerVlad Mihaylenko <vxmihaylenko@gmail.com>2018-09-28 11:54:01 +0300
commit0d56bdf27aa010e83c28627541d6296b225a9e05 (patch)
treee8b9fa97328afa5c2457ede6cd766b46e5e2cb07
parentca3899981f9d0158fbd773521ec8b238d09676b6 (diff)
Adding some useful method for routing quality tests and adding some new tests.
-rw-r--r--routing/routing_quality/routing_quality_tests/CMakeLists.txt3
-rw-r--r--routing/routing_quality/routing_quality_tests/bigger_roads_tests.cpp18
-rw-r--r--routing/routing_quality/routing_quality_tests/ferry_tests.cpp16
-rw-r--r--routing/routing_quality/routing_quality_tests/passby_roads_tests.cpp36
-rw-r--r--routing/routing_quality/routing_quality_tests/waypoints_tests.cpp76
-rw-r--r--routing/routing_quality/waypoints.cpp24
-rw-r--r--routing/routing_quality/waypoints.hpp17
7 files changed, 114 insertions, 76 deletions
diff --git a/routing/routing_quality/routing_quality_tests/CMakeLists.txt b/routing/routing_quality/routing_quality_tests/CMakeLists.txt
index 3838f4df2f..ce91c392cd 100644
--- a/routing/routing_quality/routing_quality_tests/CMakeLists.txt
+++ b/routing/routing_quality/routing_quality_tests/CMakeLists.txt
@@ -2,6 +2,9 @@ project(routing_quality_tests)
set(
SRC
+ bigger_roads_tests.cpp
+ ferry_tests.cpp
+ passby_roads_tests.cpp
waypoints_tests.cpp
)
diff --git a/routing/routing_quality/routing_quality_tests/bigger_roads_tests.cpp b/routing/routing_quality/routing_quality_tests/bigger_roads_tests.cpp
index 6f70f09bee..75cb7bbbe5 100644
--- a/routing/routing_quality/routing_quality_tests/bigger_roads_tests.cpp
+++ b/routing/routing_quality/routing_quality_tests/bigger_roads_tests.cpp
@@ -1 +1,17 @@
-#pragma once
+#include "testing/testing.hpp"
+
+#include "routing/routing_quality/waypoints.hpp"
+
+using namespace routing_quality;
+
+// Test on preferring better but longer roads should be grouped in this file.
+namespace
+{
+UNIT_TEST(RoutingQuality_MoscowTushino)
+{
+ // Test in Tushino on routing along big routes.
+ TEST(CheckCarRoute({55.84398, 37.45018} /* start */, {55.85489, 37.43784} /* finish */,
+ {{{55.84343, 37.43949}}} /* reference track */),
+ ());
+}
+} // namespace
diff --git a/routing/routing_quality/routing_quality_tests/ferry_tests.cpp b/routing/routing_quality/routing_quality_tests/ferry_tests.cpp
index 6f70f09bee..1ce81501fa 100644
--- a/routing/routing_quality/routing_quality_tests/ferry_tests.cpp
+++ b/routing/routing_quality/routing_quality_tests/ferry_tests.cpp
@@ -1 +1,15 @@
-#pragma once
+#include "testing/testing.hpp"
+
+#include "routing/routing_quality/waypoints.hpp"
+
+using namespace routing_quality;
+
+namespace
+{
+UNIT_TEST(RoutingQuality_FinlandBridgeInsteadOfFerry)
+{
+ TEST(CheckCarRoute({56.11155, 12.81101} /* start */, {55.59857, 12.3069} /* finish */,
+ {{{55.56602, 12.88537}}} /* reference track */),
+ ());
+}
+} // namespace
diff --git a/routing/routing_quality/routing_quality_tests/passby_roads_tests.cpp b/routing/routing_quality/routing_quality_tests/passby_roads_tests.cpp
index 6f70f09bee..f49b1a912c 100644
--- a/routing/routing_quality/routing_quality_tests/passby_roads_tests.cpp
+++ b/routing/routing_quality/routing_quality_tests/passby_roads_tests.cpp
@@ -1 +1,35 @@
-#pragma once
+#include "testing/testing.hpp"
+
+#include "routing/routing_quality/waypoints.hpp"
+
+using namespace routing_quality;
+
+// In most cases a passby road should be preferred in case of going pass a city.
+// Test on such cases should be grouped in this file.
+namespace
+{
+UNIT_TEST(RoutingQuality_Zelegonrad2Domodedovo)
+{
+ // From Zelenograd to Domodedovo. MKAD should be preferred.
+ TEST(CheckCarRoute({55.98301, 37.21141} /* start */, {55.42081, 37.89361} /* finish */,
+ {{{55.99751, 37.23804}, // Through M-11 and MKAD.
+ {56.00719, 37.28533},
+ {55.88759, 37.48068},
+ {55.83513, 37.39569},
+ {55.57103, 37.69203}},
+ {{55.99775, 37.24941}, // Through M-10 and MKAD.
+ {55.88627, 37.43915},
+ {55.86882, 37.40784},
+ {55.58645, 37.71672},
+ {55.57855, 37.75468}}} /* reference tracks */),
+ ());
+}
+
+UNIT_TEST(RoutingQuality_BelarusKobrin)
+{
+ // Test on using a passby road around Kobirn.
+ TEST(CheckCarRoute({52.18429, 24.20225} /* start */, {52.24404, 24.45842} /* finish */,
+ {{{52.18694, 24.39903}}} /* reference track */),
+ ());
+}
+} // namespace
diff --git a/routing/routing_quality/routing_quality_tests/waypoints_tests.cpp b/routing/routing_quality/routing_quality_tests/waypoints_tests.cpp
index 5cce3c207d..3c6450838c 100644
--- a/routing/routing_quality/routing_quality_tests/waypoints_tests.cpp
+++ b/routing/routing_quality/routing_quality_tests/waypoints_tests.cpp
@@ -1,88 +1,28 @@
#include "testing/testing.hpp"
+#include "routing/vehicle_mask.hpp"
+
#include "routing/routing_quality/utils.hpp"
#include "routing/routing_quality/waypoints.hpp"
#include <utility>
#include <vector>
-using namespace std;
+using namespace routing;
using namespace routing_quality;
+using namespace std;
namespace
{
UNIT_TEST(RoutingQuality_CompareSmoke)
{
// From office to Aseeva 6.
- RouteParams params;
- params.m_waypoints = {{55.79723, 37.53777},
- {55.80634, 37.52886}};
-
- ReferenceRoutes candidates;
- ReferenceRoute first;
- first.m_waypoints = {{55.79676, 37.54138},
+ TEST(CheckCarRoute({55.79723, 37.53777} /* start */, {55.80634, 37.52886} /* finish */,
+ {{{55.79676, 37.54138},
{55.79914, 37.53582},
{55.80353, 37.52478},
- {55.80556, 37.52770}};
- first.m_factor = 1.0;
- candidates.emplace_back(move(first));
-
- TEST_EQUAL(CheckWaypoints(move(params), move(candidates)), 1.0, ());
-}
-
-UNIT_TEST(RoutingQuality_Zelegonrad2Domodedovo)
-{
- // From Zelenograd to Domodedovo.
- RouteParams params;
- params.m_waypoints = {{55.98301, 37.21141},
- {55.42081, 37.89361}};
-
- ReferenceRoutes candidates;
-
- // Through M-11 and MKAD.
- ReferenceRoute first;
- first.m_waypoints = {{55.99751, 37.23804},
- {56.00719, 37.28533},
- {55.88759, 37.48068},
- {55.83513, 37.39569},
- {55.57103, 37.69203}};
- first.m_factor = 1.0;
- candidates.emplace_back(move(first));
-
- // Through M-10 and MKAD.
- ReferenceRoute second;
- second.m_waypoints = {{55.99775, 37.24941},
- {55.88627, 37.43915},
- {55.86882, 37.40784},
- {55.58645, 37.71672},
- {55.57855, 37.75468}};
- second.m_factor = 1.0;
- candidates.emplace_back(move(second));
-
- // Through M-10 and Moscow center.
- ReferenceRoute third;
- third.m_waypoints = {{55.98974, 37.26966},
- {55.87625, 37.45129},
- {55.78288, 37.57118},
- {55.76092, 37.60087},
- {55.75662, 37.59861},
- {55.74976, 37.60654},
- {55.73173, 37.62060},
- {55.71785, 37.62237},
- {55.65615, 37.64623},
- {55.57855, 37.75468}};
- third.m_factor = 1.0;
-
- // Through M-10 and Sadovoe ring.
- ReferenceRoute fourth;
- third.m_waypoints = {{55.98974, 37.26966},
- {55.78288, 37.57118},
- {55.73677, 37.59012},
- {55.71785, 37.62237},
- {55.57855, 37.75468}};
- candidates.emplace_back(move(third));
-
- TEST_EQUAL(CheckWaypoints(move(params), move(candidates)), 1.0, ());
+ {55.80556, 37.52770}}} /* reference track */),
+ ());
}
UNIT_TEST(RoutingQuality_Sokol2Mayakovskaya)
diff --git a/routing/routing_quality/waypoints.cpp b/routing/routing_quality/waypoints.cpp
index 7744838759..53e068a2d2 100644
--- a/routing/routing_quality/waypoints.cpp
+++ b/routing/routing_quality/waypoints.cpp
@@ -59,4 +59,28 @@ Similarity CheckWaypoints(RouteParams && params, ReferenceRoutes && candidates)
{
return metrics::CompareByNumberOfMatchedWaypoints(GetRouteFollowedPolyline(move(params)), move(candidates));
}
+
+bool CheckRoute(routing::VehicleType type, ms::LatLon const & start, ms::LatLon const & finish,
+ vector<Coordinates> && referenceTracks)
+{
+ RouteParams params;
+ params.m_waypoints = {start, finish};
+ params.m_type = type;
+
+ ReferenceRoutes candidates(referenceTracks.size());
+
+ for (size_t i = 0; i < candidates.size(); ++i)
+ {
+ candidates[i].m_factor = 1.0;
+ candidates[i].m_waypoints = move(referenceTracks[i]);
+ }
+
+ return CheckWaypoints(move(params), move(candidates)) == 1.0;
+}
+
+bool CheckCarRoute(ms::LatLon const & start, ms::LatLon const & finish,
+ std::vector<Coordinates> && referenceTracks)
+{
+ return CheckRoute(routing::VehicleType::Car, start, finish, move(referenceTracks));
+}
} // namespace routing_quality
diff --git a/routing/routing_quality/waypoints.hpp b/routing/routing_quality/waypoints.hpp
index f97a1b3c7b..2e28d774c9 100644
--- a/routing/routing_quality/waypoints.hpp
+++ b/routing/routing_quality/waypoints.hpp
@@ -13,18 +13,25 @@ struct RouteParams;
struct ReferenceRoute
{
- /// Waypoints which the route passes through.
+ /// \brief Waypoints which the route passes through.
Coordinates m_waypoints;
- /// Value in range (0.0; 1.0] which indicates how desirable the route is.
+ /// \brief Value in range (0.0; 1.0] which indicates how desirable the route is.
double m_factor = 1.0;
};
-/// There can be more than one reference route.
+/// \brief There can be more than one reference route.
using ReferenceRoutes = std::vector<ReferenceRoute>;
using Similarity = double;
-/// Checks how many reference waypoints the route contains.
-/// Returns normalized value in range [0.0; 1.0].
+/// \brief Checks how many reference waypoints the route contains.
+/// \returns normalized value in range [0.0; 1.0].
Similarity CheckWaypoints(RouteParams && params, ReferenceRoutes && candidates);
+
+/// \returns true if route from |start| to |finish| fully conforms one of |candidates|
+/// and false otherwise.
+bool CheckRoute(routing::VehicleType type, ms::LatLon const & start, ms::LatLon const & finish,
+ std::vector<Coordinates> && referenceTracks);
+bool CheckCarRoute(ms::LatLon const & start, ms::LatLon const & finish,
+ std::vector<Coordinates> && referenceTracks);
} // namespace routing_quality