| 102 | } |
| 103 | |
| 104 | TEST_F(TestArray, TestNullCount) { |
| 105 | // These are placeholders |
| 106 | auto data = std::make_shared<Buffer>(nullptr, 0); |
| 107 | auto null_bitmap = std::make_shared<Buffer>(nullptr, 0); |
| 108 | |
| 109 | std::shared_ptr<Int32Array> arr(new Int32Array(100, data, null_bitmap, 10)); |
| 110 | ASSERT_EQ(10, arr->ComputeLogicalNullCount()); |
| 111 | ASSERT_EQ(10, arr->null_count()); |
| 112 | ASSERT_TRUE(arr->data()->MayHaveNulls()); |
| 113 | ASSERT_TRUE(arr->data()->MayHaveLogicalNulls()); |
| 114 | |
| 115 | std::shared_ptr<Int32Array> arr_no_nulls(new Int32Array(100, data)); |
| 116 | ASSERT_EQ(0, arr_no_nulls->ComputeLogicalNullCount()); |
| 117 | ASSERT_EQ(0, arr_no_nulls->null_count()); |
| 118 | ASSERT_FALSE(arr_no_nulls->data()->MayHaveNulls()); |
| 119 | ASSERT_FALSE(arr_no_nulls->data()->MayHaveLogicalNulls()); |
| 120 | |
| 121 | std::shared_ptr<Int32Array> arr_default_null_count( |
| 122 | new Int32Array(100, data, null_bitmap)); |
| 123 | ASSERT_EQ(kUnknownNullCount, arr_default_null_count->data()->null_count); |
| 124 | ASSERT_TRUE(arr_default_null_count->data()->MayHaveNulls()); |
| 125 | ASSERT_TRUE(arr_default_null_count->data()->MayHaveLogicalNulls()); |
| 126 | |
| 127 | RunEndEncodedBuilder ree_builder(pool_, std::make_shared<Int32Builder>(pool_), |
| 128 | std::make_shared<Int32Builder>(pool_), |
| 129 | run_end_encoded(int32(), int32())); |
| 130 | ASSERT_OK(ree_builder.AppendScalar(*MakeScalar<int32_t>(2), 2)); |
| 131 | ASSERT_OK(ree_builder.AppendNull()); |
| 132 | ASSERT_OK(ree_builder.AppendScalar(*MakeScalar<int32_t>(4), 3)); |
| 133 | ASSERT_OK(ree_builder.AppendNulls(2)); |
| 134 | ASSERT_OK(ree_builder.AppendScalar(*MakeScalar<int32_t>(8), 5)); |
| 135 | ASSERT_OK(ree_builder.AppendNulls(7)); |
| 136 | ASSERT_OK_AND_ASSIGN(auto ree, ree_builder.Finish()); |
| 137 | |
| 138 | ASSERT_EQ(0, ree->null_count()); |
| 139 | ASSERT_EQ(10, ree->ComputeLogicalNullCount()); |
| 140 | ASSERT_FALSE(ree->data()->MayHaveNulls()); |
| 141 | ASSERT_TRUE(ree->data()->MayHaveLogicalNulls()); |
| 142 | |
| 143 | ASSERT_OK(ree_builder.AppendScalar(*MakeScalar<int32_t>(2), 2)); |
| 144 | ASSERT_OK(ree_builder.AppendScalar(*MakeScalar<int32_t>(4), 3)); |
| 145 | ASSERT_OK(ree_builder.AppendScalar(*MakeScalar<int32_t>(8), 5)); |
| 146 | ASSERT_OK_AND_ASSIGN(auto ree_no_nulls, ree_builder.Finish()); |
| 147 | ASSERT_EQ(0, ree_no_nulls->null_count()); |
| 148 | ASSERT_EQ(0, ree_no_nulls->ComputeLogicalNullCount()); |
| 149 | ASSERT_FALSE(ree_no_nulls->data()->MayHaveNulls()); |
| 150 | ASSERT_FALSE(ree_no_nulls->data()->MayHaveLogicalNulls()); |
| 151 | |
| 152 | // Dictionary type |
| 153 | std::shared_ptr<arrow::DataType> type; |
| 154 | std::shared_ptr<arrow::DataType> dict_type; |
| 155 | |
| 156 | for (const auto& index_type : all_dictionary_index_types()) { |
| 157 | ARROW_SCOPED_TRACE("index_type = ", index_type->ToString()); |
| 158 | |
| 159 | type = boolean(); |
| 160 | dict_type = dictionary(index_type, type); |
| 161 | // no null value |
nothing calls this directly
no test coverage detected