forked from bblanchon/ArduinoJson
Can now set the double value precision.
This commit is contained in:
@ -12,7 +12,7 @@ size_t JsonValue::printBoolTo(Print& p) const
|
|||||||
|
|
||||||
size_t JsonValue::printDoubleTo(Print& p) const
|
size_t JsonValue::printDoubleTo(Print& p) const
|
||||||
{
|
{
|
||||||
return p.print(content.asDouble);
|
return p.print(content.asDouble.value, content.asDouble.digits);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t JsonValue::printFloatTo(Print& p) const
|
size_t JsonValue::printFloatTo(Print& p) const
|
||||||
|
@ -22,10 +22,11 @@ public:
|
|||||||
content.asBool = value;
|
content.asBool = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonValue(double value)
|
JsonValue(double value, int digits=2)
|
||||||
: implementation(&JsonValue::printDoubleTo)
|
: implementation(&JsonValue::printDoubleTo)
|
||||||
{
|
{
|
||||||
content.asDouble = value;
|
content.asDouble.value = value;
|
||||||
|
content.asDouble.digits = digits;
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonValue(float value)
|
JsonValue(float value)
|
||||||
@ -69,11 +70,15 @@ private:
|
|||||||
union Content
|
union Content
|
||||||
{
|
{
|
||||||
bool asBool;
|
bool asBool;
|
||||||
double asDouble;
|
|
||||||
float asFloat;
|
float asFloat;
|
||||||
long asLong;
|
long asLong;
|
||||||
Printable* asPrintable;
|
Printable* asPrintable;
|
||||||
const char* asString;
|
const char* asString;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
double value;
|
||||||
|
int digits;
|
||||||
|
} asDouble;
|
||||||
};
|
};
|
||||||
|
|
||||||
Content content;
|
Content content;
|
||||||
|
@ -16,107 +16,102 @@ namespace JsonGeneratorTests
|
|||||||
TEST_METHOD(Null)
|
TEST_METHOD(Null)
|
||||||
{
|
{
|
||||||
write((char*)0);
|
write((char*)0);
|
||||||
|
|
||||||
assertReturns(4);
|
|
||||||
assertResultIs("null");
|
assertResultIs("null");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_METHOD(EmptyString)
|
TEST_METHOD(EmptyString)
|
||||||
{
|
{
|
||||||
write("");
|
write("");
|
||||||
|
|
||||||
assertReturns(2);
|
|
||||||
assertResultIs("\"\"");
|
assertResultIs("\"\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_METHOD(QuotationMark)
|
TEST_METHOD(QuotationMark)
|
||||||
{
|
{
|
||||||
write("\"");
|
write("\"");
|
||||||
assertReturns(4);
|
|
||||||
assertResultIs("\"\\\"\"");
|
assertResultIs("\"\\\"\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_METHOD(ReverseSolidus)
|
TEST_METHOD(ReverseSolidus)
|
||||||
{
|
{
|
||||||
write("\\");
|
write("\\");
|
||||||
assertReturns(4);
|
|
||||||
assertResultIs("\"\\\\\"");
|
assertResultIs("\"\\\\\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_METHOD(Solidus)
|
TEST_METHOD(Solidus)
|
||||||
{
|
{
|
||||||
write("/");
|
write("/");
|
||||||
assertReturns(3);
|
|
||||||
assertResultIs("\"/\""); // but the JSON format allows \/
|
assertResultIs("\"/\""); // but the JSON format allows \/
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_METHOD(Backspace)
|
TEST_METHOD(Backspace)
|
||||||
{
|
{
|
||||||
write("\b");
|
write("\b");
|
||||||
assertReturns(4);
|
|
||||||
assertResultIs("\"\\b\"");
|
assertResultIs("\"\\b\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_METHOD(Formfeed)
|
TEST_METHOD(Formfeed)
|
||||||
{
|
{
|
||||||
write("\f");
|
write("\f");
|
||||||
assertReturns(4);
|
|
||||||
assertResultIs("\"\\f\"");
|
assertResultIs("\"\\f\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_METHOD(Newline)
|
TEST_METHOD(Newline)
|
||||||
{
|
{
|
||||||
write("\n");
|
write("\n");
|
||||||
assertReturns(4);
|
|
||||||
assertResultIs("\"\\n\"");
|
assertResultIs("\"\\n\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_METHOD(CarriageReturn)
|
TEST_METHOD(CarriageReturn)
|
||||||
{
|
{
|
||||||
write("\r");
|
write("\r");
|
||||||
assertReturns(4);
|
|
||||||
assertResultIs("\"\\r\"");
|
assertResultIs("\"\\r\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_METHOD(HorizontalTab)
|
TEST_METHOD(HorizontalTab)
|
||||||
{
|
{
|
||||||
write("\t");
|
write("\t");
|
||||||
assertReturns(4);
|
|
||||||
assertResultIs("\"\\t\"");
|
assertResultIs("\"\\t\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_METHOD(Float)
|
TEST_METHOD(DoubleDefaultDigits)
|
||||||
{
|
{
|
||||||
write(3.40282346e38F);
|
write(3.14159265358979323846);
|
||||||
// assertReturns(4);
|
assertResultIs("3.14");
|
||||||
assertResultIs("3.40282347e+038");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_METHOD(Double)
|
TEST_METHOD(DoubleZeroDigits)
|
||||||
{
|
{
|
||||||
write(1.7976931348623157e308);
|
write(3.14159265358979323846, 0);
|
||||||
// assertReturns(4);
|
assertResultIs("3");
|
||||||
assertResultIs("1.7976931348623157e+308");
|
}
|
||||||
|
|
||||||
|
TEST_METHOD(DoubleOneDigit)
|
||||||
|
{
|
||||||
|
write(3.14159265358979323846, 1);
|
||||||
|
assertResultIs("3.1");
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_METHOD(DoubleTwoDigits)
|
||||||
|
{
|
||||||
|
write(3.14159265358979323846, 2);
|
||||||
|
assertResultIs("3.14");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_METHOD(Integer)
|
TEST_METHOD(Integer)
|
||||||
{
|
{
|
||||||
write(314);
|
write(314);
|
||||||
assertReturns(3);
|
|
||||||
assertResultIs("314");
|
assertResultIs("314");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_METHOD(Short)
|
TEST_METHOD(Short)
|
||||||
{
|
{
|
||||||
write((short)314);
|
write((short)314);
|
||||||
assertReturns(3);
|
|
||||||
assertResultIs("314");
|
assertResultIs("314");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_METHOD(Long)
|
TEST_METHOD(Long)
|
||||||
{
|
{
|
||||||
write(314L);
|
write(314L);
|
||||||
assertReturns(3);
|
|
||||||
assertResultIs("314");
|
assertResultIs("314");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,14 +122,16 @@ namespace JsonGeneratorTests
|
|||||||
returnValue = JsonValue(value).printTo(sb);
|
returnValue = JsonValue(value).printTo(sb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void write(double value, int digits)
|
||||||
|
{
|
||||||
|
StringBuilder sb(buffer, sizeof(buffer));
|
||||||
|
returnValue = JsonValue(value, digits).printTo(sb);
|
||||||
|
}
|
||||||
|
|
||||||
void assertResultIs(const char* expected)
|
void assertResultIs(const char* expected)
|
||||||
{
|
{
|
||||||
Assert::AreEqual(expected, buffer);
|
Assert::AreEqual(expected, buffer);
|
||||||
}
|
Assert::AreEqual(strlen(expected), returnValue);
|
||||||
|
|
||||||
void assertReturns(size_t expected)
|
|
||||||
{
|
|
||||||
Assert::AreEqual(expected, returnValue);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -22,7 +22,7 @@ size_t Print::write(const char* s)
|
|||||||
size_t Print::print(double value, int digits)
|
size_t Print::print(double value, int digits)
|
||||||
{
|
{
|
||||||
char tmp[32];
|
char tmp[32];
|
||||||
sprintf(tmp, "%.*lg", digits, value);
|
sprintf(tmp, "%.*lg", digits+1, value);
|
||||||
return write(tmp);
|
return write(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user