[
https://issues.apache.org/jira/browse/ARROW-16142?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Rok Mihevc updated ARROW-16142:
-------------------------------
Description:
Temporal rounding flooring seem to interpret 32 bit input arrays as 64 bit
arrays. The following test:
{code:c++}
TEST_F(ScalarTemporalTest, TestCeilFloorRoundTemporalDate) {
RoundTemporalOptions round_to_2_hours = RoundTemporalOptions(2,
CalendarUnit::HOUR);
const char* date32s = R"([0, 11016, -25932, null])";
const char* date64s = R"([0, 951782400000, -2240524800000, null])";
auto dates32 = ArrayFromJSON(date32(), date32s);
auto dates64 = ArrayFromJSON(date64(), date64s);
CheckScalarUnary("ceil_temporal", dates64, dates64, &round_to_2_hours);
CheckScalarUnary("floor_temporal", dates64, dates64, &round_to_2_hours);
CheckScalarUnary("round_temporal", dates64, dates64, &round_to_2_hours);
CheckScalarUnary("ceil_temporal", dates32, dates32, &round_to_2_hours);
CheckScalarUnary("floor_temporal", dates32, dates32, &round_to_2_hours);
CheckScalarUnary("round_temporal", dates32, dates32, &round_to_2_hours);
const char* times_s = R"([0, 7200, null])";
const char* times_ms = R"([0, 7200000, null])";
const char* times_us = R"([0, 7200000000, null])";
const char* times_ns = R"([0, 7200000000000, null])";
auto arr_s = ArrayFromJSON(time32(TimeUnit::SECOND), times_s);
auto arr_ms = ArrayFromJSON(time32(TimeUnit::MILLI), times_ms);
auto arr_us = ArrayFromJSON(time64(TimeUnit::MICRO), times_us);
auto arr_ns = ArrayFromJSON(time64(TimeUnit::NANO), times_ns);
CheckScalarUnary("ceil_temporal", arr_s, arr_s, &round_to_2_hours);
CheckScalarUnary("ceil_temporal", arr_ms, arr_ms, &round_to_2_hours);
CheckScalarUnary("ceil_temporal", arr_us, arr_us, &round_to_2_hours);
CheckScalarUnary("ceil_temporal", arr_ns, arr_ns, &round_to_2_hours);
}
{code}
Returns:
{code:bash}
Got:
[
[
1970-01-01,
1970-01-01,
2000-02-29,
null
]
]
Expected:
[
[
1970-01-01
],
[
2000-02-29,
1899-01-01,
null
]
]
etc.{code}
Was first reported
[here|https://github.com/apache/arrow/pull/12154#pullrequestreview-932859912].
was:
Temporal rounding flooring seem to interpret 32 bit input arrays as 64 bit
arrays. The following test:
{code:c++}
TEST_F(ScalarTemporalTest, TestCeilFloorRoundTemporalDate) {
RoundTemporalOptions round_to_2_hours = RoundTemporalOptions(2,
CalendarUnit::HOUR);
const char* date32s = R"([0, 11016, -25932, null])";
const char* date64s = R"([0, 951782400000, -2240524800000, null])";
auto dates32 = ArrayFromJSON(date32(), date32s);
auto dates64 = ArrayFromJSON(date64(), date64s);
CheckScalarUnary("ceil_temporal", dates64, dates64, &round_to_2_hours);
CheckScalarUnary("floor_temporal", dates64, dates64, &round_to_2_hours);
CheckScalarUnary("round_temporal", dates64, dates64, &round_to_2_hours);
CheckScalarUnary("ceil_temporal", dates32, dates32, &round_to_2_hours);
CheckScalarUnary("floor_temporal", dates32, dates32, &round_to_2_hours);
CheckScalarUnary("round_temporal", dates32, dates32, &round_to_2_hours);
const char* times_s = R"([0, 7200, null])";
const char* times_ms = R"([0, 7200000, null])";
const char* times_us = R"([0, 7200000000, null])";
const char* times_ns = R"([0, 7200000000000, null])";
auto arr_s = ArrayFromJSON(time32(TimeUnit::SECOND), times_s);
auto arr_ms = ArrayFromJSON(time32(TimeUnit::MILLI), times_ms);
auto arr_us = ArrayFromJSON(time64(TimeUnit::MICRO), times_us);
auto arr_ns = ArrayFromJSON(time64(TimeUnit::NANO), times_ns);
CheckScalarUnary("ceil_temporal", arr_s, arr_s, &round_to_2_hours);
CheckScalarUnary("ceil_temporal", arr_ms, arr_ms, &round_to_2_hours);
CheckScalarUnary("ceil_temporal", arr_us, arr_us, &round_to_2_hours);
CheckScalarUnary("ceil_temporal", arr_ns, arr_ns, &round_to_2_hours);
}
{code}
Returns:
{code:bash}
Got:
[
[
1970-01-01,
1970-01-01,
2000-02-29,
null
]
]
Expected:
[
[
1970-01-01
],
[
2000-02-29,
1899-01-01,
null
]
]
{code}
> [C++] Temporal floor/ceil/round returns incorrect results for date32 and
> time32 inputs
> --------------------------------------------------------------------------------------
>
> Key: ARROW-16142
> URL: https://issues.apache.org/jira/browse/ARROW-16142
> Project: Apache Arrow
> Issue Type: Bug
> Components: C++
> Reporter: Rok Mihevc
> Priority: Major
> Labels: kernel
>
> Temporal rounding flooring seem to interpret 32 bit input arrays as 64 bit
> arrays. The following test:
> {code:c++}
> TEST_F(ScalarTemporalTest, TestCeilFloorRoundTemporalDate) {
> RoundTemporalOptions round_to_2_hours = RoundTemporalOptions(2,
> CalendarUnit::HOUR);
> const char* date32s = R"([0, 11016, -25932, null])";
> const char* date64s = R"([0, 951782400000, -2240524800000, null])";
> auto dates32 = ArrayFromJSON(date32(), date32s);
> auto dates64 = ArrayFromJSON(date64(), date64s);
> CheckScalarUnary("ceil_temporal", dates64, dates64, &round_to_2_hours);
> CheckScalarUnary("floor_temporal", dates64, dates64, &round_to_2_hours);
> CheckScalarUnary("round_temporal", dates64, dates64, &round_to_2_hours);
> CheckScalarUnary("ceil_temporal", dates32, dates32, &round_to_2_hours);
> CheckScalarUnary("floor_temporal", dates32, dates32, &round_to_2_hours);
> CheckScalarUnary("round_temporal", dates32, dates32, &round_to_2_hours);
> const char* times_s = R"([0, 7200, null])";
> const char* times_ms = R"([0, 7200000, null])";
> const char* times_us = R"([0, 7200000000, null])";
> const char* times_ns = R"([0, 7200000000000, null])";
> auto arr_s = ArrayFromJSON(time32(TimeUnit::SECOND), times_s);
> auto arr_ms = ArrayFromJSON(time32(TimeUnit::MILLI), times_ms);
> auto arr_us = ArrayFromJSON(time64(TimeUnit::MICRO), times_us);
> auto arr_ns = ArrayFromJSON(time64(TimeUnit::NANO), times_ns);
> CheckScalarUnary("ceil_temporal", arr_s, arr_s, &round_to_2_hours);
> CheckScalarUnary("ceil_temporal", arr_ms, arr_ms, &round_to_2_hours);
> CheckScalarUnary("ceil_temporal", arr_us, arr_us, &round_to_2_hours);
> CheckScalarUnary("ceil_temporal", arr_ns, arr_ns, &round_to_2_hours);
> }
> {code}
> Returns:
> {code:bash}
> Got:
> [
> [
> 1970-01-01,
> 1970-01-01,
> 2000-02-29,
> null
> ]
> ]
> Expected:
> [
> [
> 1970-01-01
> ],
> [
> 2000-02-29,
> 1899-01-01,
> null
> ]
> ]
> etc.{code}
> Was first reported
> [here|https://github.com/apache/arrow/pull/12154#pullrequestreview-932859912].
--
This message was sent by Atlassian Jira
(v8.20.1#820001)