// // stream_test.h // stream // // Created by Sam Jaffe on 4/2/23. // #pragma once #include "xcode_gtest_helper.h" namespace ranges = stream::ranges; namespace views = stream::ranges::views; namespace stream::ranges::testing { template > bool equal(It1 it1, S1 end1, It2 it2, S2 end2, ::testing::MatchResultListener * result_listener, Cmp cmp = {}) { size_t n = 0; for (; it1 != end1 && it2 != end2; ++it1, ++it2, ++n) { auto const & left = *it1; auto const & right = *it2; if (!std::invoke(cmp, left, right)) { *result_listener << "at index " << n << " where values were: [" << left << "," << right << "] differ"; return false; } } *result_listener << "whose sizes differ"; return (it1 != end1) == (it2 != end2); } } MATCHER_P(RangesEq, to_range, "") { return stream::ranges::testing::equal(arg.begin(), arg.end(), to_range.begin(), to_range.end(), result_listener); }