Skip to content

Commit e89478e

Browse files
authored
Merge pull request #1468 from junli1026/jun/add-test
Add test for array builder
2 parents 20031c6 + 4c73e68 commit e89478e

File tree

4 files changed

+232
-0
lines changed

4 files changed

+232
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
// Copyright 2020 Datafuse Labs.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
use crate::prelude::*;
16+
17+
#[test]
18+
fn test_empty_boolean_array() {
19+
let mut builder = BooleanArrayBuilder::with_capacity(16);
20+
let data_array: DataArray<BooleanType> = builder.finish();
21+
let mut iter = data_array.into_iter();
22+
assert_eq!(None, iter.next());
23+
assert_eq!(true, data_array.is_empty());
24+
assert_eq!(DataType::Boolean, data_array.data_type());
25+
}
26+
27+
#[test]
28+
fn test_fill_data() {
29+
let mut builder = BooleanArrayBuilder::with_capacity(16);
30+
builder.append_value(true);
31+
builder.append_value(false);
32+
builder.append_null();
33+
builder.append_option(Some(false));
34+
builder.append_option(None);
35+
36+
let data_array: DataArray<BooleanType> = builder.finish();
37+
let mut iter = data_array.into_iter();
38+
39+
assert_eq!(Some(Some(true)), iter.next());
40+
assert_eq!(Some(Some(false)), iter.next());
41+
assert_eq!(Some(None), iter.next());
42+
assert_eq!(Some(Some(false)), iter.next());
43+
assert_eq!(Some(None), iter.next());
44+
assert_eq!(None, iter.next());
45+
}
46+
47+
#[test]
48+
fn test_new_from_slice() {
49+
let data_array: DataArray<BooleanType> = NewDataArray::new_from_slice(&[true, false]);
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!(None, iter.next());
54+
}
55+
56+
#[test]
57+
fn test_new_from_opt_slice() {
58+
let v = [Some(true), Some(false), None];
59+
let data_array: DataArray<BooleanType> = NewDataArray::new_from_opt_slice(&v);
60+
let mut iter = data_array.into_iter();
61+
assert_eq!(Some(Some(true)), iter.next());
62+
assert_eq!(Some(Some(false)), iter.next());
63+
assert_eq!(Some(None), iter.next());
64+
assert_eq!(None, iter.next());
65+
}
66+
67+
#[test]
68+
fn test_new_from_opt_iter() {
69+
let v = vec![None, Some(true), Some(false), None];
70+
let mut iter = v.into_iter();
71+
iter.next(); // move iterator and create data_array from second element
72+
let data_array: DataArray<BooleanType> = NewDataArray::new_from_opt_iter(iter);
73+
let mut iter = data_array.into_iter();
74+
assert_eq!(Some(Some(true)), iter.next());
75+
assert_eq!(Some(Some(false)), iter.next());
76+
assert_eq!(Some(None), iter.next());
77+
assert_eq!(None, iter.next());
78+
}

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,80 @@
1+
// Copyright 2020 Datafuse Labs.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
use crate::prelude::*;
16+
17+
#[test]
18+
fn test_empty_array() {
19+
let mut builder = PrimitiveArrayBuilder::<Int64Type>::with_capacity(16);
20+
let data_array = builder.finish();
21+
22+
// verify empty data array and data type
23+
assert_eq!(true, data_array.is_empty());
24+
assert_eq!(DataType::Int64, data_array.data_type());
25+
}
26+
27+
#[test]
28+
fn test_fill_data() {
29+
let mut builder = PrimitiveArrayBuilder::<Int64Type>::with_capacity(16);
30+
builder.append_value(1);
31+
builder.append_option(Some(2));
32+
builder.append_null();
33+
34+
let data_array: DataArray<Int64Type> = builder.finish();
35+
let mut iter = data_array.into_iter();
36+
37+
// verify data array with value, option value and null
38+
assert_eq!(Some(Some(1)), iter.next());
39+
assert_eq!(Some(Some(2)), iter.next());
40+
assert_eq!(Some(None), iter.next());
41+
assert_eq!(None, iter.next());
42+
}
43+
44+
#[test]
45+
fn test_new_from_slice() {
46+
let data_array: DataArray<Int64Type> = NewDataArray::new_from_slice(&[1, 2]);
47+
let mut iter = data_array.into_iter();
48+
49+
// verify NewDataArray::new_from_slice
50+
assert_eq!(Some(Some(1)), iter.next());
51+
assert_eq!(Some(Some(2)), iter.next());
52+
assert_eq!(None, iter.next());
53+
}
54+
55+
#[test]
56+
fn test_new_from_opt_slice() {
57+
let v = [Some(1), Some(2), None];
58+
let data_array: DataArray<Int64Type> = NewDataArray::new_from_opt_slice(&v);
59+
let mut iter = data_array.into_iter();
60+
61+
// verify NewDataArray::new_from_opt_slice
62+
assert_eq!(Some(Some(1)), iter.next());
63+
assert_eq!(Some(Some(2)), iter.next());
64+
assert_eq!(Some(None), iter.next());
65+
assert_eq!(None, iter.next());
66+
}
67+
68+
#[test]
69+
fn test_new_from_opt_iter() {
70+
let v = vec![None, Some(1), Some(2), None];
71+
let mut iter = v.into_iter();
72+
iter.next(); // move iterator and create data_array from second element
73+
let data_array: DataArray<Int64Type> = NewDataArray::new_from_opt_iter(iter);
74+
let mut iter = data_array.into_iter();
75+
76+
assert_eq!(Some(Some(1)), iter.next());
77+
assert_eq!(Some(Some(2)), iter.next());
78+
assert_eq!(Some(None), iter.next());
79+
assert_eq!(None, iter.next());
80+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// Copyright 2020 Datafuse Labs.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
use crate::prelude::*;
16+
17+
#[test]
18+
fn test_empty_array() {
19+
let mut builder = Utf8ArrayBuilder::with_capacity(16);
20+
let data_array = builder.finish();
21+
assert_eq!(true, data_array.is_empty());
22+
assert_eq!(DataType::Utf8, data_array.data_type());
23+
}
24+
25+
#[test]
26+
fn test_fill_data() {
27+
let mut builder = Utf8ArrayBuilder::with_capacity(16);
28+
builder.append_value("你好");
29+
builder.append_option(Some("\u{1F378}"));
30+
builder.append_null();
31+
32+
let data_array: DataArray<Utf8Type> = builder.finish();
33+
let mut iter = data_array.into_iter();
34+
35+
assert_eq!(3, data_array.len());
36+
assert_eq!(Some(Some("你好")), iter.next());
37+
assert_eq!(Some(Some("🍸")), iter.next());
38+
assert_eq!(Some(None), iter.next());
39+
assert_eq!(None, iter.next());
40+
}
41+
42+
#[test]
43+
fn test_new_from_opt_slice() {
44+
let data_array: DataArray<Utf8Type> = DataArray::new_from_opt_slice(&[Some("你好"), None]);
45+
let mut iter = data_array.into_iter();
46+
47+
assert_eq!(2, data_array.len());
48+
assert_eq!(Some(Some("你好")), iter.next());
49+
assert_eq!(Some(None), iter.next());
50+
assert_eq!(None, iter.next());
51+
}
52+
53+
#[test]
54+
fn test_new_from_opt_iter() {
55+
let v = vec![None, Some("你好"), None];
56+
let mut iter = v.into_iter();
57+
iter.next(); // move iterator and create data array from second element
58+
let data_array: DataArray<Utf8Type> = DataArray::new_from_opt_iter(iter);
59+
let mut iter = data_array.into_iter();
60+
61+
assert_eq!(2, data_array.len());
62+
assert_eq!(Some(Some("你好")), iter.next());
63+
assert_eq!(Some(None), iter.next());
64+
assert_eq!(None, iter.next());
65+
}

0 commit comments

Comments
 (0)