From: Younies Mahmoud Date: Tue, 17 Mar 2020 22:55:39 +0000 (+0100) Subject: address Shane's comments2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=718fc9c48cb5698b8a2336d7993957f50c27d6a5;p=icu address Shane's comments2 --- diff --git a/icu4c/source/i18n/unitconverter.cpp b/icu4c/source/i18n/unitconverter.cpp index 169c48b36bc..66b732e4739 100644 --- a/icu4c/source/i18n/unitconverter.cpp +++ b/icu4c/source/i18n/unitconverter.cpp @@ -68,8 +68,7 @@ double strToDouble(StringPiece strNum) { // StringToDoubleConverter. StringToDoubleConverter converter(0, 0, 0, "", ""); int32_t count; - return converter.StringToDouble(reinterpret_cast(strNum.length()), strNum.length(), - &count); + return converter.StringToDouble(strNum.data(), strNum.length(), &count); } // Returns `double` from a scientific number that could has a division sign (i.e. "1", "2.01", "3.09E+4" @@ -448,16 +447,20 @@ MeasureUnit extractTarget(MeasureUnit source, UErrorCode &status) { if (U_FAILURE(status)) return result; MeasureUnit targetUnit = MeasureUnit::forIdentifier(target, status); - auto tempTargetUnit = TempSingleUnit::forMeasureUnit(targetUnit, status); - tempTargetUnit.siPrefix = singleUnit.getSIPrefix(status); - tempTargetUnit.dimensionality = singleUnit.getDimensionality(status); + auto targetSingleUnits = targetUnit.splitToSingleUnits(status); if (U_FAILURE(status)) return result; - auto targetUnits = tempTargetUnit.build(status); - if (U_FAILURE(status)) return result; + for (int i = 0, n = targetSingleUnits.length(); i < n; ++i) { + auto tempTargetUnit = TempSingleUnit::forMeasureUnit(targetSingleUnits[i], status); + tempTargetUnit.dimensionality = singleUnit.getDimensionality(status); + if (U_FAILURE(status)) return result; - result = result.product(targetUnits, status); - if (U_FAILURE(status)) return result; + auto targetUnits = tempTargetUnit.build(status); + if (U_FAILURE(status)) return result; + + result = result.product(targetUnits, status); + if (U_FAILURE(status)) return result; + } } return result; diff --git a/icu4c/source/test/intltest/unitstest.cpp b/icu4c/source/test/intltest/unitstest.cpp index e447e5cce8f..def8966f903 100644 --- a/icu4c/source/test/intltest/unitstest.cpp +++ b/icu4c/source/test/intltest/unitstest.cpp @@ -37,6 +37,7 @@ class UnitsTest : public IntlTest { void testComplicatedUnits(); void testCLDRUnitsTests(); void testCLDRUnitsTests2(); + void testStatus(); // TODO(younies): remove after using CLDR test cases. void verifyTestCase(const UnitConversionTestCase &testCase); @@ -56,6 +57,7 @@ void UnitsTest::runIndexedTest(int32_t index, UBool exec, const char *&name, cha TESTCASE_AUTO(testComplicatedUnits); TESTCASE_AUTO(testCLDRUnitsTests); TESTCASE_AUTO(testCLDRUnitsTests2); + TESTCASE_AUTO(testStatus); TESTCASE_AUTO_END; } @@ -510,4 +512,11 @@ void UnitsTest::testConversions() { } } +/** + * Tests different return statuses depending on the input. + */ +void UnitsTest::testStatus() { + +} + #endif /* #if !UCONFIG_NO_FORMATTING */