Browse Source

Added a trailing decimal when serialising integer valued doubles

tags/2021-05-28
Tom Poole 6 years ago
parent
commit
0d019acd1c
4 changed files with 39 additions and 33 deletions
  1. +5
    -5
      modules/juce_core/javascript/juce_JSON.cpp
  2. +24
    -18
      modules/juce_core/text/juce_String.cpp
  3. +5
    -5
      modules/juce_core/xml/juce_XmlElement.cpp
  4. +5
    -5
      modules/juce_data_structures/values/juce_ValueTree.cpp

+ 5
- 5
modules/juce_core/javascript/juce_JSON.cpp View File

@@ -660,20 +660,20 @@ public:
beginTest ("Float formatting"); beginTest ("Float formatting");
std::map<double, String> tests; std::map<double, String> tests;
tests[1] = "1";
tests[1] = "1.0";
tests[1.1] = "1.1"; tests[1.1] = "1.1";
tests[1.01] = "1.01"; tests[1.01] = "1.01";
tests[0.76378] = "0.76378"; tests[0.76378] = "0.76378";
tests[-10] = "-10";
tests[-10] = "-10.0";
tests[10.01] = "10.01"; tests[10.01] = "10.01";
tests[0.0123] = "0.0123"; tests[0.0123] = "0.0123";
tests[-3.7e-27] = "-3.7e-27"; tests[-3.7e-27] = "-3.7e-27";
tests[1e+40] = "1e40";
tests[1e+40] = "1.0e40";
tests[-12345678901234567.0] = "-1.234567890123457e16"; tests[-12345678901234567.0] = "-1.234567890123457e16";
tests[192000] = "192000";
tests[192000] = "192000.0";
tests[1234567] = "1.234567e6"; tests[1234567] = "1.234567e6";
tests[0.00006] = "0.00006"; tests[0.00006] = "0.00006";
tests[0.000006] = "6e-6";
tests[0.000006] = "6.0e-6";
for (auto& test : tests) for (auto& test : tests)
expectEquals (JSON::toString (test.first), test.second); expectEquals (JSON::toString (test.first), test.second);


+ 24
- 18
modules/juce_core/text/juce_String.cpp View File

@@ -2187,7 +2187,7 @@ StringRef::StringRef (const std::string& string) : StringRef (string.c_str
//============================================================================== //==============================================================================
static String minimiseLengthOfFloatString (const String& input)
static String reduceLengthOfFloatString (const String& input)
{ {
const auto start = input.getCharPointer(); const auto start = input.getCharPointer();
const auto end = start + (int) input.length(); const auto end = start + (int) input.length();
@@ -2208,8 +2208,8 @@ static String minimiseLengthOfFloatString (const String& input)
} }
else if (currentChar == '.') else if (currentChar == '.')
{ {
if (trimStart == c + 1)
--trimStart;
if (trimStart == c + 1 && trimStart != end && *trimStart == '0')
++trimStart;
break; break;
} }
@@ -2263,12 +2263,12 @@ static String serialiseDouble (double input)
auto absInput = std::abs (input); auto absInput = std::abs (input);
if (absInput >= 1.0e6 || absInput <= 1.0e-5) if (absInput >= 1.0e6 || absInput <= 1.0e-5)
return minimiseLengthOfFloatString ({ input, 15, true });
return reduceLengthOfFloatString ({ input, 15, true });
int intInput = (int) input; int intInput = (int) input;
if ((double) intInput == input) if ((double) intInput == input)
return minimiseLengthOfFloatString ({ input, 1 });
return { input, 1 };
auto numberOfDecimalPlaces = [absInput] auto numberOfDecimalPlaces = [absInput]
{ {
@@ -2297,7 +2297,7 @@ static String serialiseDouble (double input)
return 10; return 10;
}(); }();
return minimiseLengthOfFloatString (String (input, numberOfDecimalPlaces));
return reduceLengthOfFloatString (String (input, numberOfDecimalPlaces));
} }
//============================================================================== //==============================================================================
@@ -2836,13 +2836,14 @@ public:
{ {
StringPairArray tests; StringPairArray tests;
tests.set ("1", "1"); tests.set ("1", "1");
tests.set ("1.0", "1.0");
tests.set ("-1", "-1"); tests.set ("-1", "-1");
tests.set ("-100", "-100"); tests.set ("-100", "-100");
tests.set ("110", "110"); tests.set ("110", "110");
tests.set ("9090", "9090"); tests.set ("9090", "9090");
tests.set ("1000.0", "1000");
tests.set ("1.0", "1");
tests.set ("-1.00", "-1");
tests.set ("1000.0", "1000.0");
tests.set ("1.0", "1.0");
tests.set ("-1.00", "-1.0");
tests.set ("1.20", "1.2"); tests.set ("1.20", "1.2");
tests.set ("1.300", "1.3"); tests.set ("1.300", "1.3");
tests.set ("1.301", "1.301"); tests.set ("1.301", "1.301");
@@ -2857,7 +2858,7 @@ public:
tests.set ("-1e-000", "-1"); tests.set ("-1e-000", "-1");
tests.set ("1e100", "1e100"); tests.set ("1e100", "1e100");
tests.set ("100e100", "100e100"); tests.set ("100e100", "100e100");
tests.set ("100.0e0100", "100e100");
tests.set ("100.0e0100", "100.0e100");
tests.set ("-1e1", "-1e1"); tests.set ("-1e1", "-1e1");
tests.set ("1e10", "1e10"); tests.set ("1e10", "1e10");
tests.set ("-1e+10", "-1e10"); tests.set ("-1e+10", "-1e10");
@@ -2865,32 +2866,32 @@ public:
tests.set ("1e0010", "1e10"); tests.set ("1e0010", "1e10");
tests.set ("1e-0010", "1e-10"); tests.set ("1e-0010", "1e-10");
tests.set ("1e-1", "1e-1"); tests.set ("1e-1", "1e-1");
tests.set ("-1.0e1", "-1e1");
tests.set ("1.0e-1", "1e-1");
tests.set ("1.00e-1", "1e-1");
tests.set ("-1.0e1", "-1.0e1");
tests.set ("1.0e-1", "1.0e-1");
tests.set ("1.00e-1", "1.0e-1");
tests.set ("1.001e1", "1.001e1"); tests.set ("1.001e1", "1.001e1");
tests.set ("1.010e+1", "1.01e1"); tests.set ("1.010e+1", "1.01e1");
tests.set ("-1.1000e1", "-1.1e1"); tests.set ("-1.1000e1", "-1.1e1");
for (auto& input : tests.getAllKeys()) for (auto& input : tests.getAllKeys())
expectEquals (minimiseLengthOfFloatString (input), tests[input]);
expectEquals (reduceLengthOfFloatString (input), tests[input]);
} }
{ {
std::map<double, String> tests; std::map<double, String> tests;
tests[1] = "1";
tests[1] = "1.0";
tests[1.1] = "1.1"; tests[1.1] = "1.1";
tests[1.01] = "1.01"; tests[1.01] = "1.01";
tests[0.76378] = "7.6378e-1"; tests[0.76378] = "7.6378e-1";
tests[-10] = "-1e1";
tests[-10] = "-1.0e1";
tests[10.01] = "1.001e1"; tests[10.01] = "1.001e1";
tests[10691.01] = "1.069101e4"; tests[10691.01] = "1.069101e4";
tests[0.0123] = "1.23e-2"; tests[0.0123] = "1.23e-2";
tests[-3.7e-27] = "-3.7e-27"; tests[-3.7e-27] = "-3.7e-27";
tests[1e+40] = "1e40";
tests[1e+40] = "1.0e40";
for (auto& test : tests) for (auto& test : tests)
expectEquals (minimiseLengthOfFloatString (String (test.first, 15, true)), test.second);
expectEquals (reduceLengthOfFloatString (String (test.first, 15, true)), test.second);
} }
} }
@@ -2898,6 +2899,11 @@ public:
beginTest ("Serialisation"); beginTest ("Serialisation");
std::map <double, String> tests; std::map <double, String> tests;
tests[364] = "364.0";
tests[1e7] = "1.0e7";
tests[12345678901] = "1.2345678901e10";
tests[1234567890123456.7] = "1.234567890123457e15"; tests[1234567890123456.7] = "1.234567890123457e15";
tests[12345678.901234567] = "1.234567890123457e7"; tests[12345678.901234567] = "1.234567890123457e7";
tests[1234567.8901234567] = "1.234567890123457e6"; tests[1234567.8901234567] = "1.234567890123457e6";


+ 5
- 5
modules/juce_core/xml/juce_XmlElement.cpp View File

@@ -942,20 +942,20 @@ public:
Identifier number ("number"); Identifier number ("number");
std::map<double, String> tests; std::map<double, String> tests;
tests[1] = "1";
tests[1] = "1.0";
tests[1.1] = "1.1"; tests[1.1] = "1.1";
tests[1.01] = "1.01"; tests[1.01] = "1.01";
tests[0.76378] = "0.76378"; tests[0.76378] = "0.76378";
tests[-10] = "-10";
tests[-10] = "-10.0";
tests[10.01] = "10.01"; tests[10.01] = "10.01";
tests[0.0123] = "0.0123"; tests[0.0123] = "0.0123";
tests[-3.7e-27] = "-3.7e-27"; tests[-3.7e-27] = "-3.7e-27";
tests[1e+40] = "1e40";
tests[1e+40] = "1.0e40";
tests[-12345678901234567.0] = "-1.234567890123457e16"; tests[-12345678901234567.0] = "-1.234567890123457e16";
tests[192000] = "192000";
tests[192000] = "192000.0";
tests[1234567] = "1.234567e6"; tests[1234567] = "1.234567e6";
tests[0.00006] = "0.00006"; tests[0.00006] = "0.00006";
tests[0.000006] = "6e-6";
tests[0.000006] = "6.0e-6";
for (auto& test : tests) for (auto& test : tests)
{ {


+ 5
- 5
modules/juce_data_structures/values/juce_ValueTree.cpp View File

@@ -1195,20 +1195,20 @@ public:
Identifier number ("number"); Identifier number ("number");
std::map<double, String> tests; std::map<double, String> tests;
tests[1] = "1";
tests[1] = "1.0";
tests[1.1] = "1.1"; tests[1.1] = "1.1";
tests[1.01] = "1.01"; tests[1.01] = "1.01";
tests[0.76378] = "0.76378"; tests[0.76378] = "0.76378";
tests[-10] = "-10";
tests[-10] = "-10.0";
tests[10.01] = "10.01"; tests[10.01] = "10.01";
tests[0.0123] = "0.0123"; tests[0.0123] = "0.0123";
tests[-3.7e-27] = "-3.7e-27"; tests[-3.7e-27] = "-3.7e-27";
tests[1e+40] = "1e40";
tests[1e+40] = "1.0e40";
tests[-12345678901234567.0] = "-1.234567890123457e16"; tests[-12345678901234567.0] = "-1.234567890123457e16";
tests[192000] = "192000";
tests[192000] = "192000.0";
tests[1234567] = "1.234567e6"; tests[1234567] = "1.234567e6";
tests[0.00006] = "0.00006"; tests[0.00006] = "0.00006";
tests[0.000006] = "6e-6";
tests[0.000006] = "6.0e-6";
for (auto& test : tests) for (auto& test : tests)
{ {


Loading…
Cancel
Save