Skip to main content

vortex_array/arrays/bool/vtable/
operations.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use vortex_error::VortexResult;
5
6use crate::arrays::BoolArray;
7use crate::arrays::BoolVTable;
8use crate::scalar::Scalar;
9use crate::vtable::OperationsVTable;
10
11impl OperationsVTable<BoolVTable> for BoolVTable {
12    fn scalar_at(array: &BoolArray, index: usize) -> VortexResult<Scalar> {
13        Ok(Scalar::bool(
14            array.to_bit_buffer().value(index),
15            array.dtype().nullability(),
16        ))
17    }
18}
19
20#[cfg(test)]
21mod tests {
22    use std::iter;
23
24    use super::*;
25    use crate::ToCanonical;
26    use crate::assert_arrays_eq;
27
28    #[test]
29    fn test_slice_hundred_elements() {
30        let arr = BoolArray::from_iter(iter::repeat_n(Some(true), 100));
31        let sliced_arr = arr.slice(8..16).unwrap().to_bool();
32        assert_eq!(sliced_arr.len(), 8);
33        assert_eq!(sliced_arr.to_bit_buffer().len(), 8);
34        assert_eq!(sliced_arr.to_bit_buffer().offset(), 0);
35    }
36
37    #[test]
38    fn test_slice() {
39        let arr = BoolArray::from_iter([Some(true), Some(true), None, Some(false), None]);
40        let sliced_arr = arr.slice(1..4).unwrap().to_bool();
41
42        assert_arrays_eq!(
43            sliced_arr,
44            BoolArray::from_iter([Some(true), None, Some(false)])
45        );
46    }
47}