]> granicus.if.org Git - icu/commitdiff
ICU-9258 Updated format/DecimalFormatTest/DataDrivenTests to format StringPiece in...
authorYoshito Umaoka <y.umaoka@gmail.com>
Mon, 18 Jun 2012 14:14:22 +0000 (14:14 +0000)
committerYoshito Umaoka <y.umaoka@gmail.com>
Mon, 18 Jun 2012 14:14:22 +0000 (14:14 +0000)
X-SVN-Rev: 31961

icu4c/source/i18n/decimfmt.cpp
icu4c/source/i18n/unicode/decimfmt.h
icu4c/source/test/intltest/dcfmtest.cpp
icu4c/source/test/intltest/dcfmtest.h
icu4c/source/test/testdata/dcfmtest.txt

index 1a31b876fa1e69ebe3e6102d9a1f408baa1c0a2e..986243e62e622f74257beb5998e387a894d2342b 100644 (file)
@@ -1031,6 +1031,8 @@ void DecimalFormat::handleChanged() {
     debug("No fastpath: fMinFractionDigits>0");
   } else if(fCurrencySignCount > fgCurrencySignCountZero) {
     debug("No fastpath: fCurrencySignCount > fgCurrencySignCountZero");
+  } else if(fRoundingIncrement!=0) {
+    debug("No fastpath: fRoundingIncrement!=0");
   } else {
     data.fFastpathStatus = kFastpathYES;
     debug("kFastpathYES!");
@@ -1044,8 +1046,9 @@ DecimalFormat::format(int64_t number,
                       UnicodeString& appendTo,
                       FieldPosition& fieldPosition) const
 {
-  FieldPositionOnlyHandler handler(fieldPosition);
-  return _format(number, appendTo, handler);
+    UErrorCode status = U_ZERO_ERROR;
+    FieldPositionOnlyHandler handler(fieldPosition);
+    return _format(number, appendTo, handler, status);
 }
 
 UnicodeString&
@@ -1055,16 +1058,19 @@ DecimalFormat::format(int64_t number,
                       UErrorCode& status) const
 {
     FieldPositionIteratorHandler handler(posIter, status);
-    return _format(number, appendTo, handler);
+    return _format(number, appendTo, handler, status);
 }
 
 UnicodeString&
 DecimalFormat::_format(int64_t number,
                        UnicodeString& appendTo,
-                       FieldPositionHandler& handler) const
+                       FieldPositionHandler& handler,
+                       UErrorCode &status) const
 {
     // Bottleneck function for formatting int64_t
-    UErrorCode status = U_ZERO_ERROR;
+    if (U_FAILURE(status)) {
+        return appendTo;
+    }
 
 #if UCONFIG_FORMAT_FASTPATHS_49
   // const UnicodeString *posPrefix = fPosPrefixPattern;
@@ -1148,8 +1154,9 @@ DecimalFormat::format(  double number,
                         UnicodeString& appendTo,
                         FieldPosition& fieldPosition) const
 {
+    UErrorCode status = U_ZERO_ERROR;
     FieldPositionOnlyHandler handler(fieldPosition);
-    return _format(number, appendTo, handler);
+    return _format(number, appendTo, handler, status);
 }
 
 UnicodeString&
@@ -1159,14 +1166,18 @@ DecimalFormat::format(  double number,
                         UErrorCode& status) const
 {
   FieldPositionIteratorHandler handler(posIter, status);
-  return _format(number, appendTo, handler);
+  return _format(number, appendTo, handler, status);
 }
 
 UnicodeString&
 DecimalFormat::_format( double number,
                         UnicodeString& appendTo,
-                        FieldPositionHandler& handler) const
+                        FieldPositionHandler& handler,
+                        UErrorCode &status) const
 {
+    if (U_FAILURE(status)) {
+        return appendTo;
+    }
     // Special case for NaN, sets the begin and end index to be the
     // the string length of localized name of NaN.
     // TODO:  let NaNs go through DigitList.
@@ -1181,7 +1192,6 @@ DecimalFormat::_format( double number,
         return appendTo;
     }
 
-    UErrorCode status = U_ZERO_ERROR;
     DigitList digits;
     digits.set(number);
     _format(digits, appendTo, handler, status);
index f483cffed2e278d042e1698dd7803982eeeaaa78..4c44ce171d7f531f06d2103ff604a4517cb1a5b6 100644 (file)
@@ -2109,10 +2109,12 @@ private:
 
     UnicodeString& _format(int64_t number,
                            UnicodeString& appendTo,
-                           FieldPositionHandler& handler) const;
+                           FieldPositionHandler& handler,
+                           UErrorCode &status) const;
     UnicodeString& _format(double number,
                            UnicodeString& appendTo,
-                           FieldPositionHandler& handler) const;
+                           FieldPositionHandler& handler,
+                           UErrorCode &status) const;
     UnicodeString& _format(const DigitList &number,
                            UnicodeString& appendTo,
                            FieldPositionHandler& handler,
index 6a55e7a010079d0f8e836c95022594b41672a534..89788b5cb5697e579dd7ac7042f4b46819a7c385 100644 (file)
@@ -280,6 +280,15 @@ void DecimalFormatTest::DataDrivenTests() {
                            formatLineMat.group(2, status),    // rounding mode
                            formatLineMat.group(3, status),    // input decimal number
                            formatLineMat.group(4, status),    // expected formatted result
+                           kFormattable,
+                           status);
+
+            execFormatTest(lineNum,
+                           formatLineMat.group(1, status),    // Pattern
+                           formatLineMat.group(2, status),    // rounding mode
+                           formatLineMat.group(3, status),    // input decimal number
+                           formatLineMat.group(4, status),    // expected formatted result
+                           kStringPiece,
                            status);
             continue;
         }
@@ -368,6 +377,7 @@ void DecimalFormatTest::execFormatTest(int32_t lineNum,
                            const UnicodeString &round,       // rounding mode
                            const UnicodeString &input,       // input decimal number
                            const UnicodeString &expected,    // expected formatted result
+                           EFormatInputType inType,          // input number type
                            UErrorCode &status) {
     if (U_FAILURE(status)) {
         return;
@@ -404,31 +414,42 @@ void DecimalFormatTest::execFormatTest(int32_t lineNum,
         errln("file dcfmtest.txt, line %d: Bad rounding mode \"%s\"",
                 lineNum, UnicodeStringPiece(round).data());
     }
-    
+
+    const char *typeStr;
     UnicodeString result;
     UnicodeStringPiece spInput(input);
-    //fmtr.format(spInput, result, NULL, status);
 
-    Formattable fmtbl;
-    fmtbl.setDecimalNumber(spInput, status);
-    //NumberFormat &nfmtr = fmtr;
-    fmtr.format(fmtbl, result, NULL, status);
+    switch (inType) {
+    case kFormattable:
+        {
+            typeStr = "Formattable";
+            Formattable fmtbl;
+            fmtbl.setDecimalNumber(spInput, status);
+            fmtr.format(fmtbl, result, NULL, status);
+        }
+        break;
+    case kStringPiece:
+        typeStr = "StringPiece";
+        fmtr.format(spInput, result, NULL, status);
+        break;
+    }
 
     if ((status == U_FORMAT_INEXACT_ERROR) && (result == "") && (expected == "Inexact")) {
         // Test succeeded.
         status = U_ZERO_ERROR;
         return;
     }
+
     if (U_FAILURE(status)) {
-        errln("file dcfmtest.txt, line %d: format() returned %s.",
-            lineNum, u_errorName(status));
+        errln("[%s] file dcfmtest.txt, line %d: format() returned %s.",
+            typeStr, lineNum, u_errorName(status));
         status = U_ZERO_ERROR;
         return;
     }
     
     if (result != expected) {
-        errln("file dcfmtest.txt, line %d: expected \"%s\", got \"%s\"",
-            lineNum, UnicodeStringPiece(expected).data(), UnicodeStringPiece(result).data());
+        errln("[%s] file dcfmtest.txt, line %d: expected \"%s\", got \"%s\"",
+            typeStr, lineNum, UnicodeStringPiece(expected).data(), UnicodeStringPiece(result).data());
     }
 }
 
index 87444b3dfda178d385e5d020a8c4b5aec9f139b5..7379ff19af287e8b2fda98e9de4ee9438d411ac3 100644 (file)
@@ -1,6 +1,6 @@
 /********************************************************************
  * COPYRIGHT:
- * Copyright (c) 2010, International Business Machines Corporation and
+ * Copyright (c) 2010-2012, International Business Machines Corporation and
  * others. All Rights Reserved.
  ********************************************************************/
 
@@ -41,11 +41,19 @@ public:
                               const UnicodeString &expectedDecimal,
                               UErrorCode &status);
 
+private:
+    enum EFormatInputType {
+        kFormattable,
+        kStringPiece
+    };
+
+public:
     virtual void execFormatTest(int32_t lineNum,
                                const UnicodeString &pattern,
                                const UnicodeString &round, 
                                const UnicodeString &input,
                                const UnicodeString &expected,
+                               EFormatInputType inType,
                                UErrorCode &status);
 };
 
index a08bac9a6a678d4c77ae306dab7a1bceadf1fcc5..041e1dbbbd640ab8f1e781101eaddabb5a2046d2 100644 (file)
@@ -1,5 +1,4 @@
-
-# Note: Please make sure that this utf-8 file contains a BOM.
+# Note: Please make sure that this utf-8 file contains a BOM.
 #   Copyright (c) 2011-2012, International Business Machines Corporation and
 #   others. All Rights Reserved.
 #
@@ -64,6 +63,7 @@ format 00.##E0 default "1234567"  "12.35E5"
 format 00.##E0 default "1234567E111"  "12.35E116"
 format 00.##E0 default "-1234567E111"  "-12.35E116"
 
+format 0005 default "1234" "1235"
 
 #
 #  Rounding Modes