From b2f54fe19c16c1f4b74f57bc546814886f76121b Mon Sep 17 00:00:00 2001 From: mintel1 Date: Tue, 14 May 2024 08:36:35 +0200 Subject: [PATCH 1/6] Initial commit for flat_map and flat_multimap --- .../src/morpheus/core/conformance/flat_map.hpp | 18 ++++++++++++++++++ .../serialisation/adapters/std/flat_map.hpp | 13 +++++++++++++ .../adapters/std/flat_multimap.hpp | 13 +++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 libraries/core/src/morpheus/core/conformance/flat_map.hpp create mode 100644 libraries/core/src/morpheus/core/serialisation/adapters/std/flat_map.hpp create mode 100644 libraries/core/src/morpheus/core/serialisation/adapters/std/flat_multimap.hpp diff --git a/libraries/core/src/morpheus/core/conformance/flat_map.hpp b/libraries/core/src/morpheus/core/conformance/flat_map.hpp new file mode 100644 index 000000000..f18450ada --- /dev/null +++ b/libraries/core/src/morpheus/core/conformance/flat_map.hpp @@ -0,0 +1,18 @@ +#pragma once + +#if __has_include() + #include +#endif + +// clang-format off +#if (__cpp_lib_source_location >= 201907L) + + namespace morpheus { namespace fm_ns = std; } + +#else + #include + + namespace morpheus{ namespace fm_ns = boost; } + +#endif +// clang-format on diff --git a/libraries/core/src/morpheus/core/serialisation/adapters/std/flat_map.hpp b/libraries/core/src/morpheus/core/serialisation/adapters/std/flat_map.hpp new file mode 100644 index 000000000..3bed5c845 --- /dev/null +++ b/libraries/core/src/morpheus/core/serialisation/adapters/std/flat_map.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include "morpheus/core/serialisation/adapters/std/ranges.hpp" + +#include + +namespace morpheus::serialisation::detail +{ + +template +inline constexpr bool isEnabledForRangeSerialisation> = true; + +} // namespace morpheus::serialisation::detail diff --git a/libraries/core/src/morpheus/core/serialisation/adapters/std/flat_multimap.hpp b/libraries/core/src/morpheus/core/serialisation/adapters/std/flat_multimap.hpp new file mode 100644 index 000000000..2c54cd112 --- /dev/null +++ b/libraries/core/src/morpheus/core/serialisation/adapters/std/flat_multimap.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include "morpheus/core/serialisation/adapters/std/ranges.hpp" + +#include + +namespace morpheus::serialisation::detail +{ + +template +inline constexpr bool isEnabledForRangeSerialisation> = true; + +} // namespace morpheus::serialisation::detail From c1ff69122eb2508dab950cf8fb345e2e27c0e8a9 Mon Sep 17 00:00:00 2001 From: mintel1 <154367731+mintel1@users.noreply.github.com> Date: Tue, 14 May 2024 18:00:00 +0100 Subject: [PATCH 2/6] Update libraries/core/src/morpheus/core/serialisation/adapters/std/flat_map.hpp Co-authored-by: Antony Peacock --- .../src/morpheus/core/serialisation/adapters/std/flat_map.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/core/src/morpheus/core/serialisation/adapters/std/flat_map.hpp b/libraries/core/src/morpheus/core/serialisation/adapters/std/flat_map.hpp index 3bed5c845..74994af46 100644 --- a/libraries/core/src/morpheus/core/serialisation/adapters/std/flat_map.hpp +++ b/libraries/core/src/morpheus/core/serialisation/adapters/std/flat_map.hpp @@ -8,6 +8,6 @@ namespace morpheus::serialisation::detail { template -inline constexpr bool isEnabledForRangeSerialisation> = true; +inline constexpr bool isEnabledForRangeSerialisation> = true; } // namespace morpheus::serialisation::detail From e3818c11c411f044fb438bc4f1a3a540a2d0f916 Mon Sep 17 00:00:00 2001 From: mintel1 <154367731+mintel1@users.noreply.github.com> Date: Tue, 14 May 2024 18:00:11 +0100 Subject: [PATCH 3/6] Update libraries/core/src/morpheus/core/serialisation/adapters/std/flat_multimap.hpp Co-authored-by: Antony Peacock --- .../morpheus/core/serialisation/adapters/std/flat_multimap.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/core/src/morpheus/core/serialisation/adapters/std/flat_multimap.hpp b/libraries/core/src/morpheus/core/serialisation/adapters/std/flat_multimap.hpp index 2c54cd112..7da0f1d9e 100644 --- a/libraries/core/src/morpheus/core/serialisation/adapters/std/flat_multimap.hpp +++ b/libraries/core/src/morpheus/core/serialisation/adapters/std/flat_multimap.hpp @@ -8,6 +8,6 @@ namespace morpheus::serialisation::detail { template -inline constexpr bool isEnabledForRangeSerialisation> = true; +inline constexpr bool isEnabledForRangeSerialisation> = true; } // namespace morpheus::serialisation::detail From 0ed3fab6bb94cc32a43f75a37716f68dedc6f2bc Mon Sep 17 00:00:00 2001 From: mintel1 <154367731+mintel1@users.noreply.github.com> Date: Sun, 19 May 2024 21:01:49 +0100 Subject: [PATCH 4/6] Update libraries/core/src/morpheus/core/conformance/flat_map.hpp Co-authored-by: Antony Peacock --- libraries/core/src/morpheus/core/conformance/flat_map.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/core/src/morpheus/core/conformance/flat_map.hpp b/libraries/core/src/morpheus/core/conformance/flat_map.hpp index f18450ada..befd2c1b9 100644 --- a/libraries/core/src/morpheus/core/conformance/flat_map.hpp +++ b/libraries/core/src/morpheus/core/conformance/flat_map.hpp @@ -5,7 +5,7 @@ #endif // clang-format off -#if (__cpp_lib_source_location >= 201907L) +#if (__cpp_lib_flat_map>= 202207L) namespace morpheus { namespace fm_ns = std; } From d0692745ad55fbc66d3c2f1dd820b98c443df97b Mon Sep 17 00:00:00 2001 From: mintel1 Date: Tue, 21 May 2024 07:50:18 +0200 Subject: [PATCH 5/6] edits to test case for associative containers --- .../adapters/std/ranges.tests.cpp | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/libraries/core/tests/serialisation/adapters/std/ranges.tests.cpp b/libraries/core/tests/serialisation/adapters/std/ranges.tests.cpp index ad8e224b5..27b9b07eb 100644 --- a/libraries/core/tests/serialisation/adapters/std/ranges.tests.cpp +++ b/libraries/core/tests/serialisation/adapters/std/ranges.tests.cpp @@ -44,6 +44,30 @@ TEMPLATE_TEST_CASE("Verify serialisation of sequence containers std::ranges", "[ } } +TEMPLATE_TEST_CASE("Verify serialisation of associative containers std::ranges", "[morpheus.serialisation.ranges.serialise.associative_containers]", + (std::map), (std::unordered_map), (std::multimap), (std::unordered_multimap)) +{ + GIVEN("A range of values") + { + MapType container; + + auto key = GENERATE(take(10, random(-100, 100))); + auto value = GENERATE(take(10, random(-100, 100))); + + THEN("Expect the following sequence of operations on the underlying writer") + { + + InSequence seq; + MockedWriteSerialiser serialiser; + EXPECT_CALL(serialiser.writer(), beginSequence(std::optional(ranges::size(container)))).Times(1); + ranges::for_each(container, [&serialiser](auto const& element) { EXPECT_CALL(serialiser.writer(), write(Matcher(Eq(element)))).Times(1); }); + EXPECT_CALL(serialiser.writer(), endSequence()).Times(1); + + WHEN("Serialising the std::expected") { serialiser.serialise(container); } + } + } +} + /* TEST_CASE("Verify deserialisation of std::ranges", "[morpheus.serialisation.ranges.deserialise]") { From 2df316f2c070ca9938570f98f29c392ca7c3940e Mon Sep 17 00:00:00 2001 From: mintel1 Date: Tue, 21 May 2024 07:51:14 +0200 Subject: [PATCH 6/6] Edits to associative container tests --- .../core/tests/conformance/flat_map.tests.cpp | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 libraries/core/tests/conformance/flat_map.tests.cpp diff --git a/libraries/core/tests/conformance/flat_map.tests.cpp b/libraries/core/tests/conformance/flat_map.tests.cpp new file mode 100644 index 000000000..ad109ab11 --- /dev/null +++ b/libraries/core/tests/conformance/flat_map.tests.cpp @@ -0,0 +1,23 @@ +#include "morpheus/core/conformance/flat_map.hpp" + +#include + +namespace morpheus +{ + +TEST_CASE("Ensure flat_map library is supported and working", "[morpheus.conformance.flat_map]") +{ +// using namespace std::chrono_literals; + using namespace fm_ns; + + /* // Ensure time zones work + REQUIRE(date_ns::locate_zone("Europe/London")); + + STATIC_REQUIRE((year{ 2022 } / month{ 11 } / day{ 8 }) == year_month_day(year{ 2022 }, month{ 11 }, day{ 8 })); + STATIC_REQUIRE(weeks{ 1 } == days{ 7 }); + STATIC_REQUIRE(years{ 1 } == months{ 12 }); +*/ +} + +} // morpheus +