Added rendering of concept requirements in concept body

This commit is contained in:
Bartek Kryza
2023-02-26 23:29:55 +01:00
parent 2ab6ed627e
commit dbb3e68c3f
12 changed files with 232 additions and 69 deletions

View File

@@ -32,9 +32,16 @@ concept has_value_type = requires
};
template <typename T>
concept convertible_to_string = requires(T s)
concept convertible_to_string = max_four_bytes<T> && requires(T s)
{
std::string{s};
{
std::to_string(s)
}
noexcept;
{
std::to_string(s)
} -> std::same_as<std::string>;
};
// Compound requirement

View File

@@ -44,6 +44,24 @@ TEST_CASE("t00056", "[test-case][class]")
REQUIRE_THAT(puml, IsConcept(_A("iterable_with_value_type<T>")));
REQUIRE_THAT(puml, IsConcept(_A("iterable_or_small_value_type<T>")));
REQUIRE_THAT(puml,
IsConceptRequirement(
_A("greater_than_with_requires<T,P>"), "sizeof (l) > sizeof (r)"));
REQUIRE_THAT(
puml, IsConceptRequirement(_A("iterable<T>"), "container.begin()"));
REQUIRE_THAT(
puml, IsConceptRequirement(_A("iterable<T>"), "container.end()"));
REQUIRE_THAT(puml,
IsConceptRequirement(_A("convertible_to_string<T>"), "std::string{s}"));
REQUIRE_THAT(puml,
IsConceptRequirement(
_A("convertible_to_string<T>"), "{std::to_string(s)} noexcept"));
REQUIRE_THAT(puml,
IsConceptRequirement(_A("convertible_to_string<T>"),
"{std::to_string(s)} -> std::same_as<std::string>"));
// Check if class templates exist
REQUIRE_THAT(puml, IsClassTemplate("A", "max_four_bytes T"));
REQUIRE_THAT(puml, IsClassTemplate("B", "T"));

View File

@@ -445,6 +445,13 @@ ContainsMatcher IsConstraint(std::string const &from, std::string const &to,
fmt::format("{} ..> {} : {}", from, to, label), caseSensitivity));
}
ContainsMatcher IsConceptRequirement(std::string const &cpt,
std::string const &requirement,
CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes)
{
return ContainsMatcher(CasedString(requirement, caseSensitivity));
}
ContainsMatcher IsLayoutHint(std::string const &from, std::string const &hint,
std::string const &to,
CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes)