• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

vortex-data / vortex / 16979224669

14 Aug 2025 11:42PM UTC coverage: 23.728%. First build
16979224669

Pull #2456

github

web-flow
Merge 30049dfa7 into aaf3e36ad
Pull Request #2456: feat: basic BoolBuffer / BoolBufferMut

68 of 1065 new or added lines in 82 files covered. (6.38%)

8616 of 36312 relevant lines covered (23.73%)

146.37 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

39.39
/vortex-array/src/arrays/bool/serde.rs
1
// SPDX-License-Identifier: Apache-2.0
2
// SPDX-FileCopyrightText: Copyright the Vortex contributors
3

4
use vortex_buffer::{BitBuffer, ByteBuffer};
5
use vortex_dtype::DType;
6
use vortex_error::{VortexExpect, VortexResult, vortex_bail};
7

8
use super::BoolArray;
9
use crate::arrays::BoolVTable;
10
use crate::serde::ArrayChildren;
11
use crate::validity::Validity;
12
use crate::vtable::{SerdeVTable, VTable, VisitorVTable};
13
use crate::{ArrayBufferVisitor, ArrayChildVisitor, ProstMetadata};
14

15
#[derive(prost::Message)]
16
pub struct BoolMetadata {
17
    // The offset in bits must be <8
18
    #[prost(uint32, tag = "1")]
19
    pub offset: u32,
20
}
21

22
impl SerdeVTable<BoolVTable> for BoolVTable {
23
    type Metadata = ProstMetadata<BoolMetadata>;
24

25
    fn metadata(array: &BoolArray) -> VortexResult<Option<Self::Metadata>> {
16✔
26
        let bit_offset = array.bit_buffer().offset();
16✔
27
        assert!(bit_offset < 8, "Offset must be <8, got {bit_offset}");
16✔
28
        Ok(Some(ProstMetadata(BoolMetadata {
16✔
29
            offset: u32::try_from(bit_offset).vortex_expect("checked"),
16✔
30
        })))
16✔
31
    }
16✔
32

33
    fn build(
×
34
        _encoding: &<BoolVTable as VTable>::Encoding,
×
35
        dtype: &DType,
×
36
        len: usize,
×
37
        metadata: &BoolMetadata,
×
38
        buffers: &[ByteBuffer],
×
39
        children: &dyn ArrayChildren,
×
40
    ) -> VortexResult<BoolArray> {
×
41
        if buffers.len() != 1 {
×
42
            vortex_bail!("Expected 1 buffer, got {}", buffers.len());
×
43
        }
×
NEW
44
        let buffer = BitBuffer::new_with_offset(buffers[0].clone(), len, metadata.offset as usize);
×
45

46
        let validity = if children.is_empty() {
×
47
            Validity::from(dtype.nullability())
×
48
        } else if children.len() == 1 {
×
49
            let validity = children.get(0, &Validity::DTYPE, len)?;
×
50
            Validity::Array(validity)
×
51
        } else {
52
            vortex_bail!("Expected 0 or 1 child, got {}", children.len());
×
53
        };
54

55
        Ok(BoolArray::new(buffer, validity))
×
56
    }
×
57
}
58

59
impl VisitorVTable<BoolVTable> for BoolVTable {
60
    fn visit_buffers(array: &BoolArray, visitor: &mut dyn ArrayBufferVisitor) {
24✔
61
        visitor.visit_buffer(array.bit_buffer().inner())
24✔
62
    }
24✔
63

64
    fn visit_children(array: &BoolArray, visitor: &mut dyn ArrayChildVisitor) {
32✔
65
        visitor.visit_validity(&array.validity, array.len());
32✔
66
    }
32✔
67
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc