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