2626#include < arrow/array/builder_decimal.h>
2727#include < arrow/array/builder_nested.h>
2828#include < arrow/array/builder_primitive.h>
29- #include < arrow/array/builder_run_end.h>
3029#include < arrow/array/builder_time.h>
3130#include < arrow/array/builder_union.h>
3231#include < arrow/c/bridge.h>
3332#include < arrow/compare.h>
33+ #include < arrow/config.h>
3434#include < arrow/util/decimal.h>
3535
36+ #if defined(ARROW_VERSION_MAJOR) && ARROW_VERSION_MAJOR >= 12
37+ #include < arrow/array/builder_run_end.h>
38+ #endif
39+
3640#include " nanoarrow/nanoarrow.hpp"
3741
3842using namespace arrow ;
@@ -1482,11 +1486,9 @@ TEST(ArrayTest, ArrayTestAppendToRunEndEncodedArray) {
14821486 array.offset = INT32_MAX;
14831487 EXPECT_EQ (ArrowArrayFinishBuilding (&array, NANOARROW_VALIDATION_LEVEL_FULL, &error),
14841488 EINVAL);
1485- EXPECT_STREQ (
1486- ArrowErrorMessage (&error),
1487- " Offset + length of a run-end encoded array must fit in a value of the "
1488- " run end type int32, but offset + length is 2147483654 while the allowed "
1489- " maximum is 2147483647" );
1489+ EXPECT_STREQ (ArrowErrorMessage (&error),
1490+ " Offset + length of a run-end encoded array must fit in a value of the "
1491+ " run end type int32, but offset + length is 2147483654" );
14901492
14911493 ((struct ArrowArrayPrivateData *)(array.children [0 ]->private_data ))->storage_type =
14921494 NANOARROW_TYPE_INT16;
@@ -1496,18 +1498,17 @@ TEST(ArrayTest, ArrayTestAppendToRunEndEncodedArray) {
14961498 EXPECT_STREQ (
14971499 ArrowErrorMessage (&error),
14981500 " Offset + length of a run-end encoded array must fit in a value of the run end "
1499- " type int16, but offset + length is 32774 while the allowed maximum is 32767 " );
1501+ " type int16, but offset + length is 32774" );
15001502
15011503 ((struct ArrowArrayPrivateData *)(array.children [0 ]->private_data ))->storage_type =
15021504 NANOARROW_TYPE_INT64;
15031505 array.offset = INT64_MAX;
15041506 EXPECT_EQ (ArrowArrayFinishBuilding (&array, NANOARROW_VALIDATION_LEVEL_FULL, &error),
15051507 EINVAL);
1506- EXPECT_STREQ (ArrowErrorMessage (&error),
1507- " Offset + length of a run-end encoded array must fit in a value of the "
1508- " run end type int64, but offset + length is 9223372036854775814 while "
1509- " the allowed "
1510- " maximum is 9223372036854775807" );
1508+ EXPECT_THAT (
1509+ ArrowErrorMessage (&error),
1510+ ::testing::StartsWith (" Offset + length of a run-end encoded array must fit in a "
1511+ " value of the run end type int64, but offset + length is" ));
15111512 }
15121513 ((struct ArrowArrayPrivateData *)(array.children [0 ]->private_data ))->storage_type =
15131514 NANOARROW_TYPE_INT32;
@@ -1572,6 +1573,10 @@ TEST(ArrayTest, ArrayTestAppendToRunEndEncodedArray) {
15721573 EXPECT_EQ (ArrowArrayFinishBuilding (&array, NANOARROW_VALIDATION_LEVEL_FULL, &error),
15731574 NANOARROW_OK);
15741575
1576+ #if !defined(ARROW_VERSION_MAJOR) || ARROW_VERSION_MAJOR < 12
1577+ ArrowSchemaRelease (&schema);
1578+ ArrowArrayRelease (&array);
1579+ #else
15751580 auto arrow_array = ImportArray (&array, &schema);
15761581 ARROW_EXPECT_OK (arrow_array);
15771582
@@ -1591,6 +1596,7 @@ TEST(ArrayTest, ArrayTestAppendToRunEndEncodedArray) {
15911596
15921597 EXPECT_STREQ (arrow_array.ValueUnsafe ()->ToString ().c_str (),
15931598 expected_array.ValueUnsafe ()->ToString ().c_str ());
1599+ #endif
15941600}
15951601
15961602TEST (ArrayTest, ArrayTestUnionUtils) {
@@ -2577,20 +2583,6 @@ TEST(ArrayTest, ArrayViewTestSparseUnionGet) {
25772583 ArrowArrayRelease (&array);
25782584}
25792585
2580- template <
2581- typename TypeClass, typename ValueType,
2582- typename std::enable_if<std::is_same_v<TypeClass, HalfFloatType>, bool >::type = true >
2583- auto transform_value (ValueType t) -> uint16_t {
2584- return ArrowFloatToHalfFloat (t);
2585- }
2586-
2587- template <
2588- typename TypeClass, typename ValueType,
2589- typename std::enable_if<!std::is_same_v<TypeClass, HalfFloatType>, bool >::type = true >
2590- auto transform_value (ValueType t) -> ValueType {
2591- return t;
2592- }
2593-
25942586template <typename TypeClass>
25952587void TestGetFromNumericArrayView () {
25962588 struct ArrowArray array;
@@ -2602,9 +2594,17 @@ void TestGetFromNumericArrayView() {
26022594
26032595 // Array with nulls
26042596 auto builder = NumericBuilder<TypeClass>();
2605- ARROW_EXPECT_OK (builder.Append (transform_value<TypeClass>(1 )));
2606- ARROW_EXPECT_OK (builder.AppendNulls (2 ));
2607- ARROW_EXPECT_OK (builder.Append (transform_value<TypeClass>(4 )));
2597+
2598+ if (type->id () == Type::HALF_FLOAT) {
2599+ ARROW_EXPECT_OK (builder.Append (ArrowFloatToHalfFloat (1 )));
2600+ ARROW_EXPECT_OK (builder.AppendNulls (2 ));
2601+ ARROW_EXPECT_OK (builder.Append (ArrowFloatToHalfFloat (4 )));
2602+ } else {
2603+ ARROW_EXPECT_OK (builder.Append (1 ));
2604+ ARROW_EXPECT_OK (builder.AppendNulls (2 ));
2605+ ARROW_EXPECT_OK (builder.Append (4 ));
2606+ }
2607+
26082608 auto maybe_arrow_array = builder.Finish ();
26092609 ARROW_EXPECT_OK (maybe_arrow_array);
26102610 auto arrow_array = maybe_arrow_array.ValueUnsafe ();
@@ -2635,8 +2635,15 @@ void TestGetFromNumericArrayView() {
26352635
26362636 // Array without nulls (Arrow does not allocate the validity buffer)
26372637 builder = NumericBuilder<TypeClass>();
2638- ARROW_EXPECT_OK (builder.Append (transform_value<TypeClass>(1 )));
2639- ARROW_EXPECT_OK (builder.Append (transform_value<TypeClass>(2 )));
2638+
2639+ if (type->id () == Type::HALF_FLOAT) {
2640+ ARROW_EXPECT_OK (builder.Append (ArrowFloatToHalfFloat (1 )));
2641+ ARROW_EXPECT_OK (builder.Append (ArrowFloatToHalfFloat (2 )));
2642+ } else {
2643+ ARROW_EXPECT_OK (builder.Append (1 ));
2644+ ARROW_EXPECT_OK (builder.Append (2 ));
2645+ }
2646+
26402647 maybe_arrow_array = builder.Finish ();
26412648 ARROW_EXPECT_OK (maybe_arrow_array);
26422649 arrow_array = maybe_arrow_array.ValueUnsafe ();
0 commit comments