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!");
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&
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;
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&
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.
return appendTo;
}
- UErrorCode status = U_ZERO_ERROR;
DigitList digits;
digits.set(number);
_format(digits, appendTo, handler, status);
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,
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;
}
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;
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());
}
}
/********************************************************************
* COPYRIGHT:
- * Copyright (c) 2010, International Business Machines Corporation and
+ * Copyright (c) 2010-2012, International Business Machines Corporation and
* others. All Rights Reserved.
********************************************************************/
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);
};
-
-# 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.
#
format 00.##E0 default "1234567E111" "12.35E116"
format 00.##E0 default "-1234567E111" "-12.35E116"
+format 0005 default "1234" "1235"
#
# Rounding Modes