vortex-array 0.77.0

Vortex in memory columnar data format
Documentation
// SPDX-License-Identifier: Apache-2.0
// SPDX-FileCopyrightText: Copyright the Vortex contributors

use vortex_error::VortexResult;

use crate::ExecutionCtx;
use crate::array::ArrayView;
use crate::array::OperationsVTable;
use crate::arrays::Bool;
use crate::arrays::bool::BoolArrayExt;
use crate::scalar::Scalar;

impl OperationsVTable<Bool> for Bool {
    fn scalar_at(
        array: ArrayView<'_, Bool>,
        index: usize,
        _ctx: &mut ExecutionCtx,
    ) -> VortexResult<Scalar> {
        Ok(Scalar::bool(
            array.bit_buffer_view().value(index),
            array.dtype().nullability(),
        ))
    }
}

#[cfg(test)]
mod tests {
    use std::iter;

    use crate::IntoArray;
    use crate::VortexSessionExecute;
    use crate::array_session;
    use crate::arrays::BoolArray;
    use crate::arrays::bool::BoolArrayExt;
    use crate::assert_arrays_eq;

    #[test]
    fn test_slice_hundred_elements() {
        let mut ctx = array_session().create_execution_ctx();
        let arr = BoolArray::from_iter(iter::repeat_n(Some(true), 100));
        let sliced_arr = arr
            .into_array()
            .slice(8..16)
            .unwrap()
            .execute::<BoolArray>(&mut ctx)
            .unwrap();
        assert_eq!(sliced_arr.len(), 8);
        assert_eq!(sliced_arr.to_bit_buffer().len(), 8);
        assert_eq!(sliced_arr.to_bit_buffer().offset(), 0);
    }

    #[test]
    fn test_slice() {
        let mut ctx = array_session().create_execution_ctx();
        let arr = BoolArray::from_iter([Some(true), Some(true), None, Some(false), None]);
        let sliced_arr = arr
            .into_array()
            .slice(1..4)
            .unwrap()
            .execute::<BoolArray>(&mut ctx)
            .unwrap();

        assert_arrays_eq!(
            sliced_arr,
            BoolArray::from_iter([Some(true), None, Some(false)]),
            &mut ctx
        );
    }
}