// // filter_iterator.t.h // iterator // // Created by Sam Jaffe on 6/17/17. // #pragma once #include #include "filter_iterator.hpp" class filter_iterator_TestSuite : public CxxTest::TestSuite { public: void test_returns_subset() { int data[] = { 1, 2, 3, 4, 5 }; auto pred = [](int i) { return i%2 == 0; }; auto it = make_filter_iterator(pred, data); decltype(it) end = {}; TS_ASSERT_EQUALS(std::distance(it, end), 2); TS_ASSERT_EQUALS(*it++, 2); TS_ASSERT_EQUALS(*it++, 4); } void test_no_matches_marks_end() { int data[] = { 1, 3, 5 }; auto pred = [](int i) { return i%2 == 0; }; auto it = make_filter_iterator(pred, data); decltype(it) end = {}; TS_ASSERT_EQUALS(it, end); } void test_cannot_advance_past_end() { int data[] = { 1, 2, 3, 4, 5 }; auto pred = [](int i) { return i%2 == 0; }; auto it = make_filter_iterator(pred, data); decltype(it) end = {}; ++++it; TS_ASSERT_EQUALS(it, end); ++it; TS_ASSERT_EQUALS(it, end); } };