-/********************************************************************
+/***********************************************************************
* COPYRIGHT:
- * Copyright (c) 1997-2003, International Business Machines Corporation and
- * others. All Rights Reserved.
- ********************************************************************/
+ * Copyright (c) 1997-2009, International Business Machines Corporation
+ * and others. All Rights Reserved.
+ ***********************************************************************/
#include "unicode/utypes.h"
#include "unicode/decimfmt.h"
#include "tsnmfmt.h"
+#include "putilimp.h"
#include <float.h>
+#include <stdlib.h>
+
+IntlTestNumberFormat::~IntlTestNumberFormat() {}
static const char * formattableTypeName(Formattable::Type t)
{
case Formattable::kLong: return "kLong";
case Formattable::kString: return "kString";
case Formattable::kArray: return "kArray";
+ case Formattable::kInt64: return "kInt64";
default: return "??unknown??";
}
}
fStatus = U_ZERO_ERROR;
fFormat = NumberFormat::createPercentInstance(locale, fStatus);
testFormat(/* par */);
+
+ name = "Scientific test";
+ logln((UnicodeString)name + " (" + localeName + ")");
+ fStatus = U_ZERO_ERROR;
+ fFormat = NumberFormat::createScientificInstance(locale, fStatus);
+ testFormat(/* par */);
}
double IntlTestNumberFormat::randDouble()
}
-/* Make sure that we don't get something too large and multiply into infinity. */
+/* Make sure that we don't get something too large and multiply into infinity.
+ @param smallerThanMax the requested maximum value smaller than DBL_MAX */
double IntlTestNumberFormat::getSafeDouble(double smallerThanMax) {
double it;
+ double high = (DBL_MAX/smallerThanMax)/10.0;
+ double low = -high;
do {
it = randDouble();
- } while (-DBL_MAX/smallerThanMax > it || it > DBL_MAX/smallerThanMax);
- it *= smallerThanMax/10.0;
+ } while (low > it || it > high);
return it;
}
{
if (U_FAILURE(fStatus))
{
- errln((UnicodeString)"**** FAIL: createXxxInstance failed.");
+ dataerrln((UnicodeString)"**** FAIL: createXxxInstance failed. - " + u_errorName(fStatus));
if (fFormat != 0)
errln("**** FAIL: Non-null format returned by createXxxInstance upon failure.");
delete fFormat;
tryIt(9.99999999999996);
tryIt(9.999999999999996);
+ tryIt(5.06e-27);
+
tryIt((int32_t)INT32_MIN);
tryIt((int32_t)INT32_MAX);
tryIt((double)INT32_MIN);
// Convert from long to double
if (number[i].getType() == Formattable::kLong)
number[i].setDouble(number[i].getLong());
+ else if (number[i].getType() == Formattable::kInt64)
+ number[i].setDouble((double)number[i].getInt64());
else if (number[i].getType() != Formattable::kDouble)
{
errMsg = ("**** FAIL: Parse of " + prettify(string[i-1])
logln(all);
}
else
- errln((UnicodeString)"**** FAIL: Zero available locales or null array pointer");
+ dataerrln((UnicodeString)"**** FAIL: Zero available locales or null array pointer");
}
void IntlTestNumberFormat::monsterTest(/* char* par */)