diff --git a/routing_common/routing_common_tests/vehicle_model_test.cpp b/routing_common/routing_common_tests/vehicle_model_test.cpp index 632480a1ad..dba12ba955 100644 --- a/routing_common/routing_common_tests/vehicle_model_test.cpp +++ b/routing_common/routing_common_tests/vehicle_model_test.cpp @@ -281,12 +281,10 @@ UNIT_TEST(VehicleModel_CarModelValidation) { 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)); + TEST(factorIt->second.IsValid(), (hwType, factorIt->second)); 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)); + TEST(speedIt->second.IsValid(), (hwType, speedIt->second)); } } diff --git a/routing_common/vehicle_model.cpp b/routing_common/vehicle_model.cpp index 6f0d3bc6e3..fb03cbad5f 100644 --- a/routing_common/vehicle_model.cpp +++ b/routing_common/vehicle_model.cpp @@ -166,17 +166,17 @@ void VehicleModel::GetAdditionalRoadSpeed(uint32_t type, bool isCityRoad, SpeedKMpH VehicleModel::GetSpeedOnFeatureWithMaxspeed(HighwayType const & type, SpeedParams const & speedParams) const { - CHECK(speedParams.m_maxspeed.IsValid(), ()); + ASSERT(speedParams.m_maxspeed.IsValid(), ()); bool const isCityRoad = speedParams.m_inCity; auto const featureMaxSpeedKmPH = speedParams.m_maxspeed.GetSpeedKmPH(speedParams.m_forward); - CHECK(featureMaxSpeedKmPH != kInvalidSpeed, (type, speedParams.m_forward, speedParams.m_maxspeed)); + ASSERT(featureMaxSpeedKmPH != kInvalidSpeed, (type, speedParams.m_forward, speedParams.m_maxspeed)); // We assume that all link roads are equal to its parents and drop "_link" suffix // while searching for the particular factor. auto const highwayType = GetHighwayTypeKey(type); auto const factorIt = m_highwayBasedInfo.m_factors.find(highwayType); - CHECK(factorIt != m_highwayBasedInfo.m_factors.cend(), ("Key:", highwayType, "is not found.")); + ASSERT(factorIt != m_highwayBasedInfo.m_factors.cend(), ("Key:", highwayType, "is not found.")); auto const & factor = factorIt->second; SpeedKMpH const & maxModelSpeed = m_maxModelSpeed.GetSpeed(isCityRoad); return Pick(SpeedKMpH(static_cast(featureMaxSpeedKmPH)) * factor.GetFactor(isCityRoad), @@ -186,20 +186,19 @@ SpeedKMpH VehicleModel::GetSpeedOnFeatureWithMaxspeed(HighwayType const & type, SpeedKMpH VehicleModel::GetSpeedOnFeatureWithoutMaxspeed(HighwayType const & type, SpeedParams const & speedParams) const { - CHECK(!speedParams.m_maxspeed.IsValid(), ()); + ASSERT(!speedParams.m_maxspeed.IsValid(), ()); auto const isCityRoad = speedParams.m_inCity; SpeedKMpH const & maxModelSpeed = m_maxModelSpeed.GetSpeed(isCityRoad); auto const speedIt = m_highwayBasedInfo.m_speeds.find(type); - CHECK(speedIt != m_highwayBasedInfo.m_speeds.cend(), ("Key:", type, "is not found.")); + ASSERT(speedIt != m_highwayBasedInfo.m_speeds.cend(), ("Key:", type, "is not found.")); auto const typeKey = GetHighwayTypeKey(type); auto const factorIt = m_highwayBasedInfo.m_factors.find(typeKey); - CHECK(factorIt != m_highwayBasedInfo.m_factors.cend(), ("Key:", typeKey, "is not found.")); + ASSERT(factorIt != m_highwayBasedInfo.m_factors.cend(), ("Key:", typeKey, "is not found.")); SpeedKMpH const speed = speedIt->second.GetSpeed(isCityRoad); - CHECK_NOT_EQUAL(speed.m_weight, kInvalidModelValue, ()); - CHECK_NOT_EQUAL(speed.m_eta, kInvalidModelValue, ()); + ASSERT(speed.IsValid(), (speed)); return Pick(factorIt->second.GetFactor(isCityRoad) * speed, maxModelSpeed); } @@ -416,6 +415,15 @@ string DebugPrint(InOutCitySpeedKMpH const & speed) return oss.str(); } +string DebugPrint(InOutCityFactor const & speedFactor) +{ + ostringstream oss; + oss << "InOutCityFactor [ "; + oss << "inCity:" << DebugPrint(speedFactor.m_inCity) << ", "; + oss << "outCity:" << DebugPrint(speedFactor.m_outCity) << " ]"; + return oss.str(); +} + string DebugPrint(HighwayType type) { switch (type) diff --git a/routing_common/vehicle_model.hpp b/routing_common/vehicle_model.hpp index 45c6de74f2..c37e102e4a 100644 --- a/routing_common/vehicle_model.hpp +++ b/routing_common/vehicle_model.hpp @@ -25,7 +25,6 @@ namespace feature { class TypesHolder; } namespace routing { double constexpr kNotUsed = std::numeric_limits::max(); -double constexpr kInvalidModelValue = -1.0; struct InOutCityFactor; struct InOutCitySpeedKMpH; @@ -109,6 +108,8 @@ struct SpeedFactor constexpr SpeedFactor(double factor) noexcept : m_weight(factor), m_eta(factor) {} constexpr SpeedFactor(double weight, double eta) noexcept : m_weight(weight), m_eta(eta) {} + bool IsValid() const { return m_weight > 0.0 && m_eta > 0.0; } + bool operator==(SpeedFactor const & rhs) const { return m_weight == rhs.m_weight && m_eta == rhs.m_eta; @@ -147,6 +148,7 @@ struct InOutCitySpeedKMpH } SpeedKMpH const & GetSpeed(bool isCity) const { return isCity ? m_inCity : m_outCity; } + bool IsValid() const { return m_inCity.IsValid() && m_outCity.IsValid(); } SpeedKMpH m_inCity; SpeedKMpH m_outCity; @@ -169,6 +171,7 @@ struct InOutCityFactor } SpeedFactor const & GetFactor(bool isCity) const { return isCity ? m_inCity : m_outCity; } + bool IsValid() const { return m_inCity.IsValid() && m_outCity.IsValid(); } SpeedFactor m_inCity; SpeedFactor m_outCity; @@ -428,5 +431,6 @@ 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(InOutCityFactor const & speedFactor); std::string DebugPrint(HighwayType type); } // namespace routing