This is an automated email from the ASF dual-hosted git repository.
paleolimbot pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-nanoarrow.git
The following commit(s) were added to refs/heads/main by this push:
new 85adb56c chore(ci): Fix tests for centos7 and s390x (#642)
85adb56c is described below
commit 85adb56cdd095910a29c4227948a2109fbda5b8b
Author: Dewey Dunnington <[email protected]>
AuthorDate: Wed Oct 2 16:28:46 2024 -0500
chore(ci): Fix tests for centos7 and s390x (#642)
A few tests were failing on the centos7 run, which these days mostly
checks for accidental C++17 or R >= 4.0 usage or Arrow > 9.0.0 usage in
the tests.
Closes #640.
Checked with:
```bash
export NANOARROW_PLATFORM=centos7
docker compose run --rm verify
```
and
```bash
export NANOARROW_PLATFORM=alpine
export NANOARROW_ARCH=s390x
docker compose run --rm verify
```
---
r/tests/testthat/test-ipc.R | 10 +++----
src/nanoarrow/common/array_test.cc | 59 +++++++++++++++++++++++--------------
src/nanoarrow/common/schema_test.cc | 9 ++++++
src/nanoarrow/ipc/decoder_test.cc | 16 ++++++++++
4 files changed, 67 insertions(+), 27 deletions(-)
diff --git a/r/tests/testthat/test-ipc.R b/r/tests/testthat/test-ipc.R
index 3944de4b..8a4c2bfe 100644
--- a/r/tests/testthat/test-ipc.R
+++ b/r/tests/testthat/test-ipc.R
@@ -103,7 +103,7 @@ test_that("write_nanoarrow() works for file paths", {
tf <- tempfile()
on.exit(unlink(tf))
- df <- data.frame(letters = letters)
+ df <- data.frame(letters = letters, stringsAsFactors = FALSE)
expect_identical(write_nanoarrow(df, tf), df)
expect_identical(as.data.frame(read_nanoarrow(tf)), df)
})
@@ -127,7 +127,7 @@ test_that("write_nanoarrow() works for URLs", {
tf <- tempfile()
on.exit(unlink(tf))
- df <- data.frame(letters = letters)
+ df <- data.frame(letters = letters, stringsAsFactors = FALSE)
expect_identical(write_nanoarrow(df, paste0("file://", tf)), df)
expect_identical(as.data.frame(read_nanoarrow(tf)), df)
})
@@ -151,7 +151,7 @@ test_that("write_nanoarrow() works for compressed .gz file
paths", {
tf <- tempfile(fileext = ".gz")
on.exit(unlink(tf))
- df <- data.frame(letters = letters)
+ df <- data.frame(letters = letters, stringsAsFactors = FALSE)
expect_identical(write_nanoarrow(df, tf), df)
expect_identical(as.data.frame(read_nanoarrow(tf)), df)
})
@@ -175,7 +175,7 @@ test_that("write_nanoarrow() works for compressed .bz2 file
paths", {
tf <- tempfile(fileext = ".bz2")
on.exit(unlink(tf))
- df <- data.frame(letters = letters)
+ df <- data.frame(letters = letters, stringsAsFactors = FALSE)
expect_identical(write_nanoarrow(df, tf), df)
expect_identical(as.data.frame(read_nanoarrow(tf)), df)
})
@@ -212,7 +212,7 @@ test_that("write_nanoarrow() errors for compressed .zip
file paths", {
tf <- tempfile(fileext = ".zip")
on.exit(unlink(tf))
- df <- data.frame(letters = letters)
+ df <- data.frame(letters = letters, stringsAsFactors = FALSE)
expect_error(
write_nanoarrow(df, tf),
"zip compression not supported"
diff --git a/src/nanoarrow/common/array_test.cc
b/src/nanoarrow/common/array_test.cc
index 37443cd4..5ef77029 100644
--- a/src/nanoarrow/common/array_test.cc
+++ b/src/nanoarrow/common/array_test.cc
@@ -895,12 +895,12 @@ TEST(ArrayTest, ArrayTestAppendToLargeStringArray) {
ArrowArrayRelease(&array);
}
-template <enum ArrowType ArrowT, typename ValueT>
void TestAppendToInlinedDataViewArray(
- std::function<ArrowErrorCode(struct ArrowArray*, ValueT)> AppendFunc) {
+ enum ArrowType arrow_type,
+ std::function<ArrowErrorCode(struct ArrowArray*, const char*)> AppendFunc)
{
struct ArrowArray array;
- ASSERT_EQ(ArrowArrayInitFromType(&array, ArrowT), NANOARROW_OK);
+ ASSERT_EQ(ArrowArrayInitFromType(&array, arrow_type), NANOARROW_OK);
EXPECT_EQ(ArrowArrayStartAppending(&array), NANOARROW_OK);
// Check that we can reserve
@@ -908,7 +908,7 @@ void TestAppendToInlinedDataViewArray(
EXPECT_EQ(ArrowArrayBuffer(&array, 1)->capacity_bytes,
5 * sizeof(union ArrowBinaryView));
- EXPECT_EQ(AppendFunc(&array, ValueT{{"inlinestring"}, 12}), NANOARROW_OK);
+ EXPECT_EQ(AppendFunc(&array, "inlinestring"), NANOARROW_OK);
EXPECT_EQ(ArrowArrayAppendNull(&array, 2), NANOARROW_OK);
EXPECT_EQ(ArrowArrayAppendEmpty(&array, 1), NANOARROW_OK);
EXPECT_EQ(ArrowArrayFinishBuildingDefault(&array, nullptr), NANOARROW_OK);
@@ -934,12 +934,12 @@ void TestAppendToInlinedDataViewArray(
ArrowArrayRelease(&array);
};
-template <enum ArrowType ArrowT, typename ValueT>
void TestAppendToDataViewArray(
- std::function<ArrowErrorCode(struct ArrowArray*, ValueT)> AppendFunc) {
+ enum ArrowType arrow_type,
+ std::function<ArrowErrorCode(struct ArrowArray*, const char*)> AppendFunc)
{
struct ArrowArray array;
- ASSERT_EQ(ArrowArrayInitFromType(&array, ArrowT), NANOARROW_OK);
+ ASSERT_EQ(ArrowArrayInitFromType(&array, arrow_type), NANOARROW_OK);
EXPECT_EQ(ArrowArrayStartAppending(&array), NANOARROW_OK);
// Check that we can reserve
@@ -951,15 +951,12 @@ void TestAppendToDataViewArray(
std::string filler(NANOARROW_BINARY_VIEW_BLOCK_SIZE - 34, 'x');
std::string str2{"goes_into_second_variadic_buffer"};
- EXPECT_EQ(AppendFunc(&array, ValueT{{"1234"}, 4}), NANOARROW_OK);
+ EXPECT_EQ(AppendFunc(&array, "1234"), NANOARROW_OK);
EXPECT_EQ(ArrowArrayAppendNull(&array, 2), NANOARROW_OK);
- EXPECT_EQ(AppendFunc(&array, {{str1.c_str()},
static_cast<int64_t>(str1.size())}),
- NANOARROW_OK);
+ EXPECT_EQ(AppendFunc(&array, str1.c_str()), NANOARROW_OK);
EXPECT_EQ(ArrowArrayAppendEmpty(&array, 1), NANOARROW_OK);
- EXPECT_EQ(AppendFunc(&array, {{filler.c_str()},
static_cast<int64_t>(filler.size())}),
- NANOARROW_OK);
- EXPECT_EQ(AppendFunc(&array, {{str2.c_str()},
static_cast<int64_t>(str2.size())}),
- NANOARROW_OK);
+ EXPECT_EQ(AppendFunc(&array, filler.c_str()), NANOARROW_OK);
+ EXPECT_EQ(AppendFunc(&array, str2.c_str()), NANOARROW_OK);
EXPECT_EQ(ArrowArrayFinishBuildingDefault(&array, nullptr), NANOARROW_OK);
EXPECT_EQ(array.length, 7);
@@ -1004,17 +1001,27 @@ void TestAppendToDataViewArray(
};
TEST(ArrayTest, ArrayTestAppendToBinaryViewArray) {
- TestAppendToInlinedDataViewArray<NANOARROW_TYPE_STRING_VIEW, struct
ArrowStringView>(
- ArrowArrayAppendString);
- TestAppendToDataViewArray<NANOARROW_TYPE_STRING_VIEW, struct
ArrowStringView>(
- ArrowArrayAppendString);
+ TestAppendToInlinedDataViewArray(
+ NANOARROW_TYPE_STRING_VIEW, [&](ArrowArray* array, const char* value) {
+ return ArrowArrayAppendString(array, ArrowCharView(value));
+ });
+
+ TestAppendToDataViewArray(NANOARROW_TYPE_STRING_VIEW,
+ [&](ArrowArray* array, const char* value) {
+ return ArrowArrayAppendString(array,
ArrowCharView(value));
+ });
};
TEST(ArrayTest, ArrayTestAppendToStringViewArray) {
- TestAppendToInlinedDataViewArray<NANOARROW_TYPE_BINARY_VIEW, struct
ArrowBufferView>(
- ArrowArrayAppendBytes);
- TestAppendToDataViewArray<NANOARROW_TYPE_BINARY_VIEW, struct
ArrowBufferView>(
- ArrowArrayAppendBytes);
+ TestAppendToInlinedDataViewArray(NANOARROW_TYPE_BINARY_VIEW, [&](ArrowArray*
array,
+ const char*
value) {
+ return ArrowArrayAppendBytes(array, {{value},
static_cast<int64_t>(strlen(value))});
+ });
+
+ TestAppendToDataViewArray(NANOARROW_TYPE_BINARY_VIEW, [&](ArrowArray* array,
+ const char* value)
{
+ return ArrowArrayAppendBytes(array, {{value},
static_cast<int64_t>(strlen(value))});
+ });
};
TEST(ArrayTest, ArrayTestAppendToFixedSizeBinaryArray) {
@@ -3562,15 +3569,20 @@ void TestGetFromBinaryView(
}
TEST(ArrayViewTest, ArrayViewTestGetStringView) {
+#if defined(ARROW_VERSION_MAJOR) && ARROW_VERSION_MAJOR >= 15
auto string_view_builder = StringViewBuilder();
const auto get_string_view = [](const struct ArrowStringView* sv) { return
sv->data; };
TestGetFromInlinedBinaryView<StringViewBuilder, struct ArrowStringView>(
string_view_builder, ArrowArrayViewGetStringUnsafe, get_string_view);
TestGetFromBinaryView<StringViewBuilder, struct ArrowStringView>(
string_view_builder, ArrowArrayViewGetStringUnsafe, get_string_view);
+#else
+ GTEST_SKIP() << "Arrow C++ StringView compatibility test needs Arrow C++ >=
15";
+#endif
}
TEST(ArrayViewTest, ArrayViewTestGetBinaryView) {
+#if defined(ARROW_VERSION_MAJOR) && ARROW_VERSION_MAJOR >= 15
auto binary_view_builder = BinaryViewBuilder();
const auto get_buffer_view = [](const struct ArrowBufferView* bv) {
return bv->data.data;
@@ -3579,6 +3591,9 @@ TEST(ArrayViewTest, ArrayViewTestGetBinaryView) {
binary_view_builder, ArrowArrayViewGetBytesUnsafe, get_buffer_view);
TestGetFromBinaryView<BinaryViewBuilder, struct ArrowBufferView>(
binary_view_builder, ArrowArrayViewGetBytesUnsafe, get_buffer_view);
+#else
+ GTEST_SKIP() << "Arrow C++ StringView compatibility test needs Arrow C++ >=
15";
+#endif
}
TEST(ArrayViewTest, ArrayViewTestGetIntervalYearMonth) {
diff --git a/src/nanoarrow/common/schema_test.cc
b/src/nanoarrow/common/schema_test.cc
index df0d1aba..163f96c7 100644
--- a/src/nanoarrow/common/schema_test.cc
+++ b/src/nanoarrow/common/schema_test.cc
@@ -912,7 +912,13 @@ TEST(SchemaViewTest, SchemaViewInitBinaryAndString) {
EXPECT_EQ(schema_view.layout.element_size_bits[2], 0);
EXPECT_EQ(ArrowSchemaToStdString(&schema), "large_string");
ArrowSchemaRelease(&schema);
+}
+TEST(SchemaViewTest, SchemaViewInitBinaryAndStringView) {
+#if defined(ARROW_VERSION_MAJOR) && ARROW_VERSION_MAJOR >= 15
+ struct ArrowSchema schema;
+ struct ArrowSchemaView schema_view;
+ struct ArrowError error;
ARROW_EXPECT_OK(ExportType(*utf8_view(), &schema));
EXPECT_EQ(ArrowSchemaViewInit(&schema_view, &schema, &error), NANOARROW_OK);
EXPECT_EQ(schema_view.type, NANOARROW_TYPE_STRING_VIEW);
@@ -938,6 +944,9 @@ TEST(SchemaViewTest, SchemaViewInitBinaryAndString) {
EXPECT_EQ(schema_view.layout.element_size_bits[1], 128);
EXPECT_EQ(ArrowSchemaToStdString(&schema), "binary_view");
ArrowSchemaRelease(&schema);
+#else
+ GTEST_SKIP() << "Arrow C++ StringView compatibility test needs Arrow C++ >=
15";
+#endif
}
TEST(SchemaViewTest, SchemaViewInitBinaryAndStringErrors) {
diff --git a/src/nanoarrow/ipc/decoder_test.cc
b/src/nanoarrow/ipc/decoder_test.cc
index f5e54dd2..88cd7d99 100644
--- a/src/nanoarrow/ipc/decoder_test.cc
+++ b/src/nanoarrow/ipc/decoder_test.cc
@@ -132,14 +132,30 @@ TEST(NanoarrowIpcTest, NanoarrowIpcCheckHeader) {
uint32_t eight_bad_bytes[] = {negative_one_le * 256, 999};
data.data.as_uint32 = eight_bad_bytes;
data.size_bytes = sizeof(eight_bad_bytes);
+
+#if defined(__BIG_ENDIAN__)
+ EXPECT_EQ(ArrowIpcDecoderVerifyHeader(&decoder, data, &error), ESPIPE);
+ EXPECT_STREQ(
+ error.message,
+ "Expected >= 16777219 bytes of remaining data but found 8 bytes in
buffer");
+#else
EXPECT_EQ(ArrowIpcDecoderVerifyHeader(&decoder, data, &error), EINVAL);
EXPECT_STREQ(error.message,
"Expected 0xFFFFFFFF at start of message but found 0xFFFFFF00");
+#endif
ArrowErrorInit(&error);
+
+#if defined(__BIG_ENDIAN__)
+ EXPECT_EQ(ArrowIpcDecoderDecodeHeader(&decoder, data, &error), ESPIPE);
+ EXPECT_STREQ(
+ error.message,
+ "Expected >= 16777219 bytes of remaining data but found 8 bytes in
buffer");
+#else
EXPECT_EQ(ArrowIpcDecoderDecodeHeader(&decoder, data, &error), EINVAL);
EXPECT_STREQ(error.message,
"Expected 0xFFFFFFFF at start of message but found 0xFFFFFF00");
+#endif
eight_bad_bytes[0] = 0xFFFFFFFF;
eight_bad_bytes[1] = negative_one_le;