Skip to content

Commit

Permalink
feat(cpp): Implement ViewBinaryViewArrayAsBytes (#633)
Browse files Browse the repository at this point in the history
  • Loading branch information
WillAyd committed Jan 29, 2025
1 parent 4ac2c1c commit 9e3d004
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 13 deletions.
3 changes: 2 additions & 1 deletion src/nanoarrow/hpp/view.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,8 @@ class ViewBinaryViewArrayAsBytes {
}

return ArrowStringView{
reinterpret_cast<const char*>(variadic_buffers[bv.ref.buffer_index]),
reinterpret_cast<const char*>(variadic_buffers[bv.ref.buffer_index]) +
bv.ref.offset,
bv.inlined.size};
}
return NA;
Expand Down
34 changes: 22 additions & 12 deletions src/nanoarrow/hpp/view_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -82,27 +82,33 @@ TEST(NanoarrowHppTest, NanoarrowHppViewArrayAsBytesTest) {
}
}

TEST(NanoarrowHppTest, NanoarrowHppViewBinaryViewArrayAsBytesTest) {
class BinaryViewTypeTestFixture : public ::testing::TestWithParam<enum ArrowType> {
protected:
enum ArrowType data_type;
};

TEST_P(BinaryViewTypeTestFixture, NanoarrowHppViewBinaryViewArrayAsBytesTest) {
using namespace nanoarrow::literals;

nanoarrow::UniqueArray array{};
NANOARROW_THROW_NOT_OK(ArrowArrayInitFromType(array.get(), NANOARROW_TYPE_BINARY_VIEW));
NANOARROW_THROW_NOT_OK(ArrowArrayStartAppending(array.get()));
ASSERT_EQ(ArrowArrayInitFromType(array.get(), GetParam()), NANOARROW_OK);
ASSERT_EQ(ArrowArrayStartAppending(array.get()), NANOARROW_OK);

NANOARROW_THROW_NOT_OK(ArrowArrayAppendString(array.get(), "foo"_asv));
NANOARROW_THROW_NOT_OK(ArrowArrayAppendNull(array.get(), 1));
NANOARROW_THROW_NOT_OK(
ArrowArrayAppendString(array.get(), "this_string_is_longer_than_inline"_asv));
NANOARROW_THROW_NOT_OK(ArrowArrayAppendNull(array.get(), 1));
NANOARROW_THROW_NOT_OK(ArrowArrayFinishBuildingDefault(array.get(), nullptr));
ASSERT_EQ(ArrowArrayAppendString(array.get(), "foo"_asv), NANOARROW_OK);
ASSERT_EQ(ArrowArrayAppendNull(array.get(), 1), NANOARROW_OK);
ASSERT_EQ(ArrowArrayAppendString(array.get(), "this_string_is_longer_than_inline"_asv),
NANOARROW_OK);
ASSERT_EQ(ArrowArrayAppendNull(array.get(), 1), NANOARROW_OK);
ASSERT_EQ(ArrowArrayFinishBuildingDefault(array.get(), nullptr), NANOARROW_OK);

int i = 0;
ArrowStringView expected[] = {"foo"_asv, ""_asv,
"this_string_is_longer_than_inline"_asv, ""_asv};
"this_string_is_longer_than_inline"_asv, ""_asv,
"here_is_another_string"_asv};

nanoarrow::UniqueArrayView array_view{};
ArrowArrayViewInitFromType(array_view.get(), NANOARROW_TYPE_BINARY_VIEW);
NANOARROW_THROW_NOT_OK(ArrowArrayViewSetArray(array_view.get(), array.get(), nullptr));
ArrowArrayViewInitFromType(array_view.get(), GetParam());
ASSERT_EQ(ArrowArrayViewSetArray(array_view.get(), array.get(), nullptr), NANOARROW_OK);

for (auto slot : nanoarrow::ViewBinaryViewArrayAsBytes(array_view.get())) {
if (i == 1 || i == 3) {
Expand All @@ -114,6 +120,10 @@ TEST(NanoarrowHppTest, NanoarrowHppViewBinaryViewArrayAsBytesTest) {
}
}

INSTANTIATE_TEST_SUITE_P(NanoarrowHppTest, BinaryViewTypeTestFixture,
::testing::Values(NANOARROW_TYPE_BINARY_VIEW,
NANOARROW_TYPE_STRING_VIEW));

TEST(NanoarrowHppTest, NanoarrowHppViewArrayAsFixedSizeBytesTest) {
using namespace nanoarrow::literals;

Expand Down

0 comments on commit 9e3d004

Please sign in to comment.