mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	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