From 38d7045685d4904d013ea4990a3aa7f5e78309cf Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sat, 22 Oct 2022 17:57:47 +0100 Subject: Add magic support to printing/parsing/validating enumerations --- test/test-static-enumDetails.cpp | 78 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 test/test-static-enumDetails.cpp (limited to 'test/test-static-enumDetails.cpp') diff --git a/test/test-static-enumDetails.cpp b/test/test-static-enumDetails.cpp new file mode 100644 index 0000000..03c2203 --- /dev/null +++ b/test/test-static-enumDetails.cpp @@ -0,0 +1,78 @@ +#define ENUM_PROBE +#include "enumDetailsData.hpp" +#include + +// Test type name +static_assert(EnumTypeDetails::typeName == "GlobalUnscoped"); +static_assert(EnumTypeDetails::typeName == "GlobalScoped"); +static_assert(EnumTypeDetails::typeName == "ns::Unscoped"); +static_assert(EnumTypeDetails::typeName == "ns::Scoped"); + +static_assert(EnumValueDetails::valueName == "aa"); +static_assert(EnumValueDetails::valueName == "aa"); +static_assert(EnumValueDetails::valueName == "aa"); +static_assert(EnumValueDetails::valueName == "aa"); + +namespace test1 { + static_assert(EnumValueDetails::valid); + static_assert(EnumValueDetails::valid); + static_assert(EnumValueDetails(0)>::valid); + static_assert(EnumValueDetails(3)>::valid); + static_assert(!EnumValueDetails(-1)>::valid); + static_assert(!EnumValueDetails(4)>::valid); + static_assert(EnumValueDetails::valueName == "a"); + static_assert(EnumValueDetails::valueName == "de"); + using ED_DD = EnumDetails; + static_assert(EnumValueCollection::Vs::size() == 256); + static_assert(ED_DD::valid_flags.size() == 256); + static_assert(ED_DD::values.size() == 4); + static_assert(std::is_sorted(ED_DD::values.begin(), ED_DD::values.end())); + static_assert(ED_DD::values.at(0) == DefaultDense::a); + static_assert(ED_DD::values.at(3) == DefaultDense::de); + static_assert(ED_DD::names.at(0) == "a"); + static_assert(ED_DD::names.at(3) == "de"); + + static_assert(ED_DD::is_valid(DefaultDense::a)); + static_assert(ED_DD::is_valid(DefaultDense::de)); + static_assert(!ED_DD::is_valid(DefaultDense(-1))); + static_assert(!ED_DD::parse("").has_value()); + static_assert(!ED_DD::parse("nonsense").has_value()); + static_assert(ED_DD::parse("bee").value() == DefaultDense::bee); + static_assert(ED_DD::parse("ci").value() == DefaultDense::ci); + static_assert(ED_DD::to_string(DefaultDense::de).value() == "de"); + static_assert(!ED_DD::to_string(static_cast(10)).has_value()); +} + +namespace test2 { + static_assert(EnumValueDetails::valid); + static_assert(EnumValueDetails(0)>::valid); + static_assert(EnumValueDetails(3)>::valid); + static_assert(EnumValueDetails(-20)>::valid); + static_assert(EnumValueDetails(100)>::valid); + static_assert(!EnumValueDetails(2)>::valid); + static_assert(EnumValueDetails::valueName == "a"); + static_assert(EnumValueDetails::valueName == "de"); + using ED_NS = EnumDetails; + static_assert(EnumValueCollection::Vs::size() == 7); + static_assert(ED_NS::values.size() == 4); + static_assert(ED_NS::valid_flags.size() == 7); + static_assert(std::is_sorted(ED_NS::values.begin(), ED_NS::values.end())); + static_assert(ED_NS::values.at(0) == NumberedSparse::ci); + static_assert(ED_NS::values.at(1) == NumberedSparse::a); + static_assert(ED_NS::values.at(2) == NumberedSparse::bee); + static_assert(ED_NS::values.at(3) == NumberedSparse::de); + static_assert(ED_NS::names.at(0) == "ci"); + static_assert(ED_NS::names.at(1) == "a"); + static_assert(ED_NS::names.at(2) == "bee"); + static_assert(ED_NS::names.at(3) == "de"); + + static_assert(ED_NS::is_valid(NumberedSparse::a)); + static_assert(ED_NS::is_valid(NumberedSparse::de)); + static_assert(!ED_NS::is_valid(NumberedSparse(-1))); + static_assert(!ED_NS::parse("").has_value()); + static_assert(!ED_NS::parse("nonsense").has_value()); + static_assert(ED_NS::parse("bee").value() == NumberedSparse::bee); + static_assert(ED_NS::parse("ci").value() == NumberedSparse::ci); + static_assert(ED_NS::to_string(NumberedSparse::ci).value() == "ci"); + static_assert(!ED_NS::to_string(static_cast(10)).has_value()); +} -- cgit v1.2.3