end_aware_iterator.t.h 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. //
  2. // end_aware_iterator.t.h
  3. // iterator
  4. //
  5. // Created by Sam Jaffe on 2/7/17.
  6. //
  7. #pragma once
  8. #include <cxxtest/TestSuite.h>
  9. #include <vector>
  10. #include "end_aware_iterator.hpp"
  11. class end_aware_TestSuite : public CxxTest::TestSuite {
  12. public:
  13. using vec_t = std::vector<int>;
  14. using ea_iter = iterator::end_aware_iterator<vec_t::iterator>;
  15. public:
  16. void test_iterator_points_to_same() {
  17. vec_t v{1, 2, 3, 4, 5};
  18. TS_ASSERT_EQUALS(*v.begin(), *ea_iter(v.begin(), v.end()));
  19. }
  20. void test_iterator_edits_same() {
  21. vec_t v{1, 2, 3, 4, 5};
  22. *ea_iter(v.begin(), v.end()) = -1;
  23. TS_ASSERT_EQUALS(v[0], -1);
  24. }
  25. void test_not_done_until_end() {
  26. vec_t v{1, 2, 3, 4, 5};
  27. ea_iter it{v.end()-1, v.end()};
  28. TS_ASSERT(!it.done());
  29. ++it;
  30. TS_ASSERT_EQUALS(it, ea_iter(v.end(),v.end()));
  31. TS_ASSERT(it.done());
  32. }
  33. void test_cannot_go_past_end() {
  34. vec_t v{1, 2, 3, 4, 5};
  35. ea_iter it{v.end(), v.end()};
  36. ea_iter const cp = it;
  37. ++it;
  38. TS_ASSERT_EQUALS(it, cp);
  39. TS_ASSERT(it.done());
  40. }
  41. };