diff options
| author | Per Larsson <[email protected]> | 2021-09-30 12:23:43 +0200 |
|---|---|---|
| committer | Per Larsson <[email protected]> | 2021-09-30 12:23:43 +0200 |
| commit | ceb54da5cd93262e282d45fe3b60c0bf1a7835c8 (patch) | |
| tree | 468016c16dd4128d84c5b2b12f4c979bb1feb3df /zencore/compactbinary.cpp | |
| parent | structured cache: Added stats test code (needs additional work / metrics) (diff) | |
| download | zen-ceb54da5cd93262e282d45fe3b60c0bf1a7835c8.tar.xz zen-ceb54da5cd93262e282d45fe3b60c0bf1a7835c8.zip | |
Fixed compact binary to JSON float/double format specifier.
Diffstat (limited to 'zencore/compactbinary.cpp')
| -rw-r--r-- | zencore/compactbinary.cpp | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/zencore/compactbinary.cpp b/zencore/compactbinary.cpp index 3b6d33e41..4072ab5cf 100644 --- a/zencore/compactbinary.cpp +++ b/zencore/compactbinary.cpp @@ -1474,10 +1474,10 @@ public: Builder << Accessor.AsIntegerNegative(); break; case CbFieldType::Float32: - Builder.Append("%.9g"_format(Accessor.AsFloat32())); + Builder.Append("{:.9g}"_format(Accessor.AsFloat32())); break; case CbFieldType::Float64: - Builder.Append("%.17g"_format(Accessor.AsFloat64())); + Builder.Append("{:.17g}"_format(Accessor.AsFloat64())); break; case CbFieldType::BoolFalse: Builder << "false"sv; @@ -1831,6 +1831,31 @@ TEST_CASE("uson.json") CHECK(ValueOne == "ValueOne"); CHECK(ValueTwo == "ValueTwo"); } + + SUBCASE("number") + { + const double ExpectedFloatValue = 21.21f; + const double ExpectedDoubleValue = 42.42; + + CbObjectWriter Writer; + Writer << "Float" << ExpectedFloatValue; + Writer << "Double" << ExpectedDoubleValue; + + CbObject Obj = Writer.Save(); + + StringBuilder<128> Sb; + const std::string_view JsonText = Obj.ToJson(Sb).ToView(); + + std::string JsonError; + json11::Json Json = json11::Json::parse(JsonText.data(), JsonError); + + const float FloatValue = float(Json["Float"].number_value()); + const double DoubleValue = Json["Double"].number_value(); + + CHECK(JsonError.empty()); + CHECK(FloatValue == doctest::Approx(ExpectedFloatValue)); + CHECK(DoubleValue == doctest::Approx(ExpectedDoubleValue)); + } } #endif |