AlvinJ15 commented on code in PR #13009:
URL: https://github.com/apache/arrow/pull/13009#discussion_r865128767


##########
cpp/src/arrow/stl_iterator_test.cc:
##########
@@ -248,5 +248,201 @@ TEST(ArrayIterator, StdMerge) {
   ASSERT_EQ(values, expected);
 }
 
+TEST(ChunkedArrayIterator, Basics) {
+  auto result = ChunkedArrayFromJSON(int32(), {R"([4, 5, null])", R"([6])"});
+  auto it = Iterate<Int32Type>(*result);
+  optional<int32_t> v = *it;
+  ASSERT_EQ(v, 4);
+  ASSERT_EQ(it[0], 4);
+  ++it;
+  ASSERT_EQ(it[0], 5);
+  ASSERT_EQ(*it, 5);
+  ASSERT_EQ(it[1], nullopt);
+  ASSERT_EQ(it[2], 6);
+}
+
+TEST(ChunkedArrayIterator, Arithmetic) {
+  auto result = ChunkedArrayFromJSON(int32(), {R"([4, 5, null])", R"([6, null, 
7])"});
+
+  auto it = Iterate<Int32Type>(*result);
+  auto it2 = it + 2;
+  ASSERT_EQ(*it, 4);
+  ASSERT_EQ(*it2, nullopt);
+  ASSERT_EQ(it2 - it, 2);
+  ASSERT_EQ(it - it2, -2);
+  auto it3 = it++;
+  ASSERT_EQ(it2 - it, 1);
+  ASSERT_EQ(it2 - it3, 2);
+  ASSERT_EQ(*it3, 4);
+  ASSERT_EQ(*it, 5);
+  auto it4 = ++it;
+  ASSERT_EQ(*it, nullopt);
+  ASSERT_EQ(*it4, nullopt);
+  ASSERT_EQ(it2 - it, 0);
+  ASSERT_EQ(it2 - it4, 0);
+  auto it5 = it + 3;
+  ASSERT_EQ(*it5, 7);
+  ASSERT_EQ(*(it5 - 2), 6);
+  ASSERT_EQ(*(it5 + (-2)), 6);
+  auto it6 = (--it5)--;
+  ASSERT_EQ(*it6, nullopt);
+  ASSERT_EQ(*it5, 6);
+  ASSERT_EQ(it6 - it5, 1);
+}
+
+TEST(ChunkedArrayIterator, Comparison) {
+  auto result = ChunkedArrayFromJSON(int32(), {R"([4, 5, null])", R"([6, null, 
7])"});
+
+  auto it = Iterate<Int32Type>(*result) + 2;
+  auto it2 = Iterate<Int32Type>(*result) + 2;
+  auto it3 = Iterate<Int32Type>(*result) + 4;
+
+  ASSERT_TRUE(it == it2);
+  ASSERT_TRUE(it <= it2);
+  ASSERT_TRUE(it >= it2);
+  ASSERT_FALSE(it != it2);
+  ASSERT_FALSE(it < it2);
+  ASSERT_FALSE(it > it2);
+
+  ASSERT_FALSE(it == it3);
+  ASSERT_TRUE(it <= it3);
+  ASSERT_FALSE(it >= it3);
+  ASSERT_TRUE(it != it3);
+  ASSERT_TRUE(it < it3);
+  ASSERT_FALSE(it > it3);
+}
+
+TEST(ChunkedArrayIterator, MultipleChunks) {
+  auto result =
+      ChunkedArrayFromJSON(int32(), {R"([4, 5, null])", R"([6])", R"([7, 9, 
10, 8])",
+                                     R"([11, 13])", R"([14])", R"([15])", 
R"([16])"});
+
+  auto it = Iterate<Int32Type>(*result);
+  ASSERT_EQ(it[8], 11);
+  ASSERT_EQ(it[9], 13);
+  it += 3;
+  ASSERT_EQ(it[0], 6);
+  ++it;
+  ASSERT_EQ(it[0], 7);
+  ASSERT_EQ(*it, 7);
+  ASSERT_EQ(it[1], 9);
+  ASSERT_EQ(it[2], 10);
+  it -= 4;
+  ASSERT_EQ(it[0], 4);
+  ASSERT_EQ(it[1], 5);
+  ASSERT_EQ(it[2], nullopt);
+  ASSERT_EQ(it[3], 6);
+  ASSERT_EQ(it[4], 7);
+  it += 9;
+  ASSERT_EQ(*it, 13);
+  --it;
+  ASSERT_EQ(*it, 11);
+  --it;
+  ASSERT_EQ(*it, 8);
+  ASSERT_EQ(it[0], 8);
+  ASSERT_EQ(it[1], 11);
+  ASSERT_EQ(it[2], 13);
+  ASSERT_EQ(it[3], 14);
+  ASSERT_EQ(it[4], 15);
+  ASSERT_EQ(it[5], 16);
+  ++it;
+  ASSERT_EQ(*it, 11);
+  ASSERT_EQ(it[0], 11);
+  ASSERT_EQ(it[1], 13);
+  ASSERT_EQ(it[2], 14);
+  ASSERT_EQ(it[3], 15);
+  ASSERT_EQ(it[4], 16);
+  ++it;
+  ASSERT_EQ(*it, 13);
+  ASSERT_EQ(it[0], 13);
+  ASSERT_EQ(it[1], 14);
+  ASSERT_EQ(it[2], 15);
+  ASSERT_EQ(it[3], 16);
+  ++it;
+  ++it;
+  ASSERT_EQ(*it, 15);
+  ASSERT_EQ(it[0], 15);
+  ASSERT_EQ(it[1], 16);
+  --it;
+  ASSERT_EQ(*it, 14);
+  ASSERT_EQ(it[0], 14);
+  ASSERT_EQ(it[1], 15);
+  ASSERT_EQ(it[2], 16);
+  --it;
+  ASSERT_EQ(*it, 13);
+  ASSERT_EQ(it[0], 13);
+  ASSERT_EQ(it[1], 14);
+  ASSERT_EQ(it[2], 15);
+  it -= 2;
+  ASSERT_EQ(*it, 8);
+  ASSERT_EQ(it[0], 8);
+  ASSERT_EQ(it[1], 11);
+  ASSERT_EQ(it[2], 13);
+}
+
+TEST(ChunkedArrayIterator, EmptyChunks) {
+  auto result = ChunkedArrayFromJSON(int32(), {});
+  auto it = Iterate<Int32Type>(*result);
+  ASSERT_EQ(*it, nullopt);
+  ASSERT_EQ(it[0], nullopt);
+  it++;
+  ASSERT_EQ(it[0], nullopt);
+  it += 2;
+  ASSERT_EQ(it[1], nullopt);
+
+  result = ChunkedArrayFromJSON(int32(), {R"([4, 5, null])", R"([])", R"([7, 
9, 10, 8])",
+                                          R"([11, 13])", R"([])", R"([])", 
R"([16])"});
+
+  it = Iterate<Int32Type>(*result);
+  ASSERT_EQ(it[8], 13);
+  ASSERT_EQ(it[9], 16);
+  it += 3;
+  ASSERT_EQ(it[0], 7);
+  ++it;
+  ASSERT_EQ(it[0], 9);
+  ASSERT_EQ(*it, 9);
+  ASSERT_EQ(it[1], 10);
+  ASSERT_EQ(it[2], 8);
+  it -= 4;
+  ASSERT_EQ(it[0], 4);
+  ASSERT_EQ(it[1], 5);
+  ASSERT_EQ(it[2], nullopt);
+  ASSERT_EQ(it[3], 7);
+  ASSERT_EQ(it[4], 9);
+  it += 9;
+  ASSERT_EQ(*it, 16);
+  --it;
+  ASSERT_EQ(*it, 13);
+  --it;
+  ASSERT_EQ(*it, 11);
+  ASSERT_EQ(it[0], 11);
+  ASSERT_EQ(it[1], 13);
+  ASSERT_EQ(it[2], 16);
+  ++it;
+  ASSERT_EQ(*it, 13);
+  ASSERT_EQ(it[0], 13);
+  ASSERT_EQ(it[1], 16);
+  ++it;
+  ASSERT_EQ(*it, 16);
+  ASSERT_EQ(it[0], 16);
+  --it;
+  ASSERT_EQ(*it, 13);
+  ASSERT_EQ(it[0], 13);
+  ASSERT_EQ(it[1], 16);
+  --it;
+  ASSERT_EQ(*it, 11);
+  ASSERT_EQ(it[0], 11);
+  ASSERT_EQ(it[1], 13);
+  ASSERT_EQ(it[2], 16);
+  it += 2;
+  ASSERT_EQ(*it, 16);
+  ASSERT_EQ(it[0], 16);
+  it -= 3;
+  ASSERT_EQ(*it, 8);
+  ASSERT_EQ(it[0], 8);
+  ASSERT_EQ(it[1], 11);
+  ASSERT_EQ(it[2], 13);
+}
+

Review Comment:
   1. At the beginning of the `EmptyChunks` it has and empty `ChunkedArray`
   ```
   TEST(ChunkedArrayIterator, EmptyChunks) {
     auto result = ChunkedArrayFromJSON(int32(), {});
     auto it = Iterate<Int32Type>(*result);
     ASSERT_EQ(*it, nullopt);
     ASSERT_EQ(it[0], nullopt);
   ```
   2. Added



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to