stream_test.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. //
  2. // stream_test.h
  3. // stream
  4. //
  5. // Created by Sam Jaffe on 4/2/23.
  6. //
  7. #pragma once
  8. #include "xcode_gtest_helper.h"
  9. namespace ranges = stream::ranges;
  10. namespace views = stream::ranges::views;
  11. namespace stream::ranges::testing {
  12. template <typename It1, typename S1, typename It2, typename S2,
  13. typename Cmp = std::equal_to<>>
  14. bool equal(It1 it1, S1 end1, It2 it2, S2 end2,
  15. ::testing::MatchResultListener * result_listener, Cmp cmp = {}) {
  16. size_t n = 0;
  17. for (; it1 != end1 && it2 != end2; ++it1, ++it2, ++n) {
  18. auto const & left = *it1;
  19. auto const & right = *it2;
  20. if (!std::invoke(cmp, left, right)) {
  21. *result_listener << "at index " << n << " where values were: [" << left
  22. << "," << right << "] differ";
  23. return false;
  24. }
  25. }
  26. *result_listener << "whose sizes differ";
  27. return (it1 != end1) == (it2 != end2);
  28. }
  29. }
  30. MATCHER_P(RangesEq, to_range, "") {
  31. return stream::ranges::testing::equal(arg.begin(), arg.end(),
  32. to_range.begin(), to_range.end(),
  33. result_listener);
  34. }