#![cfg(feature = "numa-aware")]
use sefer_alloc::alloc_core::numa;
#[test]
fn current_node_returns_valid_value() {
let node = numa::current_node();
assert!(
node == numa::NO_NODE || node < 64,
"current_node() returned an implausibly large value: {node}"
);
}
#[test]
fn bind_segment_on_no_node_is_noop() {
let dummy: *mut u8 = 1usize as *mut u8;
numa::bind_segment(dummy, 4096, numa::NO_NODE);
}
#[test]
fn bind_segment_zero_len_is_noop() {
let dummy: *mut u8 = 1usize as *mut u8;
numa::bind_segment(dummy, 0, 0);
}
#[test]
fn reserve_aligned_on_no_node_succeeds() {
use sefer_alloc::SegmentLayout;
let segment_size = SegmentLayout::SEGMENT;
let result = numa::reserve_aligned_on_node(segment_size, numa::NO_NODE);
assert!(
result.is_some(),
"reserve_aligned_on_node returned None (OOM?) for NO_NODE"
);
let (base, reservation, reservation_len) = result.unwrap();
let base_addr = base.as_ptr() as usize;
assert_eq!(
base_addr % segment_size,
0,
"base must be SEGMENT-aligned; got {base_addr:#x}"
);
assert!(reservation_len >= segment_size);
let _ = (base, reservation, reservation_len);
}
#[test]
fn reserve_aligned_on_current_node_succeeds() {
use sefer_alloc::SegmentLayout;
let node = numa::current_node();
let segment_size = SegmentLayout::SEGMENT;
let result = numa::reserve_aligned_on_node(segment_size, node);
assert!(
result.is_some(),
"reserve_aligned_on_node returned None for node={node}"
);
let (base, _reservation, reservation_len) = result.unwrap();
let base_addr = base.as_ptr() as usize;
assert_eq!(
base_addr % segment_size,
0,
"base must be SEGMENT-aligned; got {base_addr:#x} (node={node})"
);
assert!(reservation_len >= segment_size);
}
#[test]
#[cfg(all(target_os = "linux", not(miri)))]
fn bind_segment_with_real_node_does_not_panic() {
let mut buf: Vec<u8> = Vec::with_capacity(4096);
buf.resize(4096, 0u8);
let ptr = buf.as_mut_ptr();
numa::bind_segment(ptr, 4096, 0);
buf[0] = 42;
assert_eq!(buf[0], 42);
}