From 3872080c517ab11c1296bbc67e8c46273a0e1a57 Mon Sep 17 00:00:00 2001 From: Younies Date: Mon, 17 Feb 2020 15:31:28 +0100 Subject: [PATCH] some changes --- icu4c/source/i18n/unitconverter.cpp | 31 +++++++++++++++++++++---- icu4c/source/test/intltest/intltest.cpp | 2 +- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/icu4c/source/i18n/unitconverter.cpp b/icu4c/source/i18n/unitconverter.cpp index ca8ca5bfca8..45c109c1598 100644 --- a/icu4c/source/i18n/unitconverter.cpp +++ b/icu4c/source/i18n/unitconverter.cpp @@ -28,6 +28,12 @@ struct Factor { number::impl::DecNum factorNum; number::impl::DecNum factorDen; number::impl::DecNum offset; + + /*For Debugging*/ + StringPiece factorNumStr; + StringPiece factorDenStr; + StringPiece factorOffsetStr; + bool reciprocal = false; int32_t constants[CONSTANTS_COUNT] = {}; @@ -38,12 +44,20 @@ struct Factor { offset.setTo(0.0, status); } + void setStrings(UErrorCode &status) { + factorNumStr = factorNum.toString(status); + factorDenStr = factorDen.toString(status); + factorOffsetStr = offset.toString(status); + } + void multiplyBy(const Factor &rhs, UErrorCode &status) { factorNum.multiplyBy(rhs.factorNum, status); factorDen.multiplyBy(rhs.factorDen, status); for (int i = 0; i < CONSTANTS_COUNT; i++) constants[i] += rhs.constants[i]; offset.add(rhs.offset, status); // TODO(younies): fix this. + + setStrings(status); } void divideBy(const Factor &rhs, UErrorCode &status) { @@ -51,6 +65,8 @@ struct Factor { factorDen.divideBy(rhs.factorDen, status); for (int i = 0; i < CONSTANTS_COUNT; i++) constants[i] -= rhs.constants[i]; // TODO(younies): fix this + + setStrings(status); } // apply the power to the factor. @@ -78,6 +94,9 @@ struct Factor { factorNum.setTo(factorDen, status); factorDen.setTo(temp, status); } + + + setStrings(status); } // Flip the `Factor`, for example, factor= 2/3, flippedFactor = 3/2 @@ -90,6 +109,9 @@ struct Factor { for (int i = 0; i < CONSTANTS_COUNT; i++) { constants[i] *= -1; } + + + setStrings(status); } // Apply SI prefix to the `Factor` @@ -111,6 +133,9 @@ struct Factor { } else { factorDen.multiplyBy(e, status); } + + + setStrings(status); } }; @@ -354,8 +379,10 @@ void loadConversionRate(ConversionRate &conversionRate, StringPiece source, Stri conversionRate.source = source; conversionRate.target = target; + conversionRate.factorNum.setTo(finalFactor.factorNum, status); conversionRate.factorDen.setTo(finalFactor.factorDen, status); + conversionRate.offset.setTo(finalFactor.offset, status); // TODO(younies): use the database. @@ -380,10 +407,6 @@ UnitConverter::UnitConverter(MeasureUnit source, MeasureUnit target, UErrorCode } void UnitConverter::convert(const DecNum &input_value, DecNum &output_value, UErrorCode status) { - std::printf(conversion_rate_.factorNum.toString(status).data()); - std::printf(conversion_rate_.factorDen.toString(status).data()); - std::printf(conversion_rate_.offset.toString(status).data()); - DecNum result(input_value, status); result.multiplyBy(conversion_rate_.factorNum, status); result.divideBy(conversion_rate_.factorDen, status); diff --git a/icu4c/source/test/intltest/intltest.cpp b/icu4c/source/test/intltest/intltest.cpp index 097086ec95e..7208dd68c51 100644 --- a/icu4c/source/test/intltest/intltest.cpp +++ b/icu4c/source/test/intltest/intltest.cpp @@ -2184,7 +2184,7 @@ UBool IntlTest::assertEqualsNear(const char *message, const number::impl::DecNum decNumPrecision.setTo(precision, status); difference.setTo(expected, status); - difference.subtract(actual, status); + // difference.subtract(actual, status); if (difference.isNegative()) difference.multiplyBy(-1, status); if (difference.greaterThan(decNumPrecision, status) || U_FAILURE(status) || true) { -- 2.40.0