Cleanup vector matchers

Once again, added doxygen comments and removed the inner-most namespace.
This commit is contained in:
Martin Hořeňovský 2020-03-28 15:17:12 +01:00
parent 904c47a634
commit ca5af2e85b
No known key found for this signature in database
GPG Key ID: DE48307B8B0D381A

View File

@ -16,13 +16,14 @@
namespace Catch {
namespace Matchers {
namespace Vector {
template<typename T>
struct ContainsElementMatcher final : MatcherBase<std::vector<T>> {
ContainsElementMatcher(T const &comparator) : m_comparator( comparator) {}
ContainsElementMatcher(T const& comparator):
m_comparator(comparator)
{}
bool match(std::vector<T> const &v) const override {
bool match(std::vector<T> const& v) const override {
for (auto const& el : v) {
if (el == m_comparator) {
return true;
@ -41,9 +42,11 @@ namespace Matchers {
template<typename T>
struct ContainsMatcher final : MatcherBase<std::vector<T>> {
ContainsMatcher(std::vector<T> const &comparator) : m_comparator( comparator ) {}
ContainsMatcher(std::vector<T> const& comparator):
m_comparator(comparator)
{}
bool match(std::vector<T> const &v) const override {
bool match(std::vector<T> const& v) const override {
// !TBD: see note in EqualsMatcher
if (m_comparator.size() > v.size())
return false;
@ -146,34 +149,39 @@ namespace Matchers {
std::vector<T> const& m_target;
};
} // namespace Vector
// The following functions create the actual matcher objects.
// This allows the types to be inferred
//! Creates a matcher that matches vectors that contain all elements in `comparator`
template<typename T>
Vector::ContainsMatcher<T> Contains( std::vector<T> const& comparator ) {
return Vector::ContainsMatcher<T>( comparator );
ContainsMatcher<T> Contains( std::vector<T> const& comparator ) {
return ContainsMatcher<T>( comparator );
}
//! Creates a matcher that matches vectors that contain `comparator` as an element
template<typename T>
Vector::ContainsElementMatcher<T> VectorContains( T const& comparator ) {
return Vector::ContainsElementMatcher<T>( comparator );
ContainsElementMatcher<T> VectorContains( T const& comparator ) {
return ContainsElementMatcher<T>( comparator );
}
//! Creates a matcher that matches vectors that are exactly equal to `comparator`
template<typename T>
Vector::EqualsMatcher<T> Equals( std::vector<T> const& comparator ) {
return Vector::EqualsMatcher<T>( comparator );
EqualsMatcher<T> Equals( std::vector<T> const& comparator ) {
return EqualsMatcher<T>( comparator );
}
//! Creates a matcher that matches vectors that `comparator` as an element
template<typename T>
Vector::ApproxMatcher<T> Approx( std::vector<T> const& comparator ) {
return Vector::ApproxMatcher<T>( comparator );
ApproxMatcher<T> Approx( std::vector<T> const& comparator ) {
return ApproxMatcher<T>( comparator );
}
//! Creates a matcher that matches vectors that is equal to `target` modulo permutation
template<typename T>
Vector::UnorderedEqualsMatcher<T> UnorderedEquals(std::vector<T> const& target) {
return Vector::UnorderedEqualsMatcher<T>(target);
UnorderedEqualsMatcher<T> UnorderedEquals(std::vector<T> const& target) {
return UnorderedEqualsMatcher<T>(target);
}
} // namespace Matchers