use arrow2::bitmap::Bitmap;
#[test]
fn as_slice() {
let b = Bitmap::from([true, true, true, true, true, true, true, true, true]);
let (slice, offset, length) = b.as_slice();
assert_eq!(slice, &[0b11111111, 0b1]);
assert_eq!(offset, 0);
assert_eq!(length, 9);
}
#[test]
fn as_slice_offset() {
let b = Bitmap::from([true, true, true, true, true, true, true, true, true]);
let b = b.sliced(8, 1);
let (slice, offset, length) = b.as_slice();
assert_eq!(slice, &[0b1]);
assert_eq!(offset, 0);
assert_eq!(length, 1);
}
#[test]
fn as_slice_offset_middle() {
let b = Bitmap::from_u8_slice([0, 0, 0, 0b00010101], 27);
let b = b.sliced(22, 5);
let (slice, offset, length) = b.as_slice();
assert_eq!(slice, &[0, 0b00010101]);
assert_eq!(offset, 6);
assert_eq!(length, 5);
}
#[test]
fn debug() {
let b = Bitmap::from([true, true, false, true, true, true, true, true, true]);
let b = b.sliced(2, 7);
assert_eq!(format!("{b:?}"), "[0b111110__, 0b_______1]");
}
#[test]
#[cfg(feature = "arrow")]
fn from_arrow() {
use arrow_buffer::buffer::{BooleanBuffer, NullBuffer};
let buffer = arrow_buffer::Buffer::from_iter(vec![true, true, true, false, false, false, true]);
let bools = BooleanBuffer::new(buffer, 0, 7);
let nulls = NullBuffer::new(bools);
assert_eq!(nulls.null_count(), 3);
let bitmap = Bitmap::from_null_buffer(nulls.clone());
assert_eq!(nulls.null_count(), bitmap.unset_bits());
assert_eq!(nulls.len(), bitmap.len());
let back = NullBuffer::from(bitmap);
assert_eq!(nulls, back);
let nulls = nulls.slice(1, 3);
assert_eq!(nulls.null_count(), 1);
assert_eq!(nulls.len(), 3);
let bitmap = Bitmap::from_null_buffer(nulls.clone());
assert_eq!(nulls.null_count(), bitmap.unset_bits());
assert_eq!(nulls.len(), bitmap.len());
let back = NullBuffer::from(bitmap);
assert_eq!(nulls, back);
}