1#include <gtest/gtest.h>
6#include <userver/protobuf/json/convert.hpp>
7#include <userver/utest/assert_macros.hpp>
11USERVER_NAMESPACE_BEGIN
16std::string GetFloatSpecialValue(
const T val) {
17 if (std::isnan(val)) {
19 }
else if (std::isinf(val)) {
20 return val > 0 ?
"Infinity" :
"-Infinity";
22 throw std::runtime_error(
"not a special value");
27class FloatSpecialToJsonTest :
public ::testing::Test {
32using FpTypes = ::testing::Types<
35 FloatPositiveInfinity,
36 FloatNegativeInfinity,
39 DoublePositiveInfinity,
40 DoubleNegativeInfinity>;
42TYPED_TEST_SUITE(FloatSpecialToJsonTest, FpTypes);
44TYPED_TEST(FloatSpecialToJsonTest, Test) {
45 using Param =
typename TestFixture::Param;
47 if constexpr (Param::kSkip) {
51 const auto& value = Param::kValue;
52 auto input = PrepareTestData(value);
53 formats::json::Value json, sample_json;
55 UASSERT_NO_THROW((json = MessageToJson(input)));
56 UASSERT_NO_THROW((sample_json = CreateSampleJson(input)));
58 EXPECT_EQ(json[
"field1"].As<std::string>(), GetFloatSpecialValue(value.field1));
59 EXPECT_EQ(json[
"field1"].As<std::string>(), sample_json[
"field1"].As<std::string>());