This is an automated email from the ASF dual-hosted git repository.

kou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/main by this push:
     new ddab347aad GH-24157: [C++] Add tests for DayTimeIntervalBuilder 
(#48709)
ddab347aad is described below

commit ddab347aad4165eacbffb7409d64441ae3380283
Author: Hyukjin Kwon <[email protected]>
AuthorDate: Fri Jan 9 15:42:32 2026 +0900

    GH-24157: [C++] Add tests for DayTimeIntervalBuilder (#48709)
    
    ### Rationale for this change
    
    The `DayTimeIntervalBuilder` class was marked as untested (ARROW-7938). 
This PR adds dedicated tests to verify the builder's functionality, similar to 
how `TestHalfFloatBuilder` tests `HalfFloatBuilder`.
    
    ### What changes are included in this PR?
    
    - Added `TestDayTimeIntervalBuilder` test class with three test cases:
      - `TestAppend`: Tests basic append operations including nulls and unsafe 
append
      - `TestBulkAppend`: Tests bulk append operations with various signatures
      - `TestConstructors`: Tests all constructor variations (default, with 
pool, with explicit type)
    - Removed the TODO comment from `builder_time.h` since the class is now 
tested
    
    ### Are these changes tested?
    
    Yes, the tests I mentioned are added.
    
    ### Are there any user-facing changes?
    
    No, test-only.
    * GitHub Issue: #24157
    
    Lead-authored-by: Hyukjin Kwon <[email protected]>
    Co-authored-by: Hyukjin Kwon <[email protected]>
    Co-authored-by: Sutou Kouhei <[email protected]>
    Signed-off-by: Sutou Kouhei <[email protected]>
---
 cpp/src/arrow/array/array_test.cc  | 78 ++++++++++++++++++++++++++++++++++++++
 cpp/src/arrow/array/builder_time.h |  2 -
 2 files changed, 78 insertions(+), 2 deletions(-)

diff --git a/cpp/src/arrow/array/array_test.cc 
b/cpp/src/arrow/array/array_test.cc
index 3fa4f16e85..dc82488f6a 100644
--- a/cpp/src/arrow/array/array_test.cc
+++ b/cpp/src/arrow/array/array_test.cc
@@ -4237,4 +4237,82 @@ TEST_F(TestHalfFloatBuilder, TestBulkAppend) {
   }
 }
 
+class TestDayTimeIntervalBuilder : public ::testing::Test {
+ public:
+  void VerifyValue(const DayTimeIntervalBuilder& builder, int64_t index,
+                   DayTimeIntervalType::DayMilliseconds expected) {
+    ASSERT_EQ(builder.GetValue(index), expected);
+    ASSERT_EQ(builder[index], expected);
+  }
+};
+
+TEST_F(TestDayTimeIntervalBuilder, TestAppend) {
+  DayTimeIntervalBuilder builder;
+  DayTimeIntervalType::DayMilliseconds value1{1, 100};
+  DayTimeIntervalType::DayMilliseconds value2{3, 200};
+  DayTimeIntervalType::DayMilliseconds value3{5, 300};
+
+  ASSERT_OK(builder.Append(value1));
+  ASSERT_OK(builder.Append(value2));
+  ASSERT_OK(builder.AppendNull());
+  ASSERT_EQ(1, builder.null_count());  // Verify null count in builder
+  ASSERT_OK(builder.Reserve(3));
+  builder.UnsafeAppend(value3);
+
+  VerifyValue(builder, 0, value1);
+  VerifyValue(builder, 1, value2);
+  VerifyValue(builder, 3, value3);
+
+  ASSERT_OK_AND_ASSIGN(auto array, builder.Finish());
+  const auto& day_time_array = checked_cast<const 
DayTimeIntervalArray&>(*array);
+
+  // Verify null value
+  ASSERT_TRUE(day_time_array.IsNull(2));
+  ASSERT_EQ(1, day_time_array.null_count());
+
+  // Verify non-null values in the array
+  ASSERT_FALSE(day_time_array.IsNull(0));
+  ASSERT_EQ(day_time_array.GetValue(0), value1);
+  ASSERT_FALSE(day_time_array.IsNull(1));
+  ASSERT_EQ(day_time_array.GetValue(1), value2);
+  ASSERT_FALSE(day_time_array.IsNull(3));
+  ASSERT_EQ(day_time_array.GetValue(3), value3);
+}
+
+TEST_F(TestDayTimeIntervalBuilder, TestBulkAppend) {
+  DayTimeIntervalBuilder builder;
+  std::vector<DayTimeIntervalType::DayMilliseconds> values{{1, 100}, {3, 200}, 
{5, 300}};
+  std::vector<bool> is_valid{true, false, true};
+  std::vector<uint8_t> is_valid_bytes{1, 0, 1};
+
+  ASSERT_OK(builder.AppendValues(values));
+  ASSERT_OK(builder.AppendValues(values, is_valid));
+  ASSERT_OK(builder.AppendValues(values.data(), values.size(), 
is_valid_bytes.data()));
+
+  ASSERT_OK_AND_ASSIGN(auto array, builder.Finish());
+  ASSERT_OK(array->ValidateFull());
+  ASSERT_EQ(array->null_count(), 2);
+  ASSERT_EQ(array->length(), 9);
+
+  const auto& day_time_array = checked_cast<const 
DayTimeIntervalArray&>(*array);
+  ASSERT_EQ(day_time_array.GetValue(0), values[0]);
+  ASSERT_TRUE(day_time_array.IsNull(4));
+  ASSERT_TRUE(day_time_array.IsNull(7));
+  ASSERT_EQ(day_time_array.GetValue(2), values[2]);
+}
+
+TEST_F(TestDayTimeIntervalBuilder, TestConstructors) {
+  DayTimeIntervalBuilder builder1;
+  ASSERT_EQ(builder1.type()->id(), Type::INTERVAL_DAY_TIME);
+
+  auto pool = default_memory_pool();
+  DayTimeIntervalBuilder builder2(pool);
+  ASSERT_EQ(builder2.type()->id(), Type::INTERVAL_DAY_TIME);
+
+  auto type = day_time_interval();
+  DayTimeIntervalBuilder builder3(type, pool);
+  ASSERT_EQ(builder3.type()->id(), Type::INTERVAL_DAY_TIME);
+  ASSERT_TRUE(builder3.type()->Equals(type));
+}
+
 }  // namespace arrow
diff --git a/cpp/src/arrow/array/builder_time.h 
b/cpp/src/arrow/array/builder_time.h
index da29ae3124..b471e9621c 100644
--- a/cpp/src/arrow/array/builder_time.h
+++ b/cpp/src/arrow/array/builder_time.h
@@ -30,8 +30,6 @@ namespace arrow {
 ///
 /// @{
 
-// TODO(ARROW-7938): this class is untested
-
 class ARROW_EXPORT DayTimeIntervalBuilder : public 
NumericBuilder<DayTimeIntervalType> {
  public:
   using DayMilliseconds = DayTimeIntervalType::DayMilliseconds;

Reply via email to