filter_test.cxx 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. //
  2. // filter_test.cxx
  3. // stream-test
  4. //
  5. // Created by Sam Jaffe on 4/5/23.
  6. //
  7. #include "stream/view/filter.h"
  8. #include "stream_helpers.h"
  9. #include "stream_matchers.h"
  10. TEST(FilterView, DoesNotPropagatesSize) {
  11. Range<std::vector<int>, Sentinel, Sized> input{0, 1, 2, 3, 4};
  12. auto range = input | views::filter([](int) { return true; });
  13. static_assert(!stream::detail::has_size_v<decltype(range)>);
  14. }
  15. TEST(FilterView, DoesNotPropagatesEmpty) {
  16. Range<std::vector<int>, Sentinel, Sized> input{0, 1, 2, 3, 4};
  17. auto range = input | views::filter([](int) { return true; });
  18. static_assert(stream::detail::has_empty_v<decltype(range)>);
  19. }
  20. TEST(FilterView, NoOpFilterReturnOriginal) {
  21. std::vector<int> const input{1, 2, 3, 4, 5};
  22. EXPECT_THAT(input | views::filter([](int) { return true; }), RangesEq(input));
  23. }
  24. TEST(FilterView, CanFilterOutElements) {
  25. std::vector<int> const input{1, 2, 3, 4, 5};
  26. EXPECT_THAT(input | views::filter([](int i) { return i % 2 == 0; }),
  27. RangesEq(std::vector{2, 4}));
  28. }