aboutsummaryrefslogtreecommitdiff
path: root/zencore/compactbinary.cpp
diff options
context:
space:
mode:
authorPer Larsson <[email protected]>2021-09-30 12:23:43 +0200
committerPer Larsson <[email protected]>2021-09-30 12:23:43 +0200
commitceb54da5cd93262e282d45fe3b60c0bf1a7835c8 (patch)
tree468016c16dd4128d84c5b2b12f4c979bb1feb3df /zencore/compactbinary.cpp
parentstructured cache: Added stats test code (needs additional work / metrics) (diff)
downloadzen-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.cpp29
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