Skip to content

Commit ddab347

Browse files
HyukjinKwonkou
andauthored
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]>
1 parent b126c6e commit ddab347

File tree

2 files changed

+78
-2
lines changed

2 files changed

+78
-2
lines changed

cpp/src/arrow/array/array_test.cc

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4237,4 +4237,82 @@ TEST_F(TestHalfFloatBuilder, TestBulkAppend) {
42374237
}
42384238
}
42394239

4240+
class TestDayTimeIntervalBuilder : public ::testing::Test {
4241+
public:
4242+
void VerifyValue(const DayTimeIntervalBuilder& builder, int64_t index,
4243+
DayTimeIntervalType::DayMilliseconds expected) {
4244+
ASSERT_EQ(builder.GetValue(index), expected);
4245+
ASSERT_EQ(builder[index], expected);
4246+
}
4247+
};
4248+
4249+
TEST_F(TestDayTimeIntervalBuilder, TestAppend) {
4250+
DayTimeIntervalBuilder builder;
4251+
DayTimeIntervalType::DayMilliseconds value1{1, 100};
4252+
DayTimeIntervalType::DayMilliseconds value2{3, 200};
4253+
DayTimeIntervalType::DayMilliseconds value3{5, 300};
4254+
4255+
ASSERT_OK(builder.Append(value1));
4256+
ASSERT_OK(builder.Append(value2));
4257+
ASSERT_OK(builder.AppendNull());
4258+
ASSERT_EQ(1, builder.null_count()); // Verify null count in builder
4259+
ASSERT_OK(builder.Reserve(3));
4260+
builder.UnsafeAppend(value3);
4261+
4262+
VerifyValue(builder, 0, value1);
4263+
VerifyValue(builder, 1, value2);
4264+
VerifyValue(builder, 3, value3);
4265+
4266+
ASSERT_OK_AND_ASSIGN(auto array, builder.Finish());
4267+
const auto& day_time_array = checked_cast<const DayTimeIntervalArray&>(*array);
4268+
4269+
// Verify null value
4270+
ASSERT_TRUE(day_time_array.IsNull(2));
4271+
ASSERT_EQ(1, day_time_array.null_count());
4272+
4273+
// Verify non-null values in the array
4274+
ASSERT_FALSE(day_time_array.IsNull(0));
4275+
ASSERT_EQ(day_time_array.GetValue(0), value1);
4276+
ASSERT_FALSE(day_time_array.IsNull(1));
4277+
ASSERT_EQ(day_time_array.GetValue(1), value2);
4278+
ASSERT_FALSE(day_time_array.IsNull(3));
4279+
ASSERT_EQ(day_time_array.GetValue(3), value3);
4280+
}
4281+
4282+
TEST_F(TestDayTimeIntervalBuilder, TestBulkAppend) {
4283+
DayTimeIntervalBuilder builder;
4284+
std::vector<DayTimeIntervalType::DayMilliseconds> values{{1, 100}, {3, 200}, {5, 300}};
4285+
std::vector<bool> is_valid{true, false, true};
4286+
std::vector<uint8_t> is_valid_bytes{1, 0, 1};
4287+
4288+
ASSERT_OK(builder.AppendValues(values));
4289+
ASSERT_OK(builder.AppendValues(values, is_valid));
4290+
ASSERT_OK(builder.AppendValues(values.data(), values.size(), is_valid_bytes.data()));
4291+
4292+
ASSERT_OK_AND_ASSIGN(auto array, builder.Finish());
4293+
ASSERT_OK(array->ValidateFull());
4294+
ASSERT_EQ(array->null_count(), 2);
4295+
ASSERT_EQ(array->length(), 9);
4296+
4297+
const auto& day_time_array = checked_cast<const DayTimeIntervalArray&>(*array);
4298+
ASSERT_EQ(day_time_array.GetValue(0), values[0]);
4299+
ASSERT_TRUE(day_time_array.IsNull(4));
4300+
ASSERT_TRUE(day_time_array.IsNull(7));
4301+
ASSERT_EQ(day_time_array.GetValue(2), values[2]);
4302+
}
4303+
4304+
TEST_F(TestDayTimeIntervalBuilder, TestConstructors) {
4305+
DayTimeIntervalBuilder builder1;
4306+
ASSERT_EQ(builder1.type()->id(), Type::INTERVAL_DAY_TIME);
4307+
4308+
auto pool = default_memory_pool();
4309+
DayTimeIntervalBuilder builder2(pool);
4310+
ASSERT_EQ(builder2.type()->id(), Type::INTERVAL_DAY_TIME);
4311+
4312+
auto type = day_time_interval();
4313+
DayTimeIntervalBuilder builder3(type, pool);
4314+
ASSERT_EQ(builder3.type()->id(), Type::INTERVAL_DAY_TIME);
4315+
ASSERT_TRUE(builder3.type()->Equals(type));
4316+
}
4317+
42404318
} // namespace arrow

cpp/src/arrow/array/builder_time.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ namespace arrow {
3030
///
3131
/// @{
3232

33-
// TODO(ARROW-7938): this class is untested
34-
3533
class ARROW_EXPORT DayTimeIntervalBuilder : public NumericBuilder<DayTimeIntervalType> {
3634
public:
3735
using DayMilliseconds = DayTimeIntervalType::DayMilliseconds;

0 commit comments

Comments
 (0)