use win_numa_sys::NumaBuffer;
use crate::{IoBuf, IoBufMut};
#[test]
fn the_impls_report_what_the_buffer_reports() {
let mut buffer = NumaBuffer::new(4096, None).expect("a valid allocation");
let inherent_ptr = buffer.as_ptr();
let inherent_len = buffer.len();
assert_eq!(buffer.stable_ptr(), inherent_ptr);
assert_eq!(buffer.bytes_len(), inherent_len);
assert_eq!(buffer.stable_mut_ptr().cast_const(), inherent_ptr);
}
#[test]
fn bytes_len_is_the_requested_length_not_the_mapped_one() {
for len in [1_usize, 100, 4095, 4096, 4097] {
let buffer = NumaBuffer::new(len, None).expect("a valid allocation");
assert_eq!(buffer.bytes_len(), len, "for a request of {len} bytes");
}
}
#[test]
fn the_reported_address_is_where_the_bytes_are() {
let mut buffer = NumaBuffer::new(4096, None).expect("a valid allocation");
let len = buffer.bytes_len();
unsafe { std::slice::from_raw_parts_mut(buffer.stable_mut_ptr(), len) }.fill(0xA5);
let read = unsafe { std::slice::from_raw_parts(buffer.stable_ptr(), len) };
assert!(read.iter().all(|&byte| byte == 0xA5));
}
#[test]
fn the_address_survives_a_move() {
let buffer = NumaBuffer::new(4096, None).expect("a valid allocation");
let before = buffer.stable_ptr();
let moved = buffer;
assert_eq!(moved.stable_ptr(), before);
}