From 7fbf5fdd4e363511bf6fcc0bad5a7714160a3517 Mon Sep 17 00:00:00 2001 From: Arsentiy Milchakov Date: Fri, 30 Oct 2020 20:25:51 +0300 Subject: [PATCH] [platform] measurement utils small refactoring --- android/jni/com/mapswithme/maps/Framework.cpp | 2 +- .../jni/com/mapswithme/maps/SearchEngine.cpp | 2 +- .../maps/bookmarks/data/BookmarkManager.cpp | 3 +- .../jni/com/mapswithme/util/StringUtils.cpp | 6 +- .../maps/routing/NavigationController.java | 2 +- .../MWMNavigationDashboardEntity.mm | 2 +- .../ProxyObjects/Routing/MWMRoutingManager.mm | 8 +- .../Maps/Core/Location/MWMLocationHelpers.h | 18 ++- iphone/Maps/Core/Routing/MWMRouter.mm | 5 +- .../MWMDiscoveryControllerViewModel.mm | 5 +- .../Search/TableView/MWMSearchCommonCell.mm | 3 +- map/framework.cpp | 2 +- map/routing_manager.cpp | 3 +- platform/measurement_utils.cpp | 115 +++++++++--------- platform/measurement_utils.hpp | 25 ++-- platform/platform_tests/measurement_tests.cpp | 36 ++---- routing/routing_session.cpp | 2 +- 17 files changed, 106 insertions(+), 133 deletions(-) diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp index 2ab368334c..849a83fbfc 100644 --- a/android/jni/com/mapswithme/maps/Framework.cpp +++ b/android/jni/com/mapswithme/maps/Framework.cpp @@ -1156,7 +1156,7 @@ Java_com_mapswithme_maps_Framework_nativeFormatAltitude(JNIEnv * env, jclass, jd JNIEXPORT jobject JNICALL Java_com_mapswithme_maps_Framework_nativeFormatSpeed(JNIEnv * env, jclass, jdouble speed) { - return jni::ToJavaString(env, measurement_utils::FormatSpeedWithDeviceUnits(speed)); + return jni::ToJavaString(env, measurement_utils::FormatSpeed(speed)); } JNIEXPORT jobject JNICALL diff --git a/android/jni/com/mapswithme/maps/SearchEngine.cpp b/android/jni/com/mapswithme/maps/SearchEngine.cpp index 03749c8350..4f12f2b5fc 100644 --- a/android/jni/com/mapswithme/maps/SearchEngine.cpp +++ b/android/jni/com/mapswithme/maps/SearchEngine.cpp @@ -318,7 +318,7 @@ jobject ToJavaResult(Result & result, search::ProductInfo const & productInfo, b distanceInMeters = ms::DistanceOnEarth(lat, lon, mercator::YToLat(center.y), mercator::XToLon(center.x)); - measurement_utils::FormatDistance(distanceInMeters, distance); + distance = measurement_utils::FormatDistance(distanceInMeters); } } diff --git a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp index 874423221e..f8d36a0825 100644 --- a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp +++ b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp @@ -898,8 +898,7 @@ Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeGetTrack( ASSERT(nTrack, ("Track must not be null with id:)", trackId)); - std::string formattedLength; - measurement_utils::FormatDistance(nTrack->GetLengthMeters(), formattedLength); + std::string formattedLength = measurement_utils::FormatDistance(nTrack->GetLengthMeters()); dp::Color nColor = nTrack->GetColor(0); diff --git a/android/jni/com/mapswithme/util/StringUtils.cpp b/android/jni/com/mapswithme/util/StringUtils.cpp index a6d5748df4..3bdc530a8e 100644 --- a/android/jni/com/mapswithme/util/StringUtils.cpp +++ b/android/jni/com/mapswithme/util/StringUtils.cpp @@ -46,7 +46,7 @@ Java_com_mapswithme_util_StringUtils_nativeFormatSpeedAndUnits(JNIEnv * env, jcl if (!settings::Get(settings::kMeasurementUnits, units)) units = measurement_utils::Units::Metric; return env->NewObject(pairClass, pairCtor, - jni::ToJavaString(env, measurement_utils::FormatSpeed(metersPerSecond, units)), + jni::ToJavaString(env, measurement_utils::FormatSpeedNumeric(metersPerSecond, units)), jni::ToJavaString(env, measurement_utils::FormatSpeedUnits(units))); } @@ -54,8 +54,6 @@ JNIEXPORT jstring JNICALL Java_com_mapswithme_util_StringUtils_nativeFormatDistance(JNIEnv *env, jclass thiz, jdouble distanceInMeters) { - std::string formattedDistance; - measurement_utils::FormatDistance(distanceInMeters, formattedDistance); - return jni::ToJavaString(env, formattedDistance); + return jni::ToJavaString(env, measurement_utils::FormatDistance(distanceInMeters)); } } // extern "C" diff --git a/android/src/com/mapswithme/maps/routing/NavigationController.java b/android/src/com/mapswithme/maps/routing/NavigationController.java index b2adb732aa..d35df1e4e0 100644 --- a/android/src/com/mapswithme/maps/routing/NavigationController.java +++ b/android/src/com/mapswithme/maps/routing/NavigationController.java @@ -265,7 +265,7 @@ public class NavigationController implements TrafficManager.TrafficCallback, Vie Pair speedAndUnits = StringUtils.nativeFormatSpeedAndUnits(last.getSpeed()); mSpeedUnits.setText(speedAndUnits.second); - mSpeedValue.setText(speedAndUnits.first); + mSpeedValue.setText(" " + speedAndUnits.first); mSpeedViewContainer.setActivated(info.isSpeedLimitExceeded()); } diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardEntity.mm b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardEntity.mm index dfd52569aa..0ad1754352 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardEntity.mm +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardEntity.mm @@ -38,7 +38,7 @@ if (!lastLocation || lastLocation.speed < 0) return nil; auto const units = coreUnits([MWMSettings measurementUnits]); - return @(measurement_utils::FormatSpeed(lastLocation.speed, units).c_str()); + return @(measurement_utils::FormatSpeedNumeric(lastLocation.speed, units).c_str()); } - (BOOL)isSpeedLimitExceeded diff --git a/iphone/Maps/Core/Framework/ProxyObjects/Routing/MWMRoutingManager.mm b/iphone/Maps/Core/Framework/ProxyObjects/Routing/MWMRoutingManager.mm index 25970ae86b..17537fc811 100644 --- a/iphone/Maps/Core/Framework/ProxyObjects/Routing/MWMRoutingManager.mm +++ b/iphone/Maps/Core/Framework/ProxyObjects/Routing/MWMRoutingManager.mm @@ -85,7 +85,7 @@ NSString *speed = @"0"; if (lastLocation && lastLocation.speed >= 0) { auto const units = coreUnits([MWMSettings measurementUnits]); - speed = @(measurement_utils::FormatSpeed(lastLocation.speed, units).c_str()); + speed = @(measurement_utils::FormatSpeedNumeric(lastLocation.speed, units).c_str()); } NSInteger roundExitNumber = 0; if (info.m_turn == routing::turns::CarDirection::EnterRoundAbout || @@ -231,9 +231,9 @@ if (speedLimit == routing::SpeedCameraOnRoute::kNoSpeedInfo) { [object updateCameraInfo:YES speedLimit:nil]; } else { - auto const units = coreUnits([MWMSettings measurementUnits]); - - NSString *limit = @(measurement_utils::FormatSpeedLimit(speedLimit, units).c_str()); + auto const metersPerSecond = measurement_utils::KmphToMps(speedLimit); + + NSString *limit = @(measurement_utils::FormatSpeed(metersPerSecond).c_str()); [object updateCameraInfo:YES speedLimit:limit]; } } diff --git a/iphone/Maps/Core/Location/MWMLocationHelpers.h b/iphone/Maps/Core/Location/MWMLocationHelpers.h index 9f41259c49..4517c8e73e 100644 --- a/iphone/Maps/Core/Location/MWMLocationHelpers.h +++ b/iphone/Maps/Core/Location/MWMLocationHelpers.h @@ -15,23 +15,19 @@ static inline NSString * formattedDistance(double const & meters) { auto units = measurement_utils::Units::Metric; settings::TryGet(settings::kMeasurementUnits, units); - - std::string distance; + switch (units) { case measurement_utils::Units::Imperial: - measurement_utils::FormatDistanceWithLocalization(meters, - distance, - [[@" " stringByAppendingString:L(@"mile")] UTF8String], - [[@" " stringByAppendingString:L(@"foot")] UTF8String]); + return @(measurement_utils::FormatDistanceWithLocalization(meters, + [L(@"mile") UTF8String], + [L(@"foot") UTF8String]).c_str()); break; case measurement_utils::Units::Metric: - measurement_utils::FormatDistanceWithLocalization(meters, - distance, - [[@" " stringByAppendingString:L(@"kilometer")] UTF8String], - [[@" " stringByAppendingString:L(@"meter")] UTF8String]); + return @(measurement_utils::FormatDistanceWithLocalization(meters, + [L(@"kilometer") UTF8String], + [L(@"meter") UTF8String]).c_str()); break; } - return @(distance.c_str()); } static inline BOOL isMyPositionPendingOrNoPosition() diff --git a/iphone/Maps/Core/Routing/MWMRouter.mm b/iphone/Maps/Core/Routing/MWMRouter.mm index 58d88fea8d..944b89068d 100644 --- a/iphone/Maps/Core/Routing/MWMRouter.mm +++ b/iphone/Maps/Core/Routing/MWMRouter.mm @@ -591,9 +591,8 @@ void logPointEvent(MWMRoutePoint * point, NSString * eventType) imageData = [NSData dataWithBytes:imageRGBAData.data() length:imageRGBAData.size()]; router.altitudeImagesData[sizeValue] = imageData; - std::string heightString; - measurement_utils::FormatDistance(maxRouteAltitude - minRouteAltitude, heightString); - router.altitudeElevation = @(heightString.c_str()); + auto const height = maxRouteAltitude - minRouteAltitude; + router.altitudeElevation = @(measurement_utils::FormatDistance(height).c_str()); } dispatch_async(dispatch_get_main_queue(), ^{ diff --git a/iphone/Maps/UI/Discovery/View Models/MWMDiscoveryControllerViewModel.mm b/iphone/Maps/UI/Discovery/View Models/MWMDiscoveryControllerViewModel.mm index cfdd3ccc3c..f3bd414f8d 100644 --- a/iphone/Maps/UI/Discovery/View Models/MWMDiscoveryControllerViewModel.mm +++ b/iphone/Maps/UI/Discovery/View Models/MWMDiscoveryControllerViewModel.mm @@ -162,11 +162,10 @@ using namespace discovery; - (NSString *)distanceFrom:(m2::PointD const &)startPoint to:(m2::PointD const &)endPoint { - std::string distance; auto const f = mercator::ToLatLon(startPoint); auto const t = mercator::ToLatLon(endPoint); - measurement_utils::FormatDistance(ms::DistanceOnEarth(f.m_lat, f.m_lon, t.m_lat, t.m_lon), distance); - return @(distance.c_str()); + auto const distance = ms::DistanceOnEarth(f.m_lat, f.m_lon, t.m_lat, t.m_lon); + return @(measurement_utils::FormatDistance(distance).c_str()); } - (NSString *)ratingValueForRating:(float)rating { diff --git a/iphone/Maps/UI/Search/TableView/MWMSearchCommonCell.mm b/iphone/Maps/UI/Search/TableView/MWMSearchCommonCell.mm index 7f7a6d327f..314ff0016f 100644 --- a/iphone/Maps/UI/Search/TableView/MWMSearchCommonCell.mm +++ b/iphone/Maps/UI/Search/TableView/MWMSearchCommonCell.mm @@ -102,8 +102,7 @@ bool PopularityHasHigherPriority(bool hasPosition, double distanceInMeters) { distanceInMeters = mercator::DistanceOnEarth(lastLocation.mercator, result.GetFeatureCenter()); - std::string distanceStr; - measurement_utils::FormatDistance(distanceInMeters, distanceStr); + std::string distanceStr = measurement_utils::FormatDistance(distanceInMeters); self.distanceLabel.text = @(distanceStr.c_str()); } diff --git a/map/framework.cpp b/map/framework.cpp index a7cf093c04..ec330c01e7 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -1878,7 +1878,7 @@ bool Framework::GetDistanceAndAzimut(m2::PointD const & point, double const d = ms::DistanceOnEarth(lat, lon, mercator::YToLat(point.y), mercator::XToLon(point.x)); // Distance may be less than 1.0 - UNUSED_VALUE(measurement_utils::FormatDistance(d, distance)); + distance = measurement_utils::FormatDistance(d); // We calculate azimuth even when distance is very short (d ~ 0), // because return value has 2 states (near me or far from me). diff --git a/map/routing_manager.cpp b/map/routing_manager.cpp index f800e5185f..6d1a92c024 100644 --- a/map/routing_manager.cpp +++ b/map/routing_manager.cpp @@ -657,8 +657,7 @@ void RoutingManager::CreateRoadWarningMarks(RoadWarningsCollection && roadWarnin mark->SetIndex(static_cast(i)); mark->SetRoadWarningType(type); mark->SetFeatureId(routeInfo.m_featureId); - std::string distanceStr; - measurement_utils::FormatDistance(routeInfo.m_distance, distanceStr); + std::string distanceStr = measurement_utils::FormatDistance(routeInfo.m_distance); mark->SetDistance(distanceStr); } } diff --git a/platform/measurement_utils.cpp b/platform/measurement_utils.cpp index 492034b2b9..2cc360620d 100644 --- a/platform/measurement_utils.cpp +++ b/platform/measurement_utils.cpp @@ -1,4 +1,6 @@ #include "platform/measurement_utils.hpp" + +#include "platform/localization.hpp" #include "platform/settings.hpp" #include "geometry/mercator.hpp" @@ -13,12 +15,15 @@ #include #include +using namespace platform; using namespace settings; using namespace std; using namespace strings; namespace measurement_utils { +namespace +{ string ToStringPrecision(double d, int pr) { stringstream ss; @@ -26,30 +31,46 @@ string ToStringPrecision(double d, int pr) return ss.str(); } -bool FormatDistanceImpl(double m, string & res, - char const * high, char const * low, - double highF, double lowF) +string FormatDistanceImpl(Units units, double m, string const & low, string const & high) { + double highF, lowF; + switch (units) + { + case Units::Imperial: highF = 1609.344; lowF = 0.3048; break; + case Units::Metric: highF = 1000.0; lowF = 1.0; break; + } + double const lowV = m / lowF; if (lowV < 1.0) - { - res = string("0") + low; - return false; - } + return string("0 ") + low; // To display any lower units only if < 1000 if (m >= 1000.0 * lowF) { double const v = m / highF; - res = ToStringPrecision(v, v >= 10.0 ? 0 : 1) + high; - } - else - { - // To display unit number only if <= 100. - res = ToStringPrecision(lowV <= 100.0 ? lowV : round(lowV / 10) * 10, 0) + low; + return ToStringPrecision(v, v >= 10.0 ? 0 : 1) + " " + high; } - return true; + // To display unit number only if <= 100. + return ToStringPrecision(lowV <= 100.0 ? lowV : round(lowV / 10) * 10, 0) + " " + low; +} + +string FormatAltitudeImpl(Units units, double altitude, string const & localizedUnits) +{ + ostringstream ss; + ss << fixed << setprecision(0) << altitude << " " << localizedUnits; + return ss.str(); +} +} // namespace + +std::string DebugPrint(Units units) +{ + switch (units) + { + case Units::Imperial: return "Units::Imperial"; + case Units::Metric: return "Units::Metric"; + } + UNREACHABLE(); } double ToSpeedKmPH(double speed, measurement_utils::Units units) @@ -62,32 +83,22 @@ double ToSpeedKmPH(double speed, measurement_utils::Units units) UNREACHABLE(); } -bool FormatDistanceWithLocalization(double m, string & res, char const * high, char const * low) +std::string FormatDistanceWithLocalization(double m, OptionalStringRef high, OptionalStringRef low) { auto units = Units::Metric; TryGet(settings::kMeasurementUnits, units); - /// @todo Put string units resources. switch (units) { - case Units::Imperial: return FormatDistanceImpl(m, res, high, low, 1609.344, 0.3048); - case Units::Metric: return FormatDistanceImpl(m, res, high, low, 1000.0, 1.0); + case Units::Imperial: return FormatDistanceImpl(units, m, low ? *low : "ft", high ? *high : "mi"); + case Units::Metric: return FormatDistanceImpl(units, m, low ? *low : "m", high ? *high : "km"); } UNREACHABLE(); } - -bool FormatDistance(double m, string & res) -{ - auto units = Units::Metric; - TryGet(settings::kMeasurementUnits, units); - /// @todo Put string units resources. - switch (units) - { - case Units::Imperial: return FormatDistanceImpl(m, res, " mi", " ft", 1609.344, 0.3048); - case Units::Metric: return FormatDistanceImpl(m, res, " km", " m", 1000.0, 1.0); - } - UNREACHABLE(); +std::string FormatDistance(double m) +{ + return FormatDistanceWithLocalization(m, {} /* high */, {} /* low */); } @@ -186,35 +197,34 @@ void FormatMercator(m2::PointD const & mercator, string & lat, string & lon, int } string FormatAltitude(double altitudeInMeters) +{ + return FormatAltitudeWithLocalization(altitudeInMeters, {} /* localizedUnits */); +} + +string FormatAltitudeWithLocalization(double altitudeInMeters, OptionalStringRef localizedUnits) { Units units = Units::Metric; TryGet(settings::kMeasurementUnits, units); - ostringstream ss; - ss << fixed << setprecision(0); - - /// @todo Put string units resources. switch (units) { - case Units::Imperial: ss << MetersToFeet(altitudeInMeters) << " ft"; break; - case Units::Metric: ss << altitudeInMeters << " m"; break; + case Units::Imperial: + return FormatAltitudeImpl(units, MetersToFeet(altitudeInMeters), localizedUnits ? *localizedUnits : "ft"); + case Units::Metric: + return FormatAltitudeImpl(units, altitudeInMeters, localizedUnits ? *localizedUnits : "m"); } - return ss.str(); + UNREACHABLE(); } -string FormatSpeedWithDeviceUnits(double metersPerSecond) +string FormatSpeed(double metersPerSecond) { auto units = Units::Metric; TryGet(settings::kMeasurementUnits, units); - return FormatSpeedWithUnits(metersPerSecond, units); + + return FormatSpeedNumeric(metersPerSecond, units) + " " + FormatSpeedUnits(units); } -string FormatSpeedWithUnits(double metersPerSecond, Units units) -{ - return FormatSpeed(metersPerSecond, units) + FormatSpeedUnits(units); -} - -string FormatSpeed(double metersPerSecond, Units units) +string FormatSpeedNumeric(double metersPerSecond, Units units) { double constexpr kSecondsPerHour = 3600; double constexpr metersPerKilometer = 1000; @@ -226,24 +236,13 @@ string FormatSpeed(double metersPerSecond, Units units) } return ToStringPrecision(unitsPerHour, unitsPerHour >= 10.0 ? 0 : 1); } - -string FormatSpeedLimit(double kilometersPerHour, Units units) -{ - double unitsPerHour; - switch (units) - { - case Units::Imperial: unitsPerHour = 0.621371192 * kilometersPerHour; break; - case Units::Metric: unitsPerHour = kilometersPerHour; break; - } - return ToStringPrecision(unitsPerHour, unitsPerHour >= 10.0 ? 0 : 1); -} string FormatSpeedUnits(Units units) { switch (units) { - case Units::Imperial: return " mph"; - case Units::Metric: return " km/h"; + case Units::Imperial: return "mph"; + case Units::Metric: return "km/h"; } UNREACHABLE(); } diff --git a/platform/measurement_utils.hpp b/platform/measurement_utils.hpp index 4b07ab68b4..c48af4d6d5 100644 --- a/platform/measurement_utils.hpp +++ b/platform/measurement_utils.hpp @@ -4,25 +4,20 @@ #include "base/assert.hpp" +#include #include namespace measurement_utils { +using OptionalStringRef = std::optional const &; + enum class Units { Metric = 0, Imperial = 1 }; -inline std::string DebugPrint(Units units) -{ - switch (units) - { - case Units::Imperial: return "Units::Imperial"; - case Units::Metric: return "Units::Metric"; - } - UNREACHABLE(); -} +std::string DebugPrint(Units units); inline double MetersToMiles(double m) { return m * 0.000621371192; } inline double MilesToMeters(double mi) { return mi * 1609.344; } @@ -34,6 +29,7 @@ inline double FeetToMeters(double ft) { return ft * 0.3048; } inline double FeetToMiles(double ft) { return ft * 5280; } inline double InchesToMeters(double in) { return in / 39.370; } inline double NauticalMilesToMeters(double nmi) { return nmi * 1852; } +inline double KmphToMps(double kmph) { return kmph * 1000 / 3600; } double ToSpeedKmPH(double speed, measurement_utils::Units units); @@ -41,17 +37,16 @@ double ToSpeedKmPH(double speed, measurement_utils::Units units); /// @param[in] m meters /// @param[out] res formatted std::string for search /// @return should be direction arrow drawed? false if distance is to small (< 1.0) -bool FormatDistance(double m, std::string & res); -bool FormatDistanceWithLocalization(double m, std::string & res, char const * high, char const * low); +std::string FormatDistance(double distanceInMeters); +std::string FormatDistanceWithLocalization(double m, OptionalStringRef high, OptionalStringRef low); /// We always use meters and feet/yards for altitude std::string FormatAltitude(double altitudeInMeters); +std::string FormatAltitudeWithLocalization(double altitudeInMeters, OptionalStringRef localizedUnits); // Return value is measured in km/h for Metric and in mph for Imperial. -std::string FormatSpeedWithDeviceUnits(double metersPerSecond); -std::string FormatSpeedWithUnits(double metersPerSecond, Units units); -std::string FormatSpeed(double metersPerSecond, Units units); +std::string FormatSpeed(double metersPerSecond); +std::string FormatSpeedNumeric(double metersPerSecond, Units units); std::string FormatSpeedUnits(Units units); -std::string FormatSpeedLimit(double kilometersPerHour, Units units); /// @param[in] dac Digits after comma in seconds. /// Use dac == 3 for our common conversions to DMS. diff --git a/platform/platform_tests/measurement_tests.cpp b/platform/platform_tests/measurement_tests.cpp index 9e4e705514..0998b2c9c5 100644 --- a/platform/platform_tests/measurement_tests.cpp +++ b/platform/platform_tests/measurement_tests.cpp @@ -59,8 +59,7 @@ UNIT_TEST(Measurement_Smoke) for (size_t i = 0; i < ARRAY_SIZE(arr); ++i) { std::string s; - TEST(FormatDistance(arr[i].first, s), (arr[i])); - TEST_EQUAL(s, arr[i].second, (arr[i])); + TEST_EQUAL(FormatDistance(arr[i].first), arr[i].second, (arr[i])); } } @@ -100,43 +99,34 @@ UNIT_TEST(FormatAltitude) TEST_EQUAL(FormatAltitude(5), "5 m", ()); } -UNIT_TEST(FormatSpeedWithDeviceUnits) +UNIT_TEST(FormatSpeed) { { ScopedSettings guard(Units::Metric); - TEST_EQUAL(FormatSpeedWithDeviceUnits(10), "36 km/h", ()); - TEST_EQUAL(FormatSpeedWithDeviceUnits(1), "3.6 km/h", ()); + TEST_EQUAL(FormatSpeed(10), "36 km/h", ()); + TEST_EQUAL(FormatSpeed(1), "3.6 km/h", ()); } { ScopedSettings guard(Units::Imperial); - TEST_EQUAL(FormatSpeedWithDeviceUnits(10), "22 mph", ()); - TEST_EQUAL(FormatSpeedWithDeviceUnits(1), "2.2 mph", ()); + TEST_EQUAL(FormatSpeed(10), "22 mph", ()); + TEST_EQUAL(FormatSpeed(1), "2.2 mph", ()); } } -UNIT_TEST(FormatSpeedWithUnits) +UNIT_TEST(FormatSpeedNumeric) { - TEST_EQUAL(FormatSpeedWithUnits(10, Units::Metric), "36 km/h", ()); - TEST_EQUAL(FormatSpeedWithUnits(1, Units::Metric), "3.6 km/h", ()); + TEST_EQUAL(FormatSpeedNumeric(10, Units::Metric), "36", ()); + TEST_EQUAL(FormatSpeedNumeric(1, Units::Metric), "3.6", ()); - TEST_EQUAL(FormatSpeedWithUnits(10, Units::Imperial), "22 mph", ()); - TEST_EQUAL(FormatSpeedWithUnits(1, Units::Imperial), "2.2 mph", ()); -} - -UNIT_TEST(FormatSpeed) -{ - TEST_EQUAL(FormatSpeed(10, Units::Metric), "36", ()); - TEST_EQUAL(FormatSpeed(1, Units::Metric), "3.6", ()); - - TEST_EQUAL(FormatSpeed(10, Units::Imperial), "22", ()); - TEST_EQUAL(FormatSpeed(1, Units::Imperial), "2.2", ()); + TEST_EQUAL(FormatSpeedNumeric(10, Units::Imperial), "22", ()); + TEST_EQUAL(FormatSpeedNumeric(1, Units::Imperial), "2.2", ()); } UNIT_TEST(FormatSpeedUnits) { - TEST_EQUAL(FormatSpeedUnits(Units::Metric), " km/h", ()); - TEST_EQUAL(FormatSpeedUnits(Units::Imperial), " mph", ()); + TEST_EQUAL(FormatSpeedUnits(Units::Metric), "km/h", ()); + TEST_EQUAL(FormatSpeedUnits(Units::Imperial), "mph", ()); } UNIT_TEST(OSMDistanceToMetersString) diff --git a/routing/routing_session.cpp b/routing/routing_session.cpp index 8818c85fba..bc8fc832e5 100644 --- a/routing/routing_session.cpp +++ b/routing/routing_session.cpp @@ -43,7 +43,7 @@ namespace routing void FormatDistance(double dist, string & value, string & suffix) { /// @todo Make better formatting of distance and units. - UNUSED_VALUE(measurement_utils::FormatDistance(dist, value)); + value = measurement_utils::FormatDistance(dist); size_t const delim = value.find(' '); ASSERT(delim != string::npos, ());