vortex_array/arrays/bool/vtable/
operations.rs1use 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}