forked from GitHub/bdwgc-rust
Example tests in crate
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
//! A smoke test of the allocator.
|
||||
|
||||
use bdwgc_alloc::Allocator;
|
||||
use core::hint::black_box;
|
||||
use std::thread::spawn;
|
||||
|
||||
const OBJECT_SIZE: usize = 1 << 8;
|
||||
const TOTAL_COUNT: usize = 1 << 16;
|
||||
const THREAD_COUNT: usize = 1 << 6;
|
||||
|
||||
#[global_allocator]
|
||||
static GLOBAL_ALLOCATOR: Allocator = Allocator;
|
||||
|
||||
fn main() {
|
||||
unsafe { Allocator::initialize() }
|
||||
|
||||
free_by_gc();
|
||||
free_by_drop();
|
||||
static_thread();
|
||||
dynamic_threads();
|
||||
}
|
||||
|
||||
fn free_by_gc() {
|
||||
for _ in 0..TOTAL_COUNT {
|
||||
black_box(Box::leak(Box::new([0u8; OBJECT_SIZE])));
|
||||
}
|
||||
}
|
||||
|
||||
fn free_by_drop() {
|
||||
for _ in 0..TOTAL_COUNT {
|
||||
drop(black_box(Box::new([0u8; OBJECT_SIZE])));
|
||||
}
|
||||
}
|
||||
|
||||
fn static_thread() {
|
||||
spawn_thread(free_by_gc);
|
||||
}
|
||||
|
||||
fn dynamic_threads() {
|
||||
for _ in 0..THREAD_COUNT {
|
||||
spawn_thread(free_by_gc);
|
||||
}
|
||||
}
|
||||
|
||||
fn spawn_thread(allocate: fn()) {
|
||||
spawn(move || {
|
||||
unsafe { Allocator::register_current_thread() }.unwrap();
|
||||
allocate();
|
||||
unsafe { Allocator::unregister_current_thread() }
|
||||
})
|
||||
.join()
|
||||
.unwrap();
|
||||
}
|
||||
Reference in New Issue
Block a user