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::array::ArrayView;
8use crate::array::OperationsVTable;
9use crate::arrays::Bool;
10use crate::arrays::bool::BoolArrayExt;
11use crate::scalar::Scalar;
12
13impl OperationsVTable<Bool> for Bool {
14    fn scalar_at(
15        array: ArrayView<'_, Bool>,
16        index: usize,
17        _ctx: &mut ExecutionCtx,
18    ) -> VortexResult<Scalar> {
19        Ok(Scalar::bool(
20            array.bit_buffer_view().value(index),
21            array.dtype().nullability(),
22        ))
23    }
24}
25
26#[cfg(test)]
27mod tests {
28    use std::iter;
29
30    use crate::IntoArray;
31    use crate::VortexSessionExecute;
32    use crate::array_session;
33    use crate::arrays::BoolArray;
34    use crate::arrays::bool::BoolArrayExt;
35    use crate::assert_arrays_eq;
36
37    #[test]
38    fn test_slice_hundred_elements() {
39        let mut ctx = array_session().create_execution_ctx();
40        let arr = BoolArray::from_iter(iter::repeat_n(Some(true), 100));
41        let sliced_arr = arr
42            .into_array()
43            .slice(8..16)
44            .unwrap()
45            .execute::<BoolArray>(&mut ctx)
46            .unwrap();
47        assert_eq!(sliced_arr.len(), 8);
48        assert_eq!(sliced_arr.to_bit_buffer().len(), 8);
49        assert_eq!(sliced_arr.to_bit_buffer().offset(), 0);
50    }
51
52    #[test]
53    fn test_slice() {
54        let mut ctx = array_session().create_execution_ctx();
55        let arr = BoolArray::from_iter([Some(true), Some(true), None, Some(false), None]);
56        let sliced_arr = arr
57            .into_array()
58            .slice(1..4)
59            .unwrap()
60            .execute::<BoolArray>(&mut ctx)
61            .unwrap();
62
63        assert_arrays_eq!(
64            sliced_arr,
65            BoolArray::from_iter([Some(true), None, Some(false)]),
66            &mut ctx
67        );
68    }
69}