ソースを参照

Add missing function coverage to filter_iterator.

Sam Jaffe 5 年 前
コミット
52df0bb5cf
1 ファイル変更25 行追加3 行削除
  1. 25 3
      test/filter_iterator_test.cxx

+ 25 - 3
test/filter_iterator_test.cxx

@@ -1,9 +1,11 @@
 #include "iterator/filter_iterator.hpp"
 
+#include <vector>
+
 #include <gmock/gmock.h>
 
 TEST(FilterIteratorTest, CanPerformSkipsOnData) {
-  int data[] = {1, 2, 3, 4, 5};
+  std::vector<int> const data = {1, 2, 3, 4, 5};
   auto pred = [](int i) { return i % 2 == 0; };
   auto it = make_filter_iterator(pred, data);
   decltype(it) end = {};
@@ -12,8 +14,28 @@ TEST(FilterIteratorTest, CanPerformSkipsOnData) {
   EXPECT_THAT(*it++, 4);
 }
 
+// TODO: Maybe this should actually move
+TEST(FilterIteratorTest, MutatingContainerDoesNotMoveIterator) {
+  std::vector<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 = {};
+  EXPECT_THAT(std::distance(it, end), 2);
+  *it = 1;
+  EXPECT_THAT(std::distance(it, end), 2);
+  EXPECT_THAT(*it, 1);
+}
+
+TEST(FilterIteratorTest, CanConstructFilterFromSubRange) {
+  std::vector<int> data = {1, 2, 3, 4, 5};
+  auto pred = [](int i) { return i % 2 == 0; };
+  auto it = make_filter_iterator(pred, data.begin(), data.begin() + 3);
+  decltype(it) end = {};
+  EXPECT_THAT(std::distance(it, end), 1);
+}
+
 TEST(FilterIteratorTest, IfNonMatchThenStartIsEnd) {
-  int data[] = {1, 3, 5};
+  std::vector<int> const data = {1, 3, 5};
   auto pred = [](int i) { return i % 2 == 0; };
   auto it = make_filter_iterator(pred, data);
   decltype(it) end = {};
@@ -21,7 +43,7 @@ TEST(FilterIteratorTest, IfNonMatchThenStartIsEnd) {
 }
 
 TEST(FilterIteratorTest, IncrementEndIsNoOp) {
-  int data[] = {1, 2, 3, 4, 5};
+  std::vector<int> const data = {1, 2, 3, 4, 5};
   auto pred = [](int i) { return i % 2 == 0; };
   auto it = make_filter_iterator(pred, data);
   decltype(it) end = {};