use std::thread;
use alloc_tracker::{Allocator, Report, Session};
thread_local! {
static FAKE_ALLOCATOR: Allocator<std::alloc::System> = const { Allocator::system() };
}
#[test]
fn session_can_be_moved_between_threads() {
let session = Session::new();
let handle = thread::spawn(move || {
let operation = session.operation("cross_thread_work");
let _span = operation.measure_thread();
session.to_report()
});
let report = handle.join().unwrap();
assert!(report.is_empty() || !report.is_empty()); }
#[test]
fn operation_can_be_moved_between_threads() {
let session = Session::new();
let operation = session.operation("test_op");
let handle = thread::spawn(move || {
let _span = operation.measure_thread();
operation.mean()
});
let mean_bytes = handle.join().unwrap();
assert_eq!(mean_bytes, 0); }
#[test]
fn report_can_be_shared_across_threads() {
let session = Session::new();
let report = session.to_report();
let report_clone = report.clone();
let handle1 = thread::spawn(move || report.is_empty());
let handle2 = thread::spawn(move || report_clone.is_empty());
assert!(handle1.join().unwrap()); assert!(handle2.join().unwrap()); }
#[test]
fn reports_can_be_merged_across_threads() {
let session1 = Session::new();
let session2 = Session::new();
let handle1 = thread::spawn(move || {
session1.to_report()
});
let handle2 = thread::spawn(move || {
session2.to_report()
});
let report1 = handle1.join().unwrap();
let report2 = handle2.join().unwrap();
let merged = Report::merge(&report1, &report2);
assert!(merged.is_empty());
}