use super::*;
#[test]
fn test_format_jit_compatibility() {
assert!(is_format_jit_compatible(<Vec<bool>>::SHAPE));
assert!(is_format_jit_compatible(<Vec<i8>>::SHAPE));
assert!(is_format_jit_compatible(<Vec<i16>>::SHAPE));
assert!(is_format_jit_compatible(<Vec<i32>>::SHAPE));
assert!(is_format_jit_compatible(<Vec<i64>>::SHAPE));
assert!(is_format_jit_compatible(<Vec<u8>>::SHAPE));
assert!(is_format_jit_compatible(<Vec<u16>>::SHAPE));
assert!(is_format_jit_compatible(<Vec<u32>>::SHAPE));
assert!(is_format_jit_compatible(<Vec<u64>>::SHAPE));
assert!(is_format_jit_compatible(<Vec<f32>>::SHAPE));
assert!(is_format_jit_compatible(<Vec<f64>>::SHAPE));
assert!(is_format_jit_compatible(<Vec<String>>::SHAPE));
assert!(!is_format_jit_compatible(bool::SHAPE));
assert!(!is_format_jit_compatible(i64::SHAPE));
}
#[test]
fn test_abi_signature_compiles() {
use crate::jit::format::JitScratch;
type ExpectedAbi = unsafe extern "C" fn(
input_ptr: *const u8,
len: usize,
pos: usize,
out: *mut u8,
scratch: *mut JitScratch,
) -> isize;
let _verify_signature = |fn_ptr: *const u8| {
let _typed_fn: ExpectedAbi = unsafe { std::mem::transmute(fn_ptr) };
};
}
#[test]
fn test_vec_string_compatibility() {
let shape = <Vec<String>>::SHAPE;
let compatible = is_format_jit_compatible(shape);
eprintln!("Vec<String> is_format_jit_compatible: {}", compatible);
assert!(compatible, "Vec<String> should be Tier-2 compatible");
if let facet_core::Def::List(list_def) = &shape.def {
let elem_shape = list_def.t;
eprintln!(
" elem_shape.is_type::<String>(): {}",
elem_shape.is_type::<String>()
);
eprintln!(" elem_shape.scalar_type(): {:?}", elem_shape.scalar_type());
let elem_kind = FormatListElementKind::from_shape(elem_shape);
eprintln!(" FormatListElementKind::from_shape(): {:?}", elem_kind);
assert_eq!(
elem_kind,
Some(FormatListElementKind::String),
"Should detect String element type"
);
}
}