From ca7257d7f7bb86d318ede2ca2ed32714cd4bbf8c Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Sat, 21 Dec 2024 17:33:35 -0600 Subject: [PATCH] unit tests and fixes --- .../librepertory/include/types/repertory.hpp | 20 ++++++ repertory/repertory_test/src/atomic_test.cpp | 5 ++ .../src/json_serialize_test.cpp | 62 +++++++++++++++++++ 3 files changed, 87 insertions(+) diff --git a/repertory/librepertory/include/types/repertory.hpp b/repertory/librepertory/include/types/repertory.hpp index 8ae7b64c..36f40576 100644 --- a/repertory/librepertory/include/types/repertory.hpp +++ b/repertory/librepertory/include/types/repertory.hpp @@ -629,6 +629,26 @@ template <> struct adl_serializer> { value.store(repertory::download_type_from_string(data.get())); } }; + +template <> struct adl_serializer { + static void to_json(json &data, const repertory::database_type &value) { + data = repertory::database_type_to_string(value); + } + + static void from_json(const json &data, repertory::database_type &value) { + value = repertory::database_type_from_string(data.get()); + } +}; + +template <> struct adl_serializer { + static void to_json(json &data, const repertory::download_type &value) { + data = repertory::download_type_to_string(value); + } + + static void from_json(const json &data, repertory::download_type &value) { + value = repertory::download_type_from_string(data.get()); + } +}; NLOHMANN_JSON_NAMESPACE_END #endif // REPERTORY_INCLUDE_TYPES_REPERTORY_HPP_ diff --git a/repertory/repertory_test/src/atomic_test.cpp b/repertory/repertory_test/src/atomic_test.cpp index 809fd743..ef782f88 100644 --- a/repertory/repertory_test/src/atomic_test.cpp +++ b/repertory/repertory_test/src/atomic_test.cpp @@ -28,6 +28,11 @@ TEST(atomic, atomic_primitive) { atomic value; value = 5U; EXPECT_EQ(5U, static_cast(value)); + EXPECT_EQ(5U, value.load()); + + value.store(6U); + EXPECT_EQ(6U, static_cast(value)); + EXPECT_EQ(6U, value.load()); } TEST(atomic, atomic_primitive_equality) { diff --git a/repertory/repertory_test/src/json_serialize_test.cpp b/repertory/repertory_test/src/json_serialize_test.cpp index f80715a6..242f35c2 100644 --- a/repertory/repertory_test/src/json_serialize_test.cpp +++ b/repertory/repertory_test/src/json_serialize_test.cpp @@ -183,4 +183,66 @@ TEST(json_serialize, can_handle_sia_config) { EXPECT_STREQ(cfg2.bucket.c_str(), cfg.bucket.c_str()); } } + +TEST(json_serialize, can_handle_atomic) { + atomic cfg({ + "bucket", + }); + + json data(cfg); + EXPECT_STREQ("bucket", data.at(JSON_BUCKET).get().c_str()); + + { + auto cfg2 = data.get>(); + EXPECT_STREQ(cfg2.load().bucket.c_str(), cfg.load().bucket.c_str()); + } +} + +TEST(json_serialize, can_handle_database_type) { + json data(database_type::rocksdb); + EXPECT_EQ(database_type::rocksdb, data.get()); + EXPECT_STREQ("rocksdb", data.get().c_str()); + + data = database_type::sqlite; + EXPECT_EQ(database_type::sqlite, data.get()); + EXPECT_STREQ("sqlite", data.get().c_str()); +} + +TEST(json_serialize, can_handle_download_type) { + json data(download_type::direct); + EXPECT_EQ(download_type::direct, data.get()); + EXPECT_STREQ("direct", data.get().c_str()); + + data = download_type::fallback; + EXPECT_EQ(download_type::fallback, data.get()); + EXPECT_STREQ("fallback", data.get().c_str()); + + data = download_type::ring_buffer; + EXPECT_EQ(download_type::ring_buffer, data.get()); + EXPECT_STREQ("ring_buffer", data.get().c_str()); +} + +TEST(json_serialize, can_handle_atomic_database_type) { + json data(atomic{database_type::rocksdb}); + EXPECT_EQ(database_type::rocksdb, data.get>()); + EXPECT_STREQ("rocksdb", data.get().c_str()); + + data = atomic(database_type::sqlite); + EXPECT_EQ(database_type::sqlite, data.get>()); + EXPECT_STREQ("sqlite", data.get().c_str()); +} + +TEST(json_serialize, can_handle_atomic_download_type) { + json data(atomic{download_type::direct}); + EXPECT_EQ(download_type::direct, data.get>()); + EXPECT_STREQ("direct", data.get().c_str()); + + data = atomic{download_type::fallback}; + EXPECT_EQ(download_type::fallback, data.get()); + EXPECT_STREQ("fallback", data.get().c_str()); + + data = atomic{download_type::ring_buffer}; + EXPECT_EQ(download_type::ring_buffer, data.get>()); + EXPECT_STREQ("ring_buffer", data.get().c_str()); +} } // namespace repertory