diff --git a/tests/it/array/map/mod.rs b/tests/it/array/map/mod.rs new file mode 100644 index 00000000000..ccd8fb75b9d --- /dev/null +++ b/tests/it/array/map/mod.rs @@ -0,0 +1,51 @@ +use std::sync::Arc; + +use arrow2::{ + array::*, + datatypes::{DataType, Field}, +}; + +#[test] +fn basics() { + let dt = DataType::Struct(vec![ + Field::new("a", DataType::Utf8, true), + Field::new("b", DataType::Utf8, true), + ]); + let data_type = DataType::Map(Box::new(Field::new("a", dt.clone(), true)), false); + + let field = StructArray::new( + dt.clone(), + vec![ + Arc::new(Utf8Array::::from_slice(["a", "aa", "aaa"])) as _, + Arc::new(Utf8Array::::from_slice(["b", "bb", "bbb"])), + ], + None, + ); + + let array = MapArray::new(data_type, vec![0, 1, 2].into(), Arc::new(field), None); + + assert_eq!( + array.value(0), + Box::new(StructArray::new( + dt.clone(), + vec![ + Arc::new(Utf8Array::::from_slice(["a"])) as _, + Arc::new(Utf8Array::::from_slice(["b"])), + ], + None, + )) as Box + ); + + let sliced = array.slice(1, 1); + assert_eq!( + sliced.value(0), + Box::new(StructArray::new( + dt, + vec![ + Arc::new(Utf8Array::::from_slice(["aa"])) as _, + Arc::new(Utf8Array::::from_slice(["bb"])), + ], + None, + )) as Box + ); +} diff --git a/tests/it/array/mod.rs b/tests/it/array/mod.rs index 4f7d0360096..dfa9329fffb 100644 --- a/tests/it/array/mod.rs +++ b/tests/it/array/mod.rs @@ -6,6 +6,7 @@ mod fixed_size_binary; mod fixed_size_list; mod growable; mod list; +mod map; mod ord; mod primitive; mod struct_;