#[global_allocator]
static ALLOC: numalloc::NumaAlloc = numalloc::NumaAlloc::new();
#[test]
fn heap_init_no_deadlock() {
let v: Box<[u8; 64]> = Box::new([0xAB; 64]);
assert_eq!(v[0], 0xAB);
}
#[test]
fn heap_init_std_collections() {
let mut s = String::new();
for i in 0..100 {
s.push_str(&format!("item {i}, "));
}
assert!(s.contains("item 99"));
let v: Vec<u64> = (0..1000).collect();
assert_eq!(v.len(), 1000);
assert_eq!(v[999], 999);
}
#[test]
fn thread_heap_init_no_recursion() {
let handle = std::thread::spawn(|| {
let v: Vec<u32> = (0..256).collect();
assert_eq!(v.len(), 256);
v.into_iter().sum::<u32>()
});
let sum = handle.join().unwrap();
assert_eq!(sum, (0u32..256).sum());
}
#[test]
fn concurrent_thread_heap_init() {
let handles: Vec<_> = (0..16)
.map(|i| {
std::thread::spawn(move || {
let s = format!("thread {i} reporting in");
assert!(s.contains(&i.to_string()));
let v: Vec<u8> = vec![i as u8; 128];
assert!(v.iter().all(|&b| b == i as u8));
})
})
.collect();
for h in handles {
h.join().unwrap();
}
}
#[test]
fn post_init_alloc_dealloc_correctness() {
for size in [8, 16, 32, 64, 128, 256, 512, 1024, 4096, 16384] {
let mut v: Vec<u8> = vec![0; size];
v.fill(0xCD);
assert!(v.iter().all(|&b| b == 0xCD));
}
let big: Vec<u8> = vec![42; 512 * 1024];
assert_eq!(big.len(), 512 * 1024);
assert!(big.iter().all(|&b| b == 42));
}
#[test]
fn cross_thread_dealloc_global_allocator() {
let data: Vec<u8> = vec![0xFF; 256];
let handle = std::thread::spawn(move || {
assert!(data.iter().all(|&b| b == 0xFF));
});
handle.join().unwrap();
}
#[test]
fn rapid_thread_churn_global_allocator() {
let handles: Vec<_> = (0..64)
.map(|_| {
std::thread::spawn(|| {
let mut vecs: Vec<Vec<u8>> = Vec::new();
for size in [16, 64, 256, 1024, 4096] {
vecs.push(vec![0xAA; size]);
}
for v in &vecs {
assert!(v.iter().all(|&b| b == 0xAA));
}
})
})
.collect();
for h in handles {
h.join().unwrap();
}
}
#[test]
fn realloc_via_vec_growth() {
let mut v: Vec<u64> = Vec::new();
for i in 0..10_000 {
v.push(i);
}
assert_eq!(v.len(), 10_000);
assert_eq!(v[9999], 9999);
}