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]