Add support for iterator+sentinel pairs in Contains matcher

This commit is contained in:
Martin Hořeňovský 2023-02-10 23:25:41 +01:00
parent 4aa88299af
commit e8ba329b6c
No known key found for this signature in database
GPG Key ID: DE48307B8B0D381A
2 changed files with 16 additions and 8 deletions

View File

@ -33,13 +33,11 @@ namespace Catch {
} }
template <typename RangeLike> template <typename RangeLike>
bool match(RangeLike&& rng) const { bool match( RangeLike&& rng ) const {
using std::begin; using std::end; for ( auto&& elem : rng ) {
if ( m_eq( elem, m_desired ) ) { return true; }
return end(rng) != std::find_if(begin(rng), end(rng), }
[&](auto const& elem) { return false;
return m_eq(elem, m_desired);
});
} }
}; };
@ -91,7 +89,7 @@ namespace Catch {
/** /**
* Creates a matcher that checks whether a range contains a specific element. * Creates a matcher that checks whether a range contains a specific element.
* *
* Uses `eq` to do the comparisons * Uses `eq` to do the comparisons, the element is provided on the rhs
*/ */
template <typename T, typename Equality> template <typename T, typename Equality>
ContainsElementMatcher<T, Equality> Contains(T&& elem, Equality&& eq) { ContainsElementMatcher<T, Equality> Contains(T&& elem, Equality&& eq) {

View File

@ -646,6 +646,16 @@ TEST_CASE( "RangeEquals supports ranges with different types returned from begin
REQUIRE_THAT( diff_types, UnorderedRangeEquals( diff_types ) ); REQUIRE_THAT( diff_types, UnorderedRangeEquals( diff_types ) );
} }
TEST_CASE( "RangeContains supports ranges with different types returned from "
"begin and end",
"[matchers][templated][range][approvals]" ) {
using Catch::Matchers::Contains;
has_different_begin_end_types<size_t> diff_types{ 1, 2, 3, 4, 5 };
REQUIRE_THAT( diff_types, Contains( size_t( 3 ) ) );
REQUIRE_THAT( diff_types, Contains( LessThanMatcher( size_t( 4 ) ) ) );
}
#endif #endif
TEST_CASE( "Usage of RangeEquals range matcher", "[matchers][templated][quantifiers]" ) { TEST_CASE( "Usage of RangeEquals range matcher", "[matchers][templated][quantifiers]" ) {