From 0a1895d0bebf8f7f888cd9dc5073087ae45a4476 Mon Sep 17 00:00:00 2001 From: Green Sky Date: Fri, 19 Mar 2021 16:28:40 +0100 Subject: [PATCH] scalar_range json serialization --- framework/std_utils/CMakeLists.txt | 13 ++++++ .../src/mm/serialize/json_scalar_range2.hpp | 26 +++++++++++ framework/std_utils/test/CMakeLists.txt | 2 + .../test/scalar_range2_json_test.cpp | 43 +++++++++++++++++++ 4 files changed, 84 insertions(+) create mode 100644 framework/std_utils/src/mm/serialize/json_scalar_range2.hpp create mode 100644 framework/std_utils/test/scalar_range2_json_test.cpp diff --git a/framework/std_utils/CMakeLists.txt b/framework/std_utils/CMakeLists.txt index 06fd6fd..fa09f46 100644 --- a/framework/std_utils/CMakeLists.txt +++ b/framework/std_utils/CMakeLists.txt @@ -5,6 +5,19 @@ add_library(std_utils INTERFACE) target_include_directories(std_utils INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/src") +############################## + +# curr only scalar_range +add_library(std_utils_serialize INTERFACE) + +target_include_directories(std_utils_serialize INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/src") + +target_link_libraries(std_utils_serialize INTERFACE + nlohmann_json::nlohmann_json +) + +############################## + if (BUILD_TESTING) add_subdirectory(test) endif() diff --git a/framework/std_utils/src/mm/serialize/json_scalar_range2.hpp b/framework/std_utils/src/mm/serialize/json_scalar_range2.hpp new file mode 100644 index 0000000..d294210 --- /dev/null +++ b/framework/std_utils/src/mm/serialize/json_scalar_range2.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include + +#include "../scalar_range2.hpp" + +namespace MM { + +template +void to_json(nlohmann::json& j, const ScalarRange2& r) { + j = nlohmann::json{ + {"min", r.min()}, + {"max", r.max()} + }; +} + +template +void from_json(const nlohmann::json& j, ScalarRange2& r) { + j.at("min").get_to(r.min()); + j.at("max").get_to(r.max()); + + r.sanitize(); +} + +} // MM + diff --git a/framework/std_utils/test/CMakeLists.txt b/framework/std_utils/test/CMakeLists.txt index b02a101..263e4fa 100644 --- a/framework/std_utils/test/CMakeLists.txt +++ b/framework/std_utils/test/CMakeLists.txt @@ -1,5 +1,6 @@ add_executable(std_utils_test scalar_range2_test.cpp + scalar_range2_json_test.cpp ) target_include_directories(std_utils_test PRIVATE ".") @@ -9,6 +10,7 @@ target_link_libraries(std_utils_test gmock std_utils + std_utils_serialize ) add_test(NAME std_utils_test COMMAND std_utils_test) diff --git a/framework/std_utils/test/scalar_range2_json_test.cpp b/framework/std_utils/test/scalar_range2_json_test.cpp new file mode 100644 index 0000000..2d3bfbb --- /dev/null +++ b/framework/std_utils/test/scalar_range2_json_test.cpp @@ -0,0 +1,43 @@ +#include + +#include +#include + +#include + +TEST(std_utils_scalar_range2_json, signed_integer) { + MM::ScalarRange2 r8 {-4, 100}; + + nlohmann::json j = r8; + ASSERT_EQ(j["min"], -4); + ASSERT_EQ(j["max"], 100); + + MM::ScalarRange2 r8_2 = j; + ASSERT_EQ(r8_2.min(), -4); + ASSERT_EQ(r8_2.max(), 100); +} + +TEST(std_utils_scalar_range2_json, unsigned_integer) { + MM::ScalarRange2 r8 {4, 100}; + + nlohmann::json j = r8; + ASSERT_EQ(j["min"], 4); + ASSERT_EQ(j["max"], 100); + + MM::ScalarRange2 r8_2 = j; + ASSERT_EQ(r8_2.min(), 4); + ASSERT_EQ(r8_2.max(), 100); +} + +TEST(std_utils_scalar_range2_json, floating) { + MM::ScalarRange2 r {-4.3f, 100.f}; + + nlohmann::json j = r; + ASSERT_EQ(j["min"], -4.3f); + ASSERT_EQ(j["max"], 100.f); + + MM::ScalarRange2 r_2 = j; + ASSERT_EQ(r_2.min(), -4.3f); + ASSERT_EQ(r_2.max(), 100.f); +} +