|
20 | 20 | #include <cstdint> |
21 | 21 | #include <cstdlib> |
22 | 22 | #include <memory> |
23 | | -#include <string> |
24 | 23 | #include <vector> |
25 | 24 |
|
26 | 25 | #include "arrow/array.h" |
|
32 | 31 | #include "arrow/util/memory-pool.h" |
33 | 32 | #include "arrow/util/status.h" |
34 | 33 |
|
35 | | -using std::string; |
36 | | -using std::vector; |
37 | | - |
38 | 34 | namespace arrow { |
39 | 35 |
|
40 | 36 | static TypePtr int32 = TypePtr(new Int32Type()); |
41 | | -static TypePtr int32_nn = TypePtr(new Int32Type(false)); |
42 | | - |
43 | 37 |
|
44 | 38 | class TestArray : public ::testing::Test { |
45 | 39 | public: |
46 | 40 | void SetUp() { |
47 | 41 | pool_ = GetDefaultMemoryPool(); |
48 | | - |
49 | | - auto data = std::make_shared<PoolBuffer>(pool_); |
50 | | - auto nulls = std::make_shared<PoolBuffer>(pool_); |
51 | | - |
52 | | - ASSERT_OK(data->Resize(400)); |
53 | | - ASSERT_OK(nulls->Resize(128)); |
54 | | - |
55 | | - arr_.reset(new Int32Array(100, data, nulls)); |
56 | 42 | } |
57 | 43 |
|
58 | 44 | protected: |
59 | 45 | MemoryPool* pool_; |
60 | | - std::unique_ptr<Int32Array> arr_; |
61 | 46 | }; |
62 | 47 |
|
63 | 48 |
|
64 | | -TEST_F(TestArray, TestNullable) { |
65 | | - std::shared_ptr<Buffer> tmp = arr_->data(); |
66 | | - std::unique_ptr<Int32Array> arr_nn(new Int32Array(100, tmp)); |
| 49 | +TEST_F(TestArray, TestNullCount) { |
| 50 | + auto data = std::make_shared<PoolBuffer>(pool_); |
| 51 | + auto nulls = std::make_shared<PoolBuffer>(pool_); |
67 | 52 |
|
68 | | - ASSERT_TRUE(arr_->nullable()); |
69 | | - ASSERT_FALSE(arr_nn->nullable()); |
| 53 | + std::unique_ptr<Int32Array> arr(new Int32Array(100, data, 10, nulls)); |
| 54 | + ASSERT_EQ(10, arr->null_count()); |
| 55 | + |
| 56 | + std::unique_ptr<Int32Array> arr_no_nulls(new Int32Array(100, data)); |
| 57 | + ASSERT_EQ(0, arr_no_nulls->null_count()); |
70 | 58 | } |
71 | 59 |
|
72 | 60 |
|
73 | 61 | TEST_F(TestArray, TestLength) { |
74 | | - ASSERT_EQ(arr_->length(), 100); |
| 62 | + auto data = std::make_shared<PoolBuffer>(pool_); |
| 63 | + std::unique_ptr<Int32Array> arr(new Int32Array(100, data)); |
| 64 | + ASSERT_EQ(arr->length(), 100); |
75 | 65 | } |
76 | 66 |
|
77 | 67 | TEST_F(TestArray, TestIsNull) { |
78 | | - vector<uint8_t> nulls = {1, 0, 1, 1, 0, 1, 0, 0, |
79 | | - 1, 0, 1, 1, 0, 1, 0, 0, |
80 | | - 1, 0, 1, 1, 0, 1, 0, 0, |
81 | | - 1, 0, 1, 1, 0, 1, 0, 0, |
82 | | - 1, 0, 0, 1}; |
| 68 | + std::vector<uint8_t> nulls = {1, 0, 1, 1, 0, 1, 0, 0, |
| 69 | + 1, 0, 1, 1, 0, 1, 0, 0, |
| 70 | + 1, 0, 1, 1, 0, 1, 0, 0, |
| 71 | + 1, 0, 1, 1, 0, 1, 0, 0, |
| 72 | + 1, 0, 0, 1}; |
| 73 | + int32_t null_count = 0; |
| 74 | + for (uint8_t x : nulls) { |
| 75 | + if (x > 0) ++null_count; |
| 76 | + } |
83 | 77 |
|
84 | | - std::shared_ptr<Buffer> null_buf = bytes_to_null_buffer(nulls.data(), nulls.size()); |
| 78 | + std::shared_ptr<Buffer> null_buf = bytes_to_null_buffer(nulls.data(), |
| 79 | + nulls.size()); |
85 | 80 | std::unique_ptr<Array> arr; |
86 | | - arr.reset(new Array(int32, nulls.size(), null_buf)); |
| 81 | + arr.reset(new Array(int32, nulls.size(), null_count, null_buf)); |
| 82 | + |
| 83 | + ASSERT_EQ(null_count, arr->null_count()); |
| 84 | + ASSERT_EQ(5, null_buf->size()); |
| 85 | + |
| 86 | + ASSERT_TRUE(arr->nulls()->Equals(*null_buf.get())); |
87 | 87 |
|
88 | | - ASSERT_EQ(null_buf->size(), 5); |
89 | 88 | for (size_t i = 0; i < nulls.size(); ++i) { |
90 | 89 | ASSERT_EQ(static_cast<bool>(nulls[i]), arr->IsNull(i)); |
91 | 90 | } |
|
0 commit comments