mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 05:59:32 +01:00 
			
		
		
		
	Add support for iterator+sentinel pairs in Contains matcher
This commit is contained in:
		@@ -33,13 +33,11 @@ namespace Catch {
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            template <typename RangeLike>
 | 
			
		||||
            bool match(RangeLike&& rng) const {
 | 
			
		||||
                using std::begin; using std::end;
 | 
			
		||||
 | 
			
		||||
                return end(rng) != std::find_if(begin(rng), end(rng),
 | 
			
		||||
                                               [&](auto const& elem) {
 | 
			
		||||
                                                    return m_eq(elem, m_desired);
 | 
			
		||||
                                               });
 | 
			
		||||
            bool match( RangeLike&& rng ) const {
 | 
			
		||||
                for ( auto&& elem : rng ) {
 | 
			
		||||
                    if ( m_eq( elem, m_desired ) ) { return true; }
 | 
			
		||||
                }
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
@@ -91,7 +89,7 @@ namespace Catch {
 | 
			
		||||
        /**
 | 
			
		||||
         * 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>
 | 
			
		||||
        ContainsElementMatcher<T, Equality> Contains(T&& elem, Equality&& eq) {
 | 
			
		||||
 
 | 
			
		||||
@@ -646,6 +646,16 @@ TEST_CASE( "RangeEquals supports ranges with different types returned from begin
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
TEST_CASE( "Usage of RangeEquals range matcher", "[matchers][templated][quantifiers]" ) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user