use crate::imp::core::{is_error, pack_ptr_len, unpack_ptr_len};
#[test]
fn pack_unpack_roundtrip() {
let cases = [
(0u32, 0u32),
(1, 64),
(0x0001_0000, 0xFFFF),
(0xDEAD_BEEF, 1024),
];
for (ptr, len) in cases {
let packed = pack_ptr_len(ptr, len);
assert_eq!(unpack_ptr_len(packed), (ptr, len));
}
}
#[test]
fn pack_layout_is_high_ptr_low_len() {
assert_eq!(pack_ptr_len(1, 2), (1i64 << 32) | 2);
}
#[test]
fn is_error_sentinel() {
let err = pack_ptr_len(0x8000_0000, 0);
assert!(is_error(err));
assert!(!is_error(pack_ptr_len(0, 0)));
assert!(!is_error(pack_ptr_len(0x8000_0000, 5)));
let code_packed = pack_ptr_len((-1i32) as u32, 0);
assert!(is_error(code_packed));
}