Skip to content

Commit ad45d3e

Browse files
committed
test: Make Arrow C++ dependency optional
1 parent 3a53325 commit ad45d3e

File tree

8 files changed

+125
-18
lines changed

8 files changed

+125
-18
lines changed

.github/workflows/build-and-test.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,3 +158,21 @@ jobs:
158158
- name: Run meson testing script
159159
run: |
160160
PKG_CONFIG_PATH="$(pwd)/arrow/lib/pkgconfig" ci/scripts/build-with-meson.sh
161+
162+
test-no-arrow:
163+
name: test-no-arrow
164+
runs-on: ubuntu-latest
165+
steps:
166+
- uses: actions/checkout@v4
167+
168+
- name: Build nanoarrow
169+
run: |
170+
cmake -S . -B build -DNANOARROW_BUILD_TESTS=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
171+
-DCMAKE_PREFIX_PATH="${ARROW_PATH}"
172+
173+
cmake --build build
174+
175+
- name: Run tests
176+
run: |
177+
cd build
178+
ctest -T test --output-on-failure .

CMakeLists.txt

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -422,26 +422,31 @@ if(NANOARROW_BUILD_TESTS)
422422
)
423423
include(CTest)
424424

425-
find_package(Arrow REQUIRED)
426-
message(STATUS "Arrow version: ${ARROW_VERSION}")
427-
message(STATUS "Arrow SO version: ${ARROW_FULL_SO_VERSION}")
425+
find_package(Arrow)
426+
if(Arrow_FOUND)
427+
message(STATUS "Arrow version: ${ARROW_VERSION}")
428+
message(STATUS "Arrow SO version: ${ARROW_FULL_SO_VERSION}")
428429

429-
# Give caller the option to link a static version of Arrow C++
430-
if(NANOARROW_ARROW_STATIC)
431-
set(NANOARROW_ARROW_TARGET arrow_static)
432-
else()
433-
set(NANOARROW_ARROW_TARGET arrow_shared)
434-
endif()
430+
# TODO: does this propoagate to projects using as a subproject?
431+
add_compile_definitions("-DNANOARROW_ARROW_FOUND")
435432

436-
# Arrow >= 10.0.0 requires C++17; GTest requires C++11.
437-
# Leave the option open to use an older version of Arrow
438-
# to make it easier to test on old Linux (e.g., Centos7)
439-
if(${ARROW_VERSION} VERSION_GREATER_EQUAL "10.0.0")
440-
set(CMAKE_CXX_STANDARD 17)
441-
else()
442-
set(CMAKE_CXX_STANDARD 11)
433+
# Give caller the option to link a static version of Arrow C++
434+
if(NANOARROW_ARROW_STATIC)
435+
set(NANOARROW_ARROW_TARGET arrow_static)
436+
else()
437+
set(NANOARROW_ARROW_TARGET arrow_shared)
438+
endif()
439+
440+
# Arrow >= 10.0.0 requires C++17; GTest requires C++11.
441+
# Leave the option open to use an older version of Arrow
442+
# to make it easier to test on old Linux (e.g., Centos7)
443+
if(${ARROW_VERSION} VERSION_GREATER_EQUAL "10.0.0")
444+
set(CMAKE_CXX_STANDARD 17)
445+
else()
446+
set(CMAKE_CXX_STANDARD 11)
447+
endif()
448+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
443449
endif()
444-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
445450

446451
add_subdirectory("thirdparty/googletest")
447452

meson.build

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,11 @@ if get_option('tests')
192192
# https://mesonbuild.com/Unit-tests.html#coverage
193193

194194
# The system include suppresses compilation warnings from Arrow
195-
arrow_dep = dependency('arrow', include_type: 'system')
195+
arrow_dep = dependency('arrow', include_type: 'system', required: false)
196+
if arrow_dep.found()
197+
add_project_arguments('-DNANOARROW_ARROW_FOUND', language : 'c')
198+
add_project_arguments('-DNANOARROW_ARROW_FOUND', language : 'cpp')
199+
endif
196200
gtest_dep = dependency('gtest_main')
197201
gmock_dep = dependency('gmock')
198202

src/nanoarrow/common/array_test.cc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include <cmath>
2121
#include <cstdint>
2222

23+
#if defined(NANOARROW_ARROW_FOUND)
2324
#include <arrow/array.h>
2425
#include <arrow/array/builder_binary.h>
2526
#include <arrow/array/builder_decimal.h>
@@ -35,17 +36,21 @@
3536
#if defined(ARROW_VERSION_MAJOR) && ARROW_VERSION_MAJOR >= 12
3637
#include <arrow/array/builder_run_end.h>
3738
#endif
39+
#endif
3840

3941
#include "nanoarrow/nanoarrow.hpp"
4042

43+
#if defined(NANOARROW_ARROW_FOUND)
4144
using namespace arrow;
45+
#endif
4246
using namespace nanoarrow::literals;
4347
using nanoarrow::NA;
4448
using testing::ElementsAre;
4549

4650
// Lightweight versions of ArrowTesting's ARROW_EXPECT_OK. This
4751
// version accomplishes the task of making sure the status message
4852
// ends up in the ctests log.
53+
#if defined(NANOARROW_ARROW_FOUND)
4954
void ARROW_EXPECT_OK(Status status) {
5055
if (!status.ok()) {
5156
throw std::runtime_error(status.message());
@@ -57,6 +62,7 @@ void ARROW_EXPECT_OK(Result<std::shared_ptr<Array>> result) {
5762
throw std::runtime_error(result.status().message());
5863
}
5964
}
65+
#endif
6066

6167
TEST(ArrayTest, ArrayTestInit) {
6268
struct ArrowArray array;
@@ -380,6 +386,7 @@ INSTANTIATE_TEST_SUITE_P(NanoarrowIpcTest, UnparameterizedTypeTestFixture,
380386
::testing::Values(NANOARROW_TYPE_NA, NANOARROW_TYPE_INT32,
381387
NANOARROW_TYPE_BINARY, NANOARROW_TYPE_STRUCT));
382388

389+
#if defined(NANOARROW_ARROW_FOUND)
383390
TEST(ArrayTest, ArrayTestAppendToNullArray) {
384391
struct ArrowArray array;
385392
ASSERT_EQ(ArrowArrayInitFromType(&array, NANOARROW_TYPE_NA), NANOARROW_OK);
@@ -566,6 +573,7 @@ TEST(ArrayTest, ArrayTestAppendToStringArray) {
566573

567574
EXPECT_TRUE(arrow_array.ValueUnsafe()->Equals(expected_array.ValueUnsafe()));
568575
}
576+
#endif
569577

570578
TEST(ArrayTest, ArrayTestAppendEmptyToString) {
571579
struct ArrowArray array;
@@ -577,6 +585,7 @@ TEST(ArrayTest, ArrayTestAppendEmptyToString) {
577585
ArrowArrayRelease(&array);
578586
}
579587

588+
#if defined(NANOARROW_ARROW_FOUND)
580589
TEST(ArrayTest, ArrayTestAppendToUInt64Array) {
581590
struct ArrowArray array;
582591

@@ -608,6 +617,7 @@ TEST(ArrayTest, ArrayTestAppendToUInt64Array) {
608617

609618
EXPECT_TRUE(arrow_array.ValueUnsafe()->Equals(expected_array.ValueUnsafe()));
610619
}
620+
#endif
611621

612622
TEST(ArrayTest, ArrayTestAppendToUInt32Array) {
613623
struct ArrowArray array;
@@ -629,6 +639,7 @@ TEST(ArrayTest, ArrayTestAppendToUInt32Array) {
629639
ArrowArrayRelease(&array);
630640
}
631641

642+
#if defined(NANOARROW_ARROW_FOUND)
632643
TEST(ArrayTest, ArrayTestAppendToUInt16Array) {
633644
struct ArrowArray array;
634645

@@ -844,6 +855,7 @@ TEST(ArrayTest, ArrayTestAppendToHalfFloatArray) {
844855
auto arrow_array = ImportArray(&array, float16());
845856
ARROW_EXPECT_OK(arrow_array);
846857
}
858+
#endif
847859

848860
TEST(ArrayTest, ArrayTestAppendToBoolArray) {
849861
struct ArrowArray array;
@@ -1095,6 +1107,7 @@ TEST(ArrayTest, ArrayTestAppendToIntervalArrayYearMonth) {
10951107
ArrowArrayRelease(&array);
10961108
}
10971109

1110+
#if defined(NANOARROW_ARROW_FOUND)
10981111
TEST(ArrayTest, ArrayTestAppendToIntervalArrayDayTime) {
10991112
struct ArrowArray array;
11001113

@@ -1518,6 +1531,7 @@ TEST(ArrayTest, ArrayTestAppendToFixedSizeListArray) {
15181531

15191532
EXPECT_TRUE(arrow_array.ValueUnsafe()->Equals(expected_array.ValueUnsafe()));
15201533
}
1534+
#endif
15211535

15221536
TEST(ArrayTest, ArrayTestAppendToListArrayErrors) {
15231537
struct ArrowArray array;
@@ -1535,6 +1549,7 @@ TEST(ArrayTest, ArrayTestAppendToListArrayErrors) {
15351549
ArrowSchemaRelease(&schema);
15361550
}
15371551

1552+
#if defined(NANOARROW_ARROW_FOUND)
15381553
TEST(ArrayTest, ArrayTestAppendToStructArray) {
15391554
struct ArrowArray array;
15401555
struct ArrowSchema schema;
@@ -1744,6 +1759,7 @@ TEST(ArrayTest, ArrayTestAppendToRunEndEncodedArray) {
17441759
expected_array.ValueUnsafe()->ToString().c_str());
17451760
#endif
17461761
}
1762+
#endif
17471763

17481764
TEST(ArrayTest, ArrayTestUnionUtils) {
17491765
// Check length calculation with nullptr
@@ -1776,6 +1792,7 @@ TEST(ArrayTest, ArrayTestUnionUtils) {
17761792
EXPECT_FALSE(_ArrowUnionTypeIdsWillEqualChildIndices("0,2", 2));
17771793
}
17781794

1795+
#if defined(NANOARROW_ARROW_FOUND)
17791796
TEST(ArrayTest, ArrayTestAppendToDenseUnionArray) {
17801797
struct ArrowArray array;
17811798
struct ArrowSchema schema;
@@ -1871,6 +1888,7 @@ TEST(ArrayTest, ArrayTestAppendToSparseUnionArray) {
18711888
expected_array.ValueUnsafe()->ToString());
18721889
EXPECT_TRUE(arrow_array.ValueUnsafe()->Equals(expected_array.ValueUnsafe()));
18731890
}
1891+
#endif
18741892

18751893
TEST(ArrayTest, ArrayTestAppendToUnionArrayErrors) {
18761894
struct ArrowArray array;
@@ -3250,6 +3268,7 @@ TEST(ArrayTest, ArrayViewTestSparseUnionGet) {
32503268
// the "value type" that would correspond to what ArrowArrayViewGetDoubleUnsafe()
32513269
// or ArrowArrayAppendDouble() do since they operate on the logical/represented
32523270
// value.
3271+
#if defined(NANOARROW_ARROW_FOUND)
32533272
template <typename TypeClass, typename BuilderValueT>
32543273
BuilderValueT logical_value_to_builder_value(int64_t value) {
32553274
return static_cast<BuilderValueT>(value);
@@ -3352,6 +3371,7 @@ TEST(ArrayViewTest, ArrayViewTestGetNumeric) {
33523371
TestGetFromNumericArrayView<FloatType>();
33533372
TestGetFromNumericArrayView<HalfFloatType>();
33543373
}
3374+
#endif
33553375

33563376
TEST(ArrayViewTest, ArrayViewTestGetFloat16) {
33573377
struct ArrowArray array;
@@ -3419,6 +3439,7 @@ TEST(ArrayViewTest, ArrayViewTestGetFloat16) {
34193439
ArrowSchemaRelease(&schema);
34203440
}
34213441

3442+
#if defined(NANOARROW_ARROW_FOUND)
34223443
template <typename BuilderClass>
34233444
void TestGetFromBinary(BuilderClass& builder) {
34243445
struct ArrowArray array;
@@ -3595,6 +3616,7 @@ TEST(ArrayViewTest, ArrayViewTestGetBinaryView) {
35953616
GTEST_SKIP() << "Arrow C++ StringView compatibility test needs Arrow C++ >= 15";
35963617
#endif
35973618
}
3619+
#endif
35983620

35993621
TEST(ArrayViewTest, ArrayViewTestGetIntervalYearMonth) {
36003622
struct ArrowArray array;
@@ -3633,6 +3655,7 @@ TEST(ArrayViewTest, ArrayViewTestGetIntervalYearMonth) {
36333655
ArrowArrayRelease(&array);
36343656
}
36353657

3658+
#if defined(NANOARROW_ARROW_FOUND)
36363659
TEST(ArrayViewTest, ArrayViewTestGetIntervalDayTime) {
36373660
struct ArrowArray array;
36383661
struct ArrowSchema schema;
@@ -3780,3 +3803,4 @@ TEST(ArrayViewTest, ArrayViewTestGetDecimal256) {
37803803
ArrowSchemaRelease(&schema);
37813804
ArrowArrayRelease(&array);
37823805
}
3806+
#endif

0 commit comments

Comments
 (0)