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