Skip to content

Commit c72b537

Browse files
committed
Add test for array builder
1 parent 20031c6 commit c72b537

File tree

4 files changed

+202
-0
lines changed

4 files changed

+202
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// Copyright 2020-2021 The Datafuse Authors.
2+
//
3+
// SPDX-License-Identifier: Apache-2.0.
4+
5+
use crate::prelude::*;
6+
7+
#[test]
8+
fn test_empty_boolean_array() {
9+
let mut builder = BooleanArrayBuilder::with_capacity(16);
10+
let data_array: DataArray<BooleanType> = builder.finish();
11+
let mut iter = data_array.into_iter();
12+
assert_eq!(None, iter.next());
13+
assert_eq!(true, data_array.is_empty());
14+
assert_eq!(DataType::Boolean, data_array.data_type());
15+
}
16+
17+
#[test]
18+
fn test_fill_data() {
19+
let mut builder = BooleanArrayBuilder::with_capacity(16);
20+
builder.append_value(true);
21+
builder.append_value(false);
22+
builder.append_null();
23+
builder.append_option(Some(false));
24+
builder.append_option(None);
25+
26+
let data_array: DataArray<BooleanType> = builder.finish();
27+
let mut iter = data_array.into_iter();
28+
29+
assert_eq!(Some(Some(true)), iter.next());
30+
assert_eq!(Some(Some(false)), iter.next());
31+
assert_eq!(Some(None), iter.next());
32+
assert_eq!(Some(Some(false)), iter.next());
33+
assert_eq!(Some(None), iter.next());
34+
assert_eq!(None, iter.next());
35+
}
36+
37+
#[test]
38+
fn test_new_from_slice() {
39+
let data_array: DataArray<BooleanType> = NewDataArray::new_from_slice(&[true, false]);
40+
let mut iter = data_array.into_iter();
41+
assert_eq!(Some(Some(true)), iter.next());
42+
assert_eq!(Some(Some(false)), iter.next());
43+
assert_eq!(None, iter.next());
44+
}
45+
46+
#[test]
47+
fn test_new_from_opt_slice() {
48+
let v = [Some(true), Some(false), None];
49+
let data_array: DataArray<BooleanType> = NewDataArray::new_from_opt_slice(&v);
50+
let mut iter = data_array.into_iter();
51+
assert_eq!(Some(Some(true)), iter.next());
52+
assert_eq!(Some(Some(false)), iter.next());
53+
assert_eq!(Some(None), iter.next());
54+
assert_eq!(None, iter.next());
55+
}
56+
57+
#[test]
58+
fn test_new_from_opt_iter() {
59+
let v = vec![None, Some(true), Some(false), None];
60+
let mut iter = v.into_iter();
61+
iter.next(); // move iterator and create data_array from second element
62+
let data_array: DataArray<BooleanType> = NewDataArray::new_from_opt_iter(iter);
63+
let mut iter = data_array.into_iter();
64+
assert_eq!(Some(Some(true)), iter.next());
65+
assert_eq!(Some(Some(false)), iter.next());
66+
assert_eq!(Some(None), iter.next());
67+
assert_eq!(None, iter.next());
68+
}

common/datavalues/src/arrays/builders/mod.rs

+9
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,15 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15+
#[cfg(test)]
16+
mod boolean_test;
17+
18+
#[cfg(test)]
19+
mod primitive_test;
20+
21+
#[cfg(test)]
22+
mod utf8_test;
23+
1524
mod boolean;
1625
mod builder;
1726
mod primitive;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
// Copyright 2020-2021 The Datafuse Authors.
2+
//
3+
// SPDX-License-Identifier: Apache-2.0.
4+
5+
use crate::prelude::*;
6+
7+
#[test]
8+
fn test_empty_array() {
9+
let mut builder = PrimitiveArrayBuilder::<Int64Type>::with_capacity(16);
10+
let data_array = builder.finish();
11+
12+
// verify empty data array and data type
13+
assert_eq!(true, data_array.is_empty());
14+
assert_eq!(DataType::Int64, data_array.data_type());
15+
}
16+
17+
#[test]
18+
fn test_fill_data() {
19+
let mut builder = PrimitiveArrayBuilder::<Int64Type>::with_capacity(16);
20+
builder.append_value(1);
21+
builder.append_option(Some(2));
22+
builder.append_null();
23+
24+
let data_array: DataArray<Int64Type> = builder.finish();
25+
let mut iter = data_array.into_iter();
26+
27+
// verify data array with value, option value and null
28+
assert_eq!(Some(Some(1)), iter.next());
29+
assert_eq!(Some(Some(2)), iter.next());
30+
assert_eq!(Some(None), iter.next());
31+
assert_eq!(None, iter.next());
32+
}
33+
34+
#[test]
35+
fn test_new_from_slice() {
36+
let data_array: DataArray<Int64Type> = NewDataArray::new_from_slice(&[1, 2]);
37+
let mut iter = data_array.into_iter();
38+
39+
// verify NewDataArray::new_from_slice
40+
assert_eq!(Some(Some(1)), iter.next());
41+
assert_eq!(Some(Some(2)), iter.next());
42+
assert_eq!(None, iter.next());
43+
}
44+
45+
#[test]
46+
fn test_new_from_opt_slice() {
47+
let v = [Some(1), Some(2), None];
48+
let data_array: DataArray<Int64Type> = NewDataArray::new_from_opt_slice(&v);
49+
let mut iter = data_array.into_iter();
50+
51+
// verify NewDataArray::new_from_opt_slice
52+
assert_eq!(Some(Some(1)), iter.next());
53+
assert_eq!(Some(Some(2)), iter.next());
54+
assert_eq!(Some(None), iter.next());
55+
assert_eq!(None, iter.next());
56+
}
57+
58+
#[test]
59+
fn test_new_from_opt_iter() {
60+
let v = vec![None, Some(1), Some(2), None];
61+
let mut iter = v.into_iter();
62+
iter.next(); // move iterator and create data_array from second element
63+
let data_array: DataArray<Int64Type> = NewDataArray::new_from_opt_iter(iter);
64+
let mut iter = data_array.into_iter();
65+
66+
assert_eq!(Some(Some(1)), iter.next());
67+
assert_eq!(Some(Some(2)), iter.next());
68+
assert_eq!(Some(None), iter.next());
69+
assert_eq!(None, iter.next());
70+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// Copyright 2020-2021 The Datafuse Authors.
2+
//
3+
// SPDX-License-Identifier: Apache-2.0.
4+
5+
use crate::prelude::*;
6+
7+
#[test]
8+
fn test_empty_array() {
9+
let mut builder = Utf8ArrayBuilder::with_capacity(16);
10+
let data_array = builder.finish();
11+
assert_eq!(true, data_array.is_empty());
12+
assert_eq!(DataType::Utf8, data_array.data_type());
13+
}
14+
15+
#[test]
16+
fn test_fill_data() {
17+
let mut builder = Utf8ArrayBuilder::with_capacity(16);
18+
builder.append_value("你好");
19+
builder.append_option(Some("\u{1F378}"));
20+
builder.append_null();
21+
22+
let data_array: DataArray<Utf8Type> = builder.finish();
23+
let mut iter = data_array.into_iter();
24+
25+
assert_eq!(3, data_array.len());
26+
assert_eq!(Some(Some("你好")), iter.next());
27+
assert_eq!(Some(Some("🍸")), iter.next());
28+
assert_eq!(Some(None), iter.next());
29+
assert_eq!(None, iter.next());
30+
}
31+
32+
#[test]
33+
fn test_new_from_opt_slice() {
34+
let data_array: DataArray<Utf8Type> = DataArray::new_from_opt_slice(&[Some("你好"), None]);
35+
let mut iter = data_array.into_iter();
36+
37+
assert_eq!(2, data_array.len());
38+
assert_eq!(Some(Some("你好")), iter.next());
39+
assert_eq!(Some(None), iter.next());
40+
assert_eq!(None, iter.next());
41+
}
42+
43+
#[test]
44+
fn test_new_from_opt_iter() {
45+
let v = vec![None, Some("你好"), None];
46+
let mut iter = v.into_iter();
47+
iter.next(); // move iterator and create data array from second element
48+
let data_array: DataArray<Utf8Type> = DataArray::new_from_opt_iter(iter);
49+
let mut iter = data_array.into_iter();
50+
51+
assert_eq!(2, data_array.len());
52+
assert_eq!(Some(Some("你好")), iter.next());
53+
assert_eq!(Some(None), iter.next());
54+
assert_eq!(None, iter.next());
55+
}

0 commit comments

Comments
 (0)