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