Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions cpp/src/arrow/array-test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,16 @@ TEST_F(TestArray, TestEquality) {
EXPECT_FALSE(array->RangeEquals(1, 2, 1, unequal_array));
}

TEST_F(TestArray, TestNullArrayEquality) {
auto array_1 = std::make_shared<NullArray>(10);
auto array_2 = std::make_shared<NullArray>(10);
auto array_3 = std::make_shared<NullArray>(20);

EXPECT_TRUE(array_1->Equals(array_1));
EXPECT_TRUE(array_1->Equals(array_2));
EXPECT_FALSE(array_1->Equals(array_3));
}

TEST_F(TestArray, SliceRecomputeNullCount) {
vector<uint8_t> valid_bytes = {1, 0, 1, 1, 0, 1, 0, 0, 0};

Expand Down
7 changes: 5 additions & 2 deletions cpp/src/arrow/compare.cc
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,10 @@ class ArrayEqualsVisitor : public RangeEqualsVisitor {
explicit ArrayEqualsVisitor(const Array& right)
: RangeEqualsVisitor(right, 0, right.length(), 0) {}

Status Visit(const NullArray& left) { return Status::OK(); }
Status Visit(const NullArray& left) {
result_ = true;
return Status::OK();
}

Status Visit(const BooleanArray& left) {
const auto& right = static_cast<const BooleanArray&>(right_);
Expand Down Expand Up @@ -529,7 +532,7 @@ static bool BaseDataEquals(const Array& left, const Array& right) {
left.type_id() != right.type_id()) {
return false;
}
if (left.null_count() > 0) {
if (left.null_count() > 0 && left.null_count() < left.length()) {
return BitmapEquals(left.null_bitmap()->data(), left.offset(),
right.null_bitmap()->data(), right.offset(), left.length());
}
Expand Down
6 changes: 6 additions & 0 deletions python/pyarrow/tests/test_convert_pandas.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,12 @@ def test_all_none_objects(self):
self._check_pandas_roundtrip(df)


def test_all_none_category(self):
df = pd.DataFrame({'a': [None, None, None]})
df['a'] = df['a'].astype('category')
self._check_pandas_roundtrip(df)


def test_float_no_nulls(self):
data = {}
fields = []
Expand Down
6 changes: 5 additions & 1 deletion python/pyarrow/tests/test_parquet.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,8 +225,12 @@ def _test_dataframe(size=10000, seed=0):
'float32': np.random.randn(size).astype(np.float32),
'float64': np.arange(size, dtype=np.float64),
'bool': np.random.randn(size) > 0,
'strings': [tm.rands(10) for i in range(size)]
'strings': [tm.rands(10) for i in range(size)],
'all_none': [None] * size,
'all_none_category': [None] * size
})
# TODO(PARQUET-1015)
# df['all_none_category'] = df['all_none_category'].astype('category')
return df


Expand Down