use arrow2::array::{Array, PrimitiveArray};
use arrow2::compute::arity_assign;
fn main() {
let mut array: Box<dyn Array> = PrimitiveArray::from_vec(vec![1i32, 2]).boxed();
let array = array
.as_any_mut()
.downcast_mut::<PrimitiveArray<i32>>()
.unwrap();
arity_assign::unary(array, |x| x * 10);
assert_eq!(array, &PrimitiveArray::from_vec(vec![10i32, 20]));
let values = array.get_mut_values().unwrap();
values[0] = 0;
assert_eq!(array, &PrimitiveArray::from_vec(vec![0, 20]));
array.set_validity(Some([true, false].into()));
array.apply_validity(|bitmap| {
let mut mut_bitmap = bitmap.into_mut().right().unwrap();
mut_bitmap.set(1, true);
mut_bitmap.into()
});
assert_eq!(array, &PrimitiveArray::from_vec(vec![0, 20]));
}