Support elements without op!= in VectorEquals

Closes #2648
This commit is contained in:
Martin Hořeňovský 2023-03-05 00:11:07 +01:00
parent 69f35a5ac8
commit 0a0ebf5003
No known key found for this signature in database
GPG Key ID: DE48307B8B0D381A
2 changed files with 23 additions and 5 deletions

View File

@ -85,11 +85,10 @@ namespace Matchers {
// - a more general approach would be via a compare template that defaults // - a more general approach would be via a compare template that defaults
// to using !=. but could be specialised for, e.g. std::vector<T> etc // to using !=. but could be specialised for, e.g. std::vector<T> etc
// - then just call that directly // - then just call that directly
if (m_comparator.size() != v.size()) if ( m_comparator.size() != v.size() ) { return false; }
return false; for ( std::size_t i = 0; i < v.size(); ++i ) {
for (std::size_t i = 0; i < v.size(); ++i) if ( !( m_comparator[i] == v[i] ) ) { return false; }
if (m_comparator[i] != v[i]) }
return false;
return true; return true;
} }
std::string describe() const override { std::string describe() const override {

View File

@ -406,6 +406,25 @@ TEST_CASE( "Vector matchers that fail", "[matchers][vector][.][failing]" ) {
} }
} }
namespace {
struct SomeType {
int i;
friend bool operator==( SomeType lhs, SomeType rhs ) {
return lhs.i == rhs.i;
}
};
} // end anonymous namespace
TEST_CASE( "Vector matcher with elements without !=", "[matchers][vector][approvals]" ) {
std::vector<SomeType> lhs, rhs;
lhs.push_back( { 1 } );
lhs.push_back( { 2 } );
rhs.push_back( { 1 } );
rhs.push_back( { 1 } );
REQUIRE_THAT( lhs, !Equals(rhs) );
}
TEST_CASE( "Exception matchers that succeed", TEST_CASE( "Exception matchers that succeed",
"[matchers][exceptions][!throws]" ) { "[matchers][exceptions][!throws]" ) {
CHECK_THROWS_MATCHES( CHECK_THROWS_MATCHES(