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