use vortex_buffer::buffer;
use vortex_error::VortexResult;
use vortex_session::VortexSession;
use crate::Canonical;
use crate::ExecutionCtx;
use crate::IntoArray;
use crate::arrays::PrimitiveArray;
use crate::arrays::SharedArray;
use crate::hash::ArrayEq;
use crate::hash::Precision as HashPrecision;
use crate::session::ArraySession;
use crate::validity::Validity;
#[test]
fn shared_array_caches_on_canonicalize() -> VortexResult<()> {
let array = PrimitiveArray::new(buffer![1i32, 2, 3], Validity::NonNullable).into_array();
let shared = SharedArray::new(array);
let session = VortexSession::empty().with::<ArraySession>();
let mut ctx = ExecutionCtx::new(session);
let first = shared.get_or_compute(|source| source.clone().execute::<Canonical>(&mut ctx))?;
let second = shared.get_or_compute(|_| panic!("should not execute twice"))?;
assert!(
first
.as_ref()
.array_eq(second.as_ref(), HashPrecision::Value)
);
Ok(())
}