diff --git a/arrow/src/array/builder.rs b/arrow/src/array/builder.rs index 8a4ebbff0541..8065f16ade76 100644 --- a/arrow/src/array/builder.rs +++ b/arrow/src/array/builder.rs @@ -311,6 +311,11 @@ impl BooleanBufferBuilder { } } + #[inline] + pub fn get_bit(&mut self, index: usize) -> bool { + bit_util::get_bit(self.buffer.as_slice(), index) + } + #[inline] pub fn is_empty(&self) -> bool { self.len == 0 @@ -2647,6 +2652,31 @@ mod tests { assert_eq!(buffer.finish().as_slice(), &[0b01010110_u8, 0b1011100_u8]); } + #[test] + fn test_bool_buffer_builder_get_first_bit() { + let mut buffer = BooleanBufferBuilder::new(16); + buffer.append_n(8, true); + buffer.append_n(8, false); + assert!(buffer.get_bit(0)); + } + + #[test] + fn test_bool_buffer_builder_get_last_bit() { + let mut buffer = BooleanBufferBuilder::new(16); + buffer.append_n(8, true); + buffer.append_n(8, false); + assert!(!buffer.get_bit(15)); + } + + #[test] + fn test_bool_buffer_builder_get_an_inner_bit() { + let mut buffer = BooleanBufferBuilder::new(16); + buffer.append_n(4, false); + buffer.append_n(8, true); + buffer.append_n(4, false); + assert!(buffer.get_bit(11)); + } + #[test] fn test_boolean_array_builder_append_slice() { let arr1 =