From 205bc8f444b72f7dc91d0db36ff82b185960d775 Mon Sep 17 00:00:00 2001 From: Vladimir Byko-Ianko Date: Thu, 3 Oct 2019 16:23:18 +0300 Subject: [PATCH] [routing] Adding validation test on car model routing factors. --- .../vehicle_model_test.cpp | 31 +++++++++++++++++++ routing_common/vehicle_model.cpp | 11 +++++-- routing_common/vehicle_model.hpp | 2 ++ 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/routing_common/routing_common_tests/vehicle_model_test.cpp b/routing_common/routing_common_tests/vehicle_model_test.cpp index c6f1a99597..dfe39f5103 100644 --- a/routing_common/routing_common_tests/vehicle_model_test.cpp +++ b/routing_common/routing_common_tests/vehicle_model_test.cpp @@ -1,5 +1,6 @@ #include "testing/testing.hpp" +#include "routing_common/car_model_coefs.hpp" #include "routing_common/maxspeed_conversion.hpp" #include "routing_common/vehicle_model.hpp" @@ -13,6 +14,7 @@ #include "base/math.hpp" #include +#include using namespace routing; using namespace std; @@ -258,3 +260,32 @@ UNIT_TEST(VehicleModel_MultiplicationOperatorTest) TEST(base::AlmostEqualAbs(lResult.m_weight, 90.0, 1e-7), ()); TEST(base::AlmostEqualAbs(lResult.m_eta, 110.0, 1e-7), ()); } + +UNIT_TEST(VehicleModel_CarModelValidation) +{ + vector const carRoadTypes = { + HighwayType::HighwayLivingStreet, HighwayType::HighwayMotorway, + HighwayType::HighwayMotorwayLink, HighwayType::HighwayPrimary, + HighwayType::HighwayPrimaryLink, HighwayType::HighwayResidential, + HighwayType::HighwayRoad, HighwayType::HighwaySecondary, + HighwayType::HighwaySecondaryLink, HighwayType::HighwayService, + HighwayType::HighwayTertiary, HighwayType::HighwayTertiaryLink, + HighwayType::HighwayTrack, HighwayType::HighwayTrunk, + HighwayType::HighwayTrunkLink, HighwayType::HighwayUnclassified, + HighwayType::ManMadePier, HighwayType::RailwayRailMotorVehicle, + HighwayType::RouteFerryMotorcar, HighwayType::RouteFerryMotorVehicle, + HighwayType::RouteShuttleTrain}; + + for (auto const hwType : carRoadTypes) + { + auto const factorIt = kHighwayBasedFactors.find(hwType); + TEST(factorIt != kHighwayBasedFactors.cend(), (hwType)); + TEST_NOT_EQUAL(factorIt->second.m_inCity, kInvalidModelValue, (hwType)); + TEST_NOT_EQUAL(factorIt->second.m_outCity, kInvalidModelValue, (hwType)); + + auto const speedIt = kHighwayBasedSpeeds.find(hwType); + TEST(speedIt != kHighwayBasedSpeeds.cend(), (hwType)); + TEST_NOT_EQUAL(speedIt->second.m_inCity, SpeedKMpH(kInvalidModelValue, kInvalidModelValue), (hwType)); + TEST_NOT_EQUAL(speedIt->second.m_outCity, SpeedKMpH(kInvalidModelValue, kInvalidModelValue), (hwType)); + } +} diff --git a/routing_common/vehicle_model.cpp b/routing_common/vehicle_model.cpp index 1bac80405f..7cf7c0a988 100644 --- a/routing_common/vehicle_model.cpp +++ b/routing_common/vehicle_model.cpp @@ -17,8 +17,6 @@ using namespace std; namespace { -double constexpr kInvalidModelValue = -1.0; - template WeightAndETA Pick(WeightAndETA const & lhs, WeightAndETA const & rhs) { @@ -371,6 +369,15 @@ string DebugPrint(SpeedKMpH const & speed) return oss.str(); } +std::string DebugPrint(SpeedFactor const & speedFactor) +{ + ostringstream oss; + oss << "SpeedFactor [ "; + oss << "weight:" << speedFactor.m_weight << ", "; + oss << "eta:" << speedFactor.m_eta << " ]"; + return oss.str(); +} + string DebugPrint(InOutCitySpeedKMpH const & speed) { ostringstream oss; diff --git a/routing_common/vehicle_model.hpp b/routing_common/vehicle_model.hpp index 7bb175f279..e4561e0753 100644 --- a/routing_common/vehicle_model.hpp +++ b/routing_common/vehicle_model.hpp @@ -25,6 +25,7 @@ namespace feature { class TypesHolder; } namespace routing { double constexpr kNotUsed = std::numeric_limits::max(); +double constexpr kInvalidModelValue = -1.0; struct InOutCityFactor; struct InOutCitySpeedKMpH; @@ -423,6 +424,7 @@ protected: std::string DebugPrint(VehicleModelInterface::RoadAvailability const l); std::string DebugPrint(SpeedKMpH const & speed); +std::string DebugPrint(SpeedFactor const & speedFactor); std::string DebugPrint(InOutCitySpeedKMpH const & speed); std::string DebugPrint(HighwayType type); } // namespace routing