filter_iterator.t.h 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. //
  2. // filter_iterator.t.h
  3. // iterator
  4. //
  5. // Created by Sam Jaffe on 6/17/17.
  6. //
  7. #pragma once
  8. #include <cxxtest/TestSuite.h>
  9. #include "filter_iterator.hpp"
  10. class filter_iterator_TestSuite : public CxxTest::TestSuite {
  11. public:
  12. void test_returns_subset() {
  13. int data[] = { 1, 2, 3, 4, 5 };
  14. auto pred = [](int i) { return i%2 == 0; };
  15. auto it = make_filter_iterator(pred, data);
  16. decltype(it) end = {};
  17. TS_ASSERT_EQUALS(std::distance(it, end), 2);
  18. TS_ASSERT_EQUALS(*it++, 2);
  19. TS_ASSERT_EQUALS(*it++, 4);
  20. }
  21. void test_no_matches_marks_end() {
  22. int data[] = { 1, 3, 5 };
  23. auto pred = [](int i) { return i%2 == 0; };
  24. auto it = make_filter_iterator(pred, data);
  25. decltype(it) end = {};
  26. TS_ASSERT_EQUALS(it, end);
  27. }
  28. void test_cannot_advance_past_end() {
  29. int data[] = { 1, 2, 3, 4, 5 };
  30. auto pred = [](int i) { return i%2 == 0; };
  31. auto it = make_filter_iterator(pred, data);
  32. decltype(it) end = {};
  33. ++++it;
  34. TS_ASSERT_EQUALS(it, end);
  35. ++it;
  36. TS_ASSERT_EQUALS(it, end);
  37. }
  38. };