Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/src/catch2
diff options
context:
space:
mode:
authorMartin Hořeňovský2023-02-03 16:12:09 +0100
committerMartin Hořeňovský2023-02-03 18:22:41 +0100
commitf3c0a3cd091aba8341a77e5c8580e5697f0e6892 (patch)
treecf5fd5193620d0661ea1315b768a8256d03a036c /src/catch2
parent42d9d4533e8583506463ab1e688add6542b15ad4 (diff)
downloadcatch3-f3c0a3cd091aba8341a77e5c8580e5697f0e6892.tar.gz
Fix RangeEquals matcher to handle iterator + sentinel ranges
Also added tests for types that require ADL lookup for their `begin` and `end`.
Diffstat (limited to 'src/catch2')
-rw-r--r--src/catch2/matchers/catch_matchers_range_equals.hpp20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/catch2/matchers/catch_matchers_range_equals.hpp b/src/catch2/matchers/catch_matchers_range_equals.hpp
index bc94e696..c0985fd9 100644
--- a/src/catch2/matchers/catch_matchers_range_equals.hpp
+++ b/src/catch2/matchers/catch_matchers_range_equals.hpp
@@ -33,13 +33,19 @@ namespace Catch {
template <typename RangeLike>
bool match( RangeLike&& rng ) const {
- using std::begin;
- using std::end;
- return std::equal( begin(m_desired),
- end(m_desired),
- begin(rng),
- end(rng),
- m_predicate );
+ auto rng_start = begin( rng );
+ const auto rng_end = end( rng );
+ auto target_start = begin( m_desired );
+ const auto target_end = end( m_desired );
+
+ while (rng_start != rng_end && target_start != target_end) {
+ if (!m_predicate(*rng_start, *target_start)) {
+ return false;
+ }
+ ++rng_start;
+ ++target_start;
+ }
+ return rng_start == rng_end && target_start == target_end;
}
std::string describe() const override {