浏览代码

Add tests for pre-post increment.

Sam Jaffe 5 年之前
父节点
当前提交
4680e85bed
共有 2 个文件被更改,包括 68 次插入0 次删除
  1. 36 0
      test/recursive_iterator_map_test.cxx
  2. 32 0
      test/recursive_iterator_vector_test.cxx

+ 36 - 0
test/recursive_iterator_map_test.cxx

@@ -6,6 +6,24 @@
 
 #include <gmock/gmock.h>
 
+TEST(RecursiveIteratorMapTest, PreIncrementAdvancesIterator) {
+  std::map<int, std::map<int, std::map<int, int>>> const map{
+      {1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
+  auto rit = make_recursive_iterator(map);
+  EXPECT_THAT(std::get<3>(*rit), 1);
+  EXPECT_THAT(std::get<3>(*++rit), 2);
+  EXPECT_THAT(std::get<3>(*rit), 2);
+}
+
+TEST(RecursiveIteratorMapTest, PostIncrementReturnsCopyOfPrev) {
+  std::map<int, std::map<int, std::map<int, int>>> const map{
+      {1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
+  auto rit = make_recursive_iterator(map);
+  EXPECT_THAT(std::get<3>(*rit), 1);
+  EXPECT_THAT(std::get<3>(*rit++), 1);
+  EXPECT_THAT(std::get<3>(*rit), 2);
+}
+
 TEST(RecursiveIteratorMapTest, IterDistanceIsSumOfInnerContainerSizes) {
   std::map<int, std::map<int, std::map<int, int>>> const map{
       {1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
@@ -33,6 +51,24 @@ TEST(RecursiveIteratorMapTest, CanMutatePointedToData) {
   EXPECT_THAT(map[1][1][1], 4);
 }
 
+TEST(BoundRecursiveIteratorMapTest, PreIncrementAdvancesIterator) {
+  std::map<int, std::map<int, std::map<int, int>>> map{
+      {1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
+  auto rit = make_recursive_iterator<2>(map);
+  EXPECT_THAT(std::get<2>(*rit), map[1][1]);
+  EXPECT_THAT(std::get<2>(*++rit), map[2][2]);
+  EXPECT_THAT(std::get<2>(*rit), map[2][2]);
+}
+
+TEST(BoundRecursiveIteratorMapTest, PostIncrementReturnsCopyOfPrev) {
+  std::map<int, std::map<int, std::map<int, int>>> map{
+      {1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
+  auto rit = make_recursive_iterator<2>(map);
+  EXPECT_THAT(std::get<2>(*rit), map[1][1]);
+  EXPECT_THAT(std::get<2>(*rit++), map[1][1]);
+  EXPECT_THAT(std::get<2>(*rit), map[2][2]);
+}
+
 TEST(BoundRecursiveIteratorMapTest, IterDistanceSumOnNLayersSize) {
   std::map<int, std::map<int, std::map<int, int>>> const map{
       {1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};

+ 32 - 0
test/recursive_iterator_vector_test.cxx

@@ -4,6 +4,22 @@
 
 #include <gmock/gmock.h>
 
+TEST(RecursiveIteratorVecTest, PreIncrementAdvancesIterator) {
+  std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
+  auto rit = make_recursive_iterator(vec);
+  EXPECT_THAT(*rit, 1);
+  EXPECT_THAT(*++rit, 2);
+  EXPECT_THAT(*rit, 2);
+}
+
+TEST(RecursiveIteratorVecTest, PostIncrementReturnsCopyOfPrev) {
+  std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
+  auto rit = make_recursive_iterator(vec);
+  EXPECT_THAT(*rit, 1);
+  EXPECT_THAT(*rit++, 1);
+  EXPECT_THAT(*rit, 2);
+}
+
 TEST(RecursiveIteratorVecTest, IterDistanceIsSumOfInnerContainerSizes) {
   std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
   auto rit = make_recursive_iterator(vec);
@@ -28,6 +44,22 @@ TEST(RecursiveIteratorVecTest, CanMutatePointedToData) {
   EXPECT_THAT(vec[0][0][0], 6);
 }
 
+TEST(BoundedRecursiveIteratorVecTest, PreIncrementAdvancesIterator) {
+  std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
+  auto rit = make_recursive_iterator<2>(vec);
+  EXPECT_THAT(*rit, vec[0][0]);
+  EXPECT_THAT(*++rit, vec[1][0]);
+  EXPECT_THAT(*rit, vec[1][0]);
+}
+
+TEST(BoundedRecursiveIteratorVecTest, PostIncrementReturnsCopyOfPrev) {
+  std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
+  auto rit = make_recursive_iterator<2>(vec);
+  EXPECT_THAT(*rit, vec[0][0]);
+  EXPECT_THAT(*rit++, vec[0][0]);
+  EXPECT_THAT(*rit, vec[1][0]);
+}
+
 TEST(BoundedRecursiveIteratorVecTest, IterDistanceSumOnNLayersSize) {
   std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
   auto rit = make_recursive_iterator<2>(vec);