vortex_buffer/bit/
arrow.rs1use arrow_buffer::BooleanBuffer;
7
8use crate::{Alignment, BitBuffer, ByteBuffer};
9
10impl From<BooleanBuffer> for BitBuffer {
11 fn from(value: BooleanBuffer) -> Self {
12 let offset = value.offset();
13 let len = value.len();
14 let buffer = value.into_inner();
15 let buffer = ByteBuffer::from_arrow_buffer(buffer, Alignment::of::<u8>());
16
17 BitBuffer::new_with_offset(buffer, len, offset)
18 }
19}
20
21impl From<BitBuffer> for BooleanBuffer {
22 fn from(value: BitBuffer) -> Self {
23 let offset = value.offset();
24 let len = value.len();
25 let buffer = value.into_inner();
26
27 BooleanBuffer::new(buffer.into_arrow_buffer(), offset, len)
28 }
29}
30
31#[cfg(test)]
32mod tests {
33 use arrow_buffer::{BooleanBuffer, BooleanBufferBuilder};
34
35 use crate::BitBuffer;
36
37 #[test]
38 fn test_from_arrow() {
39 let mut arrow_bools = BooleanBufferBuilder::new(10);
40 arrow_bools.append_n(5, true);
41 arrow_bools.append_n(5, false);
42 let bit_buffer: BitBuffer = arrow_bools.finish().into();
43
44 for i in 0..5 {
45 assert!(bit_buffer.value(i));
46 }
47
48 for i in 5..10 {
49 assert!(!bit_buffer.value(i));
50 }
51
52 let arrow_bools: BooleanBuffer = bit_buffer.into();
54
55 for i in 0..5 {
56 assert!(arrow_bools.value(i));
57 }
58 for i in 5..10 {
59 assert!(!arrow_bools.value(i));
60 }
61 }
62}