replaced stream-based number formatting

embedded a portion of double-conversion library
(http://code.google.com/p/double-conversion/)and replaced stream-based
number formatting
This commit is contained in:
aleks-f
2012-11-25 21:36:29 -06:00
parent 9cd0f0b4f7
commit 91d5be438b
45 changed files with 6631 additions and 972 deletions

View File

@@ -34,7 +34,7 @@
#include "CppUnit/TestCaller.h"
#include "CppUnit/TestSuite.h"
#include "Poco/NumberFormatter.h"
#include <sstream>
using Poco::NumberFormatter;
using Poco::Int64;
@@ -89,17 +89,6 @@ void NumberFormatterTest::testFormat()
{
assert (NumberFormatter::format((void*) 0x12345678) == "0000000012345678");
}
assert(NumberFormatter::format(12.25) == "12.25");
assert(NumberFormatter::format(12.25, 4) == "12.2500");
assert(NumberFormatter::format(12.25, 8, 4) == " 12.2500");
assert(NumberFormatter::format(true, NumberFormatter::FMT_TRUE_FALSE) == "true");
assert(NumberFormatter::format(false, NumberFormatter::FMT_TRUE_FALSE) == "false");
assert(NumberFormatter::format(true, NumberFormatter::FMT_YES_NO) == "yes");
assert(NumberFormatter::format(false, NumberFormatter::FMT_YES_NO) == "no");
assert(NumberFormatter::format(true, NumberFormatter::FMT_ON_OFF) == "on");
assert(NumberFormatter::format(false, NumberFormatter::FMT_ON_OFF) == "off");
}
@@ -119,6 +108,17 @@ void NumberFormatterTest::testFormat0()
}
void NumberFormatterTest::testFormatBool()
{
assert(NumberFormatter::format(true, NumberFormatter::FMT_TRUE_FALSE) == "true");
assert(NumberFormatter::format(false, NumberFormatter::FMT_TRUE_FALSE) == "false");
assert(NumberFormatter::format(true, NumberFormatter::FMT_YES_NO) == "yes");
assert(NumberFormatter::format(false, NumberFormatter::FMT_YES_NO) == "no");
assert(NumberFormatter::format(true, NumberFormatter::FMT_ON_OFF) == "on");
assert(NumberFormatter::format(false, NumberFormatter::FMT_ON_OFF) == "off");
}
void NumberFormatterTest::testFormatHex()
{
assert (NumberFormatter::formatHex(0x12) == "12");
@@ -201,15 +201,37 @@ void NumberFormatterTest::testFormatHex()
void NumberFormatterTest::testFormatFloat()
{
std::string s(NumberFormatter::format(1.0f));
assert(s == "1");
s = NumberFormatter::format(0.1f);
assert(s == "0.1");
assert (NumberFormatter::format(1.0f) == "1");
assert (NumberFormatter::format(1.23f) == "1.23");
assert (NumberFormatter::format(-1.23f) == "-1.23");
assert (NumberFormatter::format(0.1f) == "0.1");
assert (NumberFormatter::format(-0.1f) == "-0.1");
assert (NumberFormatter::format(1.23) == "1.23");
assert (NumberFormatter::format(-1.23) == "-1.23");
assert (NumberFormatter::format(1.0) == "1");
assert (NumberFormatter::format(-1.0) == "-1");
assert (NumberFormatter::format(0.1) == "0.1");
assert (NumberFormatter::format(-0.1) == "-0.1");
s = NumberFormatter::format(1.0);
assert(s == "1");
s = NumberFormatter::format(0.1);
assert(s == "0.1");
int decDigits = std::numeric_limits<double>::digits10;
std::ostringstream ostr;
ostr << "0." << std::string(decDigits - 1, '0') << '1';
assert(NumberFormatter::format(1 / std::pow(10., decDigits)) == ostr.str());
ostr.str("");
ostr << "1e-" << decDigits + 1;
std::string str (ostr.str());
std::string str1 (NumberFormatter::format(1 / std::pow(10., decDigits + 1)));
assert(NumberFormatter::format(1 / std::pow(10., decDigits + 1)) == ostr.str());
assert(NumberFormatter::format(12.25) == "12.25");
assert(NumberFormatter::format(12.25, 4) == "12.2500");
assert(NumberFormatter::format(12.25, 8, 4) == " 12.2500");
assert(NumberFormatter::format(-12.25) == "-12.25");
assert(NumberFormatter::format(-12.25, 4) == "-12.2500");
assert(NumberFormatter::format(-12.25, 10, 4) == " -12.2500");
assert(NumberFormatter::format(-12.25, 10, 2) == " -12.25");
}
@@ -229,6 +251,7 @@ CppUnit::Test* NumberFormatterTest::suite()
CppUnit_addTest(pSuite, NumberFormatterTest, testFormat);
CppUnit_addTest(pSuite, NumberFormatterTest, testFormat0);
CppUnit_addTest(pSuite, NumberFormatterTest, testFormatBool);
CppUnit_addTest(pSuite, NumberFormatterTest, testFormatHex);
CppUnit_addTest(pSuite, NumberFormatterTest, testFormatFloat);