userver: /data/code/userver/libraries/protobuf/tests/json/float_to_json_test.cpp Source File
Loading...
Searching...
No Matches
float_to_json_test.cpp
1#include <gtest/gtest.h>
2
3#include <limits>
4#include <ostream>
5#include <string>
6
7#include <fmt/format.h>
8
9#include <userver/protobuf/json/convert.hpp>
10#include <userver/utest/assert_macros.hpp>
11
12#include "utils.hpp"
13
14USERVER_NAMESPACE_BEGIN
15
16namespace protobuf::json::tests {
17
18constexpr float kMax = std::numeric_limits<float>::max();
19constexpr float kMin = std::numeric_limits<float>::min();
20
21struct FloatToJsonSuccessTestParam {
22 FloatMessageData input = {};
23 WriteOptions options = {};
24};
25
26void PrintTo(const FloatToJsonSuccessTestParam& param, std::ostream* os) {
27 *os << fmt::format("{{ input = {{.field1={}}} }}", param.input.field1);
28}
29
30class FloatToJsonSuccessTest : public ::testing::TestWithParam<FloatToJsonSuccessTestParam> {};
31
32INSTANTIATE_TEST_SUITE_P(
33 ,
34 FloatToJsonSuccessTest,
35 ::testing::Values(
36 FloatToJsonSuccessTestParam{FloatMessageData{0.0}},
37 FloatToJsonSuccessTestParam{FloatMessageData{0}, WriteOptions{.always_print_fields_with_no_presence = true}},
38 FloatToJsonSuccessTestParam{FloatMessageData{1}},
39 FloatToJsonSuccessTestParam{FloatMessageData{-1}},
40 FloatToJsonSuccessTestParam{FloatMessageData{100.12357}},
41 FloatToJsonSuccessTestParam{FloatMessageData{-100.12357}},
42 FloatToJsonSuccessTestParam{FloatMessageData{kMax}},
43 FloatToJsonSuccessTestParam{FloatMessageData{-kMax}},
44 FloatToJsonSuccessTestParam{FloatMessageData{kMin}},
45 FloatToJsonSuccessTestParam{FloatMessageData{-kMin}}
46 )
47);
48
49TEST_P(FloatToJsonSuccessTest, Test) {
50 const auto& param = GetParam();
51
52 auto input = PrepareTestData(param.input);
53 formats::json::Value json, sample_json;
54
55 UASSERT_NO_THROW((json = MessageToJson(input, param.options)));
56 UASSERT_NO_THROW((sample_json = CreateSampleJson(input, param.options)));
57
58 // Can't compare 'formats::json::Value' using 'operator==' because protobuf json writer outputs
59 // distinct number of fractional digits than usever's one. Still after converting to target
60 // type values should be equal.
61
62 EXPECT_LE(json.GetSize(), std::size_t{1});
63 EXPECT_EQ(json.GetSize(), sample_json.GetSize());
64
65 if (json.GetSize() == 0) {
66 return;
67 }
68
69 EXPECT_EQ(json["field1"].As<float>(), param.input.field1);
70 EXPECT_EQ(json["field1"].As<float>(), sample_json["field1"].As<float>());
71}
72
73} // namespace protobuf::json::tests
74
75USERVER_NAMESPACE_END