From: Hugo van der Merwe <17109322+hugovdm@users.noreply.github.com> Date: Thu, 26 Mar 2020 14:29:44 +0000 (+0100) Subject: Fix for base unit complexity != 1. Eg: volume -> cubic-meter. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ec0227643ebfc96da3b4f4c5c3abec6e1bb10867;p=icu Fix for base unit complexity != 1. Eg: volume -> cubic-meter. --- diff --git a/icu4c/source/i18n/getunitsdata.cpp b/icu4c/source/i18n/getunitsdata.cpp index b98d119e171..ffb0415807e 100644 --- a/icu4c/source/i18n/getunitsdata.cpp +++ b/icu4c/source/i18n/getunitsdata.cpp @@ -242,6 +242,7 @@ void collectUnitPrefs(UResourceBundle *usageData, MaybeStackVector getConversionRatesInfo(const MeasureUnit so } } if (baseCompoundUnit != NULL) { - fprintf(stderr, "source base: %s\n", baseCompoundUnit->getIdentifier()); *baseCompoundUnit = MeasureUnit(); } for (int i = 0; i < targetUnitsLength; i++) { diff --git a/icu4c/source/test/intltest/unitstest.cpp b/icu4c/source/test/intltest/unitstest.cpp index d53e6e8539a..b5a5e83f0a5 100644 --- a/icu4c/source/test/intltest/unitstest.cpp +++ b/icu4c/source/test/intltest/unitstest.cpp @@ -590,10 +590,16 @@ void UnitsTest::testGetConversionRateInfo() { {"centimeter-per-square-milligram", "inch-per-square-ounce", {"pound", "stone", "ton"}, - "kilogram"}, + "meter-per-square-kilogram"}, {"liter", "gallon", {"liter", "gallon", NULL}, "cubic-meter"}, {"stone-and-pound", "ton", {"pound", "stone", "ton"}, "kilogram"}, {"mile-per-hour", "dekameter-per-hour", {"mile", "hour", "meter"}, "meter-per-second"}, + {"kilovolt-ampere", + "horsepower", + {"volt", "ampere", "horsepower"}, + "kilogram-square-meter-per-cubic-second"}, // watt + // TODO: include capacitance test case with base unit: + // pow4-second-square-ampere-per-kilogram-square-meter; }; for (const auto &t : testCases) { logln("---testing: source=\"%s\", target=\"%s\", expectedBaseUnit=\"%s\"", t.sourceUnit, @@ -605,8 +611,13 @@ void UnitsTest::testGetConversionRateInfo() { MeasureUnit targetUnit = MeasureUnit::forIdentifier(t.targetUnit, status); MaybeStackVector conversionInfo = getConversionRatesInfo(sourceUnit, targetUnit, &baseCompoundUnit, status); + if (status.errIfFailureAndReset("getConversionRatesInfo(<%s>, <%s>, ...)", + sourceUnit.getIdentifier(), targetUnit.getIdentifier())) { + continue; + } - logln("---found BaseUnit=\"%s\"", baseCompoundUnit.getIdentifier()); + assertEquals("baseCompoundUnit returned by getConversionRatesInfo", t.baseUnit, + baseCompoundUnit.getIdentifier()); for (int i = 0; i < conversionInfo.length(); i++) { ConversionRateInfo *cri; cri = conversionInfo[i];