Fix bug with null buffer offset in boolean not kernel (#418)
diff --git a/arrow/src/compute/kernels/boolean.rs b/arrow/src/compute/kernels/boolean.rs
index e1d5592..c9c0bc3 100644
--- a/arrow/src/compute/kernels/boolean.rs
+++ b/arrow/src/compute/kernels/boolean.rs
@@ -376,7 +376,7 @@
let null_bit_buffer = data
.null_bitmap()
.as_ref()
- .map(|b| b.bits.slice(left_offset));
+ .map(|b| b.bits.bit_slice(left_offset, len));
let values = buffer_unary_not(&data.buffers()[0], left_offset, len);
@@ -814,6 +814,19 @@
}
#[test]
+ fn test_bool_array_not_sliced() {
+ let a = BooleanArray::from(vec![None, Some(true), Some(false), None, Some(true)]);
+ let a = a.slice(1, 4);
+ let a = a.as_any().downcast_ref::<BooleanArray>().unwrap();
+ let c = not(&a).unwrap();
+
+ let expected =
+ BooleanArray::from(vec![Some(false), Some(true), None, Some(false)]);
+
+ assert_eq!(c, expected);
+ }
+
+ #[test]
fn test_bool_array_and_nulls() {
let a = BooleanArray::from(vec![
None,