diff --git a/tests/it/array/mod.rs b/tests/it/array/mod.rs index 85318ba628..02a100d444 100644 --- a/tests/it/array/mod.rs +++ b/tests/it/array/mod.rs @@ -13,7 +13,10 @@ mod struct_; mod union; mod utf8; -use arrow2::array::{clone, new_empty_array, new_null_array, Array, PrimitiveArray}; +use arrow2::array::{ + clone, downcast_mut, downcast_ref, new_empty_array, new_null_array, Array, MutableArray, + MutablePrimitiveArray, PrimitiveArray, +}; use arrow2::bitmap::Bitmap; use arrow2::datatypes::{DataType, Field, UnionMode}; @@ -140,3 +143,27 @@ fn test_with_validity() { struct A { array: Box, } + +#[test] +fn test_downcast() { + let arr = PrimitiveArray::from_slice([1i32, 2, 3]); + let arr_box: Box = Box::new(arr.clone()); + assert_eq!(downcast_ref::>(&arr_box).unwrap(), &arr); + assert_eq!( + downcast_ref::>(arr_box.as_ref()).unwrap(), + &arr + ); + assert!(downcast_ref::>(&arr_box).is_err()); + + let mut_arr = MutablePrimitiveArray::from_slice([1i32, 2, 3]); + let mut mut_arr_box: Box = Box::new(mut_arr.clone()); + assert_eq!( + downcast_mut::>(&mut mut_arr_box).unwrap(), + &mut_arr + ); + assert_eq!( + downcast_mut::>(mut_arr_box.as_mut()).unwrap(), + &mut_arr + ); + assert!(downcast_mut::>(&mut mut_arr_box).is_err()); +}